From b643c52cf29ce5bbab738b43290af3556efa1ca9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 5 Jun 2024 18:18:41 +0200 Subject: Merging upstream version 10.0.0+dfsg. Signed-off-by: Daniel Baumann --- ansible_collections/amazon/aws/CHANGELOG.rst | 161 + ansible_collections/amazon/aws/CI.md | 2 +- ansible_collections/amazon/aws/FILES.json | 358 +- ansible_collections/amazon/aws/MANIFEST.json | 6 +- ansible_collections/amazon/aws/README.md | 10 +- .../amazon/aws/changelogs/changelog.yaml | 224 + .../amazon/aws/docs/docsite/links.yml | 2 +- .../amazon/aws/docs/docsite/rst/CHANGELOG.rst | 161 + ansible_collections/amazon/aws/meta/runtime.yml | 15 +- .../amazon/aws/plugins/inventory/aws_ec2.py | 12 +- .../aws/plugins/lookup/aws_collection_constants.py | 2 +- .../aws/plugins/lookup/aws_service_ip_ranges.py | 17 +- .../aws/plugins/lookup/secretsmanager_secret.py | 6 +- .../amazon/aws/plugins/module_utils/acm.py | 2 +- .../amazon/aws/plugins/module_utils/botocore.py | 20 +- .../amazon/aws/plugins/module_utils/common.py | 2 +- .../amazon/aws/plugins/module_utils/ec2.py | 18 +- .../amazon/aws/plugins/module_utils/elbv2.py | 108 +- .../amazon/aws/plugins/module_utils/iam.py | 10 +- .../amazon/aws/plugins/module_utils/modules.py | 10 +- .../amazon/aws/plugins/module_utils/policy.py | 57 - .../amazon/aws/plugins/module_utils/rds.py | 41 + .../amazon/aws/plugins/module_utils/s3.py | 4 +- .../aws/plugins/modules/autoscaling_group.py | 29 +- .../amazon/aws/plugins/modules/cloudformation.py | 40 +- .../amazon/aws/plugins/modules/cloudtrail.py | 13 - .../amazon/aws/plugins/modules/ec2_ami.py | 43 + .../amazon/aws/plugins/modules/ec2_ami_info.py | 12 +- .../amazon/aws/plugins/modules/ec2_eip_info.py | 61 +- .../amazon/aws/plugins/modules/ec2_eni.py | 27 +- .../amazon/aws/plugins/modules/ec2_eni_info.py | 2 +- .../amazon/aws/plugins/modules/ec2_instance.py | 260 +- .../aws/plugins/modules/ec2_instance_info.py | 116 +- .../aws/plugins/modules/ec2_metadata_facts.py | 2 + .../aws/plugins/modules/ec2_security_group.py | 163 +- .../aws/plugins/modules/ec2_security_group_info.py | 8 + .../amazon/aws/plugins/modules/ec2_vol.py | 18 +- .../aws/plugins/modules/ec2_vpc_route_table.py | 3 +- .../aws/plugins/modules/elb_application_lb.py | 27 +- .../amazon/aws/plugins/modules/elb_classic_lb.py | 16 +- .../amazon/aws/plugins/modules/iam_policy.py | 2 +- .../amazon/aws/plugins/modules/iam_role.py | 40 +- .../amazon/aws/plugins/modules/iam_role_info.py | 23 +- .../amazon/aws/plugins/modules/kms_key.py | 79 +- .../amazon/aws/plugins/modules/kms_key_info.py | 50 +- .../amazon/aws/plugins/modules/lambda_event.py | 249 +- .../amazon/aws/plugins/modules/lambda_info.py | 2 +- .../amazon/aws/plugins/modules/rds_cluster.py | 10 +- .../aws/plugins/modules/rds_cluster_param_group.py | 275 + .../modules/rds_cluster_param_group_info.py | 157 + .../plugins/modules/rds_engine_versions_info.py | 388 + .../amazon/aws/plugins/modules/rds_instance.py | 12 +- .../plugins/modules/rds_instance_param_group.py | 361 + .../amazon/aws/plugins/modules/rds_param_group.py | 362 - .../aws/plugins/modules/route53_health_check.py | 12 +- .../amazon/aws/plugins/modules/s3_bucket.py | 798 +- .../amazon/aws/plugins/modules/s3_object.py | 162 +- .../amazon/aws/plugins/modules/s3_object_info.py | 6 +- .../targets/aws_region_info/tasks/main.yml | 10 +- .../targets/backup_selection/tasks/main.yml | 4 +- .../integration/targets/cloudtrail/tasks/main.yml | 42 +- .../ec2_instance_iam_instance_role/tasks/main.yml | 14 +- .../integration/targets/ec2_vol/tasks/main.yml | 1 - .../targets/elb_application_lb/defaults/main.yml | 13 + .../targets/elb_application_lb/meta/main.yml | 4 + .../tasks/alb_with_multiple_listener_certs.yml | 127 + .../targets/elb_application_lb/tasks/main.yml | 4 + .../integration/targets/iam_group/tasks/main.yml | 4 +- .../targets/iam_instance_profile/tasks/main.yml | 4 +- .../targets/iam_managed_policy/defaults/main.yml | 3 + .../iam_managed_policy/files/deny-assume.json | 10 + .../targets/iam_managed_policy/tasks/main.yml | 61 + .../targets/iam_password_policy/tasks/main.yaml | 14 +- .../integration/targets/iam_policy/tasks/main.yml | 8 +- .../integration/targets/iam_role/defaults/main.yml | 5 +- .../targets/iam_role/tasks/boundary_policy.yml | 14 +- .../iam_role/tasks/complex_role_creation.yml | 12 +- .../targets/iam_role/tasks/creation_deletion.yml | 86 +- .../targets/iam_role/tasks/description_update.yml | 20 +- .../iam_role/tasks/inline_policy_update.yml | 2 +- .../integration/targets/iam_role/tasks/main.yml | 10 +- .../targets/iam_role/tasks/max_session_update.yml | 10 +- .../targets/iam_role/tasks/parameter_checks.yml | 14 +- .../targets/iam_role/tasks/policy_update.yml | 30 +- .../targets/iam_role/tasks/role_removal.yml | 12 +- .../targets/iam_role/tasks/tags_update.yml | 40 +- .../integration/targets/iam_user/tasks/main.yml | 2 +- .../playbooks/test_inventory_ssm.yml | 4 +- .../kms_key/roles/kms_key/tasks/test_grants.yml | 4 +- .../kms_key/roles/kms_key/tasks/test_modify.yml | 4 +- .../integration/targets/lambda/tasks/main.yml | 4 +- .../targets/lambda_alias/tasks/main.yml | 4 +- .../targets/lambda_event/tasks/main.yml | 3 +- .../targets/lambda_event/tasks/setup.yml | 2 +- .../targets/lambda_event/tasks/teardown.yml | 2 +- .../targets/lambda_policy/tasks/main.yml | 6 +- .../targets/rds_cluster_param_group/aliases | 3 + .../rds_cluster_param_group/defaults/main.yaml | 7 + .../rds_cluster_param_group/tasks/main.yaml | 328 + .../targets/rds_instance_complex/defaults/main.yml | 2 +- .../targets/rds_instance_complex/tasks/main.yml | 12 +- .../targets/rds_instance_modify/defaults/main.yml | 2 +- .../targets/rds_instance_modify/tasks/main.yml | 189 +- .../rds_instance_snapshot/defaults/main.yml | 2 +- .../targets/rds_option_group/defaults/main.yml | 2 +- .../targets/rds_param_group/tasks/main.yml | 56 +- .../targets/s3_bucket_info/tasks/main.yml | 2 +- .../s3_object/library/test_s3_upload_multipart.py | 137 + .../s3_object/tasks/copy_multipart_upload.yml | 185 + .../targets/s3_object/tasks/copy_object.yml | 51 + .../integration/targets/s3_object/tasks/main.yml | 7 +- .../targets/sts_assume_role/tasks/main.yml | 8 +- .../amazon/aws/tests/sanity/ignore-2.18.txt | 1 + .../botocore/test_is_boto3_error_code.py | 68 + .../iam/test_iam_resource_transforms.py | 6 +- .../modules/ansible_aws_module/test_passthrough.py | 12 +- .../policy/test_sort_json_policy_dict.py | 61 - .../aws/tests/unit/module_utils/test_elbv2.py | 137 + .../unit/plugins/modules/test_lambda_event.py | 544 + ansible_collections/amazon/aws/tox.ini | 12 +- .../ansible/netcommon/.ansible-lint | 1 + ansible_collections/ansible/netcommon/.flake8 | 58 +- .../ansible/netcommon/.github/workflows/ack.yml | 15 - .../netcommon/.github/workflows/check_label.yml | 11 + .../netcommon/.github/workflows/codecoverage.yml | 1 + .../netcommon/.github/workflows/draft_release.yml | 18 + .../ansible/netcommon/.github/workflows/lint.yml | 12 - .../ansible/netcommon/.github/workflows/push.yml | 27 - .../netcommon/.github/workflows/release.yml | 4 +- .../ansible/netcommon/.github/workflows/tests.yml | 21 +- .../netcommon/.github/workflows/token_refresh.yml | 2 +- .../ansible/netcommon/.pre-commit-config.yaml | 13 +- .../ansible/netcommon/CHANGELOG.rst | 49 + ansible_collections/ansible/netcommon/FILES.json | 1804 ++-- .../ansible/netcommon/MANIFEST.json | 6 +- ansible_collections/ansible/netcommon/README.md | 12 +- ansible_collections/ansible/netcommon/bindep.txt | 4 - .../ansible/netcommon/changelogs/changelog.yaml | 47 + .../docs/ansible.netcommon.cli_command_module.rst | 24 +- .../docs/ansible.netcommon.cli_config_module.rst | 4 +- .../docs/ansible.netcommon.cli_restore_module.rst | 128 + .../docs/ansible.netcommon.grpc_config_module.rst | 63 +- .../docs/ansible.netcommon.grpc_get_module.rst | 16 +- .../ansible.netcommon.netconf_config_module.rst | 86 +- .../docs/ansible.netcommon.netconf_get_module.rst | 28 +- .../ansible.netcommon.parse_cli_textfsm_filter.rst | 4 +- .../docs/ansible.netcommon.pop_ace_filter.rst | 11 +- .../docs/ansible.netcommon.telnet_module.rst | 18 +- .../ansible/netcommon/meta/runtime.yml | 2 +- .../ansible/netcommon/plugins/connection/libssh.py | 2 +- .../netcommon/plugins/connection/network_cli.py | 4 +- .../netcommon/plugins/filter/parse_cli_textfsm.py | 4 +- .../ansible/netcommon/plugins/filter/pop_ace.py | 12 +- .../network/common/rm_base/resource_module.py | 4 +- .../plugins/module_utils/network/common/utils.py | 3 +- .../netcommon/plugins/modules/cli_command.py | 24 +- .../netcommon/plugins/modules/cli_config.py | 4 +- .../netcommon/plugins/modules/cli_restore.py | 128 + .../netcommon/plugins/modules/grpc_config.py | 65 +- .../ansible/netcommon/plugins/modules/grpc_get.py | 18 +- .../netcommon/plugins/modules/netconf_config.py | 339 +- .../netcommon/plugins/modules/netconf_get.py | 150 +- .../ansible/netcommon/plugins/modules/telnet.py | 68 +- .../netcommon/plugins/plugin_utils/cliconf_base.py | 7 +- .../plugins/plugin_utils/compat/telnetlib.py | 228 +- .../netcommon/plugins/plugin_utils/pop_ace.py | 63 +- .../cli_parser/content_templates_parser.py | 1 + .../ansible/netcommon/test-requirements.txt | 14 +- .../ansible/netcommon/tests/config.yml | 3 + .../ansible/netcommon/tests/sanity/ignore-2.12.txt | 5 - .../ansible/netcommon/tests/sanity/ignore-2.13.txt | 5 - .../ansible/netcommon/tests/sanity/ignore-2.18.txt | 5 + .../ansible/netcommon/tests/sanity/ignore-2.9.txt | 7 - .../ansible/netcommon/tests/unit/mock/procenv.py | 4 +- .../module_utils/network/common/test_parsing.py | 4 +- .../ansible/netcommon/tests/unit/modules/utils.py | 4 +- .../unit/plugins/cli_parsers/test_pyats_parser.py | 5 +- .../tests/unit/plugins/filter/comp_type5.py | 4 +- .../tests/unit/plugins/filter/test_hash_salt.py | 4 +- .../tests/unit/plugins/filter/test_network.py | 28 +- .../tests/unit/plugins/filter/test_pop_ace.py | 4 +- .../tests/unit/plugins/filter/test_type5_pw.py | 4 +- .../unit/plugins/filter/test_vlan_extender.py | 4 +- .../tests/unit/plugins/filter/test_vlan_parser.py | 4 +- .../ansible/netcommon/tox-ansible.ini | 9 + ansible_collections/ansible/netcommon/tox.ini | 23 - ansible_collections/ansible/utils/.ansible-lint | 5 + ansible_collections/ansible/utils/.darglint | 7 - ansible_collections/ansible/utils/.flake8 | 13 +- .../ansible/utils/.github/workflows/ack.yml | 15 - .../utils/.github/workflows/check_label.yml | 11 + .../utils/.github/workflows/codecoverage.yml | 2 +- .../utils/.github/workflows/draft_release.yml | 18 + .../ansible/utils/.github/workflows/push.yml | 28 - .../ansible/utils/.github/workflows/release.yml | 4 +- .../ansible/utils/.github/workflows/tests.yml | 25 +- .../utils/.github/workflows/token_refresh.yml | 4 +- .../ansible/utils/.pre-commit-config.yaml | 11 +- ansible_collections/ansible/utils/CHANGELOG.rst | 55 + ansible_collections/ansible/utils/FILES.json | 2497 +++-- ansible_collections/ansible/utils/MANIFEST.json | 4 +- ansible_collections/ansible/utils/README.md | 2 +- .../ansible/utils/changelogs/changelog.yaml | 154 +- .../ansible/utils/changelogs/config.yaml | 1 + .../utils/docs/ansible.utils.fact_diff_filter.rst | 21 + .../utils/docs/ansible.utils.ipv6form_filter.rst | 5 + .../utils/docs/ansible.utils.validate_lookup.rst | 6 +- .../utils/docs/ansible.utils.validate_module.rst | 8 +- ansible_collections/ansible/utils/meta/runtime.yml | 2 +- ansible_collections/ansible/utils/mypy.ini | 30 - .../ansible/utils/plugins/action/cli_parse.py | 2 + .../ansible/utils/plugins/action/fact_diff.py | 2 + .../ansible/utils/plugins/action/update_fact.py | 2 + .../ansible/utils/plugins/action/validate.py | 1 + .../ansible/utils/plugins/filter/fact_diff.py | 7 +- .../ansible/utils/plugins/filter/ipv6form.py | 2 +- .../ansible/utils/plugins/lookup/get_path.py | 3 +- .../ansible/utils/plugins/lookup/index_of.py | 3 +- .../ansible/utils/plugins/lookup/to_paths.py | 3 +- .../ansible/utils/plugins/lookup/validate.py | 9 +- .../ansible/utils/plugins/modules/validate.py | 8 +- .../plugins/plugin_utils/base/ipaddr_utils.py | 38 +- .../utils/plugins/plugin_utils/fact_diff.py | 140 +- ansible_collections/ansible/utils/requirements.txt | 2 +- .../ansible/utils/test-requirements.txt | 10 +- ansible_collections/ansible/utils/tests/config.yml | 3 + .../targets/utils_fact_diff/tasks/filter.yaml | 45 +- .../targets/utils_ipaddr_filter/tasks/ipaddr.yaml | 26 +- .../targets/utils_ipaddr_filter/vars/main.yaml | 9 +- .../ansible/utils/tests/unit/compat/__init__.py | 0 .../ansible/utils/tests/unit/compat/mock.py | 127 - .../ansible/utils/tests/unit/compat/unittest.py | 41 - .../ansible/utils/tests/unit/mock/path.py | 4 +- .../ansible/utils/tests/unit/mock/procenv.py | 4 +- .../unit/module_utils/test_argspec_validate.py | 4 +- .../tests/unit/module_utils/test_dict_merge.py | 4 +- .../utils/tests/unit/module_utils/test_get_path.py | 4 +- .../tests/unit/module_utils/test_sort_list.py | 4 +- .../utils/tests/unit/module_utils/test_to_paths.py | 5 +- .../tests/unit/plugins/action/test_cli_parse.py | 7 +- .../tests/unit/plugins/action/test_fact_diff.py | 5 +- .../tests/unit/plugins/action/test_update_fact.py | 5 +- .../tests/unit/plugins/action/test_validate.py | 4 +- .../tests/unit/plugins/filter/test_cidr_merge.py | 4 +- .../tests/unit/plugins/filter/test_consolidate.py | 4 +- .../tests/unit/plugins/filter/test_fact_diff.py | 14 +- .../tests/unit/plugins/filter/test_from_xml.py | 4 +- .../utils/tests/unit/plugins/filter/test_hwaddr.py | 4 +- .../tests/unit/plugins/filter/test_ip4_hex.py | 4 +- .../utils/tests/unit/plugins/filter/test_ipaddr.py | 48 +- .../utils/tests/unit/plugins/filter/test_ipcut.py | 4 +- .../utils/tests/unit/plugins/filter/test_ipmath.py | 4 +- .../tests/unit/plugins/filter/test_ipsubnet.py | 4 +- .../utils/tests/unit/plugins/filter/test_ipv4.py | 4 +- .../utils/tests/unit/plugins/filter/test_ipv6.py | 4 +- .../tests/unit/plugins/filter/test_ipv6form.py | 4 +- .../utils/tests/unit/plugins/filter/test_ipwrap.py | 4 +- .../tests/unit/plugins/filter/test_keep_keys.py | 4 +- .../tests/unit/plugins/filter/test_macaddr.py | 4 +- .../unit/plugins/filter/test_network_in_network.py | 4 +- .../unit/plugins/filter/test_network_in_usable.py | 4 +- .../unit/plugins/filter/test_next_nth_usable.py | 4 +- .../tests/unit/plugins/filter/test_nthhost.py | 4 +- .../unit/plugins/filter/test_param_list_compare.py | 4 +- .../plugins/filter/test_previous_nth_usable.py | 4 +- .../unit/plugins/filter/test_reduce_on_network.py | 4 +- .../tests/unit/plugins/filter/test_remove_keys.py | 4 +- .../tests/unit/plugins/filter/test_replace_keys.py | 4 +- .../utils/tests/unit/plugins/filter/test_slaac.py | 4 +- .../utils/tests/unit/plugins/filter/test_to_xml.py | 4 +- .../tests/unit/plugins/filter/test_usable_range.py | 4 +- .../tests/unit/plugins/filter/test_validate.py | 4 +- .../tests/unit/plugins/lookup/test_validate.py | 4 +- .../unit/plugins/plugin_utils/test_index_of.py | 4 +- .../sub_plugins/cli_parsers/test_json_parser.py | 5 +- .../sub_plugins/cli_parsers/test_textfsm_parser.py | 5 +- .../sub_plugins/cli_parsers/test_ttp_parser.py | 5 +- .../sub_plugins/cli_parsers/test_xml_parser.py | 4 +- .../tests/unit/plugins/test/test_in_any_network.py | 4 +- .../tests/unit/plugins/test/test_in_network.py | 4 +- .../tests/unit/plugins/test/test_in_one_network.py | 4 +- .../utils/tests/unit/plugins/test/test_ip.py | 4 +- .../tests/unit/plugins/test/test_ip_address.py | 4 +- .../utils/tests/unit/plugins/test/test_ipv4.py | 4 +- .../tests/unit/plugins/test/test_ipv4_address.py | 4 +- .../tests/unit/plugins/test/test_ipv4_hostmask.py | 4 +- .../tests/unit/plugins/test/test_ipv4_netmask.py | 4 +- .../utils/tests/unit/plugins/test/test_ipv6.py | 4 +- .../tests/unit/plugins/test/test_ipv6_address.py | 4 +- .../unit/plugins/test/test_ipv6_ipv4_mapped.py | 4 +- .../tests/unit/plugins/test/test_ipv6_sixtofour.py | 4 +- .../tests/unit/plugins/test/test_ipv6_teredo.py | 4 +- .../utils/tests/unit/plugins/test/test_loopback.py | 4 +- .../utils/tests/unit/plugins/test/test_mac.py | 4 +- .../tests/unit/plugins/test/test_multicast.py | 4 +- .../utils/tests/unit/plugins/test/test_private.py | 4 +- .../utils/tests/unit/plugins/test/test_public.py | 4 +- .../utils/tests/unit/plugins/test/test_reserved.py | 4 +- .../tests/unit/plugins/test/test_resolvable.py | 4 +- .../tests/unit/plugins/test/test_subnet_of.py | 4 +- .../tests/unit/plugins/test/test_supernet_of.py | 4 +- .../tests/unit/plugins/test/test_unspecified.py | 4 +- .../utils/tests/unit/plugins/test/test_validate.py | 4 +- ansible_collections/ansible/utils/tox-ansible.ini | 9 + ansible_collections/ansible/utils/tox.ini | 22 - ansible_collections/ansible_community.py | 2 +- ansible_collections/ansible_release.py | 2 +- ansible_collections/arista/eos/.ansible-lint | 3 - ansible_collections/arista/eos/.flake8 | 67 + ansible_collections/arista/eos/.github/CODEOWNERS | 0 .../arista/eos/.github/workflows/ack.yml | 15 - .../arista/eos/.github/workflows/check_label.yml | 11 + .../arista/eos/.github/workflows/codecoverage.yml | 3 +- .../arista/eos/.github/workflows/draft_release.yml | 18 + .../arista/eos/.github/workflows/push.yml | 27 - .../arista/eos/.github/workflows/release.yml | 4 +- .../arista/eos/.github/workflows/tests.yml | 23 +- .../arista/eos/.pre-commit-config.yaml | 13 +- ansible_collections/arista/eos/CHANGELOG.rst | 62 +- ansible_collections/arista/eos/FILES.json | 6170 +++++------ ansible_collections/arista/eos/MANIFEST.json | 6 +- ansible_collections/arista/eos/README.md | 6 +- .../arista/eos/changelogs/changelog.yaml | 66 +- .../arista/eos/docs/arista.eos.eos_bgp_module.rst | 986 -- .../docs/arista.eos.eos_lag_interfaces_module.rst | 28 +- .../eos/docs/arista.eos.eos_logging_module.rst | 388 - .../eos/docs/arista.eos.eos_ospfv3_module.rst | 250 - .../eos/docs/arista.eos.eos_system_module.rst | 2 +- ansible_collections/arista/eos/ignore-2.9.txt | 136 - ansible_collections/arista/eos/meta/runtime.yml | 20 +- .../arista/eos/plugins/cliconf/eos.py | 6 + .../network/eos/argspec/ospfv3/ospfv3.py | 20 - .../network/eos/config/ospfv3/ospfv3.py | 62 - .../eos/facts/static_routes/static_routes.py | 2 +- .../module_utils/network/eos/facts/vlans/vlans.py | 2 +- .../network/eos/rm_templates/snmp_server.py | 6 +- .../arista/eos/plugins/modules/eos_bgp.py | 468 - .../eos/plugins/modules/eos_lag_interfaces.py | 28 +- .../arista/eos/plugins/modules/eos_logging.py | 505 - .../arista/eos/plugins/modules/eos_ospfv3.py | 38 - .../arista/eos/plugins/modules/eos_system.py | 4 +- .../arista/eos/plugins/modules/eos_vrf.py | 23 +- .../arista/eos/test-requirements.txt | 15 +- ansible_collections/arista/eos/tests/config.yml | 2 +- .../integration/targets/eos_bgp/defaults/main.yaml | 3 - .../integration/targets/eos_bgp/meta/main.yaml | 3 - .../integration/targets/eos_bgp/tasks/cli.yaml | 19 - .../integration/targets/eos_bgp/tasks/main.yaml | 5 - .../targets/eos_bgp/tests/cli/basic.yaml | 399 - .../targets/eos_config/tests/cli/config.yaml | 6 +- .../targets/eos_config/tests/cli/toplevel.yaml | 6 + .../eos_config/tests/cli/toplevel_after.yaml | 6 + .../eos_config/tests/cli/toplevel_before.yaml | 6 + .../targets/eos_facts/tests/cli/network_facts | 15 + .../targets/eos_logging/defaults/main.yaml | 2 - .../integration/targets/eos_logging/meta/main.yaml | 3 - .../integration/targets/eos_logging/tasks/cli.yaml | 19 - .../targets/eos_logging/tasks/eapi.yaml | 19 - .../targets/eos_logging/tasks/main.yaml | 10 - .../targets/eos_logging/tests/cli/basic.yaml | 154 - .../targets/eos_logging/tests/eapi/basic.yaml | 96 - .../targets/eos_ospfv3/tests/common/merged.yaml | 13 +- .../targets/eos_user/tests/cli/auth.yaml | 1 + .../arista/eos/tests/sanity/ignore-2.18.txt | 1 + .../arista/eos/tests/unit/compat/__init__.py | 0 .../arista/eos/tests/unit/compat/mock.py | 129 - .../arista/eos/tests/unit/compat/unittest.py | 41 - .../arista/eos/tests/unit/mock/path.py | 4 +- .../arista/eos/tests/unit/mock/procenv.py | 5 +- .../modules/network/eos/test_eos_acl_interfaces.py | 3 +- .../unit/modules/network/eos/test_eos_acls.py | 3 +- .../unit/modules/network/eos/test_eos_banner.py | 3 +- .../tests/unit/modules/network/eos/test_eos_bgp.py | 400 - .../network/eos/test_eos_bgp_address_family.py | 3 +- .../modules/network/eos/test_eos_bgp_global.py | 3 +- .../unit/modules/network/eos/test_eos_command.py | 3 +- .../unit/modules/network/eos/test_eos_config.py | 3 +- .../unit/modules/network/eos/test_eos_eapi.py | 3 +- .../unit/modules/network/eos/test_eos_hostname.py | 3 +- .../modules/network/eos/test_eos_interfaces.py | 3 +- .../modules/network/eos/test_eos_l2_interfaces.py | 3 +- .../modules/network/eos/test_eos_l3_interfaces.py | 3 +- .../unit/modules/network/eos/test_eos_lacp.py | 3 +- .../network/eos/test_eos_lacp_interfaces.py | 3 +- .../modules/network/eos/test_eos_lag_interfaces.py | 3 +- .../modules/network/eos/test_eos_lldp_global.py | 3 +- .../unit/modules/network/eos/test_eos_logging.py | 112 - .../modules/network/eos/test_eos_logging_global.py | 3 +- .../modules/network/eos/test_eos_ntp_global.py | 3 +- .../network/eos/test_eos_ospf_interfaces.py | 3 +- .../unit/modules/network/eos/test_eos_ospfv2.py | 3 +- .../unit/modules/network/eos/test_eos_ospfv3.py | 3 +- .../modules/network/eos/test_eos_prefix_lists.py | 3 +- .../modules/network/eos/test_eos_route_maps.py | 3 +- .../modules/network/eos/test_eos_snmp_server.py | 7 +- .../modules/network/eos/test_eos_static_routes.py | 3 +- .../unit/modules/network/eos/test_eos_system.py | 3 +- .../unit/modules/network/eos/test_eos_user.py | 3 +- .../unit/modules/network/eos/test_eos_vlans.py | 3 +- .../arista/eos/tests/unit/modules/utils.py | 8 +- ansible_collections/arista/eos/tox-ansible.ini | 10 + ansible_collections/arista/eos/tox.ini | 32 - ansible_collections/awx/awx/FILES.json | 1011 +- ansible_collections/awx/awx/MANIFEST.json | 4 +- ansible_collections/awx/awx/meta/runtime.yml | 3 + .../awx/awx/plugins/module_utils/controller_api.py | 19 +- .../awx/awx/plugins/modules/application.py | 8 +- .../awx/awx/plugins/modules/role_definition.py | 114 + .../awx/plugins/modules/role_team_assignment.py | 123 + .../awx/plugins/modules/role_user_assignment.py | 124 + .../awx/awx/plugins/modules/workflow_launch.py | 22 + ansible_collections/awx/awx/test/awx/conftest.py | 17 + .../awx/awx/test/awx/test_notification_template.py | 2 +- ansible_collections/awx/awx/test/awx/test_role.py | 4 +- .../awx/awx/test/awx/test_role_definition.py | 122 + .../awx/awx/test/awx/test_role_team_assignment.py | 70 + .../awx/awx/test/awx/test_role_user_assignment.py | 70 + .../awx/awx/test/awx/test_workflow_job_template.py | 33 +- .../targets/ad_hoc_command_cancel/tasks/main.yml | 40 +- .../integration/targets/application/tasks/main.yml | 1 + .../integration/targets/instance/tasks/main.yml | 22 +- .../targets/lookup_api_plugin/tasks/main.yml | 68 +- .../targets/role_definition/tasks/main.yml | 30 + .../targets/role_team_assignment/tasks/main.yml | 62 + .../targets/role_user_assignment/tasks/main.yml | 63 + .../targets/schedule_rrule/tasks/main.yml | 20 +- .../integration/targets/settings/tasks/main.yml | 40 +- ansible_collections/azure/azcollection/.gitignore | 1 + .../azure/azcollection/.idea/.gitignore | 8 - .../azure/azcollection/.idea/azcollection.iml | 12 - .../.idea/inspectionProfiles/profiles_settings.xml | 6 - .../azure/azcollection/.idea/misc.xml | 7 - .../azure/azcollection/.idea/modules.xml | 8 - .../azure/azcollection/.idea/vcs.xml | 6 - .../azure/azcollection/.idea/workspace.xml | 138 - .../azure/azcollection/CHANGELOG.md | 207 + ansible_collections/azure/azcollection/FILES.json | 5056 ++++----- .../azure/azcollection/MANIFEST.json | 4 +- ansible_collections/azure/azcollection/README.md | 2 +- .../azure/azcollection/meta/runtime.yml | 2 +- .../azcollection/plugins/doc_fragments/azure.py | 16 +- .../azcollection/plugins/doc_fragments/azure_rm.py | 13 +- .../azcollection/plugins/inventory/azure_rm.py | 99 +- .../plugins/lookup/azure_keyvault_secret.py | 42 +- .../lookup/azure_service_principal_attribute.py | 101 + .../plugins/module_utils/azure_rm_common.py | 266 +- .../plugins/module_utils/azure_rm_common_rest.py | 2 +- .../plugins/modules/azure_rm_accesstoken_info.py | 126 + .../plugins/modules/azure_rm_account_info.py | 50 +- .../plugins/modules/azure_rm_adapplication.py | 307 +- .../plugins/modules/azure_rm_adapplication_info.py | 136 +- .../plugins/modules/azure_rm_adgroup.py | 211 +- .../plugins/modules/azure_rm_adgroup_info.py | 141 +- .../plugins/modules/azure_rm_adpassword.py | 159 +- .../plugins/modules/azure_rm_adpassword_info.py | 56 +- .../plugins/modules/azure_rm_adserviceprincipal.py | 71 +- .../modules/azure_rm_adserviceprincipal_info.py | 99 +- .../plugins/modules/azure_rm_aduser.py | 188 +- .../plugins/modules/azure_rm_aduser_info.py | 91 +- .../azcollection/plugins/modules/azure_rm_aks.py | 177 +- .../plugins/modules/azure_rm_aks_info.py | 35 +- .../modules/azure_rm_akscredentials_info.py | 209 + .../plugins/modules/azure_rm_aksversion_info.py | 24 +- .../plugins/modules/azure_rm_apimanagement.py | 195 +- .../plugins/modules/azure_rm_apimanagement_info.py | 3 +- .../modules/azure_rm_apimanagementservice.py | 78 +- .../modules/azure_rm_apimanagementservice_info.py | 3 +- .../plugins/modules/azure_rm_appgateway.py | 84 +- .../plugins/modules/azure_rm_azurefirewall.py | 227 +- .../plugins/modules/azure_rm_azurefirewall_info.py | 1 - .../plugins/modules/azure_rm_backupazurevm.py | 33 +- .../plugins/modules/azure_rm_backupazurevm_info.py | 9 +- .../plugins/modules/azure_rm_batchaccount.py | 15 +- .../plugins/modules/azure_rm_batchaccount_info.py | 4 +- .../plugins/modules/azure_rm_cdnendpoint.py | 1 - .../plugins/modules/azure_rm_cdnendpoint_info.py | 1 - .../plugins/modules/azure_rm_cdnprofile.py | 1 - .../plugins/modules/azure_rm_cdnprofile_info.py | 1 - .../plugins/modules/azure_rm_cosmosdbaccount.py | 1 - .../modules/azure_rm_cosmosdbaccount_info.py | 1 - .../plugins/modules/azure_rm_datalakestore.py | 1 + .../plugins/modules/azure_rm_datalakestore_info.py | 1 + .../plugins/modules/azure_rm_deployment.py | 8 +- .../plugins/modules/azure_rm_devtestlab.py | 1 - .../plugins/modules/azure_rm_devtestlab_info.py | 1 - .../modules/azure_rm_devtestlabarmtemplate_info.py | 1 - .../modules/azure_rm_devtestlabartifact_info.py | 1 - .../modules/azure_rm_devtestlabartifactsource.py | 1 - .../azure_rm_devtestlabartifactsource_info.py | 1 - .../modules/azure_rm_devtestlabcustomimage.py | 1 - .../modules/azure_rm_devtestlabcustomimage_info.py | 1 - .../modules/azure_rm_devtestlabenvironment.py | 1 - .../modules/azure_rm_devtestlabenvironment_info.py | 1 - .../plugins/modules/azure_rm_devtestlabpolicy.py | 1 - .../modules/azure_rm_devtestlabpolicy_info.py | 1 - .../plugins/modules/azure_rm_devtestlabschedule.py | 1 - .../modules/azure_rm_devtestlabschedule_info.py | 1 - .../modules/azure_rm_devtestlabvirtualmachine.py | 1 - .../azure_rm_devtestlabvirtualmachine_info.py | 1 - .../modules/azure_rm_devtestlabvirtualnetwork.py | 1 - .../azure_rm_devtestlabvirtualnetwork_info.py | 1 - .../plugins/modules/azure_rm_dnsrecordset.py | 6 +- .../plugins/modules/azure_rm_gallery.py | 89 +- .../plugins/modules/azure_rm_gallery_info.py | 3 +- .../plugins/modules/azure_rm_galleryimage.py | 178 +- .../plugins/modules/azure_rm_galleryimage_info.py | 1 - .../modules/azure_rm_galleryimageversion.py | 371 +- .../modules/azure_rm_galleryimageversion_info.py | 3 +- .../plugins/modules/azure_rm_hdinsightcluster.py | 1 - .../modules/azure_rm_hdinsightcluster_info.py | 1 - .../plugins/modules/azure_rm_iotdevice.py | 6 +- .../plugins/modules/azure_rm_iotdevicemodule.py | 12 +- .../plugins/modules/azure_rm_keyvault.py | 1 - .../plugins/modules/azure_rm_keyvault_info.py | 1 - .../plugins/modules/azure_rm_keyvaultkey.py | 5 +- .../plugins/modules/azure_rm_keyvaultkey_info.py | 21 +- .../plugins/modules/azure_rm_keyvaultsecret.py | 71 +- .../modules/azure_rm_keyvaultsecret_info.py | 21 +- .../plugins/modules/azure_rm_lock_info.py | 2 +- .../plugins/modules/azure_rm_manageddisk.py | 3 +- .../plugins/modules/azure_rm_managementgroup.py | 76 +- .../plugins/modules/azure_rm_mysqldatabase.py | 4 +- .../plugins/modules/azure_rm_mysqldatabase_info.py | 4 +- .../plugins/modules/azure_rm_networkinterface.py | 2 +- .../modules/azure_rm_networkinterface_info.py | 128 +- .../modules/azure_rm_openshiftmanagedcluster.py | 126 +- .../azure_rm_openshiftmanagedcluster_info.py | 1 - ...re_rm_openshiftmanagedclusterkubeconfig_info.py | 227 + ...zure_rm_postgresqlflexibleconfiguration_info.py | 210 + .../modules/azure_rm_postgresqlflexibledatabase.py | 288 + .../azure_rm_postgresqlflexibledatabase_info.py | 239 + .../azure_rm_postgresqlflexiblefirewallrule.py | 294 + ...azure_rm_postgresqlflexiblefirewallrule_info.py | 187 + .../modules/azure_rm_postgresqlflexibleserver.py | 928 ++ .../azure_rm_postgresqlflexibleserver_info.py | 443 + .../modules/azure_rm_privatednsrecordset.py | 6 +- .../plugins/modules/azure_rm_publicipprefix.py | 455 + .../modules/azure_rm_publicipprefix_info.py | 296 + .../modules/azure_rm_recoveryservicesvault.py | 9 +- .../modules/azure_rm_recoveryservicesvault_info.py | 44 +- .../plugins/modules/azure_rm_rediscache.py | 3 +- .../plugins/modules/azure_rm_rediscache_info.py | 3 +- .../modules/azure_rm_rediscachefirewallrule.py | 3 +- .../modules/azure_rm_registrationassignment.py | 11 +- .../azure_rm_registrationassignment_info.py | 5 +- .../modules/azure_rm_registrationdefinition.py | 30 +- .../azure_rm_registrationdefinition_info.py | 5 +- .../plugins/modules/azure_rm_resource.py | 12 +- .../plugins/modules/azure_rm_resource_info.py | 25 +- .../plugins/modules/azure_rm_roledefinition.py | 1 - .../modules/azure_rm_roledefinition_info.py | 1 - .../plugins/modules/azure_rm_securitygroup.py | 8 +- .../plugins/modules/azure_rm_servicebus_info.py | 22 +- .../plugins/modules/azure_rm_snapshot.py | 55 +- .../plugins/modules/azure_rm_sqlmanagedinstance.py | 2 +- .../modules/azure_rm_sqlmanagedinstance_info.py | 6 +- .../plugins/modules/azure_rm_sshpublickey.py | 266 + .../plugins/modules/azure_rm_sshpublickey_info.py | 196 + .../plugins/modules/azure_rm_storageaccount.py | 64 +- .../modules/azure_rm_storageaccount_info.py | 14 + .../plugins/modules/azure_rm_storageblob.py | 20 +- .../plugins/modules/azure_rm_subnet.py | 4 +- .../plugins/modules/azure_rm_virtualmachine.py | 255 +- .../modules/azure_rm_virtualmachine_info.py | 18 + .../modules/azure_rm_virtualmachinescaleset.py | 17 +- .../azure_rm_virtualmachinescalesetinstance.py | 1 - ...azure_rm_virtualmachinescalesetinstance_info.py | 1 - .../plugins/modules/azure_rm_virtualwan.py | 61 +- .../plugins/modules/azure_rm_vmbackuppolicy.py | 9 +- .../modules/azure_rm_vmbackuppolicy_info.py | 9 +- .../plugins/modules/azure_rm_vpnsite.py | 107 +- .../plugins/modules/azure_rm_webapp.py | 43 +- .../plugins/modules/azure_rm_webapp_info.py | 7 + .../azure/azcollection/pr-pipelines.yml | 8 +- .../azure/azcollection/requirements-azure.txt | 7 +- .../azcollection/sanity-requirements-azure.txt | 2 +- .../targets/azure_rm_accesstoken_info/aliases | 3 + .../azure_rm_accesstoken_info/meta/main.yml | 2 + .../azure_rm_accesstoken_info/tasks/main.yml | 13 + .../targets/azure_rm_adapplication/tasks/main.yml | 18 +- .../targets/azure_rm_adgroup/tasks/main.yml | 40 +- .../targets/azure_rm_adpassword/tasks/main.yml | 14 - .../azure_rm_adserviceprincipal/tasks/main.yml | 8 - .../targets/azure_rm_aduser/tasks/main.yml | 25 - .../targets/azure_rm_aksagentpool/tasks/main.yml | 36 + .../targets/azure_rm_apimanagement/tasks/main.yml | 2 +- .../targets/azure_rm_autoscale/tasks/main.yml | 1 + .../targets/azure_rm_bastionhost/tasks/main.yml | 19 +- .../targets/azure_rm_cdnprofile/tasks/main.yml | 3 +- .../targets/azure_rm_datalakestore/aliases | 1 + .../targets/azure_rm_datalakestore/tasks/main.yml | 4 +- .../azure_service_principal_attribute.py | 92 - .../azure_rm_diskencryptionset/tasks/main.yml | 2 +- .../targets/azure_rm_gallery/tasks/main.yml | 116 +- .../azure_service_principal_attribute.py | 92 - .../targets/azure_rm_keyvault/tasks/main.yml | 2 +- .../azure_service_principal_attribute.py | 92 - .../targets/azure_rm_keyvaultkey/tasks/main.yml | 2 +- .../azure_service_principal_attribute.py | 92 - .../targets/azure_rm_keyvaultsecret/tasks/main.yml | 2 +- .../tasks/main.yml | 44 + .../azure_rm_postgresqlflexibleserver/aliases | 3 + .../meta/main.yml | 2 + .../tasks/main.yml | 356 + .../tasks/main.yml | 8 +- .../targets/azure_rm_publicipprefix/aliases | 3 + .../targets/azure_rm_publicipprefix/meta/main.yml | 2 + .../targets/azure_rm_publicipprefix/tasks/main.yml | 102 + .../azure_rm_registrationassignment/tasks/main.yml | 2 +- .../azure_rm_registrationdefinition/tasks/main.yml | 2 +- .../targets/azure_rm_roleassignment/tasks/main.yml | 2 +- .../targets/azure_rm_securitygroup/tasks/main.yml | 11 +- .../targets/azure_rm_sshpublickey/aliases | 3 + .../targets/azure_rm_sshpublickey/meta/main.yml | 2 + .../targets/azure_rm_sshpublickey/tasks/main.yml | 70 + .../targets/azure_rm_storageaccount/tasks/main.yml | 4 + .../targets/azure_rm_storageblob/tasks/main.yml | 2 + .../azure_rm_trafficmanagerprofile/tasks/main.yml | 10 +- .../targets/azure_rm_virtualmachine/inventory.yml | 5 + .../tasks/azure_test_deallocate.yml | 4 - .../tasks/azure_test_dual_nic.yml | 4 - .../tasks/azure_test_encrypted.yml | 107 + .../tasks/azure_test_ephemeral_os.yml | 4 - .../tasks/azure_test_public_ip.yml | 4 - .../azure_rm_virtualmachine/tasks/setup_des.yml | 94 + .../azure_rm_virtualmachinescaleset/tasks/main.yml | 21 +- .../targets/azure_rm_webapp/tasks/main.yml | 134 +- .../inventory_azure/playbooks/test_inventory.yml | 4 - .../azcollection/tests/sanity/ignore-2.13.txt | 18 - .../azcollection/tests/sanity/ignore-2.14.txt | 18 - .../azcollection/tests/sanity/ignore-2.15.txt | 18 - .../azure/azcollection/tests/utils/ado/ado.sh | 2 +- .../tests/utils/shippable/check_matrix.py | 4 +- .../azcollection/tests/utils/shippable/timing.py | 2 +- ansible_collections/cisco/asa/.ansible-lint | 5 + .../cisco/asa/.github/workflows/lint.yml | 1 + .../cisco/asa/.github/workflows/tests.yml | 7 +- .../cisco/asa/.pre-commit-config.yaml | 6 +- ansible_collections/cisco/asa/CHANGELOG.rst | 21 + ansible_collections/cisco/asa/FILES.json | 1363 +-- ansible_collections/cisco/asa/MANIFEST.json | 6 +- ansible_collections/cisco/asa/README.md | 5 +- .../cisco/asa/changelogs/changelog.yaml | 19 + .../cisco/asa/docs/cisco.asa.asa_config_module.rst | 9 +- ansible_collections/cisco/asa/meta/runtime.yml | 23 +- .../cisco/asa/plugins/action/acls.py | 55 + .../cisco/asa/plugins/action/command.py | 55 + .../cisco/asa/plugins/action/config.py | 55 + .../cisco/asa/plugins/action/facts.py | 55 + .../cisco/asa/plugins/action/ogs.py | 55 + .../cisco/asa/plugins/modules/asa_config.py | 11 +- .../cisco/asa/test-requirements.txt | 6 +- ansible_collections/cisco/asa/tests/config.yml | 3 + ansible_collections/cisco/intersight/CHANGELOG.md | 3 + ansible_collections/cisco/intersight/FILES.json | 11 +- ansible_collections/cisco/intersight/MANIFEST.json | 4 +- .../cisco/intersight/playbooks/count_vms.yml | 26 + .../intersight/plugins/module_utils/intersight.py | 1 + ansible_collections/cisco/ios/.ansible-lint | 6 +- ansible_collections/cisco/ios/.flake8 | 17 +- .../cisco/ios/.github/workflows/ack.yml | 15 - .../cisco/ios/.github/workflows/check_label.yml | 11 + .../cisco/ios/.github/workflows/codecoverage.yml | 3 +- .../cisco/ios/.github/workflows/draft_release.yml | 18 + .../cisco/ios/.github/workflows/lint.yml | 13 - .../cisco/ios/.github/workflows/push.yml | 38 - .../cisco/ios/.github/workflows/release.yml | 4 +- .../cisco/ios/.github/workflows/tests.yml | 22 +- .../cisco/ios/.pre-commit-config.yaml | 11 +- ansible_collections/cisco/ios/CHANGELOG.rst | 191 +- ansible_collections/cisco/ios/FILES.json | 6696 ++++++------ ansible_collections/cisco/ios/MANIFEST.json | 6 +- ansible_collections/cisco/ios/README.md | 6 +- .../cisco/ios/changelogs/changelog.yaml | 229 +- .../cisco/ios/changelogs/config.yaml | 1 + .../cisco/ios/docs/cisco.ios.ios_acls_module.rst | 343 + .../cisco.ios.ios_bgp_address_family_module.rst | 2 +- .../ios/docs/cisco.ios.ios_bgp_global_module.rst | 119 +- .../cisco/ios/docs/cisco.ios.ios_bgp_module.rst | 1142 -- .../ios/docs/cisco.ios.ios_evpn_evi_module.rst | 2 +- .../ios/docs/cisco.ios.ios_evpn_global_module.rst | 2 +- .../docs/cisco.ios.ios_l3_interfaces_module.rst | 160 + .../cisco/ios/docs/cisco.ios.ios_ntp_module.rst | 291 - .../cisco/ios/docs/cisco.ios.ios_user_module.rst | 282 +- .../cisco/ios/docs/cisco.ios.ios_vlans_module.rst | 243 +- .../cisco/ios/docs/cisco.ios.ios_vrf_module.rst | 332 +- .../ios/docs/cisco.ios.ios_vxlan_vtep_module.rst | 2 +- ansible_collections/cisco/ios/meta/runtime.yml | 143 +- ansible_collections/cisco/ios/platform_guide.rst | 94 + .../cisco/ios/plugins/action/ntp.py | 56 - .../cisco/ios/plugins/cliconf/ios.py | 7 + .../network/ios/argspec/bgp_global/bgp_global.py | 14 + .../ios/argspec/l3_interfaces/l3_interfaces.py | 11 + .../network/ios/argspec/vlans/vlans.py | 7 +- .../module_utils/network/ios/config/acls/acls.py | 157 +- .../network/ios/config/bgp_global/bgp_global.py | 59 +- .../ios/config/l3_interfaces/l3_interfaces.py | 28 +- .../network/ios/config/route_maps/route_maps.py | 10 +- .../network/ios/config/snmp_server/snmp_server.py | 45 +- .../module_utils/network/ios/config/vlans/vlans.py | 548 +- .../module_utils/network/ios/facts/acls/acls.py | 55 +- .../network/ios/facts/bgp_global/bgp_global.py | 14 + .../module_utils/network/ios/facts/facts.py | 13 +- .../ios/facts/l3_interfaces/l3_interfaces.py | 12 + .../module_utils/network/ios/facts/vlans/vlans.py | 268 +- .../network/ios/providers/cli/__init__.py | 0 .../network/ios/providers/cli/config/__init__.py | 0 .../network/ios/providers/cli/config/base.py | 82 - .../ios/providers/cli/config/bgp/__init__.py | 0 .../ios/providers/cli/config/bgp/address_family.py | 147 - .../ios/providers/cli/config/bgp/neighbors.py | 203 - .../ios/providers/cli/config/bgp/process.py | 163 - .../module_utils/network/ios/providers/module.py | 66 - .../module_utils/network/ios/rm_templates/acls.py | 32 +- .../network/ios/rm_templates/bgp_address_family.py | 210 +- .../network/ios/rm_templates/bgp_global.py | 57 +- .../network/ios/rm_templates/interfaces.py | 2 +- .../network/ios/rm_templates/l3_interfaces.py | 56 + .../network/ios/rm_templates/ospfv2.py | 6 +- .../network/ios/rm_templates/prefix_lists.py | 2 +- .../network/ios/rm_templates/route_maps.py | 43 +- .../network/ios/rm_templates/snmp_server.py | 11 +- .../module_utils/network/ios/rm_templates/vlans.py | 131 + .../module_utils/network/ios/utils/utils.py | 24 +- .../cisco/ios/plugins/modules/ios_acls.py | 346 + .../cisco/ios/plugins/modules/ios_bgp.py | 504 - .../ios/plugins/modules/ios_bgp_address_family.py | 2 +- .../cisco/ios/plugins/modules/ios_bgp_global.py | 54 +- .../cisco/ios/plugins/modules/ios_evpn_evi.py | 2 +- .../cisco/ios/plugins/modules/ios_evpn_global.py | 2 +- .../cisco/ios/plugins/modules/ios_l3_interfaces.py | 47 + .../cisco/ios/plugins/modules/ios_linkagg.py | 12 +- .../cisco/ios/plugins/modules/ios_ntp.py | 357 - .../cisco/ios/plugins/modules/ios_user.py | 342 +- .../cisco/ios/plugins/modules/ios_vlans.py | 230 +- .../cisco/ios/plugins/modules/ios_vrf.py | 109 +- .../cisco/ios/plugins/modules/ios_vxlan_vtep.py | 2 +- .../cisco/ios/plugins/terminal/ios.py | 1 + .../cisco/ios/test-requirements.txt | 6 +- ansible_collections/cisco/ios/tests/config.yml | 2 +- .../ios_acls/tests/cli/_populate_config.yaml | 15 +- .../targets/ios_acls/tests/cli/remarks_states.yaml | 134 + .../targets/ios_acls/tests/cli/replaced.yaml | 35 + .../integration/targets/ios_acls/vars/main.yaml | 291 + .../integration/targets/ios_bgp/defaults/main.yaml | 2 - .../integration/targets/ios_bgp/meta/main.yaml | 3 - .../integration/targets/ios_bgp/tasks/cli.yaml | 17 - .../integration/targets/ios_bgp/tasks/main.yaml | 5 - .../targets/ios_bgp/tests/cli/basic.yaml | 490 - .../targets/ios_bgp_global/tests/cli/deleted.yaml | 1 + .../targets/ios_bgp_global/tests/cli/merged.yaml | 24 +- .../targets/ios_bgp_global/vars/main.yaml | 50 +- .../targets/ios_facts/tests/cli/all_facts.yaml | 7 +- .../targets/ios_interfaces/tests/cli/merged.yaml | 2 +- .../targets/ios_interfaces/vars/main.yaml | 4 +- .../ios_l3_interfaces/tests/cli/merged.yaml | 15 + .../targets/ios_l3_interfaces/vars/main.yaml | 21 + .../integration/targets/ios_ntp/defaults/main.yaml | 2 - .../integration/targets/ios_ntp/meta/main.yml | 3 - .../integration/targets/ios_ntp/tasks/cli.yaml | 18 - .../integration/targets/ios_ntp/tasks/main.yaml | 3 - .../ios_ntp/tests/cli/ntp_configuration.yaml | 87 - .../targets/ios_user/tests/cli/basic.yaml | 73 +- .../tests/cli/_populate_config_vlan_config.yaml | 1 - .../tests/cli/_remove_config_vlan_config.yaml | 1 - .../ios_vlans/tests/cli/deleted_vlan_config.yaml | 1 - .../ios_vlans/tests/cli/gathered_vlan_config.yaml | 1 - .../ios_vlans/tests/cli/merged_vlan_config.yaml | 1 - .../tests/cli/overridden_vlan_config.yaml | 1 - .../ios_vlans/tests/cli/parsed_vlan_config.yaml | 1 - .../ios_vlans/tests/cli/rendered_vlan_config.yaml | 1 - .../cisco/ios/tests/sanity/ignore-2.10.txt | 24 - .../cisco/ios/tests/sanity/ignore-2.11.txt | 24 - .../cisco/ios/tests/sanity/ignore-2.12.txt | 1 - .../cisco/ios/tests/sanity/ignore-2.13.txt | 1 - .../cisco/ios/tests/sanity/ignore-2.18.txt | 1 + .../cisco/ios/tests/sanity/ignore-2.9.txt | 32 - .../cisco/ios/tests/unit/compat/__init__.py | 0 .../cisco/ios/tests/unit/compat/mock.py | 28 - .../cisco/ios/tests/unit/compat/unittest.py | 41 - .../cisco/ios/tests/unit/mock/path.py | 9 +- .../cisco/ios/tests/unit/mock/procenv.py | 10 +- .../network/ios/fixtures/ios_facts_show_interfaces | 31 +- .../modules/network/ios/test_ios_acl_interfaces.py | 3 +- .../unit/modules/network/ios/test_ios_acls.py | 610 +- .../unit/modules/network/ios/test_ios_banner.py | 8 +- .../tests/unit/modules/network/ios/test_ios_bgp.py | 344 - .../network/ios/test_ios_bgp_address_family.py | 65 +- .../modules/network/ios/test_ios_bgp_global.py | 284 +- .../unit/modules/network/ios/test_ios_command.py | 19 +- .../unit/modules/network/ios/test_ios_config.py | 43 +- .../unit/modules/network/ios/test_ios_evpn_evi.py | 3 +- .../modules/network/ios/test_ios_evpn_global.py | 3 +- .../unit/modules/network/ios/test_ios_facts.py | 20 +- .../unit/modules/network/ios/test_ios_hostname.py | 3 +- .../modules/network/ios/test_ios_interfaces.py | 30 +- .../modules/network/ios/test_ios_l2_interfaces.py | 53 +- .../modules/network/ios/test_ios_l3_interfaces.py | 108 +- .../unit/modules/network/ios/test_ios_lacp.py | 3 +- .../network/ios/test_ios_lacp_interfaces.py | 39 +- .../modules/network/ios/test_ios_lag_interfaces.py | 45 +- .../modules/network/ios/test_ios_lldp_global.py | 10 +- .../modules/network/ios/test_ios_lldp_inteface.py | 8 +- .../modules/network/ios/test_ios_logging_global.py | 60 +- .../tests/unit/modules/network/ios/test_ios_ntp.py | 110 - .../modules/network/ios/test_ios_ntp_global.py | 107 +- .../network/ios/test_ios_ospf_interfaces.py | 3 +- .../unit/modules/network/ios/test_ios_ospfv2.py | 83 +- .../unit/modules/network/ios/test_ios_ospfv3.py | 32 +- .../unit/modules/network/ios/test_ios_ping.py | 7 +- .../modules/network/ios/test_ios_prefix_lists.py | 149 +- .../modules/network/ios/test_ios_route_maps.py | 46 +- .../unit/modules/network/ios/test_ios_service.py | 3 +- .../modules/network/ios/test_ios_snmp_server.py | 290 +- .../modules/network/ios/test_ios_static_routes.py | 46 +- .../unit/modules/network/ios/test_ios_system.py | 14 +- .../unit/modules/network/ios/test_ios_user.py | 66 +- .../unit/modules/network/ios/test_ios_vlans.py | 828 +- .../tests/unit/modules/network/ios/test_ios_vrf.py | 52 +- .../modules/network/ios/test_ios_vxlan_vtep.py | 3 +- .../cisco/ios/tests/unit/modules/utils.py | 8 +- .../ios/tests/unit/plugins/cliconf/test_ios.py | 9 +- ansible_collections/cisco/ios/tox-ansible.ini | 10 + ansible_collections/cisco/ios/tox.ini | 31 - ansible_collections/cisco/iosxr/.ansible-lint | 6 + ansible_collections/cisco/iosxr/.flake8 | 67 + ansible_collections/cisco/iosxr/.github/CODEOWNERS | 0 .../cisco/iosxr/.github/workflows/ack.yml | 15 - .../cisco/iosxr/.github/workflows/check_label.yml | 11 + .../cisco/iosxr/.github/workflows/codecoverage.yml | 3 +- .../iosxr/.github/workflows/draft_release.yml | 18 + .../cisco/iosxr/.github/workflows/push.yml | 27 - .../cisco/iosxr/.github/workflows/release.yml | 4 +- .../cisco/iosxr/.github/workflows/tests.yml | 19 +- .../cisco/iosxr/.pre-commit-config.yaml | 12 +- ansible_collections/cisco/iosxr/.zuul.yaml | 8 - ansible_collections/cisco/iosxr/CHANGELOG.rst | 119 +- ansible_collections/cisco/iosxr/FILES.json | 5793 +++++----- ansible_collections/cisco/iosxr/MANIFEST.json | 6 +- ansible_collections/cisco/iosxr/README.md | 10 +- .../cisco/iosxr/changelogs/changelog.yaml | 124 +- .../cisco.iosxr.iosxr_bgp_templates_module.rst | 8 + .../iosxr/docs/cisco.iosxr.iosxr_facts_module.rst | 2 +- .../docs/cisco.iosxr.iosxr_logging_module.rst | 538 - ansible_collections/cisco/iosxr/meta/runtime.yml | 11 +- ansible_collections/cisco/iosxr/platform_guide.rst | 142 + .../cisco/iosxr/plugins/cliconf/iosxr.py | 29 +- .../iosxr/argspec/bgp_templates/bgp_templates.py | 13 +- .../network/iosxr/facts/legacy/base.py | 45 + .../iosxr/plugins/modules/iosxr_bgp_templates.py | 5 +- .../cisco/iosxr/plugins/modules/iosxr_facts.py | 3 +- .../cisco/iosxr/plugins/modules/iosxr_logging.py | 1270 --- ansible_collections/cisco/iosxr/requirements.txt | 1 - .../cisco/iosxr/test-requirements.txt | 7 +- ansible_collections/cisco/iosxr/tests/config.yml | 2 +- .../targets/iosxr_config/tests/cli/backup.yaml | 2 +- .../iosxr_config/tests/cli/comment-too-long.yaml | 1 - .../targets/iosxr_config/tests/cli/comment.yaml | 3 +- .../iosxr_config/tests/cli/replace_block.yaml | 6 + .../targets/iosxr_config/tests/cli/src_basic.yaml | 3 +- .../iosxr_config/tests/cli/src_match_none.yaml | 3 +- .../targets/iosxr_logging/defaults/main.yaml | 3 - .../targets/iosxr_logging/meta/main.yaml | 3 - .../targets/iosxr_logging/tasks/cli.yaml | 24 - .../targets/iosxr_logging/tasks/main.yaml | 6 - .../targets/iosxr_logging/tasks/netconf.yaml | 24 - .../targets/iosxr_logging/tests/cli/basic.yaml | 140 - .../targets/iosxr_logging/tests/netconf/basic.yaml | 208 - .../iosxr_smoke/tests/netconf/common_netconf.yaml | 20 - .../cisco/iosxr/tests/sanity/ignore-2.10.txt | 28 - .../cisco/iosxr/tests/sanity/ignore-2.11.txt | 31 - .../cisco/iosxr/tests/sanity/ignore-2.12.txt | 31 - .../cisco/iosxr/tests/sanity/ignore-2.13.txt | 4 - .../cisco/iosxr/tests/sanity/ignore-2.14.txt | 2 +- .../cisco/iosxr/tests/sanity/ignore-2.15.txt | 2 +- .../cisco/iosxr/tests/sanity/ignore-2.16.txt | 2 +- .../cisco/iosxr/tests/sanity/ignore-2.17.txt | 2 +- .../cisco/iosxr/tests/sanity/ignore-2.18.txt | 4 + .../cisco/iosxr/tests/sanity/ignore-2.9.txt | 30 - .../cisco/iosxr/tests/unit/compat/__init__.py | 0 .../cisco/iosxr/tests/unit/compat/mock.py | 129 - .../cisco/iosxr/tests/unit/compat/unittest.py | 41 - .../cisco/iosxr/tests/unit/mock/path.py | 4 +- .../unit/modules/network/iosxr/fixtures/show_cdp | 4 + .../iosxr/fixtures/show_cdp_neighbors_detail | 16 + .../unit/modules/network/iosxr/test_hostname.py | 2 +- .../tests/unit/modules/network/iosxr/test_iosxr.py | 4 +- .../network/iosxr/test_iosxr_acl_interfaces.py | 3 +- .../unit/modules/network/iosxr/test_iosxr_acls.py | 3 +- .../modules/network/iosxr/test_iosxr_banner.py | 2 +- .../network/iosxr/test_iosxr_bgp_address_family.py | 2 +- .../modules/network/iosxr/test_iosxr_bgp_global.py | 2 +- .../test_iosxr_bgp_neighbor_address_family.py | 2 +- .../network/iosxr/test_iosxr_bgp_templates.py | 34 +- .../modules/network/iosxr/test_iosxr_command.py | 3 +- .../modules/network/iosxr/test_iosxr_config.py | 2 +- .../unit/modules/network/iosxr/test_iosxr_facts.py | 19 +- .../modules/network/iosxr/test_iosxr_interfaces.py | 3 +- .../network/iosxr/test_iosxr_l2_interfaces.py | 3 +- .../network/iosxr/test_iosxr_l3_interfaces.py | 3 +- .../unit/modules/network/iosxr/test_iosxr_lacp.py | 3 +- .../network/iosxr/test_iosxr_lacp_interfaces.py | 3 +- .../network/iosxr/test_iosxr_lag_interfaces.py | 3 +- .../network/iosxr/test_iosxr_lldp_global.py | 3 +- .../network/iosxr/test_iosxr_lldp_interfaces.py | 3 +- .../network/iosxr/test_iosxr_logging_global.py | 2 +- .../unit/modules/network/iosxr/test_iosxr_n540.py | 4 +- .../modules/network/iosxr/test_iosxr_netconf.py | 3 +- .../modules/network/iosxr/test_iosxr_ntp_global.py | 2 +- .../network/iosxr/test_iosxr_ospf_interfaces.py | 3 +- .../modules/network/iosxr/test_iosxr_ospfv2.py | 3 +- .../modules/network/iosxr/test_iosxr_ospfv3.py | 3 +- .../unit/modules/network/iosxr/test_iosxr_ping.py | 4 +- .../network/iosxr/test_iosxr_prefix_lists.py | 2 +- .../network/iosxr/test_iosxr_snmp_server.py | 2 +- .../network/iosxr/test_iosxr_static_routes.py | 3 +- .../modules/network/iosxr/test_iosxr_system.py | 3 +- .../unit/modules/network/iosxr/test_iosxr_user.py | 3 +- .../unit/modules/network/iosxr/test_iosxr_utils.py | 6 +- .../cisco/iosxr/tests/unit/modules/utils.py | 8 +- ansible_collections/cisco/iosxr/tox-ansible.ini | 3 + ansible_collections/cisco/iosxr/tox.ini | 31 - ansible_collections/cisco/ise/.DS_Store | Bin 0 -> 10244 bytes .../cisco/ise/.github/workflows/sanity_tests.yml | 3 +- ansible_collections/cisco/ise/.vscode/launch.json | 16 + .../cisco/ise/.vscode/settings.json | 24 + ansible_collections/cisco/ise/FILES.json | 2538 +++-- ansible_collections/cisco/ise/MANIFEST.json | 4 +- ansible_collections/cisco/ise/Pipfile | 13 - ansible_collections/cisco/ise/README.md | 7 +- .../cisco/ise/changelogs/changelog.yaml | 28 +- .../cisco/ise/playbooks/credentials.template | 2 +- .../cisco/ise/playbooks/group_vars/ise_servers | 2 +- ansible_collections/cisco/ise/plugins/.DS_Store | Bin 0 -> 8196 bytes .../cisco/ise/plugins/action/aci_bindings_info.py | 2 +- .../cisco/ise/plugins/action/aci_settings.py | 2 +- .../cisco/ise/plugins/action/aci_settings_info.py | 2 +- .../ise/plugins/action/aci_test_connectivity.py | 2 +- .../ise/plugins/action/active_directories_info.py | 90 + .../cisco/ise/plugins/action/active_directory.py | 2 +- .../plugins/action/active_directory_add_groups.py | 2 +- .../active_directory_groups_by_domain_info.py | 2 +- .../ise/plugins/action/active_directory_info.py | 2 +- ...ctive_directory_is_user_member_of_group_info.py | 2 +- .../plugins/action/active_directory_join_domain.py | 2 +- .../active_directory_join_domain_with_all_nodes.py | 2 +- .../action/active_directory_leave_domain.py | 2 +- ...active_directory_leave_domain_with_all_nodes.py | 2 +- .../active_directory_trusted_domains_info.py | 2 +- .../action/active_directory_user_groups_info.py | 2 +- .../cisco/ise/plugins/action/ad_groups_info.py | 98 + .../cisco/ise/plugins/action/admin_user_info.py | 2 +- .../cisco/ise/plugins/action/allowed_protocols.py | 2 +- .../ise/plugins/action/allowed_protocols_info.py | 2 +- .../cisco/ise/plugins/action/anc_endpoint_apply.py | 2 +- .../anc_endpoint_bulk_monitor_status_info.py | 2 +- .../plugins/action/anc_endpoint_bulk_request.py | 2 +- .../cisco/ise/plugins/action/anc_endpoint_clear.py | 2 +- .../cisco/ise/plugins/action/anc_endpoint_info.py | 2 +- .../cisco/ise/plugins/action/anc_policy.py | 2 +- .../action/anc_policy_bulk_monitor_status_info.py | 2 +- .../ise/plugins/action/anc_policy_bulk_request.py | 2 +- .../cisco/ise/plugins/action/anc_policy_info.py | 2 +- .../ise/plugins/action/authorization_profile.py | 2 +- .../plugins/action/authorization_profile_info.py | 2 +- .../cisco/ise/plugins/action/backup_cancel.py | 2 +- .../cisco/ise/plugins/action/backup_config.py | 2 +- .../ise/plugins/action/backup_last_status_info.py | 2 +- .../cisco/ise/plugins/action/backup_restore.py | 2 +- .../ise/plugins/action/backup_schedule_config.py | 2 +- .../action/backup_schedule_config_update.py | 2 +- .../ise/plugins/action/bind_signed_certificate.py | 2 +- .../cisco/ise/plugins/action/byod_portal.py | 2 +- .../cisco/ise/plugins/action/byod_portal_info.py | 2 +- .../ise/plugins/action/certificate_profile.py | 2 +- .../ise/plugins/action/certificate_profile_info.py | 2 +- .../plugins/action/certificate_template_info.py | 2 +- .../cisco/ise/plugins/action/configuration.py | 2 +- .../cisco/ise/plugins/action/configuration_info.py | 2 +- .../cisco/ise/plugins/action/connector_config.py | 250 - .../ise/plugins/action/connector_config_info.py | 101 - .../cisco/ise/plugins/action/csr_delete.py | 2 +- .../cisco/ise/plugins/action/csr_export_info.py | 2 +- .../cisco/ise/plugins/action/csr_generate.py | 2 +- .../plugins/action/csr_generate_intermediate_ca.py | 2 +- .../cisco/ise/plugins/action/csr_info.py | 4 +- .../cisco/ise/plugins/action/custom_attributes.py | 207 + .../ise/plugins/action/custom_attributes_info.py | 101 + .../ise/plugins/action/custom_attributes_rename.py | 90 + .../cisco/ise/plugins/action/dataconnect_info.py | 2 +- .../plugins/action/dataconnect_settings_info.py | 2 +- .../action/dataconnect_settings_password.py | 2 +- .../action/dataconnect_settings_password_expiry.py | 2 +- .../plugins/action/dataconnect_settings_status.py | 2 +- .../cisco/ise/plugins/action/deployment_info.py | 2 +- ...administration_authentication_reset_hitcount.py | 2 +- .../device_administration_authentication_rules.py | 2 +- ...ice_administration_authentication_rules_info.py | 2 +- ..._administration_authorization_reset_hitcount.py | 2 +- .../device_administration_authorization_rules.py | 2 +- ...vice_administration_authorization_rules_info.py | 2 +- .../device_administration_command_set_info.py | 2 +- .../action/device_administration_conditions.py | 2 +- ...tion_conditions_for_authentication_rule_info.py | 2 +- ...ation_conditions_for_authorization_rule_info.py | 2 +- ...dministration_conditions_for_policy_set_info.py | 2 +- .../device_administration_conditions_info.py | 2 +- ...on_dictionary_attributes_authentication_info.py | 2 +- ...ion_dictionary_attributes_authorization_info.py | 2 +- ...ration_dictionary_attributes_policy_set_info.py | 2 +- ...device_administration_global_exception_rules.py | 2 +- ...e_administration_global_exception_rules_info.py | 2 +- ...ration_global_exception_rules_reset_hitcount.py | 2 +- .../device_administration_identity_stores_info.py | 2 +- .../device_administration_local_exception_rules.py | 2 +- ...ce_administration_local_exception_rules_info.py | 2 +- ...tration_local_exception_rules_reset_hitcount.py | 2 +- .../device_administration_network_conditions.py | 2 +- ...evice_administration_network_conditions_info.py | 2 +- .../action/device_administration_policy_set.py | 2 +- .../device_administration_policy_set_info.py | 2 +- ...ice_administration_policy_set_reset_hitcount.py | 2 +- .../action/device_administration_profiles_info.py | 2 +- .../device_administration_service_names_info.py | 2 +- .../device_administration_time_date_conditions.py | 2 +- ...ice_administration_time_date_conditions_info.py | 2 +- .../plugins/action/dictionary_references_info.py | 90 - .../cisco/ise/plugins/action/downloadable_acl.py | 2 +- .../ise/plugins/action/downloadable_acl_info.py | 2 +- .../cisco/ise/plugins/action/duo_identity_sync.py | 235 + .../action/duo_identity_sync_cancel_info.py | 98 + .../ise/plugins/action/duo_identity_sync_info.py | 101 + .../ise/plugins/action/duo_identity_sync_status.py | 92 + .../plugins/action/duo_identitysync_sync_info.py | 98 + .../cisco/ise/plugins/action/duo_mfa.py | 232 + .../cisco/ise/plugins/action/duo_mfa_info.py | 101 + .../ise/plugins/action/duo_mfa_testconnection.py | 94 + .../cisco/ise/plugins/action/egress_matrix_cell.py | 2 +- .../egress_matrix_cell_bulk_monitor_status_info.py | 2 +- .../action/egress_matrix_cell_bulk_request.py | 2 +- .../plugins/action/egress_matrix_cell_clear_all.py | 2 +- .../ise/plugins/action/egress_matrix_cell_clone.py | 2 +- .../ise/plugins/action/egress_matrix_cell_info.py | 2 +- .../action/egress_matrix_cell_set_all_status.py | 2 +- .../cisco/ise/plugins/action/endpoint.py | 2 +- .../action/endpoint_bulk_monitor_status_info.py | 2 +- .../ise/plugins/action/endpoint_bulk_request.py | 2 +- .../ise/plugins/action/endpoint_certificate.py | 2 +- .../ise/plugins/action/endpoint_deregister.py | 2 +- .../action/endpoint_get_rejected_endpoints_info.py | 2 +- .../cisco/ise/plugins/action/endpoint_group.py | 2 +- .../ise/plugins/action/endpoint_group_info.py | 2 +- .../cisco/ise/plugins/action/endpoint_info.py | 2 +- .../cisco/ise/plugins/action/endpoint_register.py | 2 +- .../action/endpoint_release_rejected_endpoint.py | 2 +- .../cisco/ise/plugins/action/endpoints.py | 310 + .../cisco/ise/plugins/action/endpoints_bulk.py | 313 + .../ise/plugins/action/endpoints_bulk_info.py | 141 + .../plugins/action/endpoints_device_type_info.py | 90 + .../cisco/ise/plugins/action/endpoints_info.py | 141 + .../cisco/ise/plugins/action/endpoints_task.py | 130 + .../ise/plugins/action/external_radius_server.py | 2 +- .../plugins/action/external_radius_server_info.py | 2 +- .../cisco/ise/plugins/action/filter_policy.py | 2 +- .../cisco/ise/plugins/action/filter_policy_info.py | 2 +- .../ise/plugins/action/guest_location_info.py | 2 +- .../action/guest_smtp_notification_settings.py | 2 +- .../guest_smtp_notification_settings_info.py | 2 +- .../cisco/ise/plugins/action/guest_ssid.py | 2 +- .../cisco/ise/plugins/action/guest_ssid_info.py | 2 +- .../cisco/ise/plugins/action/guest_type.py | 2 +- .../cisco/ise/plugins/action/guest_type_email.py | 2 +- .../cisco/ise/plugins/action/guest_type_info.py | 2 +- .../cisco/ise/plugins/action/guest_type_sms.py | 2 +- .../cisco/ise/plugins/action/guest_user.py | 2 +- .../cisco/ise/plugins/action/guest_user_approve.py | 2 +- .../action/guest_user_bulk_monitor_status_info.py | 2 +- .../ise/plugins/action/guest_user_bulk_request.py | 2 +- .../action/guest_user_change_sponsor_password.py | 2 +- .../cisco/ise/plugins/action/guest_user_deny.py | 2 +- .../cisco/ise/plugins/action/guest_user_email.py | 2 +- .../cisco/ise/plugins/action/guest_user_info.py | 2 +- .../ise/plugins/action/guest_user_reinstate.py | 2 +- .../plugins/action/guest_user_reset_password.py | 2 +- .../cisco/ise/plugins/action/guest_user_sms.py | 2 +- .../cisco/ise/plugins/action/guest_user_suspend.py | 2 +- .../cisco/ise/plugins/action/hotpatch_info.py | 2 +- .../cisco/ise/plugins/action/hotpatch_install.py | 4 +- .../cisco/ise/plugins/action/hotpatch_rollback.py | 4 +- .../cisco/ise/plugins/action/hotspot_portal.py | 2 +- .../ise/plugins/action/hotspot_portal_info.py | 2 +- .../cisco/ise/plugins/action/id_store_sequence.py | 2 +- .../ise/plugins/action/id_store_sequence_info.py | 2 +- .../cisco/ise/plugins/action/identity_group.py | 2 +- .../ise/plugins/action/identity_group_info.py | 2 +- .../cisco/ise/plugins/action/internal_user.py | 2 +- .../cisco/ise/plugins/action/internal_user_info.py | 2 +- .../cisco/ise/plugins/action/ipsec.py | 257 + .../cisco/ise/plugins/action/ipsec_bulk.py | 90 + .../ise/plugins/action/ipsec_certificates_info.py | 90 + .../cisco/ise/plugins/action/ipsec_delete.py | 188 + .../cisco/ise/plugins/action/ipsec_delete_info.py | 100 + .../cisco/ise/plugins/action/ipsec_disable.py | 193 + .../cisco/ise/plugins/action/ipsec_disable_info.py | 100 + .../cisco/ise/plugins/action/ipsec_enable.py | 193 + .../cisco/ise/plugins/action/ipsec_enable_info.py | 100 + .../cisco/ise/plugins/action/ipsec_info.py | 143 + .../ise/plugins/action/ise_root_ca_regenerate.py | 2 +- .../action/licensing_connection_type_info.py | 2 +- .../plugins/action/licensing_eval_license_info.py | 2 +- .../licensing_feature_to_tier_mapping_info.py | 2 +- .../action/licensing_registration_create.py | 10 +- .../plugins/action/licensing_registration_info.py | 2 +- .../plugins/action/licensing_smart_state_create.py | 2 +- .../plugins/action/licensing_smart_state_info.py | 2 +- .../plugins/action/licensing_tier_state_create.py | 2 +- .../plugins/action/licensing_tier_state_info.py | 2 +- .../ise/plugins/action/mnt_account_status_info.py | 2 +- .../action/mnt_athentication_status_info.py | 2 +- .../action/mnt_authentication_status_info.py | 2 +- .../ise/plugins/action/mnt_failure_reasons_info.py | 2 +- .../action/mnt_session_active_count_info.py | 2 +- .../plugins/action/mnt_session_active_list_info.py | 2 +- .../plugins/action/mnt_session_auth_list_info.py | 2 +- .../ise/plugins/action/mnt_session_by_ip_info.py | 2 +- .../ise/plugins/action/mnt_session_by_mac_info.py | 2 +- .../plugins/action/mnt_session_by_nas_ip_info.py | 2 +- .../plugins/action/mnt_session_by_username_info.py | 2 +- .../ise/plugins/action/mnt_session_delete_all.py | 2 +- .../plugins/action/mnt_session_disconnect_info.py | 2 +- .../action/mnt_session_posture_count_info.py | 2 +- .../action/mnt_session_profiler_count_info.py | 2 +- .../action/mnt_session_reauthentication_info.py | 2 +- .../action/mnt_sessions_by_session_id_info.py | 2 +- .../cisco/ise/plugins/action/mnt_version_info.py | 2 +- .../cisco/ise/plugins/action/my_device_portal.py | 2 +- .../ise/plugins/action/my_device_portal_info.py | 2 +- .../plugins/action/native_supplicant_profile.py | 2 +- .../action/native_supplicant_profile_info.py | 2 +- .../action/network_access_authentication_rules.py | 2 +- .../network_access_authentication_rules_info.py | 2 +- ...k_access_authentication_rules_reset_hitcount.py | 2 +- .../action/network_access_authorization_rules.py | 2 +- .../network_access_authorization_rules_info.py | 2 +- ...rk_access_authorization_rules_reset_hitcount.py | 2 +- .../plugins/action/network_access_conditions.py | 2 +- ...cess_conditions_for_authentication_rule_info.py | 2 +- ...ccess_conditions_for_authorization_rule_info.py | 2 +- ...etwork_access_conditions_for_policy_set_info.py | 2 +- .../action/network_access_conditions_info.py | 2 +- .../plugins/action/network_access_dictionary.py | 2 +- .../action/network_access_dictionary_attribute.py | 2 +- .../network_access_dictionary_attribute_info.py | 2 +- ...ss_dictionary_attributes_authentication_info.py | 2 +- ...ess_dictionary_attributes_authorization_info.py | 2 +- ...access_dictionary_attributes_policy_set_info.py | 2 +- .../action/network_access_dictionary_info.py | 2 +- .../network_access_global_exception_rules.py | 2 +- .../network_access_global_exception_rules_info.py | 2 +- ...access_global_exception_rules_reset_hitcount.py | 2 +- .../action/network_access_identity_stores_info.py | 2 +- .../action/network_access_local_exception_rules.py | 2 +- .../network_access_local_exception_rules_info.py | 2 +- ...access_local_exception_rules_reset_hitcounts.py | 2 +- .../action/network_access_network_condition.py | 2 +- .../network_access_network_condition_info.py | 2 +- .../plugins/action/network_access_policy_set.py | 2 +- .../action/network_access_policy_set_info.py | 2 +- .../network_access_policy_set_reset_hitcount.py | 2 +- .../plugins/action/network_access_profiles_info.py | 2 +- .../action/network_access_security_groups_info.py | 2 +- .../action/network_access_service_name_info.py | 2 +- .../action/network_access_time_date_conditions.py | 2 +- .../network_access_time_date_conditions_info.py | 2 +- .../cisco/ise/plugins/action/network_device.py | 2 +- .../network_device_bulk_monitor_status_info.py | 2 +- .../plugins/action/network_device_bulk_request.py | 2 +- .../ise/plugins/action/network_device_group.py | 8 +- .../plugins/action/network_device_group_info.py | 2 +- .../ise/plugins/action/network_device_info.py | 2 +- .../cisco/ise/plugins/action/node_deployment.py | 2 +- .../ise/plugins/action/node_deployment_info.py | 2 +- .../ise/plugins/action/node_deployment_sync.py | 2 +- .../cisco/ise/plugins/action/node_group.py | 2 +- .../cisco/ise/plugins/action/node_group_info.py | 2 +- .../ise/plugins/action/node_group_node_create.py | 2 +- .../ise/plugins/action/node_group_node_delete.py | 2 +- .../ise/plugins/action/node_group_node_info.py | 2 +- .../cisco/ise/plugins/action/node_info.py | 2 +- .../plugins/action/node_primary_to_standalone.py | 2 +- .../cisco/ise/plugins/action/node_promotion.py | 2 +- .../plugins/action/node_replication_status_info.py | 2 +- .../plugins/action/node_secondary_to_primary.py | 2 +- .../action/node_services_interfaces_info.py | 2 +- .../action/node_services_profiler_probe_config.py | 2 +- .../node_services_profiler_probe_config_info.py | 2 +- .../plugins/action/node_services_sxp_interfaces.py | 2 +- .../action/node_services_sxp_interfaces_info.py | 2 +- .../plugins/action/node_standalone_to_primary.py | 2 +- .../cisco/ise/plugins/action/node_sync.py | 2 +- .../cisco/ise/plugins/action/pan_ha.py | 2 +- .../cisco/ise/plugins/action/pan_ha_info.py | 2 +- .../cisco/ise/plugins/action/pan_ha_update.py | 10 +- .../cisco/ise/plugins/action/patch_info.py | 2 +- .../cisco/ise/plugins/action/patch_install.py | 4 +- .../cisco/ise/plugins/action/patch_rollback.py | 2 +- .../plugins/action/personas_check_standalone.py | 2 +- .../ise/plugins/action/personas_export_certs.py | 2 +- .../ise/plugins/action/personas_promote_primary.py | 6 +- .../ise/plugins/action/personas_register_node.py | 2 +- .../ise/plugins/action/portal_global_setting.py | 2 +- .../plugins/action/portal_global_setting_info.py | 2 +- .../cisco/ise/plugins/action/portal_info.py | 2 +- .../cisco/ise/plugins/action/portal_theme.py | 2 +- .../cisco/ise/plugins/action/portal_theme_info.py | 2 +- .../ise/plugins/action/profiler_profile_info.py | 2 +- .../plugins/action/proxy_connection_settings.py | 2 +- .../action/proxy_connection_settings_info.py | 2 +- .../cisco/ise/plugins/action/px_grid_direct.py | 250 + .../action/px_grid_direct_dictionary_info.py | 90 + .../ise/plugins/action/px_grid_direct_info.py | 101 + .../ise/plugins/action/px_grid_direct_sync.py | 184 + .../ise/plugins/action/px_grid_direct_sync_info.py | 98 + .../action/px_grid_direct_test_connector.py | 100 + .../ise/plugins/action/px_grid_node_approve.py | 2 +- .../ise/plugins/action/px_grid_node_delete.py | 2 +- .../cisco/ise/plugins/action/px_grid_node_info.py | 2 +- .../action/px_grid_settings_auto_approve.py | 2 +- .../ise/plugins/action/pxgrid_access_secret.py | 2 +- .../ise/plugins/action/pxgrid_account_activate.py | 2 +- .../ise/plugins/action/pxgrid_account_create.py | 2 +- .../ise/plugins/action/pxgrid_authorization.py | 2 +- .../ise/plugins/action/pxgrid_bindings_info.py | 2 +- .../plugins/action/pxgrid_egress_matrices_info.py | 2 +- .../plugins/action/pxgrid_egress_policies_info.py | 2 +- .../plugins/action/pxgrid_endpoint_by_mac_info.py | 2 +- .../action/pxgrid_endpoints_by_os_type_info.py | 2 +- .../action/pxgrid_endpoints_by_type_info.py | 2 +- .../ise/plugins/action/pxgrid_endpoints_info.py | 2 +- .../ise/plugins/action/pxgrid_failures_info.py | 2 +- .../ise/plugins/action/pxgrid_healths_info.py | 2 +- .../ise/plugins/action/pxgrid_node_approve.py | 2 +- .../cisco/ise/plugins/action/pxgrid_node_delete.py | 2 +- .../cisco/ise/plugins/action/pxgrid_node_info.py | 2 +- .../ise/plugins/action/pxgrid_performances_info.py | 2 +- .../ise/plugins/action/pxgrid_profiles_info.py | 2 +- .../action/pxgrid_security_group_acls_info.py | 2 +- .../plugins/action/pxgrid_security_groups_info.py | 2 +- .../ise/plugins/action/pxgrid_service_lookup.py | 2 +- .../ise/plugins/action/pxgrid_service_register.py | 2 +- .../plugins/action/pxgrid_service_reregister.py | 2 +- .../plugins/action/pxgrid_service_unregister.py | 2 +- .../plugins/action/pxgrid_session_by_ip_info.py | 2 +- .../plugins/action/pxgrid_session_by_mac_info.py | 2 +- .../action/pxgrid_session_for_recovery_info.py | 2 +- .../ise/plugins/action/pxgrid_sessions_info.py | 2 +- .../plugins/action/pxgrid_settings_auto_approve.py | 2 +- .../action/pxgrid_user_group_by_username_info.py | 2 +- .../ise/plugins/action/pxgrid_user_groups_info.py | 2 +- .../ise/plugins/action/radius_server_sequence.py | 2 +- .../plugins/action/radius_server_sequence_info.py | 2 +- .../cisco/ise/plugins/action/renew_certificate.py | 2 +- .../cisco/ise/plugins/action/repository.py | 2 +- .../ise/plugins/action/repository_files_info.py | 2 +- .../cisco/ise/plugins/action/repository_info.py | 2 +- .../cisco/ise/plugins/action/reservation.py | 255 + .../cisco/ise/plugins/action/reservation_info.py | 133 + .../ise/plugins/action/resource_version_info.py | 2 +- .../cisco/ise/plugins/action/rest_id_store.py | 2 +- .../cisco/ise/plugins/action/rest_id_store_info.py | 2 +- .../ise/plugins/action/self_registered_portal.py | 2 +- .../plugins/action/self_registered_portal_info.py | 2 +- .../action/selfsigned_certificate_generate.py | 2 +- .../plugins/action/session_service_node_info.py | 2 +- .../cisco/ise/plugins/action/sg_acl.py | 2 +- .../action/sg_acl_bulk_monitor_status_info.py | 2 +- .../ise/plugins/action/sg_acl_bulk_request.py | 2 +- .../cisco/ise/plugins/action/sg_acl_info.py | 2 +- .../cisco/ise/plugins/action/sg_mapping.py | 2 +- .../action/sg_mapping_bulk_monitor_status_info.py | 2 +- .../ise/plugins/action/sg_mapping_bulk_request.py | 2 +- .../cisco/ise/plugins/action/sg_mapping_deploy.py | 2 +- .../ise/plugins/action/sg_mapping_deploy_all.py | 2 +- .../action/sg_mapping_deploy_status_info.py | 2 +- .../cisco/ise/plugins/action/sg_mapping_group.py | 2 +- .../sg_mapping_group_bulk_monitor_status_info.py | 2 +- .../action/sg_mapping_group_bulk_request.py | 2 +- .../ise/plugins/action/sg_mapping_group_deploy.py | 2 +- .../plugins/action/sg_mapping_group_deploy_all.py | 2 +- .../action/sg_mapping_group_deploy_status_info.py | 2 +- .../ise/plugins/action/sg_mapping_group_info.py | 2 +- .../cisco/ise/plugins/action/sg_mapping_info.py | 2 +- .../cisco/ise/plugins/action/sg_to_vn_to_vlan.py | 2 +- .../sg_to_vn_to_vlan_bulk_monitor_status_info.py | 2 +- .../action/sg_to_vn_to_vlan_bulk_request.py | 2 +- .../ise/plugins/action/sg_to_vn_to_vlan_info.py | 2 +- .../cisco/ise/plugins/action/sgt.py | 2 +- .../plugins/action/sgt_bulk_monitor_status_info.py | 2 +- .../cisco/ise/plugins/action/sgt_bulk_request.py | 2 +- .../cisco/ise/plugins/action/sgt_info.py | 2 +- .../cisco/ise/plugins/action/sms_provider_info.py | 2 +- .../cisco/ise/plugins/action/sponsor_group.py | 2 +- .../cisco/ise/plugins/action/sponsor_group_info.py | 2 +- .../plugins/action/sponsor_group_member_info.py | 2 +- .../cisco/ise/plugins/action/sponsor_portal.py | 2 +- .../ise/plugins/action/sponsor_portal_info.py | 2 +- .../ise/plugins/action/sponsored_guest_portal.py | 2 +- .../plugins/action/sponsored_guest_portal_info.py | 2 +- .../cisco/ise/plugins/action/stop_replication.py | 168 + .../ise/plugins/action/stop_replication_info.py | 90 + .../cisco/ise/plugins/action/subscriber.py | 18 +- .../cisco/ise/plugins/action/subscriber_bulk.py | 6 +- .../ise/plugins/action/subscriber_imsi_info.py | 2 +- .../cisco/ise/plugins/action/subscriber_info.py | 2 +- .../cisco/ise/plugins/action/support_bundle.py | 2 +- .../ise/plugins/action/support_bundle_download.py | 2 +- .../plugins/action/support_bundle_status_info.py | 2 +- .../cisco/ise/plugins/action/sxp_connections.py | 2 +- .../sxp_connections_bulk_monitor_status_info.py | 2 +- .../plugins/action/sxp_connections_bulk_request.py | 2 +- .../ise/plugins/action/sxp_connections_info.py | 2 +- .../cisco/ise/plugins/action/sxp_local_bindings.py | 2 +- .../sxp_local_bindings_bulk_monitor_status_info.py | 2 +- .../action/sxp_local_bindings_bulk_request.py | 2 +- .../ise/plugins/action/sxp_local_bindings_info.py | 2 +- .../cisco/ise/plugins/action/sxp_vpns.py | 2 +- .../action/sxp_vpns_bulk_monitor_status_info.py | 2 +- .../ise/plugins/action/sxp_vpns_bulk_request.py | 2 +- .../cisco/ise/plugins/action/sxp_vpns_info.py | 2 +- .../cisco/ise/plugins/action/system_certificate.py | 2 +- .../plugins/action/system_certificate_create.py | 2 +- .../action/system_certificate_export_info.py | 4 +- .../plugins/action/system_certificate_import.py | 2 +- .../ise/plugins/action/system_certificate_info.py | 4 +- .../plugins/action/system_config_version_info.py | 2 +- .../ise/plugins/action/tacacs_command_sets.py | 2 +- .../ise/plugins/action/tacacs_command_sets_info.py | 2 +- .../ise/plugins/action/tacacs_external_servers.py | 2 +- .../plugins/action/tacacs_external_servers_info.py | 2 +- .../cisco/ise/plugins/action/tacacs_profile.py | 2 +- .../ise/plugins/action/tacacs_profile_info.py | 2 +- .../ise/plugins/action/tacacs_server_sequence.py | 2 +- .../plugins/action/tacacs_server_sequence_info.py | 2 +- .../cisco/ise/plugins/action/tasks_info.py | 2 +- .../cisco/ise/plugins/action/telemetry_info.py | 2 +- .../cisco/ise/plugins/action/test_connector.py | 98 - .../plugins/action/threat_vulnerabilities_clear.py | 2 +- .../plugins/action/transport_gateway_settings.py | 2 +- .../action/transport_gateway_settings_info.py | 2 +- .../ise/plugins/action/trusted_certificate.py | 2 +- .../action/trusted_certificate_export_info.py | 2 +- .../plugins/action/trusted_certificate_import.py | 2 +- .../ise/plugins/action/trusted_certificate_info.py | 4 +- .../cisco/ise/plugins/action/trustsec_nbar_app.py | 256 + .../ise/plugins/action/trustsec_nbar_app_info.py | 141 + .../ise/plugins/action/trustsec_sg_vn_mapping.py | 266 + .../action/trustsec_sg_vn_mapping_bulk_create.py | 88 + .../action/trustsec_sg_vn_mapping_bulk_delete.py | 88 + .../action/trustsec_sg_vn_mapping_bulk_update.py | 88 + .../plugins/action/trustsec_sg_vn_mapping_info.py | 141 + .../cisco/ise/plugins/action/trustsec_vn.py | 256 + .../ise/plugins/action/trustsec_vn_bulk_create.py | 88 + .../ise/plugins/action/trustsec_vn_bulk_delete.py | 88 + .../ise/plugins/action/trustsec_vn_bulk_update.py | 88 + .../cisco/ise/plugins/action/trustsec_vn_info.py | 141 + .../ise/plugins/action/trustsec_vn_vlan_mapping.py | 268 + .../action/trustsec_vn_vlan_mapping_bulk_create.py | 88 + .../action/trustsec_vn_vlan_mapping_bulk_delete.py | 88 + .../action/trustsec_vn_vlan_mapping_bulk_update.py | 88 + .../action/trustsec_vn_vlan_mapping_info.py | 141 + .../cisco/ise/plugins/action/upgrade_proceed.py | 171 + .../ise/plugins/action/upgrade_proceed_info.py | 87 + .../ise/plugins/action/upgrade_stage_cancel.py | 171 + .../plugins/action/upgrade_stage_cancel_info.py | 92 + .../ise/plugins/action/upgrade_stage_start.py | 172 + .../ise/plugins/action/upgrade_stage_start_info.py | 92 + .../cisco/ise/plugins/action/user_equipment.py | 253 + .../ise/plugins/action/user_equipment_bulk.py | 90 + .../cisco/ise/plugins/action/user_equipment_csv.py | 86 + .../ise/plugins/action/user_equipment_imei_info.py | 98 + .../ise/plugins/action/user_equipment_info.py | 141 + .../action/user_equipment_subscriber_info.py | 98 + .../cisco/ise/plugins/modules/aci_bindings_info.py | 2 +- .../cisco/ise/plugins/modules/aci_settings.py | 2 +- .../cisco/ise/plugins/modules/aci_settings_info.py | 2 +- .../ise/plugins/modules/aci_test_connectivity.py | 2 +- .../ise/plugins/modules/active_directories_info.py | 56 + .../cisco/ise/plugins/modules/active_directory.py | 2 +- .../plugins/modules/active_directory_add_groups.py | 2 +- .../active_directory_groups_by_domain_info.py | 2 +- .../ise/plugins/modules/active_directory_info.py | 2 +- ...ctive_directory_is_user_member_of_group_info.py | 2 +- .../modules/active_directory_join_domain.py | 2 +- .../active_directory_join_domain_with_all_nodes.py | 2 +- .../modules/active_directory_leave_domain.py | 2 +- ...active_directory_leave_domain_with_all_nodes.py | 2 +- .../active_directory_trusted_domains_info.py | 2 +- .../modules/active_directory_user_groups_info.py | 2 +- .../cisco/ise/plugins/modules/ad_groups_info.py | 60 + .../cisco/ise/plugins/modules/admin_user_info.py | 2 +- .../cisco/ise/plugins/modules/allowed_protocols.py | 2 +- .../ise/plugins/modules/allowed_protocols_info.py | 2 +- .../ise/plugins/modules/anc_endpoint_apply.py | 2 +- .../anc_endpoint_bulk_monitor_status_info.py | 2 +- .../plugins/modules/anc_endpoint_bulk_request.py | 2 +- .../ise/plugins/modules/anc_endpoint_clear.py | 2 +- .../cisco/ise/plugins/modules/anc_endpoint_info.py | 2 +- .../cisco/ise/plugins/modules/anc_policy.py | 2 +- .../modules/anc_policy_bulk_monitor_status_info.py | 2 +- .../ise/plugins/modules/anc_policy_bulk_request.py | 2 +- .../cisco/ise/plugins/modules/anc_policy_info.py | 2 +- .../ise/plugins/modules/authorization_profile.py | 2 +- .../plugins/modules/authorization_profile_info.py | 2 +- .../cisco/ise/plugins/modules/backup_cancel.py | 2 +- .../cisco/ise/plugins/modules/backup_config.py | 2 +- .../ise/plugins/modules/backup_last_status_info.py | 2 +- .../cisco/ise/plugins/modules/backup_restore.py | 2 +- .../ise/plugins/modules/backup_schedule_config.py | 2 +- .../modules/backup_schedule_config_update.py | 2 +- .../ise/plugins/modules/bind_signed_certificate.py | 2 +- .../cisco/ise/plugins/modules/byod_portal.py | 2 +- .../cisco/ise/plugins/modules/byod_portal_info.py | 2 +- .../ise/plugins/modules/certificate_profile.py | 2 +- .../plugins/modules/certificate_profile_info.py | 2 +- .../plugins/modules/certificate_template_info.py | 2 +- .../cisco/ise/plugins/modules/configuration.py | 2 +- .../ise/plugins/modules/configuration_info.py | 2 +- .../cisco/ise/plugins/modules/connector_config.py | 305 - .../ise/plugins/modules/connector_config_info.py | 111 - .../cisco/ise/plugins/modules/csr_delete.py | 2 +- .../cisco/ise/plugins/modules/csr_export_info.py | 2 +- .../cisco/ise/plugins/modules/csr_generate.py | 2 +- .../modules/csr_generate_intermediate_ca.py | 2 +- .../cisco/ise/plugins/modules/csr_info.py | 13 +- .../cisco/ise/plugins/modules/custom_attributes.py | 73 + .../ise/plugins/modules/custom_attributes_info.py | 67 + .../plugins/modules/custom_attributes_rename.py | 55 + .../cisco/ise/plugins/modules/dataconnect_info.py | 2 +- .../plugins/modules/dataconnect_settings_info.py | 2 +- .../modules/dataconnect_settings_password.py | 2 +- .../dataconnect_settings_password_expiry.py | 2 +- .../plugins/modules/dataconnect_settings_status.py | 2 +- .../cisco/ise/plugins/modules/deployment_info.py | 2 +- ...administration_authentication_reset_hitcount.py | 2 +- .../device_administration_authentication_rules.py | 2 +- ...ice_administration_authentication_rules_info.py | 2 +- ..._administration_authorization_reset_hitcount.py | 2 +- .../device_administration_authorization_rules.py | 2 +- ...vice_administration_authorization_rules_info.py | 2 +- .../device_administration_command_set_info.py | 2 +- .../modules/device_administration_conditions.py | 2 +- ...tion_conditions_for_authentication_rule_info.py | 2 +- ...ation_conditions_for_authorization_rule_info.py | 2 +- ...dministration_conditions_for_policy_set_info.py | 2 +- .../device_administration_conditions_info.py | 2 +- ...on_dictionary_attributes_authentication_info.py | 2 +- ...ion_dictionary_attributes_authorization_info.py | 2 +- ...ration_dictionary_attributes_policy_set_info.py | 2 +- ...device_administration_global_exception_rules.py | 2 +- ...e_administration_global_exception_rules_info.py | 2 +- ...ration_global_exception_rules_reset_hitcount.py | 2 +- .../device_administration_identity_stores_info.py | 2 +- .../device_administration_local_exception_rules.py | 2 +- ...ce_administration_local_exception_rules_info.py | 2 +- ...tration_local_exception_rules_reset_hitcount.py | 2 +- .../device_administration_network_conditions.py | 2 +- ...evice_administration_network_conditions_info.py | 2 +- .../modules/device_administration_policy_set.py | 2 +- .../device_administration_policy_set_info.py | 2 +- ...ice_administration_policy_set_reset_hitcount.py | 2 +- .../modules/device_administration_profiles_info.py | 2 +- .../device_administration_service_names_info.py | 2 +- .../device_administration_time_date_conditions.py | 2 +- ...ice_administration_time_date_conditions_info.py | 2 +- .../plugins/modules/dictionary_references_info.py | 49 - .../cisco/ise/plugins/modules/downloadable_acl.py | 2 +- .../ise/plugins/modules/downloadable_acl_info.py | 2 +- .../cisco/ise/plugins/modules/duo_identity_sync.py | 195 + .../modules/duo_identity_sync_cancel_info.py | 54 + .../ise/plugins/modules/duo_identity_sync_info.py | 94 + .../plugins/modules/duo_identity_sync_status.py | 107 + .../plugins/modules/duo_identitysync_sync_info.py | 54 + .../cisco/ise/plugins/modules/duo_mfa.py | 161 + .../cisco/ise/plugins/modules/duo_mfa_info.py | 84 + .../ise/plugins/modules/duo_mfa_testconnection.py | 84 + .../ise/plugins/modules/egress_matrix_cell.py | 2 +- .../egress_matrix_cell_bulk_monitor_status_info.py | 2 +- .../modules/egress_matrix_cell_bulk_request.py | 2 +- .../modules/egress_matrix_cell_clear_all.py | 2 +- .../plugins/modules/egress_matrix_cell_clone.py | 2 +- .../ise/plugins/modules/egress_matrix_cell_info.py | 2 +- .../modules/egress_matrix_cell_set_all_status.py | 2 +- .../cisco/ise/plugins/modules/endpoint.py | 2 +- .../modules/endpoint_bulk_monitor_status_info.py | 2 +- .../ise/plugins/modules/endpoint_bulk_request.py | 2 +- .../ise/plugins/modules/endpoint_certificate.py | 2 +- .../ise/plugins/modules/endpoint_deregister.py | 2 +- .../endpoint_get_rejected_endpoints_info.py | 2 +- .../cisco/ise/plugins/modules/endpoint_group.py | 2 +- .../ise/plugins/modules/endpoint_group_info.py | 2 +- .../cisco/ise/plugins/modules/endpoint_info.py | 2 +- .../cisco/ise/plugins/modules/endpoint_register.py | 2 +- .../modules/endpoint_release_rejected_endpoint.py | 2 +- .../cisco/ise/plugins/modules/endpoints.py | 237 + .../cisco/ise/plugins/modules/endpoints_bulk.py | 352 + .../ise/plugins/modules/endpoints_bulk_info.py | 168 + .../plugins/modules/endpoints_device_type_info.py | 54 + .../cisco/ise/plugins/modules/endpoints_info.py | 168 + .../cisco/ise/plugins/modules/endpoints_task.py | 137 + .../ise/plugins/modules/external_radius_server.py | 2 +- .../plugins/modules/external_radius_server_info.py | 2 +- .../cisco/ise/plugins/modules/filter_policy.py | 2 +- .../ise/plugins/modules/filter_policy_info.py | 2 +- .../ise/plugins/modules/guest_location_info.py | 2 +- .../modules/guest_smtp_notification_settings.py | 2 +- .../guest_smtp_notification_settings_info.py | 2 +- .../cisco/ise/plugins/modules/guest_ssid.py | 2 +- .../cisco/ise/plugins/modules/guest_ssid_info.py | 2 +- .../cisco/ise/plugins/modules/guest_type.py | 2 +- .../cisco/ise/plugins/modules/guest_type_email.py | 2 +- .../cisco/ise/plugins/modules/guest_type_info.py | 2 +- .../cisco/ise/plugins/modules/guest_type_sms.py | 2 +- .../cisco/ise/plugins/modules/guest_user.py | 2 +- .../ise/plugins/modules/guest_user_approve.py | 2 +- .../modules/guest_user_bulk_monitor_status_info.py | 2 +- .../ise/plugins/modules/guest_user_bulk_request.py | 2 +- .../modules/guest_user_change_sponsor_password.py | 2 +- .../cisco/ise/plugins/modules/guest_user_deny.py | 2 +- .../cisco/ise/plugins/modules/guest_user_email.py | 2 +- .../cisco/ise/plugins/modules/guest_user_info.py | 2 +- .../ise/plugins/modules/guest_user_reinstate.py | 2 +- .../plugins/modules/guest_user_reset_password.py | 2 +- .../cisco/ise/plugins/modules/guest_user_sms.py | 2 +- .../ise/plugins/modules/guest_user_suspend.py | 2 +- .../cisco/ise/plugins/modules/hotpatch_info.py | 2 +- .../cisco/ise/plugins/modules/hotpatch_install.py | 9 +- .../cisco/ise/plugins/modules/hotpatch_rollback.py | 9 +- .../cisco/ise/plugins/modules/hotspot_portal.py | 2 +- .../ise/plugins/modules/hotspot_portal_info.py | 2 +- .../cisco/ise/plugins/modules/id_store_sequence.py | 2 +- .../ise/plugins/modules/id_store_sequence_info.py | 2 +- .../cisco/ise/plugins/modules/identity_group.py | 2 +- .../ise/plugins/modules/identity_group_info.py | 2 +- .../cisco/ise/plugins/modules/internal_user.py | 2 +- .../ise/plugins/modules/internal_user_info.py | 2 +- .../cisco/ise/plugins/modules/ipsec.py | 236 + .../cisco/ise/plugins/modules/ipsec_bulk.py | 143 + .../ise/plugins/modules/ipsec_certificates_info.py | 55 + .../cisco/ise/plugins/modules/ipsec_delete.py | 88 + .../cisco/ise/plugins/modules/ipsec_delete_info.py | 90 + .../cisco/ise/plugins/modules/ipsec_disable.py | 98 + .../ise/plugins/modules/ipsec_disable_info.py | 90 + .../cisco/ise/plugins/modules/ipsec_enable.py | 98 + .../cisco/ise/plugins/modules/ipsec_enable_info.py | 90 + .../cisco/ise/plugins/modules/ipsec_info.py | 193 + .../ise/plugins/modules/ise_root_ca_regenerate.py | 2 +- .../modules/licensing_connection_type_info.py | 4 +- .../plugins/modules/licensing_eval_license_info.py | 4 +- .../licensing_feature_to_tier_mapping_info.py | 8 +- .../modules/licensing_registration_create.py | 13 +- .../plugins/modules/licensing_registration_info.py | 12 +- .../modules/licensing_smart_state_create.py | 4 +- .../plugins/modules/licensing_smart_state_info.py | 2 +- .../plugins/modules/licensing_tier_state_create.py | 14 +- .../plugins/modules/licensing_tier_state_info.py | 8 +- .../ise/plugins/modules/mnt_account_status_info.py | 2 +- .../modules/mnt_athentication_status_info.py | 2 +- .../modules/mnt_authentication_status_info.py | 2 +- .../plugins/modules/mnt_failure_reasons_info.py | 2 +- .../modules/mnt_session_active_count_info.py | 2 +- .../modules/mnt_session_active_list_info.py | 2 +- .../plugins/modules/mnt_session_auth_list_info.py | 2 +- .../ise/plugins/modules/mnt_session_by_ip_info.py | 2 +- .../ise/plugins/modules/mnt_session_by_mac_info.py | 2 +- .../plugins/modules/mnt_session_by_nas_ip_info.py | 2 +- .../modules/mnt_session_by_username_info.py | 2 +- .../ise/plugins/modules/mnt_session_delete_all.py | 2 +- .../plugins/modules/mnt_session_disconnect_info.py | 2 +- .../modules/mnt_session_posture_count_info.py | 2 +- .../modules/mnt_session_profiler_count_info.py | 2 +- .../modules/mnt_session_reauthentication_info.py | 2 +- .../modules/mnt_sessions_by_session_id_info.py | 2 +- .../cisco/ise/plugins/modules/mnt_version_info.py | 2 +- .../cisco/ise/plugins/modules/my_device_portal.py | 2 +- .../ise/plugins/modules/my_device_portal_info.py | 2 +- .../plugins/modules/native_supplicant_profile.py | 2 +- .../modules/native_supplicant_profile_info.py | 2 +- .../modules/network_access_authentication_rules.py | 2 +- .../network_access_authentication_rules_info.py | 2 +- ...k_access_authentication_rules_reset_hitcount.py | 2 +- .../modules/network_access_authorization_rules.py | 2 +- .../network_access_authorization_rules_info.py | 2 +- ...rk_access_authorization_rules_reset_hitcount.py | 2 +- .../plugins/modules/network_access_conditions.py | 2 +- ...cess_conditions_for_authentication_rule_info.py | 2 +- ...ccess_conditions_for_authorization_rule_info.py | 2 +- ...etwork_access_conditions_for_policy_set_info.py | 2 +- .../modules/network_access_conditions_info.py | 2 +- .../plugins/modules/network_access_dictionary.py | 2 +- .../modules/network_access_dictionary_attribute.py | 2 +- .../network_access_dictionary_attribute_info.py | 2 +- ...ss_dictionary_attributes_authentication_info.py | 2 +- ...ess_dictionary_attributes_authorization_info.py | 2 +- ...access_dictionary_attributes_policy_set_info.py | 2 +- .../modules/network_access_dictionary_info.py | 2 +- .../network_access_global_exception_rules.py | 2 +- .../network_access_global_exception_rules_info.py | 2 +- ...access_global_exception_rules_reset_hitcount.py | 2 +- .../modules/network_access_identity_stores_info.py | 2 +- .../network_access_local_exception_rules.py | 2 +- .../network_access_local_exception_rules_info.py | 2 +- ...access_local_exception_rules_reset_hitcounts.py | 2 +- .../modules/network_access_network_condition.py | 17 +- .../network_access_network_condition_info.py | 2 +- .../plugins/modules/network_access_policy_set.py | 2 +- .../modules/network_access_policy_set_info.py | 2 +- .../network_access_policy_set_reset_hitcount.py | 2 +- .../modules/network_access_profiles_info.py | 2 +- .../modules/network_access_security_groups_info.py | 2 +- .../modules/network_access_service_name_info.py | 2 +- .../modules/network_access_time_date_conditions.py | 2 +- .../network_access_time_date_conditions_info.py | 2 +- .../cisco/ise/plugins/modules/network_device.py | 2 +- .../network_device_bulk_monitor_status_info.py | 2 +- .../plugins/modules/network_device_bulk_request.py | 2 +- .../ise/plugins/modules/network_device_group.py | 12 +- .../plugins/modules/network_device_group_info.py | 6 +- .../ise/plugins/modules/network_device_info.py | 2 +- .../cisco/ise/plugins/modules/node_deployment.py | 2 +- .../ise/plugins/modules/node_deployment_info.py | 2 +- .../ise/plugins/modules/node_deployment_sync.py | 4 +- .../cisco/ise/plugins/modules/node_group.py | 14 +- .../cisco/ise/plugins/modules/node_group_info.py | 12 +- .../ise/plugins/modules/node_group_node_create.py | 2 +- .../ise/plugins/modules/node_group_node_delete.py | 2 +- .../ise/plugins/modules/node_group_node_info.py | 2 +- .../cisco/ise/plugins/modules/node_info.py | 2 +- .../plugins/modules/node_primary_to_standalone.py | 2 +- .../cisco/ise/plugins/modules/node_promotion.py | 2 +- .../modules/node_replication_status_info.py | 2 +- .../plugins/modules/node_secondary_to_primary.py | 2 +- .../modules/node_services_interfaces_info.py | 2 +- .../modules/node_services_profiler_probe_config.py | 2 +- .../node_services_profiler_probe_config_info.py | 2 +- .../modules/node_services_sxp_interfaces.py | 2 +- .../modules/node_services_sxp_interfaces_info.py | 2 +- .../plugins/modules/node_standalone_to_primary.py | 2 +- .../cisco/ise/plugins/modules/node_sync.py | 2 +- .../cisco/ise/plugins/modules/pan_ha.py | 2 +- .../cisco/ise/plugins/modules/pan_ha_info.py | 8 +- .../cisco/ise/plugins/modules/pan_ha_update.py | 2 +- .../cisco/ise/plugins/modules/patch_info.py | 2 +- .../cisco/ise/plugins/modules/patch_install.py | 9 +- .../cisco/ise/plugins/modules/patch_rollback.py | 5 +- .../plugins/modules/personas_promote_primary.py | 17 +- .../ise/plugins/modules/portal_global_setting.py | 2 +- .../plugins/modules/portal_global_setting_info.py | 2 +- .../cisco/ise/plugins/modules/portal_info.py | 2 +- .../cisco/ise/plugins/modules/portal_theme.py | 2 +- .../cisco/ise/plugins/modules/portal_theme_info.py | 2 +- .../ise/plugins/modules/profiler_profile_info.py | 2 +- .../plugins/modules/proxy_connection_settings.py | 2 +- .../modules/proxy_connection_settings_info.py | 2 +- .../cisco/ise/plugins/modules/px_grid_direct.py | 276 + .../modules/px_grid_direct_dictionary_info.py | 49 + .../ise/plugins/modules/px_grid_direct_info.py | 106 + .../ise/plugins/modules/px_grid_direct_sync.py | 66 + .../plugins/modules/px_grid_direct_sync_info.py | 59 + .../modules/px_grid_direct_test_connector.py | 92 + .../ise/plugins/modules/px_grid_node_approve.py | 2 +- .../ise/plugins/modules/px_grid_node_delete.py | 2 +- .../cisco/ise/plugins/modules/px_grid_node_info.py | 2 +- .../modules/px_grid_settings_auto_approve.py | 2 +- .../ise/plugins/modules/pxgrid_access_secret.py | 2 +- .../ise/plugins/modules/pxgrid_account_activate.py | 2 +- .../ise/plugins/modules/pxgrid_account_create.py | 2 +- .../ise/plugins/modules/pxgrid_authorization.py | 2 +- .../ise/plugins/modules/pxgrid_bindings_info.py | 2 +- .../plugins/modules/pxgrid_egress_matrices_info.py | 2 +- .../plugins/modules/pxgrid_egress_policies_info.py | 2 +- .../plugins/modules/pxgrid_endpoint_by_mac_info.py | 2 +- .../modules/pxgrid_endpoints_by_os_type_info.py | 2 +- .../modules/pxgrid_endpoints_by_type_info.py | 2 +- .../ise/plugins/modules/pxgrid_endpoints_info.py | 2 +- .../ise/plugins/modules/pxgrid_failures_info.py | 2 +- .../ise/plugins/modules/pxgrid_healths_info.py | 2 +- .../ise/plugins/modules/pxgrid_node_approve.py | 2 +- .../ise/plugins/modules/pxgrid_node_delete.py | 2 +- .../cisco/ise/plugins/modules/pxgrid_node_info.py | 2 +- .../plugins/modules/pxgrid_performances_info.py | 2 +- .../ise/plugins/modules/pxgrid_profiles_info.py | 2 +- .../modules/pxgrid_security_group_acls_info.py | 2 +- .../plugins/modules/pxgrid_security_groups_info.py | 2 +- .../ise/plugins/modules/pxgrid_service_lookup.py | 2 +- .../ise/plugins/modules/pxgrid_service_register.py | 2 +- .../plugins/modules/pxgrid_service_reregister.py | 2 +- .../plugins/modules/pxgrid_service_unregister.py | 2 +- .../plugins/modules/pxgrid_session_by_ip_info.py | 2 +- .../plugins/modules/pxgrid_session_by_mac_info.py | 2 +- .../modules/pxgrid_session_for_recovery_info.py | 2 +- .../ise/plugins/modules/pxgrid_sessions_info.py | 2 +- .../modules/pxgrid_settings_auto_approve.py | 2 +- .../modules/pxgrid_user_group_by_username_info.py | 2 +- .../ise/plugins/modules/pxgrid_user_groups_info.py | 2 +- .../ise/plugins/modules/radius_server_sequence.py | 2 +- .../plugins/modules/radius_server_sequence_info.py | 2 +- .../cisco/ise/plugins/modules/renew_certificate.py | 4 +- .../cisco/ise/plugins/modules/repository.py | 2 +- .../ise/plugins/modules/repository_files_info.py | 2 +- .../cisco/ise/plugins/modules/repository_info.py | 2 +- .../cisco/ise/plugins/modules/reservation.py | 114 + .../cisco/ise/plugins/modules/reservation_info.py | 97 + .../ise/plugins/modules/resource_version_info.py | 2 +- .../cisco/ise/plugins/modules/rest_id_store.py | 2 +- .../ise/plugins/modules/rest_id_store_info.py | 2 +- .../ise/plugins/modules/self_registered_portal.py | 2 +- .../plugins/modules/self_registered_portal_info.py | 2 +- .../modules/selfsigned_certificate_generate.py | 2 +- .../plugins/modules/session_service_node_info.py | 2 +- .../cisco/ise/plugins/modules/sg_acl.py | 2 +- .../modules/sg_acl_bulk_monitor_status_info.py | 2 +- .../ise/plugins/modules/sg_acl_bulk_request.py | 2 +- .../cisco/ise/plugins/modules/sg_acl_info.py | 2 +- .../cisco/ise/plugins/modules/sg_mapping.py | 2 +- .../modules/sg_mapping_bulk_monitor_status_info.py | 2 +- .../ise/plugins/modules/sg_mapping_bulk_request.py | 2 +- .../cisco/ise/plugins/modules/sg_mapping_deploy.py | 2 +- .../ise/plugins/modules/sg_mapping_deploy_all.py | 2 +- .../modules/sg_mapping_deploy_status_info.py | 2 +- .../cisco/ise/plugins/modules/sg_mapping_group.py | 2 +- .../sg_mapping_group_bulk_monitor_status_info.py | 2 +- .../modules/sg_mapping_group_bulk_request.py | 2 +- .../ise/plugins/modules/sg_mapping_group_deploy.py | 2 +- .../plugins/modules/sg_mapping_group_deploy_all.py | 2 +- .../modules/sg_mapping_group_deploy_status_info.py | 2 +- .../ise/plugins/modules/sg_mapping_group_info.py | 2 +- .../cisco/ise/plugins/modules/sg_mapping_info.py | 2 +- .../cisco/ise/plugins/modules/sg_to_vn_to_vlan.py | 2 +- .../sg_to_vn_to_vlan_bulk_monitor_status_info.py | 2 +- .../modules/sg_to_vn_to_vlan_bulk_request.py | 2 +- .../ise/plugins/modules/sg_to_vn_to_vlan_info.py | 2 +- .../cisco/ise/plugins/modules/sgt.py | 2 +- .../modules/sgt_bulk_monitor_status_info.py | 2 +- .../cisco/ise/plugins/modules/sgt_bulk_request.py | 2 +- .../cisco/ise/plugins/modules/sgt_info.py | 2 +- .../cisco/ise/plugins/modules/sms_provider_info.py | 2 +- .../cisco/ise/plugins/modules/sponsor_group.py | 2 +- .../ise/plugins/modules/sponsor_group_info.py | 2 +- .../plugins/modules/sponsor_group_member_info.py | 2 +- .../cisco/ise/plugins/modules/sponsor_portal.py | 2 +- .../ise/plugins/modules/sponsor_portal_info.py | 2 +- .../ise/plugins/modules/sponsored_guest_portal.py | 2 +- .../plugins/modules/sponsored_guest_portal_info.py | 2 +- .../cisco/ise/plugins/modules/stop_replication.py | 68 + .../ise/plugins/modules/stop_replication_info.py | 51 + .../cisco/ise/plugins/modules/subscriber.py | 2 +- .../cisco/ise/plugins/modules/subscriber_bulk.py | 2 +- .../ise/plugins/modules/subscriber_imsi_info.py | 2 +- .../cisco/ise/plugins/modules/subscriber_info.py | 2 +- .../cisco/ise/plugins/modules/support_bundle.py | 2 +- .../ise/plugins/modules/support_bundle_download.py | 2 +- .../plugins/modules/support_bundle_status_info.py | 2 +- .../cisco/ise/plugins/modules/sxp_connections.py | 2 +- .../sxp_connections_bulk_monitor_status_info.py | 2 +- .../modules/sxp_connections_bulk_request.py | 2 +- .../ise/plugins/modules/sxp_connections_info.py | 2 +- .../ise/plugins/modules/sxp_local_bindings.py | 2 +- .../sxp_local_bindings_bulk_monitor_status_info.py | 2 +- .../modules/sxp_local_bindings_bulk_request.py | 2 +- .../ise/plugins/modules/sxp_local_bindings_info.py | 2 +- .../cisco/ise/plugins/modules/sxp_vpns.py | 2 +- .../modules/sxp_vpns_bulk_monitor_status_info.py | 2 +- .../ise/plugins/modules/sxp_vpns_bulk_request.py | 2 +- .../cisco/ise/plugins/modules/sxp_vpns_info.py | 2 +- .../ise/plugins/modules/system_certificate.py | 2 +- .../plugins/modules/system_certificate_create.py | 2 +- .../modules/system_certificate_export_info.py | 20 +- .../plugins/modules/system_certificate_import.py | 2 +- .../ise/plugins/modules/system_certificate_info.py | 13 +- .../plugins/modules/system_config_version_info.py | 2 +- .../ise/plugins/modules/tacacs_command_sets.py | 2 +- .../plugins/modules/tacacs_command_sets_info.py | 2 +- .../ise/plugins/modules/tacacs_external_servers.py | 2 +- .../modules/tacacs_external_servers_info.py | 2 +- .../cisco/ise/plugins/modules/tacacs_profile.py | 2 +- .../ise/plugins/modules/tacacs_profile_info.py | 2 +- .../ise/plugins/modules/tacacs_server_sequence.py | 2 +- .../plugins/modules/tacacs_server_sequence_info.py | 2 +- .../cisco/ise/plugins/modules/tasks_info.py | 2 +- .../cisco/ise/plugins/modules/telemetry_info.py | 2 +- .../cisco/ise/plugins/modules/test_connector.py | 87 - .../modules/threat_vulnerabilities_clear.py | 2 +- .../plugins/modules/transport_gateway_settings.py | 4 +- .../modules/transport_gateway_settings_info.py | 4 +- .../ise/plugins/modules/trusted_certificate.py | 2 +- .../modules/trusted_certificate_export_info.py | 2 +- .../plugins/modules/trusted_certificate_import.py | 2 +- .../plugins/modules/trusted_certificate_info.py | 7 +- .../cisco/ise/plugins/modules/trustsec_nbar_app.py | 141 + .../ise/plugins/modules/trustsec_nbar_app_info.py | 150 + .../ise/plugins/modules/trustsec_sg_vn_mapping.py | 134 + .../modules/trustsec_sg_vn_mapping_bulk_create.py | 87 + .../modules/trustsec_sg_vn_mapping_bulk_delete.py | 59 + .../modules/trustsec_sg_vn_mapping_bulk_update.py | 87 + .../plugins/modules/trustsec_sg_vn_mapping_info.py | 144 + .../cisco/ise/plugins/modules/trustsec_vn.py | 119 + .../ise/plugins/modules/trustsec_vn_bulk_create.py | 75 + .../ise/plugins/modules/trustsec_vn_bulk_delete.py | 59 + .../ise/plugins/modules/trustsec_vn_bulk_update.py | 75 + .../cisco/ise/plugins/modules/trustsec_vn_info.py | 140 + .../plugins/modules/trustsec_vn_vlan_mapping.py | 138 + .../trustsec_vn_vlan_mapping_bulk_create.py | 93 + .../trustsec_vn_vlan_mapping_bulk_delete.py | 59 + .../trustsec_vn_vlan_mapping_bulk_update.py | 93 + .../modules/trustsec_vn_vlan_mapping_info.py | 148 + .../cisco/ise/plugins/modules/upgrade_proceed.py | 69 + .../ise/plugins/modules/upgrade_proceed_info.py | 53 + .../ise/plugins/modules/upgrade_stage_cancel.py | 73 + .../plugins/modules/upgrade_stage_cancel_info.py | 64 + .../ise/plugins/modules/upgrade_stage_start.py | 77 + .../plugins/modules/upgrade_stage_start_info.py | 64 + .../cisco/ise/plugins/modules/user_equipment.py | 98 + .../ise/plugins/modules/user_equipment_bulk.py | 75 + .../ise/plugins/modules/user_equipment_csv.py | 49 + .../plugins/modules/user_equipment_imei_info.py | 53 + .../ise/plugins/modules/user_equipment_info.py | 122 + .../modules/user_equipment_subscriber_info.py | 68 + .../cisco/ise/plugins/plugin_utils/ise.py | 2 +- ansible_collections/cisco/ise/requirements.txt | 2 +- ansible_collections/cisco/meraki/FILES.json | 19 +- ansible_collections/cisco/meraki/MANIFEST.json | 4 +- ansible_collections/cisco/meraki/README.md | 2 +- .../cisco/meraki/changelogs/changelog.yaml | 9 +- .../cisco/meraki/playbooks/test.yml | 100 +- .../plugins/action/networks_appliance_vlans.py | 36 +- ...ions_appliance_vpn_third_party_vpnpeers_info.py | 2 +- .../plugins/modules/networks_syslog_servers.py | 1 - .../cisco/meraki/tests/sanity/ignore-2.18.txt | 1 + ansible_collections/cisco/nxos/.flake8 | 67 + .../cisco/nxos/.github/workflows/ack.yml | 15 - .../cisco/nxos/.github/workflows/check_label.yml | 11 + .../cisco/nxos/.github/workflows/codecoverage.yml | 3 +- .../cisco/nxos/.github/workflows/draft_release.yml | 18 + .../nxos/.github/workflows/integration-test.yml | 38 + .../cisco/nxos/.github/workflows/push.yml | 27 - .../cisco/nxos/.github/workflows/release.yml | 4 +- .../cisco/nxos/.github/workflows/tests.yml | 22 +- .../cisco/nxos/.pre-commit-config.yaml | 11 +- ansible_collections/cisco/nxos/CHANGELOG.rst | 73 + ansible_collections/cisco/nxos/FILES.json | 10734 +++++++++---------- ansible_collections/cisco/nxos/MANIFEST.json | 6 +- ansible_collections/cisco/nxos/README.md | 12 +- .../cisco/nxos/changelogs/changelog.yaml | 68 + .../docs/cisco.nxos.nxos_acl_interfaces_module.rst | 146 +- .../nxos/docs/cisco.nxos.nxos_acls_module.rst | 76 +- .../docs/cisco.nxos.nxos_bfd_interfaces_module.rst | 48 +- .../cisco.nxos.nxos_bgp_address_family_module.rst | 70 +- .../docs/cisco.nxos.nxos_bgp_global_module.rst | 54 +- ...xos.nxos_bgp_neighbor_address_family_module.rst | 38 +- .../nxos/docs/cisco.nxos.nxos_command_module.rst | 24 +- .../nxos/docs/cisco.nxos.nxos_config_module.rst | 20 +- .../docs/cisco.nxos.nxos_devicealias_module.rst | 24 +- .../nxos/docs/cisco.nxos.nxos_evpn_vni_module.rst | 4 +- .../nxos/docs/cisco.nxos.nxos_facts_module.rst | 10 +- .../docs/cisco.nxos.nxos_fc_interfaces_module.rst | 94 +- ...sco.nxos.nxos_gir_profile_management_module.rst | 4 +- .../cisco.nxos.nxos_hsrp_interfaces_module.rst | 36 +- .../docs/cisco.nxos.nxos_igmp_interface_module.rst | 4 +- .../docs/cisco.nxos.nxos_install_os_module.rst | 3 +- .../docs/cisco.nxos.nxos_interfaces_module.rst | 60 +- .../docs/cisco.nxos.nxos_l2_interfaces_module.rst | 54 +- .../docs/cisco.nxos.nxos_l3_interfaces_module.rst | 70 +- .../cisco.nxos.nxos_lacp_interfaces_module.rst | 40 +- .../docs/cisco.nxos.nxos_lag_interfaces_module.rst | 40 +- .../cisco.nxos.nxos_lldp_interfaces_module.rst | 28 +- .../docs/cisco.nxos.nxos_logging_global_module.rst | 4 +- .../nxos/docs/cisco.nxos.nxos_logging_module.rst | 458 - .../nxos/docs/cisco.nxos.nxos_ntp_auth_module.rst | 224 - .../docs/cisco.nxos.nxos_ntp_global_module.rst | 44 +- .../cisco/nxos/docs/cisco.nxos.nxos_ntp_module.rst | 314 - .../docs/cisco.nxos.nxos_ntp_options_module.rst | 192 - .../cisco.nxos.nxos_ospf_interfaces_module.rst | 183 +- .../nxos/docs/cisco.nxos.nxos_ospfv2_module.rst | 278 +- .../nxos/docs/cisco.nxos.nxos_ospfv3_module.rst | 242 +- .../docs/cisco.nxos.nxos_route_maps_module.rst | 128 +- .../docs/cisco.nxos.nxos_snmp_server_module.rst | 90 +- .../docs/cisco.nxos.nxos_static_routes_module.rst | 126 +- .../nxos/docs/cisco.nxos.nxos_system_module.rst | 8 +- .../nxos/docs/cisco.nxos.nxos_telemetry_module.rst | 82 +- .../nxos/docs/cisco.nxos.nxos_user_module.rst | 4 +- .../nxos/docs/cisco.nxos.nxos_vlans_module.rst | 42 +- .../nxos/docs/cisco.nxos.nxos_vrf_af_module.rst | 53 +- .../cisco/nxos/docs/cisco.nxos.nxos_vrf_module.rst | 38 +- .../nxos/docs/cisco.nxos.nxos_vsan_module.rst | 38 +- .../docs/cisco.nxos.nxos_zone_zoneset_module.rst | 96 +- ansible_collections/cisco/nxos/meta/runtime.yml | 363 +- ansible_collections/cisco/nxos/platform_guide.rst | 170 + .../cisco/nxos/plugins/action/aaa_server.py | 43 +- .../cisco/nxos/plugins/action/aaa_server_host.py | 43 +- .../cisco/nxos/plugins/action/acl.py | 43 +- .../cisco/nxos/plugins/action/acl_interface.py | 43 +- .../cisco/nxos/plugins/action/acl_interfaces.py | 43 +- .../cisco/nxos/plugins/action/acls.py | 43 +- .../cisco/nxos/plugins/action/banner.py | 43 +- .../cisco/nxos/plugins/action/bfd_global.py | 43 +- .../cisco/nxos/plugins/action/bfd_interfaces.py | 43 +- .../cisco/nxos/plugins/action/bgp.py | 43 +- .../nxos/plugins/action/bgp_address_family.py | 43 +- .../cisco/nxos/plugins/action/bgp_af.py | 43 +- .../cisco/nxos/plugins/action/bgp_global.py | 43 +- .../cisco/nxos/plugins/action/bgp_neighbor.py | 43 +- .../plugins/action/bgp_neighbor_address_family.py | 43 +- .../cisco/nxos/plugins/action/bgp_neighbor_af.py | 43 +- .../cisco/nxos/plugins/action/command.py | 43 +- .../cisco/nxos/plugins/action/config.py | 43 +- .../cisco/nxos/plugins/action/devicealias.py | 43 +- .../cisco/nxos/plugins/action/evpn_global.py | 43 +- .../cisco/nxos/plugins/action/evpn_vni.py | 43 +- .../cisco/nxos/plugins/action/facts.py | 43 +- .../cisco/nxos/plugins/action/feature.py | 43 +- .../cisco/nxos/plugins/action/file_copy.py | 43 +- .../cisco/nxos/plugins/action/gir.py | 43 +- .../nxos/plugins/action/gir_profile_management.py | 43 +- .../cisco/nxos/plugins/action/hostname.py | 43 +- .../cisco/nxos/plugins/action/hsrp.py | 43 +- .../cisco/nxos/plugins/action/hsrp_interfaces.py | 43 +- .../cisco/nxos/plugins/action/igmp.py | 43 +- .../cisco/nxos/plugins/action/igmp_interface.py | 43 +- .../cisco/nxos/plugins/action/igmp_snooping.py | 43 +- .../cisco/nxos/plugins/action/install_os.py | 43 +- .../cisco/nxos/plugins/action/interface.py | 43 +- .../cisco/nxos/plugins/action/interface_ospf.py | 43 +- .../cisco/nxos/plugins/action/interfaces.py | 43 +- .../cisco/nxos/plugins/action/l2_interface.py | 43 +- .../cisco/nxos/plugins/action/l2_interfaces.py | 43 +- .../cisco/nxos/plugins/action/l3_interface.py | 43 +- .../cisco/nxos/plugins/action/l3_interfaces.py | 43 +- .../cisco/nxos/plugins/action/lacp.py | 43 +- .../cisco/nxos/plugins/action/lacp_interfaces.py | 43 +- .../cisco/nxos/plugins/action/lag_interfaces.py | 43 +- .../cisco/nxos/plugins/action/linkagg.py | 43 +- .../cisco/nxos/plugins/action/lldp.py | 43 +- .../cisco/nxos/plugins/action/lldp_global.py | 43 +- .../cisco/nxos/plugins/action/lldp_interfaces.py | 43 +- .../cisco/nxos/plugins/action/logging.py | 43 +- .../cisco/nxos/plugins/action/logging_global.py | 43 +- .../cisco/nxos/plugins/action/ntp.py | 43 +- .../cisco/nxos/plugins/action/ntp_auth.py | 43 +- .../cisco/nxos/plugins/action/ntp_global.py | 43 +- .../cisco/nxos/plugins/action/ntp_options.py | 43 +- .../cisco/nxos/plugins/action/nxapi.py | 43 +- .../cisco/nxos/plugins/action/nxos.py | 43 +- .../cisco/nxos/plugins/action/ospf.py | 43 +- .../cisco/nxos/plugins/action/ospf_interfaces.py | 43 +- .../cisco/nxos/plugins/action/ospf_vrf.py | 43 +- .../cisco/nxos/plugins/action/ospfv2.py | 43 +- .../cisco/nxos/plugins/action/ospfv3.py | 43 +- .../cisco/nxos/plugins/action/overlay_global.py | 43 +- .../cisco/nxos/plugins/action/pim.py | 43 +- .../cisco/nxos/plugins/action/pim_interface.py | 43 +- .../cisco/nxos/plugins/action/pim_rp_address.py | 43 +- .../cisco/nxos/plugins/action/ping.py | 43 +- .../cisco/nxos/plugins/action/prefix_lists.py | 43 +- .../cisco/nxos/plugins/action/reboot.py | 43 +- .../cisco/nxos/plugins/action/rollback.py | 43 +- .../cisco/nxos/plugins/action/route_maps.py | 43 +- .../cisco/nxos/plugins/action/rpm.py | 43 +- .../cisco/nxos/plugins/action/smu.py | 43 +- .../cisco/nxos/plugins/action/snapshot.py | 43 +- .../cisco/nxos/plugins/action/snmp_community.py | 43 +- .../cisco/nxos/plugins/action/snmp_contact.py | 43 +- .../cisco/nxos/plugins/action/snmp_host.py | 43 +- .../cisco/nxos/plugins/action/snmp_location.py | 43 +- .../cisco/nxos/plugins/action/snmp_server.py | 43 +- .../cisco/nxos/plugins/action/snmp_traps.py | 43 +- .../cisco/nxos/plugins/action/snmp_user.py | 43 +- .../cisco/nxos/plugins/action/static_route.py | 43 +- .../cisco/nxos/plugins/action/static_routes.py | 43 +- .../cisco/nxos/plugins/action/system.py | 43 +- .../cisco/nxos/plugins/action/telemetry.py | 43 +- .../cisco/nxos/plugins/action/udld.py | 43 +- .../cisco/nxos/plugins/action/udld_interface.py | 43 +- .../cisco/nxos/plugins/action/user.py | 43 +- .../cisco/nxos/plugins/action/vlan.py | 43 +- .../cisco/nxos/plugins/action/vlans.py | 43 +- .../cisco/nxos/plugins/action/vpc.py | 43 +- .../cisco/nxos/plugins/action/vpc_interface.py | 43 +- .../cisco/nxos/plugins/action/vrf.py | 43 +- .../cisco/nxos/plugins/action/vrf_af.py | 43 +- .../cisco/nxos/plugins/action/vrf_interface.py | 43 +- .../cisco/nxos/plugins/action/vrrp.py | 43 +- .../cisco/nxos/plugins/action/vsan.py | 43 +- .../cisco/nxos/plugins/action/vtp_domain.py | 43 +- .../cisco/nxos/plugins/action/vtp_password.py | 43 +- .../cisco/nxos/plugins/action/vtp_version.py | 43 +- .../cisco/nxos/plugins/action/vxlan_vtep.py | 43 +- .../cisco/nxos/plugins/action/vxlan_vtep_vni.py | 43 +- .../cisco/nxos/plugins/action/zone_zoneset.py | 43 +- .../cisco/nxos/plugins/cliconf/nxos.py | 6 + .../nxos/config/acl_interfaces/acl_interfaces.py | 19 +- .../network/nxos/config/interfaces/interfaces.py | 4 +- .../nxos/config/l2_interfaces/l2_interfaces.py | 2 +- .../nxos/facts/acl_interfaces/acl_interfaces.py | 6 +- .../module_utils/network/nxos/facts/acls/acls.py | 11 +- .../module_utils/network/nxos/facts/legacy/base.py | 67 +- .../nxos/facts/lldp_interfaces/lldp_interfaces.py | 6 +- .../network/nxos/rm_templates/ospfv2.py | 28 - .../network/nxos/utils/telemetry/telemetry.py | 7 +- .../nxos/plugins/modules/nxos_aaa_server_host.py | 5 +- .../nxos/plugins/modules/nxos_acl_interfaces.py | 147 +- .../cisco/nxos/plugins/modules/nxos_acls.py | 76 +- .../nxos/plugins/modules/nxos_bfd_interfaces.py | 48 +- .../plugins/modules/nxos_bgp_address_family.py | 72 +- .../cisco/nxos/plugins/modules/nxos_bgp_global.py | 56 +- .../modules/nxos_bgp_neighbor_address_family.py | 44 +- .../cisco/nxos/plugins/modules/nxos_command.py | 25 +- .../cisco/nxos/plugins/modules/nxos_config.py | 58 +- .../cisco/nxos/plugins/modules/nxos_devicealias.py | 58 +- .../cisco/nxos/plugins/modules/nxos_evpn_vni.py | 8 +- .../cisco/nxos/plugins/modules/nxos_facts.py | 10 +- .../nxos/plugins/modules/nxos_fc_interfaces.py | 98 +- .../plugins/modules/nxos_gir_profile_management.py | 4 +- .../cisco/nxos/plugins/modules/nxos_hostname.py | 1 - .../nxos/plugins/modules/nxos_hsrp_interfaces.py | 37 +- .../nxos/plugins/modules/nxos_igmp_interface.py | 18 +- .../cisco/nxos/plugins/modules/nxos_install_os.py | 7 +- .../cisco/nxos/plugins/modules/nxos_interfaces.py | 62 +- .../nxos/plugins/modules/nxos_l2_interfaces.py | 54 +- .../nxos/plugins/modules/nxos_l3_interfaces.py | 70 +- .../nxos/plugins/modules/nxos_lacp_interfaces.py | 40 +- .../nxos/plugins/modules/nxos_lag_interfaces.py | 40 +- .../nxos/plugins/modules/nxos_lldp_interfaces.py | 30 +- .../cisco/nxos/plugins/modules/nxos_logging.py | 940 -- .../nxos/plugins/modules/nxos_logging_global.py | 4 +- .../cisco/nxos/plugins/modules/nxos_ntp.py | 446 - .../cisco/nxos/plugins/modules/nxos_ntp_auth.py | 336 - .../cisco/nxos/plugins/modules/nxos_ntp_global.py | 44 +- .../cisco/nxos/plugins/modules/nxos_ntp_options.py | 173 - .../nxos/plugins/modules/nxos_ospf_interfaces.py | 197 +- .../cisco/nxos/plugins/modules/nxos_ospfv2.py | 278 +- .../cisco/nxos/plugins/modules/nxos_ospfv3.py | 278 +- .../cisco/nxos/plugins/modules/nxos_route_maps.py | 128 +- .../cisco/nxos/plugins/modules/nxos_snmp_server.py | 90 +- .../nxos/plugins/modules/nxos_static_routes.py | 126 +- .../cisco/nxos/plugins/modules/nxos_system.py | 8 +- .../cisco/nxos/plugins/modules/nxos_telemetry.py | 84 +- .../cisco/nxos/plugins/modules/nxos_user.py | 4 +- .../cisco/nxos/plugins/modules/nxos_vlans.py | 42 +- .../cisco/nxos/plugins/modules/nxos_vrf.py | 46 +- .../cisco/nxos/plugins/modules/nxos_vrf_af.py | 74 +- .../cisco/nxos/plugins/modules/nxos_vsan.py | 62 +- .../nxos/plugins/modules/nxos_zone_zoneset.py | 226 +- .../cisco/nxos/plugins/netconf/nxos.py | 1 - ansible_collections/cisco/nxos/pyproject.toml | 6 +- .../cisco/nxos/test-requirements.txt | 10 +- ansible_collections/cisco/nxos/tests/__init__.py | 0 ansible_collections/cisco/nxos/tests/config.yml | 2 +- .../cisco/nxos/tests/integration/__init__.py | 0 .../cisco/nxos/tests/integration/labs/single.yaml | 241 + .../tests/common/remove_config.yaml | 6 + .../nxos_acl_interfaces/tests/common/rtt.yml | 3 + .../nxos_facts/tests/common/interface_facts.yaml | 62 + .../targets/nxos_file_copy/tests/cli/sanity.yaml | 12 +- .../targets/nxos_logging/defaults/main.yaml | 2 - .../targets/nxos_logging/meta/main.yaml | 3 - .../targets/nxos_logging/tasks/cli.yaml | 31 - .../targets/nxos_logging/tasks/main.yaml | 19 - .../targets/nxos_logging/tasks/nxapi.yaml | 31 - .../targets/nxos_logging/tests/common/basic.yaml | 485 - .../targets/nxos_logging/tests/common/purge.yaml | 111 - .../targets/nxos_ntp/defaults/main.yaml | 2 - .../integration/targets/nxos_ntp/meta/main.yml | 3 - .../integration/targets/nxos_ntp/tasks/cli.yaml | 31 - .../integration/targets/nxos_ntp/tasks/main.yaml | 12 - .../integration/targets/nxos_ntp/tasks/nxapi.yaml | 31 - .../targets/nxos_ntp/tests/common/sanity.yaml | 114 - .../targets/nxos_ntp_auth/defaults/main.yaml | 2 - .../targets/nxos_ntp_auth/meta/main.yml | 3 - .../targets/nxos_ntp_auth/tasks/cli.yaml | 31 - .../targets/nxos_ntp_auth/tasks/main.yaml | 10 - .../targets/nxos_ntp_auth/tasks/nxapi.yaml | 31 - .../targets/nxos_ntp_auth/tests/common/sanity.yaml | 133 - .../targets/nxos_ntp_options/defaults/main.yaml | 2 - .../targets/nxos_ntp_options/meta/main.yml | 3 - .../targets/nxos_ntp_options/tasks/cli.yaml | 31 - .../targets/nxos_ntp_options/tasks/main.yaml | 10 - .../targets/nxos_ntp_options/tasks/nxapi.yaml | 31 - .../nxos_ntp_options/tests/common/sanity.yaml | 99 - .../nxos/tests/integration/test_integration.py | 43 + .../cisco/nxos/tests/sanity/ignore-2.10.txt | 34 - .../cisco/nxos/tests/sanity/ignore-2.11.txt | 34 - .../cisco/nxos/tests/sanity/ignore-2.12.txt | 36 - .../cisco/nxos/tests/sanity/ignore-2.13.txt | 1 - .../cisco/nxos/tests/sanity/ignore-2.18.txt | 1 + .../cisco/nxos/tests/sanity/ignore-2.9.txt | 55 - .../cisco/nxos/tests/unit/compat/__init__.py | 0 .../cisco/nxos/tests/unit/compat/mock.py | 127 - .../cisco/nxos/tests/unit/compat/unittest.py | 41 - .../cisco/nxos/tests/unit/mock/path.py | 4 +- .../cisco/nxos/tests/unit/mock/procenv.py | 5 +- .../tests/unit/modules/network/nxos/test_nxos.py | 15 +- .../network/nxos/test_nxos_acl_interfaces.py | 3 +- .../unit/modules/network/nxos/test_nxos_acls.py | 48 +- .../unit/modules/network/nxos/test_nxos_banner.py | 3 +- .../modules/network/nxos/test_nxos_bfd_global.py | 3 +- .../network/nxos/test_nxos_bfd_interfaces.py | 2 +- .../network/nxos/test_nxos_bgp_address_family.py | 4 +- .../modules/network/nxos/test_nxos_bgp_global.py | 6 +- .../nxos/test_nxos_bgp_neighbor_address_family.py | 4 +- .../network/nxos/test_nxos_bgp_templates.py | 2 +- .../unit/modules/network/nxos/test_nxos_command.py | 3 +- .../unit/modules/network/nxos/test_nxos_config.py | 3 +- .../modules/network/nxos/test_nxos_devicealias.py | 3 +- .../modules/network/nxos/test_nxos_evpn_global.py | 3 +- .../modules/network/nxos/test_nxos_evpn_vni.py | 3 +- .../network/nxos/test_nxos_fc_interfaces.py | 2 +- .../unit/modules/network/nxos/test_nxos_feature.py | 3 +- .../modules/network/nxos/test_nxos_hostname.py | 2 +- .../unit/modules/network/nxos/test_nxos_hsrp.py | 3 +- .../network/nxos/test_nxos_hsrp_interfaces.py | 2 +- .../modules/network/nxos/test_nxos_interfaces.py | 4 +- .../network/nxos/test_nxos_l3_interfaces.py | 2 +- .../network/nxos/test_nxos_lacp_interfaces.py | 2 +- .../network/nxos/test_nxos_lldp_interfaces.py | 3 +- .../network/nxos/test_nxos_logging_global.py | 8 +- .../modules/network/nxos/test_nxos_ntp_global.py | 4 +- .../unit/modules/network/nxos/test_nxos_nxapi.py | 3 +- .../network/nxos/test_nxos_ospf_interfaces.py | 2 +- .../unit/modules/network/nxos/test_nxos_ospfv2.py | 2 +- .../unit/modules/network/nxos/test_nxos_ospfv3.py | 2 +- .../network/nxos/test_nxos_overlay_global.py | 3 +- .../unit/modules/network/nxos/test_nxos_pim.py | 3 +- .../network/nxos/test_nxos_pim_interface.py | 3 +- .../network/nxos/test_nxos_pim_rp_address.py | 3 +- .../unit/modules/network/nxos/test_nxos_ping.py | 3 +- .../modules/network/nxos/test_nxos_prefix_lists.py | 2 +- .../modules/network/nxos/test_nxos_route_maps.py | 2 +- .../modules/network/nxos/test_nxos_snmp_server.py | 23 +- .../network/nxos/test_nxos_static_routes.py | 2 +- .../unit/modules/network/nxos/test_nxos_system.py | 3 +- .../modules/network/nxos/test_nxos_telemetry.py | 149 +- .../unit/modules/network/nxos/test_nxos_user.py | 3 +- .../unit/modules/network/nxos/test_nxos_vlans.py | 3 +- .../unit/modules/network/nxos/test_nxos_vpc.py | 3 +- .../network/nxos/test_nxos_vpc_interface.py | 3 +- .../unit/modules/network/nxos/test_nxos_vrf.py | 3 +- .../unit/modules/network/nxos/test_nxos_vrf_af.py | 3 +- .../unit/modules/network/nxos/test_nxos_vsan.py | 3 +- .../modules/network/nxos/test_nxos_vxlan_vtep.py | 3 +- .../network/nxos/test_nxos_vxlan_vtep_vni.py | 3 +- .../modules/network/nxos/test_nxos_zone_zoneset.py | 3 +- .../cisco/nxos/tests/unit/modules/utils.py | 8 +- ansible_collections/cisco/nxos/tox-ansible.ini | 10 + ansible_collections/cisco/nxos/tox.ini | 31 - ansible_collections/cloud/common/.ansible-lint | 8 + .../cloud/common/.github/workflows/changelog.yaml | 21 + .../cloud/common/.github/workflows/changelog.yml | 22 - .../common/.github/workflows/galaxy-import.yaml | 15 + .../integration-tests-kubernetes-core.yaml | 141 + .../cloud/common/.github/workflows/linters.yaml | 25 + .../cloud/common/.github/workflows/linters.yml | 16 - .../common/.github/workflows/sanity-tests.yaml | 15 + .../common/.github/workflows/sanity_and_units.yml | 172 - .../common/.github/workflows/unit-ansible-2.9.yml | 63 - .../cloud/common/.github/workflows/unit-tests.yaml | 15 + ansible_collections/cloud/common/CHANGELOG.rst | 14 + ansible_collections/cloud/common/FILES.json | 76 +- ansible_collections/cloud/common/MANIFEST.json | 4 +- ansible_collections/cloud/common/README.md | 2 +- .../cloud/common/changelogs/changelog.yaml | 12 + .../cloud/common/changelogs/config.yaml | 32 +- ansible_collections/cloud/common/meta/runtime.yml | 2 +- .../cloud/common/plugins/lookup/turbo_demo.py | 4 +- .../common/plugins/module_utils/turbo/common.py | 12 +- .../common/plugins/module_utils/turbo/module.py | 6 +- .../common/plugins/module_utils/turbo/server.py | 15 +- .../cloud/common/plugins/modules/turbo_fail.py | 2 +- .../common/plugins/plugin_utils/turbo/lookup.py | 8 +- ansible_collections/cloud/common/tests/config.yml | 2 +- .../cloud/common/tests/sanity/ignore-2.17.txt | 1 + .../unit/plugins/module_utils/turbo/conftest.py | 1 - .../unit/plugins/module_utils/turbo/test_module.py | 1 - .../module_utils/turbo/test_turbo_module.py | 20 +- ansible_collections/cloud/common/tox.ini | 28 +- .../community/aws/.github/workflows/docs-pr.yml | 3 +- .../community/aws/.github/workflows/sanity.yml | 1 + ansible_collections/community/aws/CHANGELOG.rst | 52 + ansible_collections/community/aws/FILES.json | 87 +- ansible_collections/community/aws/MANIFEST.json | 8 +- ansible_collections/community/aws/README.md | 6 +- .../community/aws/changelogs/changelog.yaml | 120 + .../community/aws/docs/docsite/links.yml | 2 +- .../community/aws/docs/docsite/rst/CHANGELOG.rst | 52 + ansible_collections/community/aws/meta/runtime.yml | 2 +- .../community/aws/plugins/module_utils/common.py | 2 +- .../plugins/modules/autoscaling_launch_config.py | 2 +- .../community/aws/plugins/modules/ecs_cluster.py | 6 +- .../community/aws/plugins/modules/ecs_service.py | 4 +- .../community/aws/plugins/modules/efs.py | 3 +- .../aws/plugins/modules/elb_network_lb.py | 22 + .../aws/plugins/modules/glue_connection.py | 8 +- .../integration/targets/config/tasks/main.yaml | 14 +- .../tasks/iam_instance_role.yml | 20 +- .../targets/ecs_cluster/tasks/20_ecs_service.yml | 16 +- .../targets/eks_cluster/tasks/full_test.yml | 10 +- .../tasks/create_eks_cluster.yml | 2 +- .../eks_fargate_profile/tasks/full_test.yml | 38 +- .../integration/targets/eks_nodegroup/aliases | 3 +- .../targets/eks_nodegroup/tasks/dependecies.yml | 2 +- .../targets/eks_nodegroup/tasks/full_test.yml | 70 +- .../tasks/test_modifying_nlb_listeners.yml | 80 + .../targets/elb_target/tasks/lambda_target.yml | 2 +- .../community/aws/tests/sanity/ignore-2.10.txt | 0 .../community/aws/tests/sanity/ignore-2.11.txt | 0 .../community/aws/tests/sanity/ignore-2.12.txt | 0 .../community/aws/tests/sanity/ignore-2.13.txt | 0 .../community/aws/tests/sanity/ignore-2.9.txt | 0 .../community/azure/.azure-pipelines/README.md | 3 - .../azure/.azure-pipelines/azure-pipelines.yml | 61 - .../.azure-pipelines/scripts/aggregate-coverage.sh | 20 - .../.azure-pipelines/scripts/combine-coverage.py | 60 - .../.azure-pipelines/scripts/process-results.sh | 24 - .../.azure-pipelines/scripts/publish-codecov.sh | 27 - .../.azure-pipelines/scripts/report-coverage.sh | 15 - .../azure/.azure-pipelines/scripts/run-tests.sh | 34 - .../azure/.azure-pipelines/scripts/time-command.py | 25 - .../azure/.azure-pipelines/templates/coverage.yml | 39 - .../azure/.azure-pipelines/templates/matrix.yml | 55 - .../azure/.azure-pipelines/templates/test.yml | 45 - ansible_collections/community/azure/CHANGELOG.rst | 108 - ansible_collections/community/azure/COPYING | 675 -- ansible_collections/community/azure/FILES.json | 334 - ansible_collections/community/azure/MANIFEST.json | 32 - ansible_collections/community/azure/README.md | 39 - .../community/azure/changelogs/changelog.yaml | 228 - .../community/azure/changelogs/config.yaml | 29 - .../community/azure/changelogs/fragments/.keep | 0 .../community/azure/meta/action_groups.yml | 27 - .../community/azure/meta/runtime.yml | 596 - ansible_collections/community/azure/shippable.yml | 37 - .../community/azure/tests/.gitignore | 1 - .../community/azure/tests/sanity/ignore-2.10.txt | 2 - .../community/azure/tests/sanity/ignore-2.11.txt | 2 - .../community/azure/tests/sanity/ignore-2.12.txt | 2 - .../community/azure/tests/sanity/ignore-2.13.txt | 2 - .../community/azure/tests/sanity/ignore-2.14.txt | 2 - .../community/azure/tests/utils/ado/ado.sh | 124 - .../community/azure/tests/utils/shippable/azure.sh | 19 - .../azure/tests/utils/shippable/check_matrix.py | 120 - .../community/azure/tests/utils/shippable/cloud.sh | 19 - .../azure/tests/utils/shippable/sanity.sh | 27 - .../azure/tests/utils/shippable/shippable.sh | 203 - .../azure/tests/utils/shippable/timing.py | 16 - .../azure/tests/utils/shippable/timing.sh | 5 - .../community/ciscosmb/.github/workflows/CI.yml | 81 +- .../ciscosmb/.github/workflows/FastCI.yml | 74 +- .../community/ciscosmb/CHANGELOG.rst | 52 +- ansible_collections/community/ciscosmb/FILES.json | 20 +- .../community/ciscosmb/MANIFEST.json | 4 +- ansible_collections/community/ciscosmb/README.md | 9 +- .../community/ciscosmb/changelogs/changelog.yaml | 38 + .../community/ciscosmb/changelogs/fragments/.keep | 2 +- .../community/ciscosmb/plugins/modules/facts.py | 13 +- .../ciscosmb/plugins/terminal/ciscosmb.py | 3 - .../community/ciscosmb/tests/unit/compat/mock.py | 6 +- .../ciscosmb/test_ciscosmb_facts-SG500-52-K9.py | 7 + .../crypto/.azure-pipelines/azure-pipelines.yml | 2 +- .../crypto/.github/workflows/ansible-test.yml | 3 + ansible_collections/community/crypto/CHANGELOG.md | 617 +- ansible_collections/community/crypto/CHANGELOG.rst | 94 +- ansible_collections/community/crypto/FILES.json | 332 +- ansible_collections/community/crypto/MANIFEST.json | 4 +- ansible_collections/community/crypto/README.md | 2 + .../community/crypto/changelogs/changelog.yaml | 67 + .../community/crypto/changelogs/config.yaml | 3 + .../community/crypto/meta/runtime.yml | 1 + .../community/crypto/plugins/doc_fragments/acme.py | 178 + .../crypto/plugins/module_utils/acme/acme.py | 91 +- .../module_utils/acme/backend_cryptography.py | 97 +- .../module_utils/acme/backend_openssl_cli.py | 95 +- .../crypto/plugins/module_utils/acme/backends.py | 102 + .../crypto/plugins/module_utils/acme/challenges.py | 12 +- .../crypto/plugins/module_utils/acme/orders.py | 6 +- .../crypto/plugins/module_utils/acme/utils.py | 58 + .../crypto/plugins/module_utils/argspec.py | 75 + .../crypto/plugins/module_utils/crypto/math.py | 31 +- .../crypto/module_backends/certificate.py | 4 +- .../crypto/module_backends/certificate_entrust.py | 14 +- .../crypto/module_backends/certificate_info.py | 5 +- .../crypto/module_backends/certificate_ownca.py | 20 +- .../module_backends/certificate_selfsigned.py | 20 +- .../module_utils/crypto/module_backends/common.py | 33 +- .../module_utils/crypto/module_backends/csr.py | 4 +- .../crypto/module_backends/privatekey.py | 4 +- .../crypto/module_backends/privatekey_convert.py | 6 +- .../crypto/plugins/module_utils/crypto/support.py | 92 +- .../plugins/module_utils/openssh/certificate.py | 18 +- .../community/crypto/plugins/module_utils/time.py | 171 + .../crypto/plugins/modules/acme_account.py | 22 +- .../crypto/plugins/modules/acme_account_info.py | 22 +- .../crypto/plugins/modules/acme_ari_info.py | 142 + .../crypto/plugins/modules/acme_certificate.py | 192 +- .../modules/acme_certificate_deactivate_authz.py | 119 + .../modules/acme_certificate_renewal_info.py | 245 + .../plugins/modules/acme_certificate_revoke.py | 18 +- .../plugins/modules/acme_challenge_cert_helper.py | 8 +- .../crypto/plugins/modules/acme_inspect.py | 19 +- .../crypto/plugins/modules/ecs_certificate.py | 4 +- .../crypto/plugins/modules/get_certificate.py | 8 +- .../plugins/modules/x509_certificate_info.py | 8 +- .../community/crypto/plugins/modules/x509_crl.py | 5 +- .../acme_certificate_deactivate_authz/aliases | 10 + .../meta/main.yml | 8 + .../tasks/impl.yml | 154 + .../tasks/main.yml | 40 + .../tests/validate.yml | 17 + .../targets/acme_certificate_renewal_info/aliases | 10 + .../acme_certificate_renewal_info/meta/main.yml | 8 + .../acme_certificate_renewal_info/tasks/impl.yml | 145 + .../acme_certificate_renewal_info/tasks/main.yml | 40 + .../tasks/obtain-cert.yml | 159 + .../tests/validate.yml | 47 + .../targets/acme_inspect/tasks/impl.yml | 10 + .../targets/x509_certificate/tasks/ownca.yml | 16 +- .../targets/x509_certificate/tasks/selfsigned.yml | 12 + .../x509_certificate/tests/validate_ownca.yml | 5 + .../x509_certificate/tests/validate_selfsigned.yml | 5 + .../unit/plugins/module_utils/acme/backend_data.py | 89 + .../plugins/module_utils/acme/fixtures/cert_1.txt | 38 + .../module_utils/acme/fixtures/cert_1.txt.license | 3 + .../module_utils/acme/fixtures/cert_2-b.txt | 57 + .../acme/fixtures/cert_2-b.txt.license | 3 + .../plugins/module_utils/acme/fixtures/cert_2.pem | 19 + .../module_utils/acme/fixtures/cert_2.pem.license | 3 + .../plugins/module_utils/acme/fixtures/cert_2.txt | 56 + .../module_utils/acme/fixtures/cert_2.txt.license | 3 + .../module_utils/acme/test_backend_cryptography.py | 57 + .../module_utils/acme/test_backend_openssl_cli.py | 59 + .../unit/plugins/module_utils/acme/test_utils.py | 97 + .../unit/plugins/module_utils/crypto/test_math.py | 117 + .../tests/unit/plugins/module_utils/test_time.py | 323 + .../dns/.github/workflows/ansible-test.yml | 65 +- .../community/dns/.github/workflows/ee.yml | 18 +- .../dns/.github/workflows/extra-tests.yml | 9 +- ansible_collections/community/dns/CHANGELOG.md | 412 +- ansible_collections/community/dns/CHANGELOG.rst | 39 + ansible_collections/community/dns/FILES.json | 74 +- ansible_collections/community/dns/MANIFEST.json | 8 +- ansible_collections/community/dns/README.md | 3 +- .../community/dns/changelogs/changelog.yaml | 49 + .../dns/docs/docsite/rst/hetzner_guide.rst | 2 +- ansible_collections/community/dns/meta/runtime.yml | 6 +- .../dns/plugins/doc_fragments/inventory_records.py | 7 +- .../community/dns/plugins/doc_fragments/options.py | 5 +- .../dns/plugins/inventory/hetzner_dns_records.py | 12 +- .../dns/plugins/inventory/hosttech_dns_records.py | 11 +- .../community/dns/plugins/lookup/lookup.py | 19 +- .../community/dns/plugins/lookup/lookup_as_dict.py | 19 +- .../plugins/module_utils/conversion/converter.py | 16 +- .../community/dns/plugins/module_utils/options.py | 2 +- .../community/dns/plugins/module_utils/provider.py | 4 +- .../community/dns/plugins/module_utils/resolver.py | 9 +- .../dns/plugins/modules/hetzner_dns_record.py | 7 - .../dns/plugins/modules/hetzner_dns_record_set.py | 7 - .../dns/plugins/modules/hosttech_dns_records.py | 129 - .../dns/plugins/plugin_utils/inventory/records.py | 26 +- .../community/dns/plugins/public_suffix_list.dat | 132 +- .../integration/targets/filter_txt/tasks/main.yml | 44 + .../plugins/inventory/test_hetzner_dns_records.py | 4 +- .../plugins/inventory/test_hosttech_dns_records.py | 4 +- .../dns/tests/unit/plugins/lookup/test_lookup.py | 102 +- .../unit/plugins/lookup/test_lookup_as_dict.py | 97 +- .../unit/plugins/module_utils/resolver_helper.py | 3 +- .../modules/test_hetzner_dns_record_set_info.py | 19 +- .../tests/unit/plugins/plugin_utils/test_unsafe.py | 133 + .../docker/.azure-pipelines/azure-pipelines.yml | 2 +- .../docker/.github/workflows/ansible-test.yml | 3 + ansible_collections/community/docker/CHANGELOG.md | 684 +- ansible_collections/community/docker/CHANGELOG.rst | 108 +- ansible_collections/community/docker/FILES.json | 114 +- ansible_collections/community/docker/MANIFEST.json | 4 +- ansible_collections/community/docker/README.md | 3 +- .../community/docker/changelogs/changelog.yaml | 96 + .../community/docker/changelogs/config.yaml | 2 + .../docker/docs/docsite/rst/scenario_guide.rst | 7 +- .../community/docker/meta/runtime.yml | 7 + .../community/docker/plugins/connection/docker.py | 2 +- .../docker/plugins/connection/docker_api.py | 1 + .../community/docker/plugins/connection/nsenter.py | 4 +- .../docker/plugins/doc_fragments/docker.py | 9 + .../docker/plugins/inventory/docker_containers.py | 1 + .../docker/plugins/inventory/docker_swarm.py | 3 + .../module_utils/_api/transport/basehttpadapter.py | 12 + .../plugins/module_utils/module_container/base.py | 2 + .../module_utils/module_container/docker_api.py | 18 +- .../docker/plugins/module_utils/selectors.py | 21 + .../community/docker/plugins/module_utils/util.py | 15 +- .../docker/plugins/modules/docker_compose.py | 5 + .../docker/plugins/modules/docker_container.py | 19 +- .../plugins/modules/docker_container_exec.py | 3 +- .../docker/plugins/modules/docker_image_build.py | 247 +- .../docker/plugins/modules/docker_network.py | 35 + .../docker/plugins/modules/docker_prune.py | 60 +- .../docker/plugins/modules/docker_swarm_service.py | 16 + .../docker/plugins/plugin_utils/socket_handler.py | 2 +- .../targets/docker_compose_v2/tasks/main.yml | 3 +- .../targets/docker_compose_v2_pull/tasks/main.yml | 6 +- .../targets/docker_image_build/tasks/test.yml | 12 + .../docker_image_build/tasks/tests/options.yml | 85 + .../docker_image_build/templates/SecretsDockerfile | 7 + .../targets/docker_prune/tasks/main.yml | 22 + .../targets/docker_swarm_service/vars/main.yml | 1 + .../generic_connection_tests/tasks/main.yml | 3 +- .../targets/setup_docker/tasks/main.yml | 3 +- .../setup_docker_cli_compose/tasks/main.yml | 3 +- .../setup_docker_compose_v1/vars/Alpine.yml | 2 + .../community/docker/tests/sanity/ignore-2.11.txt | 1 + .../community/docker/tests/sanity/ignore-2.12.txt | 1 + .../community/docker/tests/sanity/ignore-2.13.txt | 1 + .../community/docker/tests/sanity/ignore-2.14.txt | 1 + .../community/docker/tests/sanity/ignore-2.15.txt | 1 + .../community/docker/tests/sanity/ignore-2.16.txt | 1 + .../tests/unit/plugins/plugin_utils/test_unsafe.py | 133 + .../general/.azure-pipelines/azure-pipelines.yml | 6 +- .../community/general/.github/BOTMETA.yml | 60 +- .../general/.github/workflows/ansible-test.yml | 3 + ansible_collections/community/general/.gitignore | 4 + ansible_collections/community/general/CHANGELOG.md | 916 +- .../community/general/CHANGELOG.rst | 848 +- .../community/general/CONTRIBUTING.md | 4 +- ansible_collections/community/general/FILES.json | 629 +- .../community/general/MANIFEST.json | 4 +- ansible_collections/community/general/README.md | 9 +- .../community/general/changelogs/changelog.yaml | 1824 +--- .../community/general/changelogs/config.yaml | 3 + .../community/general/meta/runtime.yml | 4101 +------ .../community/general/plugins/become/machinectl.py | 13 +- .../community/general/plugins/become/run0.py | 128 + .../general/plugins/callback/opentelemetry.py | 94 +- .../general/plugins/callback/timestamp.py | 127 + .../community/general/plugins/callback/yaml.py | 10 + .../general/plugins/doc_fragments/consul.py | 1 - .../general/plugins/doc_fragments/django.py | 53 + .../general/plugins/doc_fragments/proxmox.py | 10 + .../general/plugins/doc_fragments/rackspace.py | 120 - .../general/plugins/lookup/merge_variables.py | 7 +- .../general/plugins/module_utils/cmd_runner.py | 11 +- .../general/plugins/module_utils/django.py | 85 + .../plugins/module_utils/gandi_livedns_api.py | 8 +- .../general/plugins/module_utils/gitlab.py | 5 + .../general/plugins/module_utils/homebrew.py | 115 + .../general/plugins/module_utils/mh/mixins/deps.py | 47 +- .../general/plugins/module_utils/mh/mixins/vars.py | 6 +- .../plugins/module_utils/mh/module_helper.py | 42 +- .../general/plugins/module_utils/module_helper.py | 10 +- .../general/plugins/module_utils/puppet.py | 1 + .../general/plugins/module_utils/python_runner.py | 34 + .../community/general/plugins/module_utils/rax.py | 334 - .../general/plugins/module_utils/redhat.py | 240 - .../general/plugins/module_utils/rundeck.py | 4 +- .../general/plugins/module_utils/vardict.py | 2 +- .../community/general/plugins/modules/aix_lvol.py | 19 +- .../plugins/modules/ansible_galaxy_install.py | 60 +- .../community/general/plugins/modules/apt_rpm.py | 30 +- .../general/plugins/modules/btrfs_subvolume.py | 9 +- .../general/plugins/modules/cloudflare_dns.py | 8 +- .../general/plugins/modules/consul_policy.py | 2 + .../general/plugins/modules/consul_role.py | 2 + .../general/plugins/modules/consul_session.py | 2 + .../general/plugins/modules/consul_token.py | 2 + .../community/general/plugins/modules/cpanm.py | 26 +- .../general/plugins/modules/django_command.py | 83 + .../general/plugins/modules/django_manage.py | 92 +- .../community/general/plugins/modules/flowdock.py | 211 - .../general/plugins/modules/gandi_livedns.py | 37 +- .../general/plugins/modules/gconftool2.py | 1 + .../general/plugins/modules/gconftool2_info.py | 1 + .../general/plugins/modules/gitlab_runner.py | 53 +- .../community/general/plugins/modules/homebrew.py | 157 +- .../general/plugins/modules/homebrew_cask.py | 70 +- .../community/general/plugins/modules/hponcfg.py | 1 + .../community/general/plugins/modules/installp.py | 13 +- .../community/general/plugins/modules/irc.py | 31 +- .../general/plugins/modules/kernel_blacklist.py | 1 + .../general/plugins/modules/keycloak_client.py | 5 +- .../plugins/modules/keycloak_identity_provider.py | 2 +- .../plugins/modules/keycloak_user_federation.py | 3 + .../general/plugins/modules/ldap_search.py | 2 + .../general/plugins/modules/locale_gen.py | 1 + .../community/general/plugins/modules/lvg.py | 22 +- .../community/general/plugins/modules/lvol.py | 84 +- .../general/plugins/modules/lxd_container.py | 2 +- .../community/general/plugins/modules/macports.py | 12 +- .../community/general/plugins/modules/mksysb.py | 1 + .../community/general/plugins/modules/opkg.py | 1 + .../community/general/plugins/modules/parted.py | 9 +- .../community/general/plugins/modules/pipx.py | 1 + .../community/general/plugins/modules/pipx_info.py | 1 + .../community/general/plugins/modules/pkg5.py | 15 +- .../community/general/plugins/modules/pkgin.py | 25 +- .../general/plugins/modules/portinstall.py | 26 +- .../community/general/plugins/modules/proxmox.py | 47 +- .../general/plugins/modules/proxmox_disk.py | 3 + .../general/plugins/modules/proxmox_domain_info.py | 4 + .../general/plugins/modules/proxmox_group_info.py | 4 + .../general/plugins/modules/proxmox_kvm.py | 17 +- .../general/plugins/modules/proxmox_nic.py | 3 + .../general/plugins/modules/proxmox_node_info.py | 4 + .../general/plugins/modules/proxmox_pool.py | 7 +- .../general/plugins/modules/proxmox_pool_member.py | 7 +- .../general/plugins/modules/proxmox_snap.py | 7 +- .../modules/proxmox_storage_contents_info.py | 4 + .../plugins/modules/proxmox_storage_info.py | 4 + .../general/plugins/modules/proxmox_tasks_info.py | 10 +- .../general/plugins/modules/proxmox_template.py | 3 + .../general/plugins/modules/proxmox_user_info.py | 4 + .../general/plugins/modules/proxmox_vm_info.py | 10 +- .../community/general/plugins/modules/puppet.py | 19 +- .../community/general/plugins/modules/rax.py | 903 -- .../community/general/plugins/modules/rax_cbs.py | 235 - .../general/plugins/modules/rax_cbs_attachments.py | 226 - .../community/general/plugins/modules/rax_cdb.py | 266 - .../general/plugins/modules/rax_cdb_database.py | 179 - .../general/plugins/modules/rax_cdb_user.py | 227 - .../community/general/plugins/modules/rax_clb.py | 320 - .../general/plugins/modules/rax_clb_nodes.py | 291 - .../general/plugins/modules/rax_clb_ssl.py | 289 - .../community/general/plugins/modules/rax_dns.py | 180 - .../general/plugins/modules/rax_dns_record.py | 358 - .../community/general/plugins/modules/rax_facts.py | 152 - .../community/general/plugins/modules/rax_files.py | 400 - .../general/plugins/modules/rax_files_objects.py | 556 - .../general/plugins/modules/rax_identity.py | 110 - .../general/plugins/modules/rax_keypair.py | 179 - .../community/general/plugins/modules/rax_meta.py | 182 - .../general/plugins/modules/rax_mon_alarm.py | 235 - .../general/plugins/modules/rax_mon_check.py | 329 - .../general/plugins/modules/rax_mon_entity.py | 201 - .../plugins/modules/rax_mon_notification.py | 182 - .../plugins/modules/rax_mon_notification_plan.py | 191 - .../general/plugins/modules/rax_network.py | 146 - .../community/general/plugins/modules/rax_queue.py | 147 - .../general/plugins/modules/rax_scaling_group.py | 441 - .../general/plugins/modules/rax_scaling_policy.py | 294 - .../general/plugins/modules/redfish_command.py | 17 +- .../general/plugins/modules/redfish_config.py | 17 +- .../general/plugins/modules/redfish_info.py | 17 +- .../general/plugins/modules/redhat_subscription.py | 15 +- .../community/general/plugins/modules/slackpkg.py | 18 +- .../community/general/plugins/modules/snap.py | 5 +- .../general/plugins/modules/snap_alias.py | 1 + .../general/plugins/modules/stackdriver.py | 228 - .../community/general/plugins/modules/svr4pkg.py | 2 +- .../community/general/plugins/modules/swdepot.py | 17 +- .../general/plugins/modules/webfaction_app.py | 213 - .../general/plugins/modules/webfaction_db.py | 209 - .../general/plugins/modules/webfaction_domain.py | 184 - .../general/plugins/modules/webfaction_mailbox.py | 152 - .../general/plugins/modules/webfaction_site.py | 223 - .../community/general/plugins/modules/xfconf.py | 3 +- .../general/plugins/modules/xfconf_info.py | 3 +- .../integration/targets/callback_timestamp/aliases | 6 + .../targets/callback_timestamp/tasks/main.yml | 66 + .../tests/integration/targets/cpanm/tasks/main.yml | 3 +- .../targets/django_manage/tasks/main.yaml | 5 + .../targets/ejabberd_user/tasks/main.yml | 3 +- .../targets/gandi_livedns/tasks/create_record.yml | 25 +- .../targets/gandi_livedns/tasks/update_record.yml | 24 +- .../integration/targets/homebrew/handlers/main.yml | 11 + .../integration/targets/homebrew/tasks/casks.yml | 2 - .../integration/targets/homebrew/tasks/docker.yml | 23 + .../targets/homebrew/tasks/formulae.yml | 2 - .../integration/targets/homebrew/tasks/main.yml | 5 +- .../keycloak_identity_provider/tasks/main.yml | 1 + .../targets/lookup_merge_variables/runme.sh | 3 + .../test_cross_host_merge_inventory.yml | 33 + .../test_cross_host_merge_play.yml | 21 + .../targets/module_helper/library/mdepfail.py | 5 +- .../targets/module_helper/library/mstate.py | 1 + .../tests/integration/targets/snap/tasks/main.yml | 7 +- .../targets/snap/tasks/test_channel.yml | 43 +- .../community/general/tests/sanity/ignore-2.13.txt | 5 +- .../community/general/tests/sanity/ignore-2.14.txt | 5 +- .../community/general/tests/sanity/ignore-2.15.txt | 3 - .../community/general/tests/sanity/ignore-2.16.txt | 3 - .../community/general/tests/sanity/ignore-2.17.txt | 4 +- .../community/general/tests/sanity/ignore-2.18.txt | 4 +- .../general/tests/unit/plugins/become/test_run0.py | 64 + .../unit/plugins/lookup/test_merge_variables.py | 182 +- .../unit/plugins/module_utils/test_cmd_runner.py | 82 +- .../plugins/module_utils/test_python_runner.py | 223 + .../general/tests/unit/plugins/modules/helper.py | 24 +- .../tests/unit/plugins/modules/test_cpanm.yaml | 5 +- .../unit/plugins/modules/test_django_command.py | 13 + .../unit/plugins/modules/test_django_command.yaml | 38 + .../tests/unit/plugins/modules/test_homebrew.py | 19 +- .../tests/unit/plugins/modules/test_puppet.yaml | 32 + .../tests/unit/plugins/plugin_utils/test_unsafe.py | 133 + .../grafana/.github/workflows/ansible-test.yml | 6 +- .../community/grafana/CHANGELOG.rst | 30 +- ansible_collections/community/grafana/FILES.json | 187 +- .../community/grafana/MANIFEST.json | 4 +- ansible_collections/community/grafana/README.md | 3 +- .../community/grafana/changelogs/changelog.yaml | 33 + .../353-docs-add-influxdb-flux-example.yml | 3 + .../fragments/354-fix-find-grafana-versions.yml | 3 + .../355-rm-dashboard-message-argument.yml | 3 + ...hboards-add-custom-certs-verification-logic.yml | 2 + .../fragments/357-module-grafana-silence.yml | 2 + .../fragments/358-role-grafana-silence.yml | 2 + .../changelogs/fragments/362-plugin-umask.yml | 2 + .../fragments/364-first-datasource-default.yml | 3 + .../367-dashboard-undo-breaing-change-message.yml | 3 + .../fragments/368-molecule-pin-requests.yml | 3 + .../community/grafana/hacking/check_fragment.sh | 6 +- .../grafana/hacking/find_grafana_versions.py | 31 +- .../community/grafana/meta/runtime.yml | 1 + .../grafana/molecule/default/converge.yml | 11 + .../grafana/plugins/lookup/grafana_dashboard.py | 52 +- .../grafana/plugins/modules/grafana_datasource.py | 23 + .../grafana/plugins/modules/grafana_plugin.py | 2 +- .../grafana/plugins/modules/grafana_silence.py | 369 + .../community/grafana/roles/grafana/README.md | 7 + .../grafana/roles/grafana/defaults/main.yml | 1 + .../community/grafana/roles/grafana/meta/main.yml | 2 +- .../community/grafana/roles/grafana/tasks/main.yml | 12 + .../targets/grafana_datasource/tasks/elastic.yml | 26 + .../targets/grafana_datasource/tasks/postgres.yml | 2 +- .../targets/grafana_silence/defaults/main.yml | 5 + .../integration/targets/grafana_silence/runme.sh | 5 + .../integration/targets/grafana_silence/site.yml | 6 + .../targets/grafana_silence/tasks/main.yml | 89 + .../community/grafana/tests/sanity/ignore-2.15.txt | 3 - .../community/grafana/tests/sanity/ignore-2.16.txt | 3 - .../community/grafana/tests/sanity/ignore-2.18.txt | 1 + .../grafana/grafana_plugin/test_grafana_plugin.py | 2 +- .../grafana_silence/test_grafana_silence.py | 211 + .../hrobot/.github/workflows/ansible-test.yml | 38 +- .../community/hrobot/.github/workflows/ee.yml | 18 +- .../hrobot/.github/workflows/extra-tests.yml | 9 +- ansible_collections/community/hrobot/CHANGELOG.md | 156 +- ansible_collections/community/hrobot/CHANGELOG.rst | 28 + ansible_collections/community/hrobot/FILES.json | 20 +- ansible_collections/community/hrobot/MANIFEST.json | 8 +- ansible_collections/community/hrobot/README.md | 2 +- .../community/hrobot/changelogs/changelog.yaml | 31 + .../community/hrobot/meta/runtime.yml | 2 +- .../community/hrobot/plugins/inventory/robot.py | 54 +- .../tests/unit/plugins/inventory/test_robot.py | 2 + .../community/mongodb/CHANGELOG.rst | 13 + ansible_collections/community/mongodb/FILES.json | 8 +- .../community/mongodb/MANIFEST.json | 4 +- ansible_collections/community/mongodb/README.md | 1 + .../community/mongodb/changelogs/changelog.yaml | 5 + .../mongodb/plugins/modules/mongodb_shell.py | 27 +- .../community/okd/.config/ansible-lint.yml | 5 + .../community/okd/.github/patchback.yml | 4 + .../community/okd/.github/settings.yml | 6 + .../community/okd/.github/stale.yml | 60 + .../community/okd/.github/workflows/changelog.yml | 23 + .../community/okd/.github/workflows/linters.yml | 29 + .../okd/.github/workflows/sanity-tests.yml | 23 + .../community/okd/.github/workflows/unit-tests.yml | 21 + ansible_collections/community/okd/.yamllint | 44 +- ansible_collections/community/okd/CHANGELOG.rst | 28 + ansible_collections/community/okd/FILES.json | 782 +- ansible_collections/community/okd/MANIFEST.json | 6 +- ansible_collections/community/okd/Makefile | 4 +- ansible_collections/community/okd/OWNERS_ALIASES | 8 - ansible_collections/community/okd/README.md | 33 +- .../community/okd/changelogs/.plugin-cache.yaml | 92 - .../community/okd/changelogs/changelog.yaml | 25 + .../community/okd/changelogs/config.yaml | 32 +- ansible_collections/community/okd/ci/Dockerfile | 20 +- ansible_collections/community/okd/ci/downstream.sh | 11 +- .../okd/docs/community.okd.k8s_module.rst | 72 +- .../okd/docs/community.okd.oc_connection.rst | 2 +- ...munity.okd.openshift_adm_groups_sync_module.rst | 107 +- ...shift_adm_migrate_template_instances_module.rst | 67 +- ...mmunity.okd.openshift_adm_prune_auth_module.rst | 55 + ...unity.okd.openshift_adm_prune_builds_module.rst | 2 +- ....okd.openshift_adm_prune_deployments_module.rst | 57 +- ...unity.okd.openshift_adm_prune_images_module.rst | 55 + .../docs/community.okd.openshift_auth_module.rst | 57 +- ...community.okd.openshift_import_image_module.rst | 55 + .../okd/docs/community.okd.openshift_inventory.rst | 47 +- .../community.okd.openshift_process_module.rst | 66 +- ...ommunity.okd.openshift_registry_info_module.rst | 57 +- .../docs/community.okd.openshift_route_module.rst | 67 +- ansible_collections/community/okd/meta/runtime.yml | 9 +- .../community/okd/molecule/default/converge.yml | 14 +- .../okd/molecule/default/files/pod-template.yaml | 16 +- .../molecule/default/files/simple-template.yaml | 36 +- .../community/okd/molecule/default/molecule.yml | 9 +- .../community/okd/molecule/default/prepare.yml | 12 +- .../library/openshift_ldap_entry_info.py | 1 + .../openshift_adm_groups/tasks/activeDirectory.yml | 444 +- .../tasks/augmentedActiveDirectory.yml | 323 +- .../roles/openshift_adm_groups/tasks/main.yml | 47 +- .../tasks/python-ldap-not-installed.yml | 1 + .../roles/openshift_adm_groups/tasks/rfc2307.yml | 907 +- .../openshift_adm_prune_auth_clusterroles.yml | 575 +- .../tasks/openshift_adm_prune_auth_roles.yml | 653 +- .../tasks/openshift_adm_prune_deployments.yml | 438 +- .../molecule/default/tasks/openshift_builds.yml | 477 +- .../default/tasks/openshift_import_images.yml | 335 +- .../default/tasks/openshift_prune_images.yml | 14 +- .../okd/molecule/default/tasks/openshift_route.yml | 12 +- .../community/okd/molecule/default/vars/main.yml | 22 +- .../community/okd/plugins/connection/oc.py | 36 +- .../community/okd/plugins/inventory/openshift.py | 137 +- .../community/okd/plugins/module_utils/k8s.py | 251 +- .../module_utils/openshift_adm_prune_auth.py | 301 +- .../openshift_adm_prune_deployments.py | 55 +- .../module_utils/openshift_adm_prune_images.py | 130 +- .../okd/plugins/module_utils/openshift_builds.py | 159 +- .../okd/plugins/module_utils/openshift_common.py | 18 +- .../plugins/module_utils/openshift_docker_image.py | 59 +- .../okd/plugins/module_utils/openshift_groups.py | 209 +- .../module_utils/openshift_images_common.py | 138 +- .../plugins/module_utils/openshift_import_image.py | 134 +- .../okd/plugins/module_utils/openshift_ldap.py | 364 +- .../okd/plugins/module_utils/openshift_process.py | 14 +- .../okd/plugins/module_utils/openshift_registry.py | 74 +- .../community/okd/plugins/modules/k8s.py | 79 +- .../plugins/modules/openshift_adm_groups_sync.py | 73 +- .../openshift_adm_migrate_template_instances.py | 28 +- .../plugins/modules/openshift_adm_prune_auth.py | 43 +- .../plugins/modules/openshift_adm_prune_builds.py | 36 +- .../modules/openshift_adm_prune_deployments.py | 39 +- .../plugins/modules/openshift_adm_prune_images.py | 44 +- .../okd/plugins/modules/openshift_auth.py | 237 +- .../okd/plugins/modules/openshift_build.py | 66 +- .../okd/plugins/modules/openshift_import_image.py | 41 +- .../okd/plugins/modules/openshift_process.py | 46 +- .../okd/plugins/modules/openshift_registry_info.py | 35 +- .../okd/plugins/modules/openshift_route.py | 299 +- ansible_collections/community/okd/requirements.yml | 3 +- ansible_collections/community/okd/setup.cfg | 3 - .../community/okd/test-requirements.txt | 1 + ansible_collections/community/okd/tests/config.yml | 3 +- .../community/okd/tests/sanity/ignore-2.16.txt | 3 + .../community/okd/tests/sanity/ignore-2.17.txt | 3 + .../community/okd/tests/sanity/requirements.yml | 5 + .../unit/plugins/module_utils/test_ldap_dn.py | 42 +- .../plugins/module_utils/test_ldap_sync_config.py | 30 +- .../module_utils/test_openshift_docker_image.py | 74 +- ansible_collections/community/okd/tox.ini | 37 + .../.azure-pipelines/azure-pipelines.yml | 41 + .../community/postgresql/CHANGELOG.rst | 18 + .../community/postgresql/CONTRIBUTING.md | 85 +- .../community/postgresql/FILES.json | 25 +- .../community/postgresql/MANIFEST.json | 4 +- ansible_collections/community/postgresql/README.md | 37 +- .../community/postgresql/changelogs/changelog.yaml | 23 + .../postgresql/plugins/modules/postgresql_db.py | 2 +- .../postgresql/plugins/modules/postgresql_ext.py | 5 + .../postgresql/plugins/modules/postgresql_idx.py | 5 +- .../postgresql/plugins/modules/postgresql_privs.py | 2 +- .../postgresql/tests/sanity/ignore-2.18.txt | 5 + .../sap/.github/ISSUE_TEMPLATE/bug_report.yml | 149 - .../sap/.github/ISSUE_TEMPLATE/config.yml | 27 - .../ISSUE_TEMPLATE/documentation_report.yml | 125 - .../sap/.github/ISSUE_TEMPLATE/feature_request.yml | 69 - .../sap/.github/workflows/ansible-test.yml | 126 - .../community/sap/.vscode/extensions.json | 5 - ansible_collections/community/sap/CHANGELOG.rst | 87 - .../community/sap/CODE_OF_CONDUCT.md | 3 - ansible_collections/community/sap/CONTRIBUTING.md | 3 - ansible_collections/community/sap/FILES.json | 544 - ansible_collections/community/sap/LICENSE | 674 -- ansible_collections/community/sap/MAINTAINERS | 2 - ansible_collections/community/sap/MAINTAINING.md | 3 - ansible_collections/community/sap/MANIFEST.json | 33 - ansible_collections/community/sap/README.md | 181 - .../community/sap/REVIEW_CHECKLIST.md | 3 - .../community/sap/changelogs/changelog.yaml | 63 - .../community/sap/changelogs/config.yaml | 30 - .../community/sap/changelogs/fragments/.keep | 0 ansible_collections/community/sap/codecov.yml | 2 - ansible_collections/community/sap/meta/runtime.yml | 33 - .../sap/plugins/doc_fragments/__init__.py | 0 .../community/sap/plugins/module_utils/__init__.py | 0 .../community/sap/plugins/modules/__init__.py | 0 .../community/sap/tests/integration/__init__.py | 0 .../sap/tests/integration/targets/__init__.py | 0 .../community/sap/tests/sanity/__init__.py | 0 .../community/sap/tests/unit/__init__.py | 0 .../community/sap/tests/unit/compat/__init__.py | 0 .../community/sap/tests/unit/compat/builtins.py | 33 - .../community/sap/tests/unit/compat/mock.py | 122 - .../community/sap/tests/unit/compat/unittest.py | 38 - .../community/sap/tests/unit/mock/__init__.py | 0 .../community/sap/tests/unit/mock/loader.py | 102 - .../community/sap/tests/unit/mock/path.py | 8 - .../community/sap/tests/unit/mock/procenv.py | 76 - .../community/sap/tests/unit/mock/vault_helper.py | 27 - .../community/sap/tests/unit/mock/yaml_helper.py | 126 - .../community/sap/tests/unit/plugins/__init__.py | 0 .../sap/tests/unit/plugins/modules/__init__.py | 0 .../unit/plugins/modules/database/__init__.py | 0 .../plugins/modules/database/saphana/__init__.py | 0 .../modules/database/saphana/test_hana_query.py | 102 - .../tests/unit/plugins/modules/files/__init__.py | 0 .../plugins/modules/files/test_sapcar_extract.py | 53 - .../plugins/modules/identity/test_sap_company.py | 136 - .../unit/plugins/modules/identity/test_sap_user.py | 189 - .../tests/unit/plugins/modules/system/__init__.py | 0 .../unit/plugins/modules/system/test_sap_snote.py | 181 - .../modules/system/test_sap_system_facts.py | 106 - .../modules/system/test_sap_task_list_execute.py | 89 - .../sap/tests/unit/plugins/modules/utils.py | 52 - .../community/sap/tests/unit/requirements.txt | 7 - .../vmware/.github/workflows/ansible-test.yml | 4 +- ansible_collections/community/vmware/CHANGELOG.rst | 15 + ansible_collections/community/vmware/FILES.json | 34 +- ansible_collections/community/vmware/MANIFEST.json | 4 +- .../community/vmware/changelogs/changelog.yaml | 17 + .../vmware/plugins/module_utils/vmware.py | 8 - .../vmware/plugins/modules/vmware_cluster_dpm.py | 2 +- .../vmware/plugins/modules/vmware_cluster_info.py | 2 +- .../plugins/modules/vmware_datacenter_info.py | 2 +- .../plugins/modules/vmware_datastore_info.py | 1 - .../vmware/plugins/modules/vmware_dvs_portgroup.py | 7 +- .../vmware/plugins/modules/vmware_dvswitch_info.py | 1 - .../vmware/plugins/modules/vmware_guest_info.py | 1 - .../vmware/plugins/modules/vmware_host_facts.py | 1 - .../modules/vmware_vcenter_settings_info.py | 2 +- .../plugins/modules/vmware_vsan_health_info.py | 5 - .../community/vmware/requirements.txt | 2 +- .../vmware_content_library_manager/tasks/main.yml | 6 +- .../targets/vmware_dvs_portgroup/tasks/main.yml | 82 + .../community/zabbix/.github/workflows/agent.yml | 20 +- .../zabbix/.github/workflows/javagateway.yml | 12 +- .../.github/workflows/plugins-integration.yml | 2 +- .../community/zabbix/.github/workflows/proxy.yml | 12 +- .../zabbix/.github/workflows/repo-sanity.yml | 2 +- .../community/zabbix/.github/workflows/server.yml | 12 +- .../community/zabbix/.github/workflows/web.yml | 12 +- ansible_collections/community/zabbix/CHANGELOG.rst | 40 +- ansible_collections/community/zabbix/FILES.json | 257 +- ansible_collections/community/zabbix/MANIFEST.json | 4 +- ansible_collections/community/zabbix/README.md | 2 +- .../community/zabbix/changelogs/.plugin-cache.yaml | 17 +- .../community/zabbix/changelogs/changelog.yaml | 58 + .../community/zabbix/docs/ZABBIX_AGENT_ROLE.md | 5 +- .../zabbix/docs/ZABBIX_JAVAGATEWAY_ROLE.md | 4 + .../community/zabbix/docs/ZABBIX_PROXY_ROLE.md | 5 + .../community/zabbix/docs/ZABBIX_SERVER_ROLE.md | 4 + .../community/zabbix/docs/ZABBIX_WEB_ROLE.md | 13 +- .../community/zabbix/molecule/requirements.txt | 6 +- .../common/playbooks/prepare.yml | 1 + .../molecule/zabbix_javagateway/molecule.yml | 2 +- .../zabbix/molecule/zabbix_proxy/destroy.yml | 6 +- .../zabbix/molecule/zabbix_proxy/molecule.yml | 10 +- .../zabbix/molecule/zabbix_proxy/prepare.yml | 4 +- .../zabbix/molecule/zabbix_server/destroy.yml | 6 +- .../zabbix/molecule/zabbix_server/molecule.yml | 10 +- .../zabbix/molecule/zabbix_server/prepare.yml | 12 +- .../zabbix/molecule/zabbix_web/destroy.yml | 6 +- .../zabbix/molecule/zabbix_web/molecule.yml | 12 +- .../zabbix/molecule/zabbix_web/prepare.yml | 4 +- .../community/zabbix/plugins/httpapi/zabbix.py | 3 +- .../zabbix/plugins/modules/zabbix_correlation.py | 587 + .../zabbix/plugins/modules/zabbix_host.py | 64 +- .../zabbix/plugins/modules/zabbix_maintenance.py | 40 +- .../zabbix/plugins/modules/zabbix_mediatype.py | 11 + .../zabbix/plugins/modules/zabbix_service_info.py | 149 + .../zabbix/plugins/modules/zabbix_template.py | 295 +- .../zabbix/plugins/modules/zabbix_templategroup.py | 4 +- .../community/zabbix/roles/zabbix_agent/README.md | 5 +- .../zabbix/roles/zabbix_agent/defaults/main.yml | 6 +- .../zabbix_agent/molecule/with-server/prepare.yml | 1 + .../zabbix/roles/zabbix_agent/tasks/Debian.yml | 32 +- .../zabbix/roles/zabbix_agent/tasks/main.yml | 16 +- .../roles/zabbix_agent/tasks/userparameter.yml | 3 + .../zabbix/roles/zabbix_agent/vars/Debian.yml | 3 +- .../zabbix/roles/zabbix_javagateway/README.md | 4 + .../roles/zabbix_javagateway/defaults/main.yml | 4 + .../roles/zabbix_javagateway/tasks/Debian.yml | 35 +- .../zabbix/roles/zabbix_javagateway/tasks/main.yml | 16 +- .../roles/zabbix_javagateway/vars/Debian.yml | 3 +- .../community/zabbix/roles/zabbix_proxy/README.md | 5 + .../zabbix/roles/zabbix_proxy/defaults/main.yml | 3 + .../zabbix/roles/zabbix_proxy/tasks/Debian.yml | 35 +- .../zabbix/roles/zabbix_proxy/tasks/main.yml | 11 +- .../zabbix/roles/zabbix_proxy/vars/Debian.yml | 3 +- .../community/zabbix/roles/zabbix_server/README.md | 4 + .../zabbix/roles/zabbix_server/defaults/main.yml | 6 +- .../zabbix/roles/zabbix_server/tasks/Debian.yml | 156 +- .../zabbix/roles/zabbix_server/tasks/RedHat.yml | 92 - .../roles/zabbix_server/tasks/initialize-mysql.yml | 155 + .../roles/zabbix_server/tasks/initialize-pgsql.yml | 107 + .../zabbix/roles/zabbix_server/tasks/main.yml | 32 +- .../zabbix/roles/zabbix_server/tasks/mysql.yml | 213 - .../roles/zabbix_server/tasks/postgresql.yml | 141 - .../zabbix/roles/zabbix_server/tasks/selinux.yml | 2 +- .../zabbix/roles/zabbix_server/vars/Debian.yml | 17 +- .../zabbix/roles/zabbix_server/vars/RedHat.yml | 24 +- .../community/zabbix/roles/zabbix_web/README.md | 13 +- .../zabbix/roles/zabbix_web/defaults/main.yml | 12 +- .../zabbix/roles/zabbix_web/tasks/Debian.yml | 35 +- .../zabbix/roles/zabbix_web/tasks/RedHat.yml | 5 + .../zabbix/roles/zabbix_web/tasks/main.yml | 11 +- .../zabbix/roles/zabbix_web/tasks/selinux.yml | 22 +- .../roles/zabbix_web/templates/nginx_vhost.conf.j2 | 10 +- .../zabbix/roles/zabbix_web/vars/Debian.yml | 3 +- .../targets/test_zabbix_correlation/meta/main.yml | 3 + .../targets/test_zabbix_correlation/tasks/main.yml | 328 + .../test_zabbix_host/tasks/zabbix_host_tests.yml | 72 + .../targets/test_zabbix_maintenance/tasks/main.yml | 50 + .../targets/test_zabbix_mediatype/tasks/main.yml | 23 + .../targets/test_zabbix_service_info/meta/main.yml | 3 + .../test_zabbix_service_info/tasks/main.yml | 57 + .../files/template4_60_higher.json | 49 + .../files/template4_60_higher.xml | 48 + .../files/template4_60_higher.yaml | 23 + .../targets/test_zabbix_template/tasks/main.yml | 77 + .../dellemc/openmanage/.ansible-lint-ignore | 18 + .../openmanage/.github/workflows/ansible-test.yml | 29 +- .../dellemc/openmanage/CHANGELOG.rst | 112 + ansible_collections/dellemc/openmanage/FILES.json | 1333 ++- .../dellemc/openmanage/MANIFEST.json | 4 +- ansible_collections/dellemc/openmanage/README.md | 10 +- .../dellemc/openmanage/changelogs/changelog.yaml | 105 + .../dellemc/openmanage/docs/ATTRIBUTION.md | 27 + .../openmanage/docs/EXECUTION_ENVIRONMENT.md | 1 - .../dellemc/openmanage/docs/README.md | 189 +- .../openmanage/docs/modules/idrac_diagnostics.rst | 390 + .../openmanage/docs/modules/idrac_reset.rst | 134 +- .../openmanage/docs/modules/idrac_session.rst | 157 + .../docs/modules/idrac_storage_volume.rst | 310 + .../ome_application_console_preferences.rst | 49 +- .../ome_device_local_access_configuration.rst | 56 +- .../docs/modules/ome_device_quick_deploy.rst | 59 +- .../openmanage/docs/modules/ome_devices.rst | 35 +- .../docs/modules/redfish_storage_volume.rst | 2 + .../dellemc/openmanage/meta/runtime.yml | 9 +- .../idrac/dellemc_idrac_storage_volume.yml | 114 - .../playbooks/idrac/idrac_diagnostics.yml | 97 + .../openmanage/playbooks/idrac/idrac_reset.yml | 64 +- .../openmanage/playbooks/idrac/idrac_session.yml | 21 + .../playbooks/idrac/idrac_storage_volume.yml | 114 + ..._configuration_compliance_baseline_workflow.yml | 5 +- .../playbooks/roles/idrac_user/idrac_user.yml | 9 + .../openmanage/playbooks/roles/vars_files/user.yml | 15 + .../dellemc/openmanage/plugins/README.md | 3 + .../plugins/module_utils/dellemc_idrac.py | 7 +- .../plugins/module_utils/session_utils.py | 322 + .../openmanage/plugins/module_utils/utils.py | 23 +- .../modules/dellemc_idrac_storage_volume.py | 5 + .../plugins/modules/idrac_diagnostics.py | 874 ++ .../openmanage/plugins/modules/idrac_reset.py | 515 +- .../plugins/modules/idrac_server_config_profile.py | 21 +- .../openmanage/plugins/modules/idrac_session.py | 425 + .../plugins/modules/idrac_storage_volume.py | 924 ++ .../modules/ome_application_console_preferences.py | 13 +- .../ome_device_local_access_configuration.py | 14 +- .../plugins/modules/ome_device_quick_deploy.py | 39 +- .../openmanage/plugins/modules/ome_devices.py | 18 +- .../plugins/modules/redfish_storage_volume.py | 198 +- .../dellemc/openmanage/requirements.txt | 1 - .../molecule/clear_pending_attributes/prepare.yml | 9 +- .../converge.yml | 2 +- .../converge.yml | 24 +- .../converge.yml | 1 - .../converge.yml | 55 +- .../converge.yml | 52 +- .../converge.yml | 27 +- .../molecule.yml | 6 + .../converge.yml | 10 +- .../converge.yml | 16 +- .../converge.yml | 11 +- .../idrac_certificate/molecule/CA/converge.yml | 12 +- .../idrac_certificate/molecule/CSC/converge.yml | 24 +- .../idrac_certificate/molecule/CTC/converge.yml | 12 +- .../molecule/CustomCertificate/converge.yml | 24 +- .../idrac_certificate/molecule/HTTPS/converge.yml | 12 +- .../idrac_certificate/molecule/SSLKEY/converge.yml | 12 +- .../molecule/default/converge.yml | 82 +- .../molecule/generateCSR/converge.yml | 6 +- .../idrac_certificate/molecule/reset/converge.yml | 6 +- .../molecule/default/cleanup.yml | 20 +- .../molecule/default/converge.yml | 20 +- .../molecule/default/verify.yml | 20 +- .../molecule/cifs_share/converge.yml | 6 +- .../idrac_firmware/molecule/default/converge.yml | 24 +- .../idrac_firmware/molecule/ftp_share/converge.yml | 6 +- .../molecule/http_share/converge.yml | 6 +- .../molecule/https_share/converge.yml | 6 +- .../molecule/httpsproxy_share/converge.yml | 22 +- .../molecule/negative_scenarios/converge.yml | 101 +- .../idrac_firmware/molecule/nfs_share/converge.yml | 6 +- .../molecule/backplane/converge.yml | 50 +- .../idrac_gather_facts/molecule/bios/converge.yml | 6 +- .../molecule/controller/converge.yml | 6 +- .../molecule/default/converge.yml | 10 +- .../molecule/enclosure/converge.yml | 6 +- .../molecule/enclosureemm/converge.yml | 6 +- .../idrac_gather_facts/molecule/fan/converge.yml | 6 +- .../molecule/firmware/converge.yml | 6 +- .../molecule/hostnic/converge.yml | 6 +- .../idrac_gather_facts/molecule/idrac/converge.yml | 6 +- .../molecule/license/converge.yml | 6 +- .../molecule/memory/converge.yml | 6 +- .../molecule/negative/converge.yml | 33 +- .../idrac_gather_facts/molecule/nic/converge.yml | 6 +- .../molecule/passensor/converge.yml | 6 +- .../molecule/pciedevice/converge.yml | 6 +- .../molecule/physicaldisk/converge.yml | 66 +- .../molecule/powersupply/converge.yml | 6 +- .../molecule/secureboot/converge.yml | 6 +- .../molecule/sensorsbattery/converge.yml | 6 +- .../molecule/sensorsintrusion/converge.yml | 6 +- .../molecule/sensorsvoltage/converge.yml | 6 +- .../molecule/systemmetrics/converge.yml | 12 +- .../molecule/virtualdisk/converge.yml | 6 +- .../tests/asserts/backplane_assert.yml | 39 - .../tests/asserts/physicaldisk_assert.yml | 45 - .../molecule/cifs_share/converge.yml | 25 +- .../molecule/cifs_share/molecule.yml | 5 + .../molecule/cifs_share/prepare.yml | 7 - .../molecule/default/converge.yml | 142 +- .../molecule/http_share/converge.yml | 24 +- .../molecule/http_share/molecule.yml | 5 + .../molecule/http_share/prepare.yml | 7 - .../http_share_with_proxy_parameters/converge.yml | 37 +- .../http_share_with_proxy_parameters/molecule.yml | 5 + .../http_share_with_proxy_parameters/prepare.yml | 7 - .../converge.yml | 37 +- .../prepare.yml | 7 - .../molecule/https_share/converge.yml | 25 +- .../molecule/https_share/molecule.yml | 5 + .../molecule/https_share/prepare.yml | 7 - .../https_share_with_proxy_parameters/converge.yml | 37 +- .../https_share_with_proxy_parameters/molecule.yml | 5 + .../https_share_with_proxy_parameters/prepare.yml | 7 - .../molecule/import_buffer_json/converge.yml | 6 +- .../molecule/import_buffer_xml/converge.yml | 6 +- .../molecule/import_multiple_target/converge.yml | 19 +- .../molecule/import_multiple_target/molecule.yml | 5 + .../molecule/import_multiple_target/prepare.yml | 7 - .../molecule/nfs_share/converge.yml | 20 +- .../molecule/nfs_share/molecule.yml | 5 + .../molecule/nfs_share/prepare.yml | 7 - .../molecule/resources/tests/cleanup.yml | 64 + .../molecule/resources/tests/export.yml | 72 + .../molecule/resources/tests/nic_helper.yml | 39 + .../molecule/resources/tests/prepare.yml | 6 +- .../molecule/resources/tests/raid_helper.yml | 24 + .../molecule/clear_job_queue/converge.yml | 4 +- .../idrac_job_queue/molecule/default/converge.yml | 8 +- .../molecule/delete_job/converge.yml | 6 +- .../dellemc/openmanage/roles/idrac_user/README.md | 347 + .../openmanage/roles/idrac_user/defaults/main.yml | 6 + .../openmanage/roles/idrac_user/handlers/main.yml | 2 + .../roles/idrac_user/meta/argument_specs.yml | 170 + .../openmanage/roles/idrac_user/meta/main.yml | 21 + .../idrac_user/molecule/TC-152120/converge.yml | 49 + .../idrac_user/molecule/TC-152120/molecule.yml | 5 + .../idrac_user/molecule/TC-152146/converge.yml | 46 + .../idrac_user/molecule/TC-152146/molecule.yml | 5 + .../idrac_user/molecule/TC-152147/converge.yml | 32 + .../idrac_user/molecule/TC-152147/molecule.yml | 10 + .../idrac_user/molecule/TC-152148/converge.yml | 54 + .../idrac_user/molecule/TC-152148/molecule.yml | 5 + .../idrac_user/molecule/TC-152148/prepare.yml | 26 + .../idrac_user/molecule/TC-152149/converge.yml | 45 + .../idrac_user/molecule/TC-152149/molecule.yml | 5 + .../idrac_user/molecule/TC-152149/prepare.yml | 19 + .../idrac_user/molecule/TC-152150/converge.yml | 51 + .../idrac_user/molecule/TC-152150/molecule.yml | 5 + .../idrac_user/molecule/TC-152150/prepare.yml | 19 + .../roles/idrac_user/molecule/default/converge.yml | 163 + .../roles/idrac_user/molecule/default/molecule.yml | 10 + .../molecule/resources/idrac_user/cleanup.yml | 17 + .../resources/idrac_user/get_user_info.yml | 9 + .../openmanage/roles/idrac_user/tasks/absent.yml | 14 + .../openmanage/roles/idrac_user/tasks/get_user.yml | 22 + .../openmanage/roles/idrac_user/tasks/main.yml | 10 + .../openmanage/roles/idrac_user/tasks/present.yml | 29 + .../openmanage/roles/idrac_user/tests/inventory | 2 + .../openmanage/roles/idrac_user/tests/test.yml | 6 + .../openmanage/roles/idrac_user/vars/main.yml | 12 + .../molecule/__create_virtual_drive.yml | 29 + .../molecule/__job_track.yml | 17 + .../molecule/default/converge.yml | 11 +- .../molecule/initialization/converge.yml | 82 +- .../plugins/module_utils/test_idrac_redfish.py | 6 +- .../tests/unit/plugins/module_utils/test_ome.py | 4 +- .../unit/plugins/module_utils/test_redfish.py | 6 +- .../plugins/module_utils/test_session_utils.py | 415 + .../unit/plugins/modules/test_idrac_diagnostics.py | 1057 ++ .../tests/unit/plugins/modules/test_idrac_reset.py | 639 +- .../unit/plugins/modules/test_idrac_session.py | 590 + .../plugins/modules/test_idrac_storage_volume.py | 1178 ++ .../tests/unit/plugins/modules/test_idrac_user.py | 379 +- .../test_ome_application_console_preferences.py | 8 +- .../test_ome_device_local_access_configuration.py | 18 +- .../plugins/modules/test_ome_device_location.py | 38 +- .../modules/test_ome_device_mgmt_network.py | 4 +- .../modules/test_ome_device_power_settings.py | 155 +- .../modules/test_ome_device_quick_deploy.py | 4 +- .../tests/unit/plugins/modules/test_ome_devices.py | 8 +- .../plugins/modules/test_redfish_storage_volume.py | 161 +- .../powerflex/.github/workflows/ansible-test.yml | 2 +- .../dellemc/powerflex/CHANGELOG.rst | 7 + ansible_collections/dellemc/powerflex/FILES.json | 73 +- .../dellemc/powerflex/MANIFEST.json | 10 +- ansible_collections/dellemc/powerflex/README.md | 52 +- .../dellemc/powerflex/changelogs/changelog.yaml | 5 + .../dellemc/powerflex/docs/CONTRIBUTING.md | 8 +- .../dellemc/powerflex/docs/INSTALLATION.md | 4 +- .../dellemc/powerflex/docs/ISSUE_TRIAGE.md | 4 +- .../dellemc/powerflex/docs/MAINTAINER_GUIDE.md | 2 +- .../dellemc/powerflex/docs/Release Notes.md | 9 +- .../dellemc/powerflex/docs/SECURITY.md | 2 +- .../dellemc/powerflex/docs/modules/device.rst | 2 +- .../dellemc/powerflex/docs/modules/fault_set.rst | 2 +- .../dellemc/powerflex/docs/modules/info.rst | 2 +- .../dellemc/powerflex/docs/modules/mdm_cluster.rst | 2 +- .../powerflex/docs/modules/protection_domain.rst | 2 +- .../docs/modules/replication_consistency_group.rst | 2 +- .../powerflex/docs/modules/replication_pair.rst | 2 +- .../powerflex/docs/modules/resource_group.rst | 2 +- .../dellemc/powerflex/docs/modules/sdc.rst | 2 +- .../dellemc/powerflex/docs/modules/sds.rst | 2 +- .../dellemc/powerflex/docs/modules/snapshot.rst | 2 +- .../powerflex/docs/modules/snapshot_policy.rst | 2 +- .../dellemc/powerflex/docs/modules/storagepool.rst | 2 +- .../dellemc/powerflex/docs/modules/volume.rst | 2 +- .../powerflex/playbooks/roles/group_vars/all | 1 + .../plugins/module_utils/storage/dell/utils.py | 2 +- .../roles/powerflex_config/tasks/main.yml | 29 +- .../roles/powerflex_sdc/tasks/install_sdc.yml | 4 +- .../roles/powerflex_sdr/tasks/add_sdr.yml | 36 +- .../roles/powerflex_sds/tasks/install_sds.yml | 26 +- .../roles/powerflex_tb/tasks/install_tb3x.yml | 1 + .../roles/powerflex_tb/tasks/uninstall_tb.yml | 27 +- .../roles/powerflex_webui/tasks/install_webui.yml | 1 + .../dellemc/powerflex/tests/sanity/ignore-2.18.txt | 14 + .../unity/.github/workflows/ansible-test.yml | 117 +- ansible_collections/dellemc/unity/CHANGELOG.rst | 8 + ansible_collections/dellemc/unity/FILES.json | 83 +- ansible_collections/dellemc/unity/MANIFEST.json | 10 +- ansible_collections/dellemc/unity/README.md | 64 +- .../dellemc/unity/changelogs/.plugin-cache.yaml | 2 +- .../dellemc/unity/changelogs/changelog.yaml | 5 + .../dellemc/unity/docs/CONTRIBUTING.md | 8 +- .../dellemc/unity/docs/INSTALLATION.md | 4 +- .../dellemc/unity/docs/ISSUE_TRIAGE.md | 4 +- .../dellemc/unity/docs/MAINTAINER_GUIDE.md | 2 +- .../dellemc/unity/docs/Release Notes.md | 12 +- ansible_collections/dellemc/unity/docs/SECURITY.md | 2 +- ansible_collections/dellemc/unity/meta/runtime.yml | 107 +- .../dellemc/unity/plugins/doc_fragments/unity.py | 4 +- .../unity/plugins/modules/consistencygroup.py | 32 +- .../dellemc/unity/plugins/modules/filesystem.py | 10 +- .../unity/plugins/modules/filesystem_snapshot.py | 170 +- .../dellemc/unity/plugins/modules/info.py | 428 +- .../dellemc/unity/plugins/modules/interface.py | 98 +- .../dellemc/unity/plugins/modules/nasserver.py | 264 +- .../dellemc/unity/plugins/modules/nfs.py | 20 +- .../dellemc/unity/plugins/modules/nfsserver.py | 100 +- .../dellemc/unity/plugins/modules/snapshot.py | 146 +- .../unity/plugins/modules/snapshotschedule.py | 8 +- .../dellemc/unity/plugins/modules/storagepool.py | 25 +- .../dellemc/unity/plugins/modules/tree_quota.py | 182 +- .../dellemc/unity/plugins/modules/user_quota.py | 328 +- .../dellemc/unity/plugins/modules/volume.py | 8 +- .../dellemc/unity/tests/requirements.txt | 7 - .../dellemc/unity/tests/sanity/ignore-2.13.txt | 32 - .../dellemc/unity/tests/sanity/ignore-2.16.txt | 26 + .../dellemc/unity/tests/sanity/ignore-2.17.txt | 18 + .../dellemc/unity/tests/unit/requirements.txt | 7 + .../fortinet/fortimanager/CHANGELOG.rst | 22 + .../fortinet/fortimanager/FILES.json | 634 +- .../fortinet/fortimanager/MANIFEST.json | 4 +- .../fortinet/fortimanager/README.md | 236 +- .../fortimanager/changelogs/changelog.yaml | 17 + .../fortimanager/changelogs/fragments/2.5.0.yml | 8 + .../fortinet/fortimanager/meta/runtime.yml | 2 +- .../plugins/module_utils/exported_schema.py | 2849 ++--- .../fortimanager/plugins/module_utils/napi.py | 148 +- .../plugins/modules/fmgr_adom_options.py | 6 +- .../plugins/modules/fmgr_antivirus_profile.py | 2 +- .../plugins/modules/fmgr_antivirus_profile_http.py | 2 +- .../plugins/modules/fmgr_apcfgprofile.py | 2 +- .../plugins/modules/fmgr_application_categories.py | 4 +- .../plugins/modules/fmgr_application_list.py | 2 +- .../modules/fmgr_application_list_entries.py | 2 +- .../plugins/modules/fmgr_certificate_template.py | 2 +- .../fortimanager/plugins/modules/fmgr_clone.py | 72 +- .../plugins/modules/fmgr_cloud_orchestaws.py | 4 +- .../modules/fmgr_cloud_orchestawsconnector.py | 4 +- ...loud_orchestawstemplate_autoscaleexistingvpc.py | 4 +- ...mgr_cloud_orchestawstemplate_autoscalenewvpc.py | 4 +- ..._cloud_orchestawstemplate_autoscaletgwnewvpc.py | 4 +- .../plugins/modules/fmgr_cloud_orchestration.py | 4 +- .../fmgr_devprof_device_profile_fortianalyzer.py | 4 +- .../fmgr_devprof_device_profile_fortiguard.py | 4 +- .../plugins/modules/fmgr_devprof_import.py | 4 +- .../fmgr_devprof_log_fortianalyzer_setting.py | 4 +- .../modules/fmgr_devprof_log_syslogd_filter.py | 56 +- .../fmgr_devprof_log_syslogd_filter_excludelist.py | 18 +- ...evprof_log_syslogd_filter_excludelist_fields.py | 12 +- .../fmgr_devprof_log_syslogd_filter_freestyle.py | 10 +- .../modules/fmgr_devprof_log_syslogd_setting.py | 12 +- ..._devprof_log_syslogd_setting_customfieldname.py | 8 +- .../plugins/modules/fmgr_devprof_system_global.py | 2 +- .../plugins/modules/fmgr_dvm_cmd_import_devlist.py | 8 +- .../modules/fmgr_dvmdb_adom_objectmember.py | 2 +- .../plugins/modules/fmgr_dvmdb_device.py | 8 +- .../modules/fmgr_dvmdb_device_replace_sn.py | 2 +- .../plugins/modules/fmgr_dvmdb_folder.py | 4 +- .../modules/fmgr_dvmdb_group_objectmember.py | 2 +- .../plugins/modules/fmgr_dvmdb_metafields_adom.py | 4 +- .../modules/fmgr_dvmdb_metafields_device.py | 4 +- .../plugins/modules/fmgr_dvmdb_metafields_group.py | 4 +- .../plugins/modules/fmgr_dvmdb_script_execute.py | 14 +- .../modules/fmgr_dvmdb_script_objectmember.py | 2 +- .../plugins/modules/fmgr_dvmdb_upgrade.py | 4 +- .../plugins/modules/fmgr_dvmdb_workflow_approve.py | 4 +- .../plugins/modules/fmgr_dvmdb_workflow_discard.py | 4 +- .../plugins/modules/fmgr_dvmdb_workflow_drop.py | 4 +- .../plugins/modules/fmgr_dvmdb_workflow_reject.py | 4 +- .../plugins/modules/fmgr_dvmdb_workflow_repair.py | 4 +- .../plugins/modules/fmgr_dvmdb_workflow_revert.py | 4 +- .../plugins/modules/fmgr_dvmdb_workflow_review.py | 4 +- .../plugins/modules/fmgr_dvmdb_workflow_save.py | 4 +- .../plugins/modules/fmgr_dvmdb_workflow_submit.py | 4 +- .../plugins/modules/fmgr_dynamic_address.py | 4 +- .../fmgr_dynamic_address_dynamicaddrmapping.py | 4 +- .../modules/fmgr_dynamic_certificate_local.py | 4 +- ...mgr_dynamic_certificate_local_dynamicmapping.py | 4 +- .../modules/fmgr_dynamic_input_interface.py | 4 +- .../fmgr_dynamic_input_interface_dynamicmapping.py | 4 +- .../plugins/modules/fmgr_dynamic_interface.py | 6 +- .../fmgr_dynamic_interface_dynamicmapping.py | 4 +- .../fmgr_dynamic_interface_platformmapping.py | 4 +- .../plugins/modules/fmgr_dynamic_ippool.py | 4 +- .../modules/fmgr_dynamic_multicast_interface.py | 4 +- ...r_dynamic_multicast_interface_dynamicmapping.py | 4 +- .../plugins/modules/fmgr_dynamic_vip.py | 4 +- .../modules/fmgr_dynamic_virtualwanlink_members.py | 98 +- ...ynamic_virtualwanlink_members_dynamicmapping.py | 48 +- .../fmgr_dynamic_virtualwanlink_neighbor.py | 28 +- ...namic_virtualwanlink_neighbor_dynamicmapping.py | 16 +- .../modules/fmgr_dynamic_virtualwanlink_server.py | 22 +- ...dynamic_virtualwanlink_server_dynamicmapping.py | 12 +- .../plugins/modules/fmgr_dynamic_vpntunnel.py | 4 +- .../fmgr_dynamic_vpntunnel_dynamicmapping.py | 4 +- .../plugins/modules/fmgr_endpointcontrol_fctems.py | 14 +- .../plugins/modules/fmgr_export_playbooks.py | 116 +- .../modules/fmgr_extendercontroller_simprofile.py | 4 +- ...endercontroller_simprofile_autoswitchprofile.py | 4 +- .../modules/fmgr_extendercontroller_template.py | 4 +- .../fortimanager/plugins/modules/fmgr_fact.py | 115 +- .../fmgr_firewall_accessproxyvirtualhost.py | 2 +- .../plugins/modules/fmgr_firewall_address.py | 2 +- .../plugins/modules/fmgr_firewall_address6.py | 2 +- .../plugins/modules/fmgr_firewall_addrgrp.py | 2 +- .../plugins/modules/fmgr_firewall_addrgrp6.py | 2 +- .../plugins/modules/fmgr_firewall_casbprofile.py | 4 +- .../fmgr_firewall_casbprofile_saasapplication.py | 4 +- ...ewall_casbprofile_saasapplication_accessrule.py | 4 +- ...ll_casbprofile_saasapplication_customcontrol.py | 4 +- ...profile_saasapplication_customcontrol_option.py | 4 +- .../plugins/modules/fmgr_firewall_ippool.py | 8 +- .../modules/fmgr_firewall_ippool_dynamicmapping.py | 4 +- .../plugins/modules/fmgr_firewall_ippoolgrp.py | 10 +- .../modules/fmgr_firewall_multicastaddress.py | 2 +- .../modules/fmgr_firewall_multicastaddress6.py | 2 +- .../fmgr_firewall_profileprotocoloptions.py | 2 +- .../fmgr_firewall_profileprotocoloptions_ftp.py | 2 +- .../plugins/modules/fmgr_firewall_proxyaddress.py | 2 +- .../plugins/modules/fmgr_firewall_proxyaddrgrp.py | 2 +- .../plugins/modules/fmgr_firewall_sslsshprofile.py | 4 +- .../modules/fmgr_firewall_sslsshprofile_ssh.py | 4 +- .../plugins/modules/fmgr_firewall_vendormac.py | 10 +- .../plugins/modules/fmgr_firewall_vip6.py | 4 +- .../modules/fmgr_firewall_vip6_dynamicmapping.py | 2 +- .../plugins/modules/fmgr_fmg_device_blueprint.py | 22 +- .../fmgr_fmg_fabric_authorization_template.py | 4 +- ..._fmg_fabric_authorization_template_platforms.py | 4 +- .../plugins/modules/fmgr_fmg_variable.py | 4 +- .../modules/fmgr_fmg_variable_dynamicmapping.py | 4 +- .../plugins/modules/fmgr_fmupdate_fdssetting.py | 6 +- .../plugins/modules/fmgr_fmupdate_fwmsetting.py | 32 +- .../fmgr_fmupdate_fwmsetting_upgradetimeout.py | 28 +- .../plugins/modules/fmgr_fmupdate_service.py | 2 +- .../modules/fmgr_fmupdate_webspam_fgdsetting.py | 10 +- .../fortimanager/plugins/modules/fmgr_fsp_vlan.py | 58 +- .../modules/fmgr_fsp_vlan_dynamicmapping.py | 6 +- .../fmgr_fsp_vlan_dynamicmapping_interface.py | 6 +- .../plugins/modules/fmgr_fsp_vlan_interface.py | 54 +- .../plugins/modules/fmgr_gtp_iewhitelist.py | 10 +- .../modules/fmgr_gtp_iewhitelist_entries.py | 6 +- .../plugins/modules/fmgr_gtp_messagefilterv0v1.py | 2 +- .../modules/fmgr_ips_baseline_sensor_filter.py | 4 +- .../modules/fmgr_ips_baseline_sensor_override.py | 4 +- .../fmgr_ips_baseline_sensor_override_exemptip.py | 4 +- .../plugins/modules/fmgr_log_npuserver.py | 50 +- .../modules/fmgr_log_npuserver_servergroup.py | 20 +- .../modules/fmgr_log_npuserver_serverinfo.py | 18 +- .../modules/fmgr_metafields_system_admin_user.py | 4 +- .../fortimanager/plugins/modules/fmgr_move.py | 10 +- .../plugins/modules/fmgr_pkg_central_dnat.py | 2 +- .../plugins/modules/fmgr_pkg_central_dnat6.py | 4 +- ...kg_firewall_consolidated_policy_sectionvalue.py | 2 +- ...kg_firewall_explicitproxypolicy_sectionvalue.py | 2 +- .../modules/fmgr_pkg_firewall_hyperscalepolicy.py | 74 +- .../fmgr_pkg_firewall_hyperscalepolicy46.py | 36 +- .../modules/fmgr_pkg_firewall_hyperscalepolicy6.py | 44 +- .../fmgr_pkg_firewall_hyperscalepolicy64.py | 48 +- ...r_pkg_firewall_interfacepolicy6_sectionvalue.py | 2 +- ...gr_pkg_firewall_interfacepolicy_sectionvalue.py | 2 +- .../plugins/modules/fmgr_pkg_firewall_policy.py | 12 +- .../plugins/modules/fmgr_pkg_firewall_policy46.py | 2 +- .../plugins/modules/fmgr_pkg_firewall_policy6.py | 4 +- .../plugins/modules/fmgr_pkg_firewall_policy64.py | 2 +- .../fmgr_pkg_firewall_policy6_sectionvalue.py | 2 +- .../fmgr_pkg_firewall_policy_sectionvalue.py | 2 +- .../modules/fmgr_pkg_firewall_policy_vpndstnode.py | 4 +- .../modules/fmgr_pkg_firewall_policy_vpnsrcnode.py | 4 +- .../modules/fmgr_pkg_firewall_proxypolicy.py | 2 +- .../fmgr_pkg_firewall_proxypolicy_sectionvalue.py | 2 +- ...mgr_pkg_firewall_securitypolicy_sectionvalue.py | 2 +- .../plugins/modules/fmgr_pkg_footer_policy.py | 20 +- .../plugins/modules/fmgr_pkg_header_policy.py | 20 +- .../modules/fmgr_pm_config_meta_reference.py | 12 +- .../fmgr_pm_config_metafields_firewall_address.py | 4 +- .../fmgr_pm_config_metafields_firewall_addrgrp.py | 4 +- ...pm_config_metafields_firewall_centralsnatmap.py | 4 +- .../fmgr_pm_config_metafields_firewall_policy.py | 4 +- ...pm_config_metafields_firewall_service_custom.py | 4 +- ..._pm_config_metafields_firewall_service_group.py | 4 +- ...ck_firewall_consolidated_policy_sectionvalue.py | 2 +- .../fmgr_pm_config_pblock_firewall_policy.py | 8 +- ..._config_pblock_firewall_policy6_sectionvalue.py | 2 +- ...m_config_pblock_firewall_policy_sectionvalue.py | 2 +- ..._pblock_firewall_securitypolicy_sectionvalue.py | 2 +- .../plugins/modules/fmgr_pm_devprof_adom.py | 2 +- .../plugins/modules/fmgr_pm_devprof_pkg.py | 4 +- .../plugins/modules/fmgr_pm_devprof_scopemember.py | 6 +- .../plugins/modules/fmgr_pm_pblock_adom.py | 4 +- .../plugins/modules/fmgr_pm_pblock_obj.py | 4 +- .../fortimanager/plugins/modules/fmgr_pm_pkg.py | 16 +- .../plugins/modules/fmgr_pm_pkg_adom.py | 16 +- .../plugins/modules/fmgr_pm_pkg_global.py | 16 +- .../plugins/modules/fmgr_pm_pkg_scopemember.py | 2 +- .../plugins/modules/fmgr_pm_wanprof_adom.py | 4 +- .../plugins/modules/fmgr_pm_wanprof_pkg.py | 4 +- .../plugins/modules/fmgr_pm_wanprof_scopemember.py | 6 +- .../fortimanager/plugins/modules/fmgr_rename.py | 64 +- .../plugins/modules/fmgr_sctpfilter_profile.py | 16 +- .../modules/fmgr_sctpfilter_profile_ppidfilters.py | 10 +- .../modules/fmgr_securityconsole_cliprof_check.py | 4 +- .../modules/fmgr_securityconsole_install_device.py | 2 +- .../fmgr_securityconsole_install_objects_v2.py | 4 +- .../modules/fmgr_securityconsole_pblock_clone.py | 4 +- .../fmgr_securityconsole_template_cli_preview.py | 4 +- .../modules/fmgr_switchcontroller_managedswitch.py | 8 +- .../plugins/modules/fmgr_sys_cloud_orchest.py | 4 +- .../plugins/modules/fmgr_sys_hitcount.py | 14 +- .../plugins/modules/fmgr_sys_reboot.py | 6 +- .../plugins/modules/fmgr_sys_task_result.py | 8 +- .../plugins/modules/fmgr_system_admin_profile.py | 2 +- .../plugins/modules/fmgr_system_admin_setting.py | 4 +- .../plugins/modules/fmgr_system_admin_user.py | 2 +- .../fortimanager/plugins/modules/fmgr_system_dm.py | 4 +- .../plugins/modules/fmgr_system_docker.py | 4 +- .../modules/fmgr_system_externalresource.py | 2 +- .../plugins/modules/fmgr_system_fortiguard.py | 14 +- .../modules/fmgr_system_fortiview_autocache.py | 14 +- .../modules/fmgr_system_fortiview_setting.py | 2 +- .../plugins/modules/fmgr_system_geoipcountry.py | 2 +- .../plugins/modules/fmgr_system_global.py | 250 +- .../plugins/modules/fmgr_system_guiact.py | 20 +- .../fortimanager/plugins/modules/fmgr_system_ha.py | 2 +- .../modules/fmgr_system_locallog_disk_filter.py | 4 +- .../modules/fmgr_system_locallog_disk_setting.py | 2 +- .../fmgr_system_locallog_fortianalyzer2_filter.py | 4 +- .../fmgr_system_locallog_fortianalyzer3_filter.py | 4 +- .../fmgr_system_locallog_fortianalyzer_filter.py | 4 +- .../modules/fmgr_system_locallog_memory_filter.py | 4 +- .../modules/fmgr_system_locallog_setting.py | 2 +- .../fmgr_system_locallog_syslogd2_filter.py | 4 +- .../fmgr_system_locallog_syslogd2_setting.py | 6 +- .../fmgr_system_locallog_syslogd3_filter.py | 4 +- .../fmgr_system_locallog_syslogd3_setting.py | 6 +- .../modules/fmgr_system_locallog_syslogd_filter.py | 4 +- .../fmgr_system_locallog_syslogd_setting.py | 6 +- .../plugins/modules/fmgr_system_log_settings.py | 28 +- .../fmgr_system_log_settings_rollinganalyzer.py | 6 +- .../fmgr_system_log_settings_rollinglocal.py | 6 +- .../fmgr_system_log_settings_rollingregular.py | 6 +- .../plugins/modules/fmgr_system_log_topology.py | 6 +- .../plugins/modules/fmgr_system_mail.py | 2 +- .../plugins/modules/fmgr_system_meta.py | 2 +- .../modules/fmgr_system_meta_sysmetafields.py | 2 +- .../plugins/modules/fmgr_system_npu.py | 735 +- .../modules/fmgr_system_npu_backgroundssescan.py | 20 +- .../plugins/modules/fmgr_system_npu_dosoptions.py | 8 +- .../modules/fmgr_system_npu_dswdtsprofile.py | 10 +- .../modules/fmgr_system_npu_dswqueuedtsprofile.py | 12 +- .../plugins/modules/fmgr_system_npu_fpanomaly.py | 141 +- .../plugins/modules/fmgr_system_npu_hpe.py | 44 +- .../modules/fmgr_system_npu_ipreassembly.py | 8 +- .../plugins/modules/fmgr_system_npu_isfnpqueues.py | 18 +- .../plugins/modules/fmgr_system_npu_npqueues.py | 194 +- .../fmgr_system_npu_npqueues_ethernettype.py | 10 +- .../modules/fmgr_system_npu_npqueues_ipprotocol.py | 10 +- .../modules/fmgr_system_npu_npqueues_ipservice.py | 14 +- .../modules/fmgr_system_npu_npqueues_profile.py | 152 +- .../modules/fmgr_system_npu_npqueues_scheduler.py | 6 +- .../plugins/modules/fmgr_system_npu_portcpumap.py | 6 +- .../plugins/modules/fmgr_system_npu_portnpumap.py | 6 +- .../modules/fmgr_system_npu_portpathoption.py | 4 +- .../modules/fmgr_system_npu_priorityprotocol.py | 8 +- .../plugins/modules/fmgr_system_npu_ssehascan.py | 8 +- .../modules/fmgr_system_npu_tcptimeoutprofile.py | 16 +- .../modules/fmgr_system_npu_udptimeoutprofile.py | 6 +- .../plugins/modules/fmgr_system_ntp.py | 4 +- .../plugins/modules/fmgr_system_ntp_ntpserver.py | 4 +- .../plugins/modules/fmgr_system_objecttag.py | 4 +- .../plugins/modules/fmgr_system_replacemsggroup.py | 28 +- .../fmgr_system_replacemsggroup_alertmail.py | 2 +- .../modules/fmgr_system_replacemsggroup_mm1.py | 6 +- .../modules/fmgr_system_replacemsggroup_mm3.py | 6 +- .../modules/fmgr_system_replacemsggroup_mm4.py | 6 +- .../modules/fmgr_system_replacemsggroup_mm7.py | 6 +- .../modules/fmgr_system_replacemsggroup_nacquar.py | 2 +- .../modules/fmgr_system_report_autocache.py | 2 +- .../plugins/modules/fmgr_system_sdnconnector.py | 12 +- ...fmgr_system_sdnconnector_externalaccountlist.py | 2 +- .../fmgr_system_sdnconnector_gcpprojectlist.py | 6 +- .../plugins/modules/fmgr_system_socfabric.py | 2 +- .../plugins/modules/fmgr_system_sslciphersuites.py | 8 +- .../plugins/modules/fmgr_system_syslog.py | 8 +- .../plugins/modules/fmgr_system_webproxy.py | 14 +- .../fortimanager/plugins/modules/fmgr_template.py | 4 +- .../plugins/modules/fmgr_templategroup.py | 4 +- .../plugins/modules/fmgr_user_certificate.py | 14 +- .../plugins/modules/fmgr_user_clearpass.py | 4 +- .../plugins/modules/fmgr_user_connector.py | 4 +- .../plugins/modules/fmgr_user_device.py | 2 +- .../plugins/modules/fmgr_user_flexvm.py | 4 +- .../fortimanager/plugins/modules/fmgr_user_fsso.py | 4 +- .../modules/fmgr_user_fsso_dynamicmapping.py | 2 +- ..._user_group_dynamicmapping_sslvpnoschecklist.py | 4 +- .../fortimanager/plugins/modules/fmgr_user_json.py | 4 +- .../plugins/modules/fmgr_user_krbkeytab.py | 2 +- .../fortimanager/plugins/modules/fmgr_user_ldap.py | 12 +- .../modules/fmgr_user_ldap_dynamicmapping.py | 10 +- .../plugins/modules/fmgr_user_local.py | 2 +- .../fortimanager/plugins/modules/fmgr_user_nsx.py | 6 +- .../plugins/modules/fmgr_user_nsx_service.py | 4 +- .../plugins/modules/fmgr_user_pxgrid.py | 4 +- .../fortimanager/plugins/modules/fmgr_user_saml.py | 40 +- .../modules/fmgr_user_saml_dynamicmapping.py | 40 +- .../plugins/modules/fmgr_user_vcenter.py | 4 +- .../plugins/modules/fmgr_user_vcenter_rule.py | 4 +- .../fortimanager/plugins/modules/fmgr_vap.py | 16 +- .../plugins/modules/fmgr_vap_dynamicmapping.py | 8 +- .../fmgr_videofilter_youtubechannelfilter.py | 2 +- .../plugins/modules/fmgr_vpn_ssl_settings.py | 6 +- .../plugins/modules/fmgr_vpnmgr_node.py | 20 +- .../plugins/modules/fmgr_vpnmgr_node_iprange.py | 4 +- .../modules/fmgr_vpnmgr_node_ipv4excluderange.py | 4 +- .../modules/fmgr_vpnmgr_node_protectedsubnet.py | 4 +- .../modules/fmgr_vpnmgr_node_summaryaddr.py | 4 +- .../plugins/modules/fmgr_vpnmgr_vpntable.py | 4 +- .../plugins/modules/fmgr_vpnsslweb_portal.py | 12 +- .../modules/fmgr_vpnsslweb_portal_bookmarkgroup.py | 8 +- ...mgr_vpnsslweb_portal_bookmarkgroup_bookmarks.py | 8 +- .../plugins/modules/fmgr_wanprof_system_sdwan.py | 4 +- .../fmgr_wanprof_system_sdwan_healthcheck.py | 2 +- .../modules/fmgr_wanprof_system_sdwan_members.py | 7 +- .../modules/fmgr_wanprof_system_virtualwanlink.py | 6 +- ...gr_wanprof_system_virtualwanlink_healthcheck.py | 4 +- .../fmgr_wanprof_system_virtualwanlink_members.py | 2 +- .../plugins/modules/fmgr_webfilter_categories.py | 4 +- .../plugins/modules/fmgr_webfilter_profile.py | 2 +- .../modules/fmgr_webfilter_profile_ftgdwf.py | 2 +- .../plugins/modules/fmgr_wtpprofile.py | 2 +- .../fortimanager/tests/sanity/ignore-2.14.txt | 16 - .../fortimanager/tests/sanity/ignore-2.15.txt | 16 - .../fortimanager/tests/sanity/ignore-2.16.txt | 16 - .../.github/workflows/ansible-test-plugins.yml | 47 - ansible_collections/gluster/gluster/.gitignore | 2 - ansible_collections/gluster/gluster/CHANGELOG.rst | 33 - ansible_collections/gluster/gluster/FILES.json | 166 - ansible_collections/gluster/gluster/LICENSE | 288 - ansible_collections/gluster/gluster/MANIFEST.json | 32 - ansible_collections/gluster/gluster/README.md | 37 - .../gluster/gluster/changelogs/changelog.yaml | 31 - .../gluster/gluster/changelogs/config.yaml | 31 - .../gluster/gluster/meta/runtime.yml | 2 - .../gluster/gluster/plugins/modules/geo_rep.py | 347 - .../gluster/plugins/modules/gluster_heal_info.py | 205 - .../gluster/plugins/modules/gluster_peer.py | 177 - .../gluster/plugins/modules/gluster_volume.py | 621 -- .../gluster/gluster/tests/sanity/ignore-2.10.txt | 4 - .../gluster/gluster/tests/sanity/ignore-2.11.txt | 4 - .../grafana/.github/workflows/loki-molecule.yml | 44 + .../grafana/.github/workflows/mimir-molecule.yml | 51 + .../.github/workflows/promtail-molecule.yml | 44 + ansible_collections/grafana/grafana/.gitignore | 1 + ansible_collections/grafana/grafana/CHANGELOG.rst | 63 + ansible_collections/grafana/grafana/CODEOWNERS | 11 +- ansible_collections/grafana/grafana/FILES.json | 891 +- ansible_collections/grafana/grafana/MANIFEST.json | 7 +- ansible_collections/grafana/grafana/Pipfile | 2 +- ansible_collections/grafana/grafana/Pipfile.lock | 419 +- ansible_collections/grafana/grafana/README.md | 18 +- .../grafana/grafana/changelogs/.plugin-cache.yaml | 2 +- .../grafana/grafana/changelogs/changelog.yaml | 47 +- .../grafana/grafana/examples/alloy.yaml | 24 + .../grafana/examples/loki-basic-no-options.yml | 6 + ...i-local-filesystem-with-retention-and-alert.yml | 70 + .../grafana/grafana/examples/mimir-3-hosts.yaml | 32 + .../examples/monitor-multiple-instance-otel.md | 193 + .../examples/monitor-multiple-instances-agent.md | 184 + .../grafana/examples/monitor-multiple-instances.md | 184 - .../grafana/examples/opentelemetry-collector.yml | 43 + .../grafana/examples/promtail-multiple-logs.yml | 24 + .../grafana/plugins/modules/cloud_plugin.py | 2 +- .../grafana/grafana/requirements.txt | 6 +- .../grafana/grafana/requirements.yml | 2 + .../grafana/grafana/roles/alloy/README.md | 71 + .../grafana/grafana/roles/alloy/defaults/main.yml | 45 + .../grafana/grafana/roles/alloy/handlers/main.yml | 5 + .../grafana/grafana/roles/alloy/meta/main.yml | 24 + .../grafana/roles/alloy/tasks/configure.yml | 28 + .../grafana/grafana/roles/alloy/tasks/install.yml | 51 + .../grafana/grafana/roles/alloy/tasks/main.yml | 11 + .../grafana/grafana/roles/alloy/tasks/service.yml | 19 + .../grafana/roles/alloy/templates/alloy.service.j2 | 32 + .../grafana/roles/alloy/templates/config.alloy.j2 | 1 + .../grafana/roles/alloy/templates/environment.j2 | 10 + .../grafana/grafana/roles/grafana/README.md | 12 + .../grafana/roles/grafana/defaults/main.yml | 15 + .../grafana/grafana/roles/grafana/meta/main.yml | 2 +- .../grafana/roles/grafana/tasks/dashboards.yml | 2 + .../grafana/roles/grafana/tasks/datasources.yml | 2 +- .../grafana/roles/grafana/tasks/preflight.yml | 21 +- .../grafana/roles/grafana/templates/grafana.ini.j2 | 8 + .../grafana/grafana/roles/grafana_agent/README.md | 6 +- .../grafana/roles/grafana_agent/defaults/main.yaml | 3 + .../templates/grafana-agent.service.j2 | 3 + .../grafana/grafana/roles/loki/README.md | 238 + .../grafana/grafana/roles/loki/defaults/main.yml | 107 + .../grafana/grafana/roles/loki/handlers/main.yml | 9 + .../grafana/grafana/roles/loki/meta/main.yml | 28 + .../roles/loki/molecule/default/converge.yml | 5 + .../roles/loki/molecule/default/molecule.yml | 20 + .../grafana/grafana/roles/loki/tasks/deploy.yml | 146 + .../grafana/grafana/roles/loki/tasks/main.yml | 23 + .../grafana/roles/loki/tasks/setup-Debian.yml | 7 + .../grafana/roles/loki/tasks/setup-RedHat.yml | 8 + .../grafana/grafana/roles/loki/tasks/uninstall.yml | 51 + .../grafana/roles/loki/templates/config.yml.j2 | 99 + .../grafana/roles/loki/templates/rules.yml.j2 | 3 + .../grafana/grafana/roles/loki/vars/Debian.yml | 5 + .../grafana/grafana/roles/loki/vars/RedHat.yml | 2 + .../grafana/grafana/roles/mimir/README.md | 76 + .../grafana/grafana/roles/mimir/defaults/main.yml | 37 + .../grafana/grafana/roles/mimir/files/.gitkeep | 0 .../grafana/grafana/roles/mimir/handlers/main.yml | 6 + .../grafana/grafana/roles/mimir/meta/main.yml | 37 + .../roles/mimir/molecule/default/converge.yml | 33 + .../roles/mimir/molecule/default/molecule.yml | 60 + .../mimir/molecule/default/tests/test_default.py | 36 + .../roles/mimir/molecule/test-requirements.txt | 6 + .../grafana/grafana/roles/mimir/tasks/deploy.yml | 104 + .../grafana/grafana/roles/mimir/tasks/main.yml | 17 + .../grafana/roles/mimir/tasks/setup-Debian.yml | 7 + .../grafana/roles/mimir/tasks/setup-Redhat.yml | 8 + .../grafana/roles/mimir/tasks/uninstall.yml | 51 + .../grafana/grafana/roles/mimir/templates/.gitkeep | 0 .../grafana/roles/mimir/templates/config.yml.j2 | 52 + .../grafana/grafana/roles/mimir/vars/.gitkeep | 0 .../roles/opentelemetry_collector/README.md | 100 + .../opentelemetry_collector/defaults/main.yml | 27 + .../opentelemetry_collector/handlers/main.yml | 5 + .../roles/opentelemetry_collector/meta/main.yml | 25 + .../opentelemetry_collector/tasks/configure.yml | 18 + .../opentelemetry_collector/tasks/install.yml | 56 + .../roles/opentelemetry_collector/tasks/main.yml | 11 + .../opentelemetry_collector/tasks/service.yml | 19 + .../templates/otel_collector.service.j2 | 13 + .../templates/otel_collector_config.yml.j2 | 24 + .../grafana/grafana/roles/promtail/README.md | 164 + .../grafana/roles/promtail/defaults/main.yml | 47 + .../grafana/roles/promtail/handlers/main.yml | 9 + .../grafana/grafana/roles/promtail/meta/main.yml | 28 + .../roles/promtail/molecule/default/converge.yml | 15 + .../roles/promtail/molecule/default/molecule.yml | 20 + .../roles/promtail/tasks/acl_configuration.yml | 116 + .../grafana/roles/promtail/tasks/deploy.yml | 139 + .../grafana/grafana/roles/promtail/tasks/main.yml | 23 + .../grafana/roles/promtail/tasks/setup-Debian.yml | 14 + .../grafana/roles/promtail/tasks/setup-RedHat.yml | 9 + .../grafana/roles/promtail/tasks/uninstall.yml | 119 + .../grafana/roles/promtail/templates/config.yml.j2 | 22 + .../roles/promtail/templates/promtail.service.j2 | 18 + .../roles/promtail/templates/promtail_acl.j2 | 13 + .../grafana/grafana/roles/promtail/vars/Debian.yml | 5 + .../grafana/grafana/roles/promtail/vars/RedHat.yml | 2 + ansible_collections/hetzner/hcloud/.ansible-lint | 2 - .../hcloud/.azure-pipelines/azure-pipelines.yml | 34 - .../hcloud/.github/release-please-manifest.json | 2 +- ansible_collections/hetzner/hcloud/.gitlab-ci.yml | 2 +- .../hetzner/hcloud/.pre-commit-config.yaml | 12 +- ansible_collections/hetzner/hcloud/CHANGELOG.rst | 55 + ansible_collections/hetzner/hcloud/FILES.json | 362 +- ansible_collections/hetzner/hcloud/MANIFEST.json | 4 +- ansible_collections/hetzner/hcloud/Makefile | 8 +- .../hetzner/hcloud/changelogs/changelog.yaml | 61 + .../hetzner/hcloud/changelogs/dev-changelog.md | 45 + .../hetzner/hcloud/meta/runtime.yml | 2 +- .../hetzner/hcloud/plugins/inventory/hcloud.py | 145 +- .../hetzner/hcloud/plugins/module_utils/hcloud.py | 27 + .../plugins/module_utils/vendor/hcloud/_version.py | 2 +- .../module_utils/vendor/hcloud/core/domain.py | 18 + .../module_utils/vendor/hcloud/firewalls/domain.py | 4 +- .../vendor/hcloud/floating_ips/domain.py | 4 +- .../module_utils/vendor/hcloud/images/client.py | 22 +- .../vendor/hcloud/load_balancers/domain.py | 12 +- .../module_utils/vendor/hcloud/networks/domain.py | 4 +- .../vendor/hcloud/placement_groups/domain.py | 4 +- .../vendor/hcloud/primary_ips/domain.py | 4 +- .../module_utils/vendor/hcloud/servers/domain.py | 4 +- .../hetzner/hcloud/plugins/module_utils/version.py | 2 +- .../hetzner/hcloud/plugins/modules/certificate.py | 21 +- .../hcloud/plugins/modules/certificate_info.py | 33 +- .../hcloud/plugins/modules/datacenter_info.py | 9 +- .../hetzner/hcloud/plugins/modules/firewall.py | 29 +- .../hcloud/plugins/modules/firewall_info.py | 29 +- .../hcloud/plugins/modules/firewall_resource.py | 7 +- .../hetzner/hcloud/plugins/modules/floating_ip.py | 25 +- .../hcloud/plugins/modules/floating_ip_info.py | 34 +- .../hetzner/hcloud/plugins/modules/image_info.py | 31 +- .../hetzner/hcloud/plugins/modules/iso_info.py | 9 +- .../hcloud/plugins/modules/load_balancer.py | 50 +- .../hcloud/plugins/modules/load_balancer_info.py | 79 +- .../plugins/modules/load_balancer_network.py | 15 +- .../plugins/modules/load_balancer_service.py | 39 +- .../hcloud/plugins/modules/load_balancer_target.py | 17 +- .../plugins/modules/load_balancer_type_info.py | 27 +- .../hcloud/plugins/modules/location_info.py | 23 +- .../hetzner/hcloud/plugins/modules/network.py | 23 +- .../hetzner/hcloud/plugins/modules/network_info.py | 99 +- .../hcloud/plugins/modules/placement_group.py | 7 +- .../hetzner/hcloud/plugins/modules/primary_ip.py | 97 +- .../hcloud/plugins/modules/primary_ip_info.py | 44 +- .../hetzner/hcloud/plugins/modules/rdns.py | 19 +- .../hetzner/hcloud/plugins/modules/route.py | 11 +- .../hetzner/hcloud/plugins/modules/server.py | 675 +- .../hetzner/hcloud/plugins/modules/server_info.py | 56 +- .../hcloud/plugins/modules/server_network.py | 18 +- .../hcloud/plugins/modules/server_type_info.py | 49 +- .../hetzner/hcloud/plugins/modules/ssh_key.py | 9 +- .../hetzner/hcloud/plugins/modules/ssh_key_info.py | 27 +- .../hetzner/hcloud/plugins/modules/subnetwork.py | 15 +- .../hetzner/hcloud/plugins/modules/volume.py | 33 +- .../hetzner/hcloud/plugins/modules/volume_info.py | 32 +- ansible_collections/hetzner/hcloud/pyproject.toml | 5 + .../hetzner/hcloud/requirements.txt | 4 +- .../hetzner/hcloud/scripts/vendor.py | 2 +- .../tests/integration/cloud-config-hcloud.ini.in | 2 + .../integration/common/defaults/main/common.yml | 2 +- .../tests/integration/targets/certificate/aliases | 1 + .../targets/certificate/defaults/main/common.yml | 2 +- .../integration/targets/certificate_info/aliases | 1 + .../certificate_info/defaults/main/common.yml | 2 +- .../integration/targets/datacenter_info/aliases | 1 + .../datacenter_info/defaults/main/common.yml | 2 +- .../tests/integration/targets/firewall/aliases | 1 + .../targets/firewall/defaults/main/common.yml | 2 +- .../integration/targets/firewall/tasks/cleanup.yml | 11 +- .../integration/targets/firewall/tasks/test.yml | 2 +- .../integration/targets/firewall_info/aliases | 3 +- .../targets/firewall_info/defaults/main/common.yml | 2 +- .../targets/firewall_info/tasks/cleanup.yml | 11 +- .../integration/targets/firewall_resource/aliases | 3 +- .../firewall_resource/defaults/main/common.yml | 2 +- .../targets/firewall_resource/tasks/cleanup.yml | 11 +- .../tests/integration/targets/floating_ip/aliases | 1 + .../targets/floating_ip/defaults/main/common.yml | 2 +- .../integration/targets/floating_ip/tasks/test.yml | 11 +- .../integration/targets/floating_ip_info/aliases | 1 + .../floating_ip_info/defaults/main/common.yml | 2 +- .../tests/integration/targets/image_info/aliases | 1 + .../targets/image_info/defaults/main/common.yml | 2 +- .../tests/integration/targets/iso_info/aliases | 1 + .../targets/iso_info/defaults/main/common.yml | 2 +- .../integration/targets/load_balancer/aliases | 1 + .../targets/load_balancer/defaults/main/common.yml | 2 +- .../targets/load_balancer/tasks/test.yml | 3 +- .../integration/targets/load_balancer_info/aliases | 1 + .../load_balancer_info/defaults/main/common.yml | 2 +- .../targets/load_balancer_info/tasks/prepare.yml | 2 +- .../targets/load_balancer_network/aliases | 1 + .../load_balancer_network/defaults/main/common.yml | 2 +- .../targets/load_balancer_service/aliases | 1 + .../load_balancer_service/defaults/main/common.yml | 2 +- .../targets/load_balancer_target/aliases | 1 + .../load_balancer_target/defaults/main/common.yml | 2 +- .../targets/load_balancer_target/tasks/test.yml | 2 +- .../targets/load_balancer_type_info/aliases | 1 + .../defaults/main/common.yml | 2 +- .../integration/targets/location_info/aliases | 1 + .../targets/location_info/defaults/main/common.yml | 2 +- .../tests/integration/targets/network/aliases | 2 +- .../targets/network/defaults/main/common.yml | 2 +- .../targets/network/defaults/main/main.yml | 1 - .../integration/targets/network/tasks/cleanup.yml | 5 + .../integration/targets/network/tasks/test.yml | 314 +- .../tests/integration/targets/network_info/aliases | 1 + .../targets/network_info/defaults/main/common.yml | 2 +- .../integration/targets/placement_group/aliases | 1 + .../placement_group/defaults/main/common.yml | 2 +- .../targets/placement_group/tasks/test.yml | 2 +- .../tests/integration/targets/primary_ip/aliases | 1 + .../targets/primary_ip/defaults/main/common.yml | 2 +- .../targets/primary_ip/tasks/cleanup.yml | 10 + .../targets/primary_ip/tasks/prepare.yml | 10 + .../integration/targets/primary_ip/tasks/test.yml | 277 +- .../integration/targets/primary_ip_info/aliases | 1 + .../primary_ip_info/defaults/main/common.yml | 2 +- .../hcloud/tests/integration/targets/rdns/aliases | 1 + .../targets/rdns/defaults/main/common.yml | 2 +- .../hcloud/tests/integration/targets/route/aliases | 1 + .../targets/route/defaults/main/common.yml | 2 +- .../tests/integration/targets/server/aliases | 1 + .../targets/server/defaults/main/common.yml | 2 +- .../targets/server/tasks/test_basic.yml | 9 +- .../targets/server/tasks/test_firewalls.yml | 4 +- .../targets/server/tasks/test_validation.yml | 6 +- .../tests/integration/targets/server_info/aliases | 1 + .../targets/server_info/defaults/main/common.yml | 2 +- .../targets/server_info/tasks/prepare.yml | 2 +- .../integration/targets/server_network/aliases | 2 +- .../server_network/defaults/main/common.yml | 2 +- .../targets/server_network/tasks/cleanup.yml | 10 + .../targets/server_network/tasks/prepare.yml | 24 + .../targets/server_network/tasks/test.yml | 234 +- .../integration/targets/server_type_info/aliases | 1 + .../server_type_info/defaults/main/common.yml | 2 +- .../tests/integration/targets/ssh_key/aliases | 1 + .../targets/ssh_key/defaults/main/common.yml | 2 +- .../integration/targets/ssh_key/tasks/test.yml | 3 +- .../tests/integration/targets/ssh_key_info/aliases | 1 + .../targets/ssh_key_info/defaults/main/common.yml | 2 +- .../tests/integration/targets/subnetwork/aliases | 1 + .../targets/subnetwork/defaults/main/common.yml | 2 +- .../tests/integration/targets/volume/aliases | 1 + .../targets/volume/defaults/main/common.yml | 2 +- .../integration/targets/volume/tasks/test.yml | 8 +- .../tests/integration/targets/volume_info/aliases | 1 + .../targets/volume_info/defaults/main/common.yml | 2 +- .../hetzner/hcloud/tests/sanity/ignore-2.13.txt | 69 - .../hetzner/hcloud/tests/unit/conftest.py | 15 + .../hcloud/tests/unit/inventory/test_hcloud.py | 75 + .../hcloud/tests/unit/module_utils/test_hcloud.py | 34 +- ansible_collections/hpe/nimble/.gitignore | 132 - ansible_collections/hpe/nimble/CHANGELOG.rst | 104 - ansible_collections/hpe/nimble/FILES.json | 320 - ansible_collections/hpe/nimble/MANIFEST.json | 32 - ansible_collections/hpe/nimble/README.md | 98 - ansible_collections/hpe/nimble/bindep.txt | 7 - .../hpe/nimble/changelogs/changelog.yaml | 100 - .../hpe/nimble/changelogs/config.yaml | 32 - ansible_collections/hpe/nimble/meta/runtime.yml | 2 - .../hpe/nimble/plugins/doc_fragments/hpe_nimble.py | 50 - .../hpe/nimble/plugins/module_utils/hpe_nimble.py | 332 - .../modules/hpe_nimble_access_control_record.py | 270 - .../hpe/nimble/plugins/modules/hpe_nimble_array.py | 468 - .../nimble/plugins/modules/hpe_nimble_chap_user.py | 274 - .../hpe/nimble/plugins/modules/hpe_nimble_disk.py | 200 - .../plugins/modules/hpe_nimble_encryption.py | 372 - .../hpe/nimble/plugins/modules/hpe_nimble_fc.py | 324 - .../hpe/nimble/plugins/modules/hpe_nimble_group.py | 1257 --- .../hpe/nimble/plugins/modules/hpe_nimble_info.py | 1026 -- .../plugins/modules/hpe_nimble_initiator_group.py | 357 - .../nimble/plugins/modules/hpe_nimble_network.py | 427 - .../nimble/plugins/modules/hpe_nimble_partner.py | 511 - .../modules/hpe_nimble_performance_policy.py | 343 - .../hpe/nimble/plugins/modules/hpe_nimble_pool.py | 352 - .../modules/hpe_nimble_protection_schedule.py | 521 - .../modules/hpe_nimble_protection_template.py | 386 - .../hpe/nimble/plugins/modules/hpe_nimble_shelf.py | 228 - .../nimble/plugins/modules/hpe_nimble_snapshot.py | 360 - .../modules/hpe_nimble_snapshot_collection.py | 403 - .../hpe/nimble/plugins/modules/hpe_nimble_user.py | 381 - .../plugins/modules/hpe_nimble_user_policy.py | 241 - .../nimble/plugins/modules/hpe_nimble_volume.py | 843 -- .../modules/hpe_nimble_volume_collection.py | 717 -- ansible_collections/hpe/nimble/requirements.txt | 2 - .../hpe/nimble/tests/sanity/ignore-2.10.txt | 160 - .../hpe/nimble/tests/sanity/ignore-2.11.txt | 160 - .../hpe/nimble/tests/sanity/ignore-2.12.txt | 160 - .../hpe/nimble/tests/sanity/ignore-2.9.txt | 160 - ansible_collections/ibm/qradar/.ansible-lint | 5 + .../ibm/qradar/.github/dependabot.yml | 10 + .../ibm/qradar/.github/release-drafter.yml | 3 + .../ibm/qradar/.github/workflows/ack.yml | 14 + .../ibm/qradar/.github/workflows/codecoverage.yml | 14 + .../ibm/qradar/.github/workflows/lint.yml | 13 + .../ibm/qradar/.github/workflows/push.yml | 26 + .../ibm/qradar/.github/workflows/release.yml | 13 + .../ibm/qradar/.github/workflows/test.yml | 41 - .../ibm/qradar/.github/workflows/tests.yml | 40 + ansible_collections/ibm/qradar/.gitignore | 17 +- ansible_collections/ibm/qradar/.isort.cfg | 6 + .../ibm/qradar/.pre-commit-config.yaml | 38 +- ansible_collections/ibm/qradar/.prettierignore | 22 + ansible_collections/ibm/qradar/CHANGELOG.rst | 19 + ansible_collections/ibm/qradar/FILES.json | 614 +- ansible_collections/ibm/qradar/MANIFEST.json | 12 +- ansible_collections/ibm/qradar/README.md | 12 +- ansible_collections/ibm/qradar/bindep.txt | 2 - .../ibm/qradar/changelogs/changelog.yaml | 111 +- .../ibm/qradar/changelogs/config.yaml | 35 +- ansible_collections/ibm/qradar/codecov.yml | 15 + .../ibm.qradar.qradar_analytics_rules_module.rst | 4 +- ...qradar.qradar_log_sources_management_module.rst | 2 +- ansible_collections/ibm/qradar/meta/runtime.yml | 2 +- .../plugins/action/qradar_analytics_rules.py | 63 +- .../action/qradar_log_sources_management.py | 81 +- .../ibm/qradar/plugins/httpapi/qradar.py | 17 +- .../ibm/qradar/plugins/module_utils/qradar.py | 51 +- .../ibm/qradar/plugins/modules/deploy.py | 17 +- .../plugins/modules/log_source_management.py | 64 +- .../ibm/qradar/plugins/modules/offense_action.py | 39 +- .../ibm/qradar/plugins/modules/offense_info.py | 28 +- .../ibm/qradar/plugins/modules/offense_note.py | 25 +- .../plugins/modules/qradar_analytics_rules.py | 6 +- .../ibm/qradar/plugins/modules/qradar_deploy.py | 17 +- .../modules/qradar_log_source_management.py | 64 +- .../modules/qradar_log_sources_management.py | 3 +- .../plugins/modules/qradar_offense_action.py | 39 +- .../qradar/plugins/modules/qradar_offense_info.py | 28 +- .../qradar/plugins/modules/qradar_offense_note.py | 25 +- .../ibm/qradar/plugins/modules/qradar_rule.py | 59 +- .../ibm/qradar/plugins/modules/qradar_rule_info.py | 24 +- .../ibm/qradar/plugins/modules/rule.py | 59 +- .../ibm/qradar/plugins/modules/rule_info.py | 24 +- ansible_collections/ibm/qradar/pyproject.toml | 2 +- .../ibm/qradar/test-requirements.txt | 13 +- .../targets/log_source_management/tasks/main.yml | 40 +- .../integration/targets/offense/tasks/main.yml | 29 +- .../defaults/main.yaml | 2 +- .../qradar_log_sources_management/tasks/cli.yaml | 17 +- .../qradar_log_sources_management/tasks/main.yaml | 4 +- .../tasks/redirection.yaml | 8 +- .../tests/cli/_populate_log_sources_config.yaml | 18 +- .../tests/cli/_remove_log_sources_config.yaml | 4 +- .../tests/cli/deleted.yaml | 12 +- .../tests/cli/gathered.yaml | 12 +- .../tests/cli/merged.yaml | 28 +- .../tests/cli/replaced.yaml | 30 +- .../tests/cli/rtt.yaml | 41 +- .../qradar_log_sources_management/vars/main.yaml | 89 +- .../tests/integration/targets/rule/tasks/main.yml | 40 +- .../ibm/qradar/tests/unit/compat/builtins.py | 34 - .../ibm/qradar/tests/unit/compat/mock.py | 4 +- .../ibm/qradar/tests/unit/compat/unittest.py | 2 + .../ibm/qradar/tests/unit/mock/loader.py | 5 +- .../ibm/qradar/tests/unit/mock/path.py | 8 +- .../ibm/qradar/tests/unit/mock/procenv.py | 8 +- .../ibm/qradar/tests/unit/mock/vault_helper.py | 6 +- .../ibm/qradar/tests/unit/mock/yaml_helper.py | 38 +- .../plugins/action/test_qradar_analytics_rules.py | 37 +- .../qradar/tests/unit/plugins/modules/conftest.py | 18 +- .../ibm/qradar/tests/unit/plugins/modules/utils.py | 9 +- ansible_collections/ibm/qradar/tox.ini | 8 +- .../ispim/.github/workflows/ansible-test.yml | 31 +- ansible_collections/inspur/ispim/.idea/.gitignore | 3 + .../.idea/inspectionProfiles/profiles_settings.xml | 6 + .../inspur/ispim/.idea/inspur.ispim.iml | 12 + ansible_collections/inspur/ispim/.idea/misc.xml | 4 + ansible_collections/inspur/ispim/.idea/modules.xml | 8 + ansible_collections/inspur/ispim/.idea/vcs.xml | 6 + .../inspur/ispim/.idea/workspace.xml | 38 + ansible_collections/inspur/ispim/CHANGELOG.rst | 9 + ansible_collections/inspur/ispim/FILES.json | 4928 ++++++++- ansible_collections/inspur/ispim/MANIFEST.json | 4 +- ansible_collections/inspur/ispim/README.md | 8 +- .../inspur/ispim/changelogs/.plugin-cache.yaml | 2 +- .../inspur/ispim/changelogs/changelog.yaml | 9 + ansible_collections/inspur/ispim/meta/runtime.yml | 2 +- ansible_collections/inspur/ispim/requirements.txt | 3 +- .../junipernetworks/junos/.ansible-lint | 5 + ansible_collections/junipernetworks/junos/.flake8 | 67 + .../junos/.github/workflows/ack.yml | 15 - .../junos/.github/workflows/check_label.yml | 11 + .../junos/.github/workflows/draft_release.yml | 18 + .../junos/.github/workflows/push.yml | 27 - .../junos/.github/workflows/tests.yml | 23 +- .../junipernetworks/junos/.pre-commit-config.yaml | 11 +- .../junipernetworks/junos/CHANGELOG.rst | 86 + .../junipernetworks/junos/FILES.json | 5957 +++++----- .../junipernetworks/junos/MANIFEST.json | 6 +- .../junipernetworks/junos/README.md | 5 +- .../junipernetworks/junos/bindep.txt | 3 +- .../junos/changelogs/changelog.yaml | 79 + .../junipernetworks.junos.junos_config_module.rst | 12 +- ...ernetworks.junos.junos_l2_interfaces_module.rst | 30 +- ...ernetworks.junos.junos_l3_interfaces_module.rst | 50 +- .../junipernetworks.junos.junos_logging_module.rst | 487 - .../junipernetworks/junos/meta/runtime.yml | 174 +- .../junos/plugins/action/acl_interfaces.py | 168 + .../junipernetworks/junos/plugins/action/acls.py | 168 + .../junipernetworks/junos/plugins/action/banner.py | 168 + .../junos/plugins/action/bgp_address_family.py | 168 + .../junos/plugins/action/bgp_global.py | 168 + .../junos/plugins/action/command.py | 168 + .../junipernetworks/junos/plugins/action/config.py | 168 + .../junipernetworks/junos/plugins/action/facts.py | 168 + .../junos/plugins/action/hostname.py | 168 + .../junos/plugins/action/interfaces.py | 168 + .../junos/plugins/action/l2_interfaces.py | 168 + .../junos/plugins/action/l3_intefaces.py | 168 + .../junipernetworks/junos/plugins/action/lacp.py | 168 + .../junos/plugins/action/lacp_intefaces.py | 168 + .../junos/plugins/action/lag_interfaces.py | 168 + .../junos/plugins/action/lldp_global.py | 168 + .../junos/plugins/action/lldp_interfaces.py | 168 + .../junos/plugins/action/logging.py | 168 + .../junos/plugins/action/logging_global.py | 168 + .../junos/plugins/action/netconf.py | 168 + .../junos/plugins/action/ntp_global.py | 168 + .../junos/plugins/action/ospf_interfaces.py | 168 + .../junipernetworks/junos/plugins/action/ospfv2.py | 168 + .../junipernetworks/junos/plugins/action/ospfv3.py | 168 + .../junos/plugins/action/package.py | 168 + .../junipernetworks/junos/plugins/action/ping.py | 168 + .../junos/plugins/action/prefix_lists.py | 168 + .../junos/plugins/action/routing_instances.py | 168 + .../junos/plugins/action/routing_options.py | 168 + .../junipernetworks/junos/plugins/action/rpc.py | 168 + .../junipernetworks/junos/plugins/action/scp.py | 168 + .../junos/plugins/action/security_policies.py | 168 + .../plugins/action/security_policies_global.py | 168 + .../junos/plugins/action/security_zones.py | 168 + .../junos/plugins/action/snmp_server.py | 168 + .../junos/plugins/action/static_routes.py | 168 + .../junipernetworks/junos/plugins/action/system.py | 168 + .../junipernetworks/junos/plugins/action/user.py | 168 + .../junipernetworks/junos/plugins/action/vlans.py | 168 + .../junipernetworks/junos/plugins/action/vrf.py | 168 + .../junipernetworks/junos/plugins/cliconf/junos.py | 9 + .../junos/config/lldp_global/lldp_global.py | 55 +- .../config/ospf_interfaces/ospf_interfaces.py | 2 +- .../module_utils/network/junos/facts/acls/acls.py | 5 +- .../network/junos/facts/lldp_global/lldp_global.py | 2 +- .../junos/facts/lldp_interfaces/lldp_interfaces.py | 2 +- .../junos/facts/logging_global/logging_global.py | 2 +- .../network/junos/facts/ntp_global/ntp_global.py | 3 +- .../junos/facts/ospf_interfaces/ospf_interfaces.py | 5 +- .../network/junos/facts/ospfv2/ospfv2.py | 3 +- .../network/junos/facts/ospfv3/ospfv3.py | 3 +- .../junos/facts/prefix_lists/prefix_lists.py | 3 +- .../facts/routing_instances/routing_instances.py | 3 +- .../junos/facts/routing_options/routing_options.py | 3 +- .../facts/security_policies/security_policies.py | 3 +- .../security_policies_global.py | 3 +- .../junos/facts/security_zones/security_zones.py | 3 +- .../network/junos/facts/snmp_server/snmp_server.py | 3 +- .../junos/facts/static_routes/static_routes.py | 3 +- .../network/junos/facts/vlans/vlans.py | 3 +- .../junos/plugins/modules/junos_config.py | 15 +- .../junos/plugins/modules/junos_l2_interfaces.py | 30 +- .../junos/plugins/modules/junos_l3_interfaces.py | 50 +- .../junos/plugins/modules/junos_logging.py | 403 - .../junipernetworks/junos/test-requirements.txt | 6 +- .../junipernetworks/junos/tests/config.yml | 3 + .../junos_facts/tests/netconf/network_facts.yaml | 124 + .../junos_l2_interfaces/tests/netconf/rtt.yml | 12 +- .../integration/targets/junos_logging/aliases | 0 .../targets/junos_logging/defaults/main.yaml | 2 - .../targets/junos_logging/meta/main.yml | 3 - .../targets/junos_logging/tasks/main.yaml | 3 - .../targets/junos_logging/tasks/netconf.yaml | 21 - .../targets/junos_logging/tests/netconf/basic.yaml | 407 - .../tests/netconf/_reset_config.yaml | 6 +- .../targets/prepare_junos_tests/tasks/main.yml | 20 +- .../targets/prepare_junos_tests/tasks/prepare.yml | 18 + .../junos/tests/sanity/ignore-2.10.txt | 1 - .../junos/tests/sanity/ignore-2.11.txt | 1 - .../junos/tests/sanity/ignore-2.12.txt | 1 - .../junos/tests/sanity/ignore-2.13.txt | 1 - .../junos/tests/sanity/ignore-2.18.txt | 1 + .../junos/tests/sanity/ignore-2.9.txt | 5 - .../junos/tests/unit/compat/__init__.py | 0 .../junos/tests/unit/compat/mock.py | 130 - .../junos/tests/unit/compat/unittest.py | 41 - .../junipernetworks/junos/tests/unit/mock/path.py | 4 +- .../junos/tests/unit/mock/procenv.py | 5 +- .../network/junos/test_junos_bgp_address_family.py | 3 +- .../modules/network/junos/test_junos_bgp_global.py | 3 +- .../modules/network/junos/test_junos_command.py | 3 +- .../modules/network/junos/test_junos_config.py | 3 +- .../unit/modules/network/junos/test_junos_facts.py | 3 +- .../modules/network/junos/test_junos_hostname.py | 3 +- .../modules/network/junos/test_junos_interfaces.py | 3 +- .../network/junos/test_junos_l2_interfaces.py | 3 +- .../network/junos/test_junos_l3_interfaces.py | 3 +- .../network/junos/test_junos_logging_global.py | 3 +- .../modules/network/junos/test_junos_netconf.py | 3 +- .../modules/network/junos/test_junos_ntp_global.py | 3 +- .../network/junos/test_junos_ospf_interfaces.py | 3 +- .../modules/network/junos/test_junos_ospfv2.py | 13 +- .../modules/network/junos/test_junos_ospfv3.py | 3 +- .../modules/network/junos/test_junos_package.py | 3 +- .../unit/modules/network/junos/test_junos_ping.py | 3 +- .../network/junos/test_junos_prefix_lists.py | 3 +- .../network/junos/test_junos_routing_instances.py | 3 +- .../network/junos/test_junos_routing_options.py | 3 +- .../unit/modules/network/junos/test_junos_rpc.py | 3 +- .../unit/modules/network/junos/test_junos_scp.py | 3 +- .../network/junos/test_junos_security_policies.py | 3 +- .../junos/test_junos_security_policies_global.py | 3 +- .../network/junos/test_junos_security_zones.py | 3 +- .../network/junos/test_junos_snmp_server.py | 3 +- .../unit/modules/network/junos/test_junos_vlans.py | 3 +- .../junos/tests/unit/modules/utils.py | 8 +- .../junipernetworks/junos/tox-ansible.ini | 10 + ansible_collections/junipernetworks/junos/tox.ini | 32 - .../ksmanage/.github/workflows/ansible-test.yml | 54 + .../kaytus/ksmanage/.idea/.gitignore | 3 + .../.idea/inspectionProfiles/profiles_settings.xml | 6 + .../kaytus/ksmanage/.idea/kaytus.ksmanage.iml | 12 + .../kaytus/ksmanage/.idea/modules.xml | 8 + ansible_collections/kaytus/ksmanage/.idea/vcs.xml | 6 + .../kaytus/ksmanage/.idea/workspace.xml | 34 + ansible_collections/kaytus/ksmanage/CHANGELOG.rst | 214 + .../kaytus/ksmanage/CODE_OF_CONDUCT.md | 3 + ansible_collections/kaytus/ksmanage/FILES.json | 6879 ++++++++++++ ansible_collections/kaytus/ksmanage/LICENSE | 674 ++ ansible_collections/kaytus/ksmanage/MANIFEST.json | 36 + ansible_collections/kaytus/ksmanage/README.md | 92 + .../kaytus/ksmanage/changelogs/.plugin-cache.yaml | 655 ++ .../kaytus/ksmanage/changelogs/changelog.yaml | 459 + .../kaytus/ksmanage/changelogs/config.yaml | 29 + .../kaytus/ksmanage/changelogs/fragments/.keep | 0 .../kaytus/ksmanage/docs/ad_group_info_module.rst | 302 + .../kaytus/ksmanage/docs/ad_group_module.rst | 431 + .../kaytus/ksmanage/docs/ad_info_module.rst | 302 + .../kaytus/ksmanage/docs/adapter_info_module.rst | 302 + .../kaytus/ksmanage/docs/add_ldisk_module.rst | 589 + .../ksmanage/docs/alert_policy_info_module.rst | 302 + .../kaytus/ksmanage/docs/audit_log_info_module.rst | 358 + .../ksmanage/docs/auto_capture_info_module.rst | 302 + .../kaytus/ksmanage/docs/backplane_info_module.rst | 302 + .../kaytus/ksmanage/docs/backup_module.rst | 355 + .../kaytus/ksmanage/docs/bios_export_module.rst | 318 + .../kaytus/ksmanage/docs/bios_import_module.rst | 318 + .../kaytus/ksmanage/docs/bios_info_module.rst | 302 + .../kaytus/ksmanage/docs/bmc_info_module.rst | 302 + .../ksmanage/docs/boot_image_info_module.rst | 302 + .../ksmanage/docs/boot_option_info_module.rst | 302 + .../ksmanage/docs/clear_audit_log_module.rst | 302 + .../ksmanage/docs/clear_event_log_module.rst | 302 + .../ksmanage/docs/clear_system_log_module.rst | 334 + .../ksmanage/docs/collect_blackbox_module.rst | 319 + .../kaytus/ksmanage/docs/collect_log_module.rst | 318 + .../ksmanage/docs/connect_media_info_module.rst | 302 + .../kaytus/ksmanage/docs/cpu_info_module.rst | 302 + .../kaytus/ksmanage/docs/del_session_module.rst | 318 + .../kaytus/ksmanage/docs/dns_info_module.rst | 302 + .../docs/download_auto_screenshot_module.rst | 318 + .../docs/download_manual_screenshot_module.rst | 318 + .../kaytus/ksmanage/docs/edit_ad_module.rst | 459 + .../ksmanage/docs/edit_alert_policy_module.rst | 430 + .../ksmanage/docs/edit_auto_capture_module.rst | 322 + .../kaytus/ksmanage/docs/edit_bios_module.rst | 377 + .../ksmanage/docs/edit_boot_image_module.rst | 327 + .../ksmanage/docs/edit_boot_option_module.rst | 365 + .../ksmanage/docs/edit_connect_media_module.rst | 360 + .../kaytus/ksmanage/docs/edit_dns_module.rst | 620 ++ .../ksmanage/docs/edit_event_log_policy_module.rst | 322 + .../kaytus/ksmanage/docs/edit_fan_module.rst | 359 + .../kaytus/ksmanage/docs/edit_fru_module.rst | 352 + .../kaytus/ksmanage/docs/edit_ipv4_module.rst | 427 + .../kaytus/ksmanage/docs/edit_ipv6_module.rst | 444 + .../kaytus/ksmanage/docs/edit_kvm_module.rst | 543 + .../kaytus/ksmanage/docs/edit_ldap_module.rst | 526 + .../kaytus/ksmanage/docs/edit_ldisk_module.rst | 378 + .../ksmanage/docs/edit_log_setting_module.rst | 474 + .../ksmanage/docs/edit_m6_log_setting_module.rst | 490 + .../ksmanage/docs/edit_manual_capture_module.rst | 322 + .../ksmanage/docs/edit_media_instance_module.rst | 502 + .../kaytus/ksmanage/docs/edit_ncsi_module.rst | 389 + .../ksmanage/docs/edit_network_bond_module.rst | 363 + .../ksmanage/docs/edit_network_link_module.rst | 392 + .../kaytus/ksmanage/docs/edit_network_module.rst | 343 + .../kaytus/ksmanage/docs/edit_ntp_module.rst | 486 + .../kaytus/ksmanage/docs/edit_pdisk_module.rst | 482 + .../ksmanage/docs/edit_power_budget_module.rst | 685 ++ .../ksmanage/docs/edit_power_restore_module.rst | 323 + .../ksmanage/docs/edit_power_status_module.rst | 325 + .../ksmanage/docs/edit_preserve_config_module.rst | 373 + .../ksmanage/docs/edit_psu_config_module.rst | 339 + .../kaytus/ksmanage/docs/edit_psu_peak_module.rst | 343 + .../docs/edit_restore_factory_default_module.rst | 368 + .../kaytus/ksmanage/docs/edit_service_module.rst | 428 + .../kaytus/ksmanage/docs/edit_smtp_com_module.rst | 578 + .../kaytus/ksmanage/docs/edit_smtp_dest_module.rst | 383 + .../kaytus/ksmanage/docs/edit_smtp_module.rst | 587 + .../kaytus/ksmanage/docs/edit_snmp_module.rst | 540 + .../kaytus/ksmanage/docs/edit_snmp_trap_module.rst | 598 ++ .../kaytus/ksmanage/docs/edit_threshold_module.rst | 410 + .../kaytus/ksmanage/docs/edit_uid_module.rst | 343 + .../ksmanage/docs/edit_virtual_media_module.rst | 511 + .../kaytus/ksmanage/docs/edit_vlan_module.rst | 381 + .../kaytus/ksmanage/docs/event_log_info_module.rst | 358 + .../ksmanage/docs/event_log_policy_info_module.rst | 302 + .../kaytus/ksmanage/docs/fan_info_module.rst | 302 + .../kaytus/ksmanage/docs/fru_info_module.rst | 302 + .../ksmanage/docs/fw_version_info_module.rst | 302 + .../kaytus/ksmanage/docs/gpu_info_module.rst | 303 + .../kaytus/ksmanage/docs/hard_disk_info_module.rst | 302 + .../kaytus/ksmanage/docs/hba_info_module.rst | 302 + ansible_collections/kaytus/ksmanage/docs/index.rst | 149 + .../kaytus/ksmanage/docs/kvm_info_module.rst | 302 + .../ksmanage/docs/ldap_group_info_module.rst | 302 + .../kaytus/ksmanage/docs/ldap_group_module.rst | 431 + .../kaytus/ksmanage/docs/ldap_info_module.rst | 302 + .../kaytus/ksmanage/docs/ldisk_info_module.rst | 302 + .../ksmanage/docs/log_setting_info_module.rst | 302 + .../ksmanage/docs/media_instance_info_module.rst | 302 + .../kaytus/ksmanage/docs/mem_info_module.rst | 302 + .../kaytus/ksmanage/docs/ncsi_info_module.rst | 302 + .../ksmanage/docs/network_bond_info_module.rst | 302 + .../kaytus/ksmanage/docs/network_info_module.rst | 302 + .../ksmanage/docs/network_link_info_module.rst | 302 + .../kaytus/ksmanage/docs/ntp_info_module.rst | 302 + .../ksmanage/docs/onboard_disk_info_module.rst | 302 + .../kaytus/ksmanage/docs/pcie_info_module.rst | 302 + .../kaytus/ksmanage/docs/pdisk_info_module.rst | 302 + .../ksmanage/docs/power_budget_info_module.rst | 302 + .../docs/power_consumption_info_module.rst | 302 + .../ksmanage/docs/power_restore_info_module.rst | 302 + .../ksmanage/docs/power_status_info_module.rst | 302 + .../ksmanage/docs/preserve_config_info_module.rst | 302 + .../ksmanage/docs/psu_config_info_module.rst | 302 + .../kaytus/ksmanage/docs/psu_info_module.rst | 302 + .../kaytus/ksmanage/docs/psu_peak_info_module.rst | 302 + .../kaytus/ksmanage/docs/raid_info_module.rst | 302 + .../kaytus/ksmanage/docs/reset_bmc_module.rst | 302 + .../kaytus/ksmanage/docs/reset_kvm_module.rst | 302 + .../kaytus/ksmanage/docs/restore_module.rst | 348 + .../kaytus/ksmanage/docs/self_test_info_module.rst | 302 + .../kaytus/ksmanage/docs/sensor_info_module.rst | 302 + .../kaytus/ksmanage/docs/server_info_module.rst | 302 + .../kaytus/ksmanage/docs/service_info_module.rst | 302 + .../kaytus/ksmanage/docs/session_info_module.rst | 302 + .../kaytus/ksmanage/docs/smtp_info_module.rst | 302 + .../kaytus/ksmanage/docs/snmp_info_module.rst | 302 + .../kaytus/ksmanage/docs/snmp_trap_info_module.rst | 302 + .../kaytus/ksmanage/docs/support_info_module.rst | 302 + .../ksmanage/docs/system_log_info_module.rst | 384 + .../kaytus/ksmanage/docs/temp_info_module.rst | 302 + .../kaytus/ksmanage/docs/threshold_info_module.rst | 302 + .../kaytus/ksmanage/docs/uid_info_module.rst | 302 + .../kaytus/ksmanage/docs/update_cpld_module.rst | 362 + .../kaytus/ksmanage/docs/update_fw_module.rst | 426 + .../kaytus/ksmanage/docs/update_psu_module.rst | 338 + .../ksmanage/docs/user_group_info_module.rst | 302 + .../kaytus/ksmanage/docs/user_group_module.rst | 532 + .../kaytus/ksmanage/docs/user_info_module.rst | 302 + .../kaytus/ksmanage/docs/user_module.rst | 454 + .../ksmanage/docs/virtual_media_info_module.rst | 302 + .../kaytus/ksmanage/docs/volt_info_module.rst | 302 + .../kaytus/ksmanage/meta/runtime.yml | 2 + .../ksmanage/plugins/doc_fragments/ksmanage.py | 59 + .../ksmanage/plugins/module_utils/ksmanage.py | 54 + .../kaytus/ksmanage/plugins/modules/ad_group.py | 158 + .../ksmanage/plugins/modules/ad_group_info.py | 99 + .../kaytus/ksmanage/plugins/modules/ad_info.py | 99 + .../ksmanage/plugins/modules/adapter_info.py | 119 + .../kaytus/ksmanage/plugins/modules/add_ldisk.py | 221 + .../ksmanage/plugins/modules/alert_policy_info.py | 99 + .../ksmanage/plugins/modules/audit_log_info.py | 126 + .../ksmanage/plugins/modules/auto_capture_info.py | 99 + .../ksmanage/plugins/modules/backplane_info.py | 99 + .../kaytus/ksmanage/plugins/modules/backup.py | 120 + .../kaytus/ksmanage/plugins/modules/bios_export.py | 107 + .../kaytus/ksmanage/plugins/modules/bios_import.py | 109 + .../kaytus/ksmanage/plugins/modules/bios_info.py | 99 + .../kaytus/ksmanage/plugins/modules/bmc_info.py | 99 + .../ksmanage/plugins/modules/boot_image_info.py | 99 + .../ksmanage/plugins/modules/boot_option_info.py | 99 + .../ksmanage/plugins/modules/clear_audit_log.py | 101 + .../ksmanage/plugins/modules/clear_event_log.py | 101 + .../ksmanage/plugins/modules/clear_system_log.py | 115 + .../ksmanage/plugins/modules/collect_blackbox.py | 108 + .../kaytus/ksmanage/plugins/modules/collect_log.py | 107 + .../ksmanage/plugins/modules/connect_media_info.py | 99 + .../kaytus/ksmanage/plugins/modules/cpu_info.py | 99 + .../kaytus/ksmanage/plugins/modules/del_session.py | 109 + .../kaytus/ksmanage/plugins/modules/dns_info.py | 99 + .../plugins/modules/download_auto_screenshot.py | 107 + .../plugins/modules/download_manual_screenshot.py | 107 + .../kaytus/ksmanage/plugins/modules/edit_ad.py | 163 + .../ksmanage/plugins/modules/edit_alert_policy.py | 156 + .../ksmanage/plugins/modules/edit_auto_capture.py | 110 + .../kaytus/ksmanage/plugins/modules/edit_bios.py | 134 + .../ksmanage/plugins/modules/edit_boot_image.py | 111 + .../ksmanage/plugins/modules/edit_boot_option.py | 123 + .../ksmanage/plugins/modules/edit_connect_media.py | 126 + .../kaytus/ksmanage/plugins/modules/edit_dns.py | 231 + .../plugins/modules/edit_event_log_policy.py | 110 + .../kaytus/ksmanage/plugins/modules/edit_fan.py | 126 + .../kaytus/ksmanage/plugins/modules/edit_fru.py | 121 + .../kaytus/ksmanage/plugins/modules/edit_ipv4.py | 159 + .../kaytus/ksmanage/plugins/modules/edit_ipv6.py | 166 + .../kaytus/ksmanage/plugins/modules/edit_kvm.py | 191 + .../kaytus/ksmanage/plugins/modules/edit_ldap.py | 193 + .../kaytus/ksmanage/plugins/modules/edit_ldisk.py | 131 + .../ksmanage/plugins/modules/edit_log_setting.py | 164 + .../plugins/modules/edit_m6_log_setting.py | 174 + .../plugins/modules/edit_manual_capture.py | 110 + .../plugins/modules/edit_media_instance.py | 167 + .../kaytus/ksmanage/plugins/modules/edit_ncsi.py | 133 + .../ksmanage/plugins/modules/edit_network.py | 118 + .../ksmanage/plugins/modules/edit_network_bond.py | 123 + .../ksmanage/plugins/modules/edit_network_link.py | 140 + .../kaytus/ksmanage/plugins/modules/edit_ntp.py | 173 + .../kaytus/ksmanage/plugins/modules/edit_pdisk.py | 178 + .../ksmanage/plugins/modules/edit_power_budget.py | 260 + .../ksmanage/plugins/modules/edit_power_restore.py | 110 + .../ksmanage/plugins/modules/edit_power_status.py | 110 + .../plugins/modules/edit_preserve_config.py | 136 + .../ksmanage/plugins/modules/edit_psu_config.py | 116 + .../ksmanage/plugins/modules/edit_psu_peak.py | 121 + .../modules/edit_restore_factory_default.py | 131 + .../ksmanage/plugins/modules/edit_service.py | 150 + .../kaytus/ksmanage/plugins/modules/edit_smtp.py | 213 + .../ksmanage/plugins/modules/edit_smtp_com.py | 204 + .../ksmanage/plugins/modules/edit_smtp_dest.py | 136 + .../kaytus/ksmanage/plugins/modules/edit_snmp.py | 188 + .../ksmanage/plugins/modules/edit_snmp_trap.py | 217 + .../ksmanage/plugins/modules/edit_threshold.py | 141 + .../kaytus/ksmanage/plugins/modules/edit_uid.py | 121 + .../ksmanage/plugins/modules/edit_virtual_media.py | 182 + .../kaytus/ksmanage/plugins/modules/edit_vlan.py | 136 + .../ksmanage/plugins/modules/event_log_info.py | 126 + .../plugins/modules/event_log_policy_info.py | 99 + .../kaytus/ksmanage/plugins/modules/fan_info.py | 99 + .../kaytus/ksmanage/plugins/modules/fru_info.py | 99 + .../ksmanage/plugins/modules/fw_version_info.py | 99 + .../kaytus/ksmanage/plugins/modules/gpu_info.py | 100 + .../ksmanage/plugins/modules/hard_disk_info.py | 99 + .../kaytus/ksmanage/plugins/modules/hba_info.py | 99 + .../kaytus/ksmanage/plugins/modules/kvm_info.py | 99 + .../kaytus/ksmanage/plugins/modules/ldap_group.py | 158 + .../ksmanage/plugins/modules/ldap_group_info.py | 99 + .../kaytus/ksmanage/plugins/modules/ldap_info.py | 99 + .../kaytus/ksmanage/plugins/modules/ldisk_info.py | 99 + .../ksmanage/plugins/modules/log_setting_info.py | 99 + .../plugins/modules/media_instance_info.py | 99 + .../kaytus/ksmanage/plugins/modules/mem_info.py | 99 + .../kaytus/ksmanage/plugins/modules/ncsi_info.py | 99 + .../ksmanage/plugins/modules/network_bond_info.py | 99 + .../ksmanage/plugins/modules/network_info.py | 99 + .../ksmanage/plugins/modules/network_link_info.py | 99 + .../kaytus/ksmanage/plugins/modules/ntp_info.py | 99 + .../ksmanage/plugins/modules/onboard_disk_info.py | 99 + .../kaytus/ksmanage/plugins/modules/pcie_info.py | 99 + .../kaytus/ksmanage/plugins/modules/pdisk_info.py | 99 + .../ksmanage/plugins/modules/power_budget_info.py | 99 + .../plugins/modules/power_consumption_info.py | 99 + .../ksmanage/plugins/modules/power_restore_info.py | 99 + .../ksmanage/plugins/modules/power_status_info.py | 99 + .../plugins/modules/preserve_config_info.py | 99 + .../ksmanage/plugins/modules/psu_config_info.py | 99 + .../kaytus/ksmanage/plugins/modules/psu_info.py | 99 + .../ksmanage/plugins/modules/psu_peak_info.py | 99 + .../kaytus/ksmanage/plugins/modules/raid_info.py | 99 + .../kaytus/ksmanage/plugins/modules/reset_bmc.py | 101 + .../kaytus/ksmanage/plugins/modules/reset_kvm.py | 101 + .../kaytus/ksmanage/plugins/modules/restore.py | 117 + .../ksmanage/plugins/modules/self_test_info.py | 99 + .../kaytus/ksmanage/plugins/modules/sensor_info.py | 99 + .../kaytus/ksmanage/plugins/modules/server_info.py | 99 + .../ksmanage/plugins/modules/service_info.py | 99 + .../ksmanage/plugins/modules/session_info.py | 99 + .../kaytus/ksmanage/plugins/modules/smtp_info.py | 99 + .../kaytus/ksmanage/plugins/modules/snmp_info.py | 99 + .../ksmanage/plugins/modules/snmp_trap_info.py | 99 + .../ksmanage/plugins/modules/support_info.py | 99 + .../ksmanage/plugins/modules/system_log_info.py | 134 + .../kaytus/ksmanage/plugins/modules/temp_info.py | 99 + .../ksmanage/plugins/modules/threshold_info.py | 99 + .../kaytus/ksmanage/plugins/modules/uid_info.py | 99 + .../kaytus/ksmanage/plugins/modules/update_cpld.py | 130 + .../kaytus/ksmanage/plugins/modules/update_fw.py | 154 + .../kaytus/ksmanage/plugins/modules/update_psu.py | 117 + .../kaytus/ksmanage/plugins/modules/user.py | 165 + .../kaytus/ksmanage/plugins/modules/user_group.py | 204 + .../ksmanage/plugins/modules/user_group_info.py | 99 + .../kaytus/ksmanage/plugins/modules/user_info.py | 99 + .../ksmanage/plugins/modules/virtual_media_info.py | 99 + .../kaytus/ksmanage/plugins/modules/volt_info.py | 99 + .../kaytus/ksmanage/requirements.txt | 1 + ansible_collections/kubernetes/core/.ansible-lint | 3 +- .../kubernetes/core/.github/stale.yml | 1 + .../kubernetes/core/.github/workflows/linters.yaml | 4 +- .../core/.github/workflows/unit-tests.yaml | 1 - ansible_collections/kubernetes/core/CHANGELOG.rst | 63 +- ansible_collections/kubernetes/core/FILES.json | 988 +- ansible_collections/kubernetes/core/MANIFEST.json | 4 +- ansible_collections/kubernetes/core/Makefile | 2 +- ansible_collections/kubernetes/core/README.md | 8 +- .../kubernetes/core/changelogs/changelog.yaml | 91 +- .../kubernetes/core/changelogs/config.yaml | 32 +- .../core/docs/kubernetes.core.helm_info_module.rst | 112 +- .../core/docs/kubernetes.core.helm_module.rst | 205 +- .../kubernetes.core.helm_plugin_info_module.rst | 3 +- .../docs/kubernetes.core.helm_plugin_module.rst | 35 +- .../kubernetes.core.helm_repository_module.rst | 148 + .../docs/kubernetes.core.helm_template_module.rst | 170 +- .../kubernetes.core.k8s_cluster_info_module.rst | 24 +- .../core/docs/kubernetes.core.k8s_cp_module.rst | 26 +- .../core/docs/kubernetes.core.k8s_drain_module.rst | 57 +- .../core/docs/kubernetes.core.k8s_exec_module.rst | 40 +- .../core/docs/kubernetes.core.k8s_info_module.rst | 45 +- .../core/docs/kubernetes.core.k8s_inventory.rst | 53 +- .../docs/kubernetes.core.k8s_json_patch_module.rst | 26 +- .../core/docs/kubernetes.core.k8s_log_module.rst | 93 +- .../core/docs/kubernetes.core.k8s_lookup.rst | 98 +- .../core/docs/kubernetes.core.k8s_module.rst | 200 +- .../docs/kubernetes.core.k8s_rollback_module.rst | 26 +- .../core/docs/kubernetes.core.k8s_scale_module.rst | 28 +- .../docs/kubernetes.core.k8s_service_module.rst | 27 +- .../core/docs/kubernetes.core.k8s_taint_module.rst | 5 +- .../docs/kubernetes.core.kubectl_connection.rst | 24 +- .../core/docs/kubernetes.core.kustomize_lookup.rst | 121 +- .../kubernetes/core/meta/runtime.yml | 16 +- .../kubernetes/core/plugins/action/helm.py | 13 +- .../kubernetes/core/plugins/action/helm_info.py | 13 +- .../kubernetes/core/plugins/action/helm_plugin.py | 13 +- .../core/plugins/action/helm_plugin_info.py | 13 +- .../core/plugins/action/helm_repository.py | 13 +- .../kubernetes/core/plugins/action/k8s.py | 13 +- .../core/plugins/action/k8s_cluster_info.py | 13 +- .../kubernetes/core/plugins/action/k8s_cp.py | 13 +- .../kubernetes/core/plugins/action/k8s_drain.py | 13 +- .../kubernetes/core/plugins/action/k8s_exec.py | 13 +- .../kubernetes/core/plugins/action/k8s_info.py | 13 +- .../core/plugins/action/k8s_json_patch.py | 405 + .../kubernetes/core/plugins/action/k8s_log.py | 13 +- .../kubernetes/core/plugins/action/k8s_rollback.py | 13 +- .../kubernetes/core/plugins/action/k8s_scale.py | 13 +- .../kubernetes/core/plugins/action/k8s_service.py | 13 +- .../core/plugins/action/ks8_json_patch.py | 406 - .../kubernetes/core/plugins/connection/kubectl.py | 43 +- .../plugins/doc_fragments/helm_common_options.py | 9 +- .../core/plugins/doc_fragments/k8s_auth_options.py | 1 - .../plugins/doc_fragments/k8s_delete_options.py | 3 +- .../core/plugins/doc_fragments/k8s_name_options.py | 1 - .../plugins/doc_fragments/k8s_resource_options.py | 1 - .../plugins/doc_fragments/k8s_scale_options.py | 1 - .../plugins/doc_fragments/k8s_state_options.py | 1 - .../core/plugins/doc_fragments/k8s_wait_options.py | 1 - .../kubernetes/core/plugins/filter/k8s.py | 40 +- .../kubernetes/core/plugins/inventory/k8s.py | 26 +- .../kubernetes/core/plugins/lookup/k8s.py | 6 +- .../kubernetes/core/plugins/lookup/kustomize.py | 35 +- .../core/plugins/module_utils/ansiblemodule.py | 4 +- .../kubernetes/core/plugins/module_utils/apply.py | 3 +- .../core/plugins/module_utils/client/discovery.py | 11 +- .../kubernetes/core/plugins/module_utils/common.py | 47 +- .../kubernetes/core/plugins/module_utils/copy.py | 15 +- .../kubernetes/core/plugins/module_utils/hashes.py | 4 +- .../kubernetes/core/plugins/module_utils/helm.py | 16 +- .../core/plugins/module_utils/k8s/client.py | 3 +- .../core/plugins/module_utils/k8s/core.py | 9 +- .../core/plugins/module_utils/k8s/resource.py | 2 +- .../core/plugins/module_utils/k8s/runner.py | 56 +- .../core/plugins/module_utils/k8s/service.py | 89 +- .../core/plugins/module_utils/k8s/waiter.py | 8 +- .../core/plugins/module_utils/k8sdynamicclient.py | 3 +- .../core/plugins/module_utils/selector.py | 1 - .../kubernetes/core/plugins/modules/helm.py | 168 +- .../kubernetes/core/plugins/modules/helm_info.py | 14 +- .../kubernetes/core/plugins/modules/helm_plugin.py | 5 +- .../core/plugins/modules/helm_plugin_info.py | 6 +- .../kubernetes/core/plugins/modules/helm_pull.py | 2 +- .../core/plugins/modules/helm_repository.py | 18 +- .../core/plugins/modules/helm_template.py | 4 +- .../kubernetes/core/plugins/modules/k8s.py | 41 +- .../core/plugins/modules/k8s_cluster_info.py | 12 +- .../kubernetes/core/plugins/modules/k8s_cp.py | 25 +- .../kubernetes/core/plugins/modules/k8s_drain.py | 57 +- .../kubernetes/core/plugins/modules/k8s_exec.py | 16 +- .../kubernetes/core/plugins/modules/k8s_info.py | 20 +- .../core/plugins/modules/k8s_json_patch.py | 7 +- .../kubernetes/core/plugins/modules/k8s_log.py | 14 +- .../core/plugins/modules/k8s_rollback.py | 6 +- .../kubernetes/core/plugins/modules/k8s_scale.py | 16 +- .../kubernetes/core/plugins/modules/k8s_service.py | 18 +- .../kubernetes/core/plugins/modules/k8s_taint.py | 7 +- .../kubernetes/core/requirements.txt | 2 +- .../integration/targets/helm/defaults/main.yml | 2 + .../targets/helm/library/helm_test_pending.py | 130 + .../targets/helm/library/helm_test_version.py | 4 +- .../tests/integration/targets/helm/playbook.yaml | 7 + .../core/tests/integration/targets/helm/runme.sh | 5 + .../integration/targets/helm/tasks/run_test.yml | 6 + .../targets/helm/tasks/test_helm_reuse_values.yml | 75 + .../targets/helm/tasks/test_helm_uninstall.yml | 31 + .../tasks/test_helm_with_space_into_chart_name.yml | 58 + .../files/test-chart-reuse-values/Chart.yaml | 24 + .../templates/configmap.yaml | 7 + .../files/test-chart-reuse-values/values.yaml | 2 + .../integration/targets/helm_diff/playbook.yaml | 7 + .../tests/integration/targets/helm_diff/runme.sh | 5 + .../integration/targets/helm_diff/tasks/main.yml | 45 + .../targets/helm_diff/tasks/reuse_values.yml | 93 + .../targets/helm_kubeconfig/meta/main.yml | 1 + .../targets/helm_kubeconfig/playbook.yaml | 7 + .../integration/targets/helm_kubeconfig/runme.sh | 5 + .../integration/targets/helm_plugin/playbook.yaml | 7 + .../tests/integration/targets/helm_plugin/runme.sh | 5 + .../integration/targets/helm_pull/playbook.yaml | 7 + .../tests/integration/targets/helm_pull/runme.sh | 5 + .../targets/helm_repository/playbook.yaml | 7 + .../integration/targets/helm_repository/runme.sh | 5 + .../targets/helm_set_values/meta/main.yml | 1 + .../targets/helm_set_values/playbook.yaml | 7 + .../integration/targets/helm_set_values/runme.sh | 5 + .../integration/targets/inventory_k8s/runme.sh | 1 + .../targets/k8s_access_review/playbook.yaml | 6 + .../integration/targets/k8s_access_review/runme.sh | 5 + .../targets/k8s_append_hash/playbook.yaml | 6 + .../integration/targets/k8s_append_hash/runme.sh | 5 + .../integration/targets/k8s_apply/playbook.yaml | 6 + .../tests/integration/targets/k8s_apply/runme.sh | 5 + .../targets/k8s_check_mode/playbook.yaml | 6 + .../integration/targets/k8s_check_mode/runme.sh | 5 + .../targets/k8s_cluster_info/playbook.yaml | 6 + .../integration/targets/k8s_cluster_info/runme.sh | 5 + .../targets/k8s_copy/library/k8s_create_file.py | 93 - .../k8s_copy/library/kubectl_file_compare.py | 5 +- .../integration/targets/k8s_copy/playbook.yaml | 6 + .../tests/integration/targets/k8s_copy/runme.sh | 5 + .../k8s_copy/tasks/test_copy_large_file.yml | 15 +- .../integration/targets/k8s_crd/playbook.yaml | 6 + .../tests/integration/targets/k8s_crd/runme.sh | 5 + .../targets/k8s_delete/files/deployments.yaml | 70 + .../integration/targets/k8s_delete/playbook.yaml | 6 + .../tests/integration/targets/k8s_delete/runme.sh | 5 + .../integration/targets/k8s_delete/tasks/main.yml | 71 + .../integration/targets/k8s_diff/playbook.yaml | 6 + .../tests/integration/targets/k8s_diff/runme.sh | 5 + .../integration/targets/k8s_drain/playbook.yaml | 6 + .../tests/integration/targets/k8s_drain/runme.sh | 5 + .../integration/targets/k8s_drain/tasks/main.yml | 85 + .../integration/targets/k8s_exec/playbook.yaml | 6 + .../tests/integration/targets/k8s_exec/runme.sh | 5 + .../integration/targets/k8s_full/playbook.yaml | 6 + .../tests/integration/targets/k8s_full/runme.sh | 5 + .../tests/integration/targets/k8s_gc/playbook.yaml | 6 + .../core/tests/integration/targets/k8s_gc/runme.sh | 5 + .../targets/k8s_generate_name/playbook.yaml | 6 + .../integration/targets/k8s_generate_name/runme.sh | 5 + .../integration/targets/k8s_hide_fields/aliases | 3 + .../targets/k8s_hide_fields/defaults/main.yml | 12 + .../targets/k8s_hide_fields/meta/main.yml | 2 + .../targets/k8s_hide_fields/playbook.yaml | 6 + .../integration/targets/k8s_hide_fields/runme.sh | 5 + .../targets/k8s_hide_fields/tasks/main.yml | 108 + .../integration/targets/k8s_info/playbook.yaml | 6 + .../tests/integration/targets/k8s_info/runme.sh | 5 + .../integration/targets/k8s_info/tasks/wait.yml | 2 +- .../targets/k8s_json_patch/playbook.yaml | 6 + .../integration/targets/k8s_json_patch/runme.sh | 5 + .../targets/k8s_label_selectors/playbook.yaml | 6 + .../targets/k8s_label_selectors/runme.sh | 5 + .../integration/targets/k8s_lists/playbook.yaml | 6 + .../tests/integration/targets/k8s_lists/runme.sh | 5 + .../integration/targets/k8s_log/playbook.yaml | 6 + .../tests/integration/targets/k8s_log/runme.sh | 5 + .../targets/k8s_manifest_url/playbook.yaml | 6 + .../integration/targets/k8s_manifest_url/runme.sh | 5 + .../targets/k8s_merge_type/playbook.yaml | 6 + .../integration/targets/k8s_merge_type/runme.sh | 5 + .../integration/targets/k8s_patched/playbook.yaml | 6 + .../tests/integration/targets/k8s_patched/runme.sh | 5 + .../integration/targets/k8s_rollback/playbook.yaml | 6 + .../integration/targets/k8s_rollback/runme.sh | 5 + .../integration/targets/k8s_scale/playbook.yaml | 6 + .../tests/integration/targets/k8s_scale/runme.sh | 5 + .../integration/targets/k8s_scale/tasks/main.yml | 65 + .../integration/targets/k8s_taint/playbook.yaml | 6 + .../tests/integration/targets/k8s_taint/runme.sh | 5 + .../integration/targets/k8s_template/playbook.yaml | 6 + .../integration/targets/k8s_template/runme.sh | 5 + .../targets/k8s_user_impersonation/playbook.yaml | 6 + .../targets/k8s_user_impersonation/runme.sh | 5 + .../integration/targets/k8s_validate/playbook.yaml | 6 + .../integration/targets/k8s_validate/runme.sh | 5 + .../targets/k8s_validate/tasks/main.yml | 1 + .../integration/targets/k8s_waiter/playbook.yaml | 6 + .../tests/integration/targets/k8s_waiter/runme.sh | 5 + .../integration/targets/lookup_k8s/playbook.yaml | 6 + .../tests/integration/targets/lookup_k8s/runme.sh | 5 + .../targets/lookup_kustomize/playbook.yaml | 6 + .../integration/targets/lookup_kustomize/runme.sh | 5 + .../library/test_inventory_read_credentials.py | 2 - .../kubernetes/core/tests/sanity/ignore-2.10.txt | 616 -- .../kubernetes/core/tests/sanity/ignore-2.11.txt | 592 - .../kubernetes/core/tests/sanity/ignore-2.12.txt | 32 - .../kubernetes/core/tests/sanity/ignore-2.13.txt | 32 - .../kubernetes/core/tests/sanity/ignore-2.14.txt | 2 + .../kubernetes/core/tests/sanity/ignore-2.15.txt | 2 + .../kubernetes/core/tests/sanity/ignore-2.16.txt | 2 + .../kubernetes/core/tests/sanity/ignore-2.17.txt | 2 + .../kubernetes/core/tests/sanity/ignore-2.18.txt | 31 + .../kubernetes/core/tests/sanity/ignore-2.9.txt | 613 -- .../core/tests/unit/action/test_remove_omit.py | 1 + .../kubernetes/core/tests/unit/conftest.py | 5 +- .../core/tests/unit/module_utils/test_apply.py | 2 +- .../core/tests/unit/module_utils/test_client.py | 8 +- .../core/tests/unit/module_utils/test_core.py | 13 +- .../tests/unit/module_utils/test_discoverer.py | 12 +- .../core/tests/unit/module_utils/test_helm.py | 95 +- .../core/tests/unit/module_utils/test_runner.py | 5 +- .../core/tests/unit/module_utils/test_service.py | 4 +- .../core/tests/unit/module_utils/test_waiter.py | 9 +- .../unit/modules/test_helm_template_module.py | 3 +- .../core/tests/unit/modules/test_module_helm.py | 45 +- ansible_collections/kubernetes/core/tox.ini | 36 +- .../aws/.github/ISSUE_TEMPLATE/bug_report.yml | 210 - .../aws/.github/ISSUE_TEMPLATE/feature_request.yml | 100 - .../netapp/aws/.github/workflows/coverage.yml | 45 - .../netapp/aws/.github/workflows/main.yml | 47 - ansible_collections/netapp/aws/CHANGELOG.rst | 90 - ansible_collections/netapp/aws/COPYING | 674 -- ansible_collections/netapp/aws/FILES.json | 383 - ansible_collections/netapp/aws/MANIFEST.json | 35 - ansible_collections/netapp/aws/README.md | 87 - .../netapp/aws/changelogs/changelog.yaml | 81 - .../netapp/aws/changelogs/config.yaml | 32 - .../netapp/aws/changelogs/fragments/20.2.0.yaml | 2 - .../netapp/aws/changelogs/fragments/20.6.0.yaml | 2 - .../netapp/aws/changelogs/fragments/20.8.0.yaml | 3 - .../netapp/aws/changelogs/fragments/20.9.0.yaml | 2 - .../netapp/aws/changelogs/fragments/2019.10.0.yaml | 2 - .../aws/changelogs/fragments/DEVOPS-3569.yaml | 4 - .../aws/changelogs/fragments/DEVOPS-3644.yaml | 5 - .../aws/changelogs/fragments/DEVOPS-4416.yaml | 2 - .../netapp/aws/meta/execution-environment.yml | 3 - ansible_collections/netapp/aws/meta/runtime.yml | 8 - .../netapp/aws/plugins/doc_fragments/netapp.py | 55 - .../netapp/aws/plugins/module_utils/netapp.py | 241 - .../aws/plugins/module_utils/netapp_module.py | 142 - .../modules/aws_netapp_cvs_active_directory.py | 276 - .../plugins/modules/aws_netapp_cvs_filesystems.py | 362 - .../aws/plugins/modules/aws_netapp_cvs_pool.py | 267 - .../plugins/modules/aws_netapp_cvs_snapshots.py | 245 - ansible_collections/netapp/aws/requirements.txt | 1 - .../netapp/aws/tests/unit/compat/__init__.py | 0 .../netapp/aws/tests/unit/compat/builtins.py | 33 - .../netapp/aws/tests/unit/compat/mock.py | 122 - .../netapp/aws/tests/unit/compat/unittest.py | 44 - .../tests/unit/plugins/module_utils/test_netapp.py | 195 - .../test_aws_netapp_cvs_active_directory.py | 117 - .../modules/test_aws_netapp_cvs_filesystems.py | 155 - .../plugins/modules/test_aws_netapp_cvs_pool.py | 258 - .../modules/test_aws_netapp_cvs_snapshots.py | 147 - .../netapp/aws/tests/unit/requirements.txt | 1 - .../azure/.github/ISSUE_TEMPLATE/bug_report.yml | 210 - .../.github/ISSUE_TEMPLATE/feature_request.yml | 100 - .../azure/.github/workflows/codeql-analysis.yml | 71 - .../netapp/azure/.github/workflows/coverage.yml | 45 - .../netapp/azure/.github/workflows/main.yml | 67 - ansible_collections/netapp/azure/CHANGELOG.rst | 171 - ansible_collections/netapp/azure/COPYING | 674 -- ansible_collections/netapp/azure/FILES.json | 705 -- ansible_collections/netapp/azure/HACK.md | 13 - ansible_collections/netapp/azure/MANIFEST.json | 37 - ansible_collections/netapp/azure/README.md | 158 - .../netapp/azure/changelogs/changelog.yaml | 169 - .../netapp/azure/changelogs/config.yaml | 32 - .../netapp/azure/changelogs/fragments/20.2.0.yaml | 2 - .../netapp/azure/changelogs/fragments/20.4.0.yaml | 3 - .../netapp/azure/changelogs/fragments/20.5.0.yaml | 6 - .../netapp/azure/changelogs/fragments/20.6.0.yaml | 3 - .../netapp/azure/changelogs/fragments/20.7.0.yaml | 2 - .../netapp/azure/changelogs/fragments/20.8.0.yaml | 3 - .../azure/changelogs/fragments/DEVOPS-3505.yaml | 4 - .../azure/changelogs/fragments/DEVOPS-3526.yaml | 3 - .../azure/changelogs/fragments/DEVOPS-3663.yaml | 2 - .../azure/changelogs/fragments/DEVOPS-3704.yaml | 5 - .../azure/changelogs/fragments/DEVOPS-3849.yaml | 3 - .../azure/changelogs/fragments/DEVOPS-3935.yaml | 2 - .../azure/changelogs/fragments/DEVOPS-3949.yaml | 6 - .../azure/changelogs/fragments/DEVOPS-4001.yaml | 2 - .../azure/changelogs/fragments/DEVOPS-4070.yaml | 3 - .../azure/changelogs/fragments/DEVOPS-4135.yaml | 2 - .../azure/changelogs/fragments/DEVOPS-4246.yaml | 4 - .../azure/changelogs/fragments/DEVOPS-4416.yaml | 2 - ansible_collections/netapp/azure/meta/runtime.yml | 8 - .../netapp/azure/plugins/doc_fragments/azure.py | 129 - .../azure/plugins/doc_fragments/azure_tags.py | 31 - .../netapp/azure/plugins/doc_fragments/netapp.py | 43 - .../plugins/module_utils/azure_rm_netapp_common.py | 163 - .../azure/plugins/module_utils/netapp_module.py | 271 - .../plugins/modules/azure_rm_netapp_account.py | 404 - .../modules/azure_rm_netapp_capacity_pool.py | 259 - .../plugins/modules/azure_rm_netapp_snapshot.py | 226 - .../plugins/modules/azure_rm_netapp_volume.py | 399 - ansible_collections/netapp/azure/requirements.txt | 3 - .../targets/azure_rm_netapp_account/aliases | 3 - .../targets/azure_rm_netapp_account/meta/main.yml | 2 - .../targets/azure_rm_netapp_account/tasks/main.yml | 41 - .../targets/azure_rm_netapp_capacity_pool/aliases | 3 - .../azure_rm_netapp_capacity_pool/meta/main.yml | 2 - .../azure_rm_netapp_capacity_pool/tasks/main.yml | 47 - .../targets/azure_rm_netapp_snapshot/aliases | 3 - .../targets/azure_rm_netapp_snapshot/meta/main.yml | 2 - .../azure_rm_netapp_snapshot/tasks/main.yml | 51 - .../targets/azure_rm_netapp_volume/aliases | 3 - .../targets/azure_rm_netapp_volume/meta/main.yml | 2 - .../targets/azure_rm_netapp_volume/tasks/main.yml | 57 - .../requirements/integration.cloud.azure.txt | 1 - .../runner/requirements/requirements-azure.txt | 9 - .../tests/runner/requirements/unit.cloud.azure.txt | 1 - .../azure/tests/runner/requirements/units.txt | 1 - .../netapp/azure/tests/unit/compat/__init__.py | 0 .../netapp/azure/tests/unit/compat/builtins.py | 33 - .../netapp/azure/tests/unit/compat/mock.py | 122 - .../netapp/azure/tests/unit/compat/unittest.py | 44 - .../plugins/module_utils/test_netapp_module.py | 149 - .../modules/test_azure_rm_netapp_account.py | 173 - .../modules/test_azure_rm_netapp_capacity_pool.py | 197 - .../modules/test_azure_rm_netapp_snapshot.py | 165 - .../plugins/modules/test_azure_rm_netapp_volume.py | 501 - .../modules/test_azure_rm_netapp_volume_import.py | 74 - .../netapp/azure/tests/unit/requirements.txt | 3 - .../.github/ISSUE_TEMPLATE/bug_report.yml | 210 - .../.github/ISSUE_TEMPLATE/feature_request.yml | 100 - .../elementsw/.github/workflows/coverage.yml | 45 - .../netapp/elementsw/.github/workflows/main.yml | 47 - ansible_collections/netapp/elementsw/CHANGELOG.rst | 192 - ansible_collections/netapp/elementsw/FILES.json | 649 -- ansible_collections/netapp/elementsw/MANIFEST.json | 34 - ansible_collections/netapp/elementsw/README.md | 133 - .../netapp/elementsw/changelogs/changelog.yaml | 221 - .../netapp/elementsw/changelogs/config.yaml | 32 - .../elementsw/changelogs/fragments/20.2.0.yaml | 3 - .../elementsw/changelogs/fragments/20.6.0.yaml | 2 - .../elementsw/changelogs/fragments/20.8.0.yaml | 21 - .../elementsw/changelogs/fragments/20.9.0.yaml | 7 - .../elementsw/changelogs/fragments/2019.10.0.yaml | 2 - .../changelogs/fragments/DEVOPS-3117.yaml | 2 - .../changelogs/fragments/DEVOPS-3174.yaml | 2 - .../changelogs/fragments/DEVOPS-3188.yaml | 2 - .../changelogs/fragments/DEVOPS-3196.yaml | 2 - .../changelogs/fragments/DEVOPS-3235.yaml | 2 - .../elementsw/changelogs/fragments/DEVOPS-3310.yml | 2 - .../changelogs/fragments/DEVOPS-3324.yaml | 2 - .../changelogs/fragments/DEVOPS-3731.yaml | 4 - .../changelogs/fragments/DEVOPS-3733.yaml | 4 - .../changelogs/fragments/DEVOPS-3734.yaml | 2 - .../changelogs/fragments/DEVOPS-3800.yaml | 2 - .../changelogs/fragments/DEVOPS-4416.yaml | 2 - .../netapp/elementsw/meta/runtime.yml | 28 - .../elementsw/plugins/doc_fragments/netapp.py | 51 - .../elementsw/plugins/module_utils/netapp.py | 107 - .../module_utils/netapp_elementsw_module.py | 206 - .../plugins/module_utils/netapp_module.py | 225 - .../plugins/modules/na_elementsw_access_group.py | 397 - .../modules/na_elementsw_access_group_volumes.py | 247 - .../plugins/modules/na_elementsw_account.py | 340 - .../plugins/modules/na_elementsw_admin_users.py | 233 - .../plugins/modules/na_elementsw_backup.py | 243 - .../modules/na_elementsw_check_connections.py | 154 - .../plugins/modules/na_elementsw_cluster.py | 372 - .../plugins/modules/na_elementsw_cluster_config.py | 331 - .../plugins/modules/na_elementsw_cluster_pair.py | 206 - .../plugins/modules/na_elementsw_cluster_snmp.py | 365 - .../plugins/modules/na_elementsw_drive.py | 368 - .../elementsw/plugins/modules/na_elementsw_info.py | 272 - .../plugins/modules/na_elementsw_initiators.py | 343 - .../elementsw/plugins/modules/na_elementsw_ldap.py | 254 - .../modules/na_elementsw_network_interfaces.py | 423 - .../elementsw/plugins/modules/na_elementsw_node.py | 357 - .../plugins/modules/na_elementsw_qos_policy.py | 270 - .../plugins/modules/na_elementsw_snapshot.py | 369 - .../modules/na_elementsw_snapshot_restore.py | 203 - .../modules/na_elementsw_snapshot_schedule.py | 586 - .../elementsw/plugins/modules/na_elementsw_vlan.py | 274 - .../plugins/modules/na_elementsw_volume.py | 413 - .../plugins/modules/na_elementsw_volume_clone.py | 276 - .../plugins/modules/na_elementsw_volume_pair.py | 293 - .../netapp/elementsw/requirements.txt | 1 - .../netapp/elementsw/tests/unit/compat/__init__.py | 0 .../netapp/elementsw/tests/unit/compat/builtins.py | 33 - .../netapp/elementsw/tests/unit/compat/mock.py | 122 - .../netapp/elementsw/tests/unit/compat/unittest.py | 44 - .../modules/test_na_elementsw_access_group.py | 175 - .../test_na_elementsw_access_group_volumes.py | 245 - .../plugins/modules/test_na_elementsw_account.py | 137 - .../plugins/modules/test_na_elementsw_cluster.py | 228 - .../modules/test_na_elementsw_cluster_config.py | 157 - .../modules/test_na_elementsw_cluster_snmp.py | 176 - .../unit/plugins/modules/test_na_elementsw_info.py | 344 - .../modules/test_na_elementsw_initiators.py | 201 - .../test_na_elementsw_network_interfaces.py | 293 - .../plugins/modules/test_na_elementsw_nodes.py | 324 - .../modules/test_na_elementsw_qos_policy.py | 300 - .../plugins/modules/test_na_elementsw_template.py | 138 - .../unit/plugins/modules/test_na_elementsw_vlan.py | 343 - .../plugins/modules/test_na_elementsw_volume.py | 364 - .../plugins/modules_utils/test_netapp_module.py | 149 - .../netapp/elementsw/tests/unit/requirements.txt | 1 - .../um_info/.github/ISSUE_TEMPLATE/bug_report.yml | 210 - .../.github/ISSUE_TEMPLATE/feature_request.yml | 100 - .../netapp/um_info/.github/workflows/coverage.yml | 45 - .../netapp/um_info/.github/workflows/main.yml | 49 - ansible_collections/netapp/um_info/CHANGELOG.rst | 78 - ansible_collections/netapp/um_info/COPYING | 674 -- ansible_collections/netapp/um_info/FILES.json | 467 - ansible_collections/netapp/um_info/MANIFEST.json | 34 - ansible_collections/netapp/um_info/README.md | 84 - .../netapp/um_info/changelogs/changelog.yaml | 72 - .../netapp/um_info/changelogs/config.yaml | 32 - .../um_info/changelogs/fragments/20.7.0.yaml | 3 - .../um_info/changelogs/fragments/DEVOPS-2952.yaml | 4 - .../um_info/changelogs/fragments/DEVOPS-3920.yaml | 2 - .../um_info/changelogs/fragments/DEVOPS-3962.yaml | 6 - .../um_info/changelogs/fragments/DEVOPS-4059.yaml | 2 - .../um_info/changelogs/fragments/DEVOPS-4087.yaml | 4 - .../um_info/changelogs/fragments/DEVOPS-4416.yaml | 2 - .../netapp/um_info/meta/execution-environment.yml | 3 - .../netapp/um_info/meta/runtime.yml | 9 - .../netapp/um_info/metadata-29PbAy.json | 14 - .../netapp/um_info/plugins/doc_fragments/netapp.py | 74 - .../netapp/um_info/plugins/module_utils/netapp.py | 246 - .../um_info/plugins/module_utils/netapp_module.py | 51 - .../plugins/modules/na_um_aggregates_info.py | 163 - .../um_info/plugins/modules/na_um_clusters_info.py | 152 - .../plugins/modules/na_um_list_aggregates.py | 163 - .../um_info/plugins/modules/na_um_list_clusters.py | 152 - .../um_info/plugins/modules/na_um_list_nodes.py | 145 - .../um_info/plugins/modules/na_um_list_svms.py | 174 - .../um_info/plugins/modules/na_um_list_volumes.py | 133 - .../um_info/plugins/modules/na_um_nodes_info.py | 145 - .../um_info/plugins/modules/na_um_svms_info.py | 174 - .../um_info/plugins/modules/na_um_volumes_info.py | 133 - .../netapp/um_info/requirements.txt | 1 - .../netapp/um_info/tests/unit/compat/__init__.py | 0 .../netapp/um_info/tests/unit/compat/builtins.py | 33 - .../netapp/um_info/tests/unit/compat/mock.py | 122 - .../netapp/um_info/tests/unit/compat/unittest.py | 44 - .../tests/unit/plugins/module_utils/test_netapp.py | 236 - .../plugins/modules/test_na_um_aggregates_info.py | 159 - .../plugins/modules/test_na_um_clusters_info.py | 159 - .../plugins/modules/test_na_um_list_aggregates.py | 159 - .../plugins/modules/test_na_um_list_clusters.py | 159 - .../unit/plugins/modules/test_na_um_list_nodes.py | 158 - .../unit/plugins/modules/test_na_um_list_svms.py | 158 - .../plugins/modules/test_na_um_list_volumes.py | 158 - .../unit/plugins/modules/test_na_um_nodes_info.py | 158 - .../unit/plugins/modules/test_na_um_svms_info.py | 158 - .../plugins/modules/test_na_um_volumes_info.py | 158 - .../netapp/um_info/tests/unit/requirements.txt | 1 - ansible_collections/netbox/netbox/CHANGELOG.rst | 22 + ansible_collections/netbox/netbox/FILES.json | 3202 +++--- ansible_collections/netbox/netbox/MANIFEST.json | 4 +- .../netbox/netbox/changelogs/changelog.yaml | 22 + ansible_collections/netbox/netbox/docs/conf.py | 2 +- .../netbox/netbox/docs/plugins/index.rst | 8 +- .../netbox/docs/plugins/nb_inventory_inventory.rst | 96 +- .../netbox/docs/plugins/nb_lookup_lookup.rst | 2 +- .../docs/plugins/netbox_aggregate_module.rst | 2 +- .../netbox/docs/plugins/netbox_asn_module.rst | 2 +- .../netbox/docs/plugins/netbox_cable_module.rst | 2 +- .../netbox/docs/plugins/netbox_circuit_module.rst | 2 +- .../plugins/netbox_circuit_termination_module.rst | 2 +- .../docs/plugins/netbox_circuit_type_module.rst | 2 +- .../docs/plugins/netbox_cluster_group_module.rst | 2 +- .../netbox/docs/plugins/netbox_cluster_module.rst | 2 +- .../docs/plugins/netbox_cluster_type_module.rst | 2 +- .../docs/plugins/netbox_config_context_module.rst | 2 +- .../docs/plugins/netbox_config_template_module.rst | 2 +- .../docs/plugins/netbox_console_port_module.rst | 2 +- .../netbox_console_port_template_module.rst | 2 +- .../plugins/netbox_console_server_port_module.rst | 2 +- .../netbox_console_server_port_template_module.rst | 2 +- .../docs/plugins/netbox_contact_group_module.rst | 2 +- .../netbox/docs/plugins/netbox_contact_module.rst | 2 +- .../docs/plugins/netbox_contact_role_module.rst | 2 +- .../netbox_custom_field_choice_set_module.rst | 762 ++ .../docs/plugins/netbox_custom_field_module.rst | 26 +- .../docs/plugins/netbox_custom_link_module.rst | 2 +- .../docs/plugins/netbox_device_bay_module.rst | 2 +- .../plugins/netbox_device_bay_template_module.rst | 2 +- .../plugins/netbox_device_interface_module.rst | 2 +- .../netbox_device_interface_template_module.rst | 2 +- .../netbox/docs/plugins/netbox_device_module.rst | 6 +- .../docs/plugins/netbox_device_role_module.rst | 2 +- .../docs/plugins/netbox_device_type_module.rst | 6 +- .../docs/plugins/netbox_export_template_module.rst | 34 +- .../netbox_fhrp_group_assignment_module.rst | 2 +- .../docs/plugins/netbox_fhrp_group_module.rst | 2 +- .../docs/plugins/netbox_front_port_module.rst | 2 +- .../plugins/netbox_front_port_template_module.rst | 2 +- .../docs/plugins/netbox_interface_module.rst | 2 +- .../docs/plugins/netbox_inventory_item_module.rst | 2 +- .../plugins/netbox_inventory_item_role_module.rst | 2 +- .../docs/plugins/netbox_ip_address_module.rst | 2 +- .../docs/plugins/netbox_ipam_role_module.rst | 2 +- .../docs/plugins/netbox_journal_entry_module.rst | 2 +- .../netbox/docs/plugins/netbox_l2vpn_module.rst | 2 +- .../plugins/netbox_l2vpn_termination_module.rst | 2 +- .../netbox/docs/plugins/netbox_location_module.rst | 2 +- .../docs/plugins/netbox_manufacturer_module.rst | 2 +- .../docs/plugins/netbox_module_bay_module.rst | 825 ++ .../netbox/docs/plugins/netbox_module_module.rst | 984 ++ .../docs/plugins/netbox_module_type_module.rst | 2 +- .../netbox/docs/plugins/netbox_platform_module.rst | 2 +- .../docs/plugins/netbox_power_feed_module.rst | 2 +- .../docs/plugins/netbox_power_outlet_module.rst | 2 +- .../netbox_power_outlet_template_module.rst | 2 +- .../docs/plugins/netbox_power_panel_module.rst | 2 +- .../docs/plugins/netbox_power_port_module.rst | 47 +- .../plugins/netbox_power_port_template_module.rst | 2 +- .../netbox/docs/plugins/netbox_prefix_module.rst | 2 +- .../netbox/docs/plugins/netbox_provider_module.rst | 2 +- .../plugins/netbox_provider_network_module.rst | 2 +- .../docs/plugins/netbox_rack_group_module.rst | 2 +- .../netbox/docs/plugins/netbox_rack_module.rst | 4 +- .../docs/plugins/netbox_rack_role_module.rst | 2 +- .../docs/plugins/netbox_rear_port_module.rst | 2 +- .../plugins/netbox_rear_port_template_module.rst | 2 +- .../netbox/docs/plugins/netbox_region_module.rst | 2 +- .../netbox/docs/plugins/netbox_rir_module.rst | 2 +- .../docs/plugins/netbox_route_target_module.rst | 2 +- .../netbox/docs/plugins/netbox_service_module.rst | 2 +- .../plugins/netbox_service_template_module.rst | 2 +- .../docs/plugins/netbox_site_group_module.rst | 2 +- .../netbox/docs/plugins/netbox_site_module.rst | 2 +- .../netbox/docs/plugins/netbox_tag_module.rst | 2 +- .../docs/plugins/netbox_tenant_group_module.rst | 2 +- .../netbox/docs/plugins/netbox_tenant_module.rst | 2 +- .../docs/plugins/netbox_virtual_chassis_module.rst | 2 +- .../docs/plugins/netbox_virtual_disk_module.rst | 2 +- .../docs/plugins/netbox_virtual_machine_module.rst | 2 +- .../docs/plugins/netbox_vlan_group_module.rst | 2 +- .../netbox/docs/plugins/netbox_vlan_module.rst | 2 +- .../docs/plugins/netbox_vm_interface_module.rst | 2 +- .../netbox/docs/plugins/netbox_vrf_module.rst | 2 +- .../netbox/docs/plugins/netbox_webhook_module.rst | 2 +- .../plugins/netbox_wireless_lan_group_module.rst | 2 +- .../docs/plugins/netbox_wireless_lan_module.rst | 2 +- .../docs/plugins/netbox_wireless_link_module.rst | 2 +- ansible_collections/netbox/netbox/meta/runtime.yml | 2 + .../netbox/plugins/inventory/nb_inventory.py | 74 +- .../netbox/netbox/plugins/lookup/nb_lookup.py | 4 + .../netbox/plugins/module_utils/netbox_dcim.py | 37 + .../netbox/plugins/module_utils/netbox_extras.py | 1 + .../netbox/plugins/module_utils/netbox_utils.py | 23 + .../netbox/plugins/modules/netbox_custom_field.py | 24 +- .../modules/netbox_custom_field_choice_set.py | 164 + .../netbox/netbox/plugins/modules/netbox_device.py | 6 +- .../netbox/plugins/modules/netbox_device_type.py | 6 +- .../plugins/modules/netbox_export_template.py | 30 +- .../netbox/netbox/plugins/modules/netbox_module.py | 213 + .../netbox/plugins/modules/netbox_module_bay.py | 156 + .../netbox/plugins/modules/netbox_power_port.py | 7 + .../netbox/netbox/plugins/modules/netbox_rack.py | 4 +- ansible_collections/netbox/netbox/poetry.lock | 272 +- .../netbox/tests/integration/netbox-deploy.py | 9 + .../files/test-inventory-bearer-token.json | 135 +- .../files/test-inventory-jinja2-filter.json | 123 +- .../files/test-inventory-jinja2.json | 1 + .../files/test-inventory-legacy.json | 23 +- .../files/test-inventory-noracks.json | 135 +- .../files/test-inventory-options-flatten.json | 135 +- .../files/test-inventory-options.json | 1 + .../files/test-inventory-plurals-flatten.json | 1 + .../files/test-inventory-plurals.json | 135 +- .../inventory-v3.7/files/test-inventory.json | 291 +- .../inventory-v3.7/files/test-inventory.yml | 1 + .../targets/v3.5/tasks/netbox_device.yml | 2 +- .../targets/v3.5/tasks/netbox_device_type.yml | 2 +- .../targets/v3.5/tasks/netbox_module.yml | 107 + .../targets/v3.5/tasks/netbox_module_bay.yml | 105 + .../tests/integration/targets/v3.6/tasks/main.yml | 5 + .../v3.6/tasks/netbox_custom_field_choice_set.yml | 106 + .../targets/v3.6/tasks/netbox_device.yml | 2 +- .../targets/v3.6/tasks/netbox_device_type.yml | 2 +- .../targets/v3.6/tasks/netbox_module.yml | 107 + .../targets/v3.6/tasks/netbox_module_bay.yml | 105 + .../targets/v3.7/tasks/netbox_device.yml | 2 +- .../targets/v3.7/tasks/netbox_device_type.yml | 2 +- .../targets/v3.7/tasks/netbox_module.yml | 107 + .../targets/v3.7/tasks/netbox_module_bay.yml | 105 + .../tests/unit/inventory/test_data/data.json | 12 + .../test_data/extract_custom_fields/data.json | 21 + .../inventory/test_data/group_extractors/data.json | 9 + .../tests/unit/inventory/test_nb_inventory.py | 16 +- .../unit/module_utils/test_netbox_base_class.py | 14 +- .../flasharray/.github/workflows/main.yml | 1 - .../purestorage/flasharray/CHANGELOG.rst | 21 + .../purestorage/flasharray/FILES.json | 97 +- .../purestorage/flasharray/MANIFEST.json | 4 +- .../purestorage/flasharray/README.md | 2 +- .../flasharray/changelogs/.plugin-cache.yaml | 2 +- .../changelogs/210_add_rename_hgroup.yaml | 2 - .../211_fix_clearing_host_inititators.yaml | 2 - .../flasharray/changelogs/changelog.yaml | 27 + .../fragments/210_add_rename_hgroup.yaml | 2 + .../211_fix_clearing_host_inititators.yaml | 2 + .../changelogs/fragments/550_service.yaml | 2 + .../changelogs/fragments/555_update_pg.yaml | 2 + .../changelogs/fragments/558_add_perf_info.yaml | 2 + .../changelogs/fragments/559_volume_response.yaml | 2 + .../changelogs/fragments/560_snapshot_epoch.yaml | 2 + .../changelogs/fragments/561_remote_snap_info.yaml | 2 + .../changelogs/fragments/562_host_vol_fix.yaml | 3 + .../purestorage/flasharray/meta/runtime.yml | 2 +- .../flasharray/plugins/modules/purefa_host.py | 3 +- .../flasharray/plugins/modules/purefa_info.py | 390 +- .../flasharray/plugins/modules/purefa_pg.py | 144 +- .../flasharray/plugins/modules/purefa_volume.py | 189 +- .../purestorage/fusion/.github/CONTRIBUTING.md | 19 - .../fusion/.github/ISSUE_TEMPLATE/bug_report.md | 38 - .../.github/ISSUE_TEMPLATE/feature_request.md | 20 - .../fusion/.github/pull_request_template.md | 25 - .../fusion/.github/workflows/ansible-lint.yaml | 10 - .../fusion/.github/workflows/black.yaml | 11 - .../fusion/.github/workflows/create-release.yaml | 117 - .../purestorage/fusion/.github/workflows/main.yml | 53 - .../rh_automation_hub_token_keep_alive.yml | 19 - .../purestorage/fusion/.github/workflows/stale.yml | 19 - ansible_collections/purestorage/fusion/.gitignore | 12 - ansible_collections/purestorage/fusion/.yamllint | 7 - .../purestorage/fusion/CHANGELOG.rst | 249 - .../purestorage/fusion/COPYING.GPLv3 | 674 -- ansible_collections/purestorage/fusion/FILES.json | 1244 --- .../purestorage/fusion/MANIFEST.json | 34 - ansible_collections/purestorage/fusion/README.md | 104 - .../fusion/changelogs/.plugin-cache.yaml | 114 - .../purestorage/fusion/changelogs/changelog.yaml | 381 - .../purestorage/fusion/changelogs/config.yaml | 32 - .../purestorage/fusion/meta/runtime.yml | 12 - .../fusion/playbooks/simple/create_array.yml | 17 - .../playbooks/simple/create_availability_zone.yml | 13 - .../playbooks/simple/create_tenant_space.yml | 12 - .../fusion/playbooks/simple/list_all.yml | 14 - .../fusion/playbooks/simple/list_api_clients.yml | 14 - .../fusion/playbooks/simple/list_arrays.yml | 14 - .../playbooks/simple/list_availability_zones.yml | 14 - .../playbooks/simple/list_hardware_types.yml | 14 - .../fusion/playbooks/simple/list_hosts.yml | 14 - .../fusion/playbooks/simple/list_interfaces.yml | 14 - .../simple/list_network_interface_groups.yml | 14 - .../playbooks/simple/list_placement_groups.yml | 14 - .../playbooks/simple/list_protection_policies.yml | 14 - .../fusion/playbooks/simple/list_roles.yml | 14 - .../fusion/playbooks/simple/list_snapshots.yml | 14 - .../playbooks/simple/list_storage_classes.yml | 14 - .../playbooks/simple/list_storage_endpoints.yml | 14 - .../playbooks/simple/list_storage_services.yml | 14 - .../fusion/playbooks/simple/list_tenant_spaces.yml | 14 - .../fusion/playbooks/simple/list_tenants.yml | 14 - .../fusion/playbooks/simple/list_users.yml | 14 - .../fusion/playbooks/simple/list_volumes.yml | 14 - .../fusion/playbooks/simple/make_tenant_admin.yml | 12 - .../fusion/playbooks/simple/remove_array.yml | 17 - .../playbooks/simple/setup_infrastructure.yml | 64 - .../playbooks/simple/setup_protection_policies.yml | 13 - .../simple/setup_storage_service_class.yml | 24 - .../fusion/playbooks/simple/setup_workloads.yml | 71 - .../purestorage/fusion/playbooks/tasks/.keep | 0 .../purestorage/fusion/playbooks/templates/.keep | 0 .../purestorage/fusion/playbooks/vars/.keep | 0 .../fusion/plugins/doc_fragments/purestorage.py | 56 - .../fusion/plugins/inventory/__init__.py | 0 .../fusion/plugins/module_utils/errors.py | 291 - .../fusion/plugins/module_utils/fusion.py | 183 - .../fusion/plugins/module_utils/getters.py | 99 - .../fusion/plugins/module_utils/networking.py | 76 - .../fusion/plugins/module_utils/operations.py | 42 - .../fusion/plugins/module_utils/parsing.py | 75 - .../fusion/plugins/module_utils/prerequisites.py | 162 - .../fusion/plugins/module_utils/snapshots.py | 29 - .../fusion/plugins/module_utils/startup.py | 26 - .../fusion/plugins/modules/fusion_api_client.py | 140 - .../fusion/plugins/modules/fusion_array.py | 281 - .../fusion/plugins/modules/fusion_az.py | 162 - .../fusion/plugins/modules/fusion_hap.py | 314 - .../fusion/plugins/modules/fusion_hw.py | 88 - .../fusion/plugins/modules/fusion_info.py | 1130 -- .../fusion/plugins/modules/fusion_ni.py | 245 - .../fusion/plugins/modules/fusion_nig.py | 276 - .../fusion/plugins/modules/fusion_pg.py | 307 - .../fusion/plugins/modules/fusion_pp.py | 208 - .../fusion/plugins/modules/fusion_ra.py | 284 - .../fusion/plugins/modules/fusion_region.py | 182 - .../fusion/plugins/modules/fusion_sc.py | 257 - .../fusion/plugins/modules/fusion_se.py | 508 - .../fusion/plugins/modules/fusion_ss.py | 211 - .../fusion/plugins/modules/fusion_tenant.py | 171 - .../fusion/plugins/modules/fusion_tn.py | 122 - .../fusion/plugins/modules/fusion_ts.py | 189 - .../fusion/plugins/modules/fusion_volume.py | 559 - .../purestorage/fusion/test/config.yaml | 2 - .../purestorage/fusion/tests/functional/README.md | 35 - .../fusion/tests/functional/__init__.py | 0 .../tests/functional/test_fusion_api_client.py | 374 - .../fusion/tests/functional/test_fusion_array.py | 1344 --- .../fusion/tests/functional/test_fusion_az.py | 720 -- .../fusion/tests/functional/test_fusion_hap.py | 892 -- .../fusion/tests/functional/test_fusion_hw.py | 115 - .../fusion/tests/functional/test_fusion_info.py | 2384 ---- .../fusion/tests/functional/test_fusion_nig.py | 1244 --- .../fusion/tests/functional/test_fusion_pg.py | 1600 --- .../fusion/tests/functional/test_fusion_pp.py | 531 - .../fusion/tests/functional/test_fusion_ra.py | 815 -- .../fusion/tests/functional/test_fusion_region.py | 802 -- .../fusion/tests/functional/test_fusion_sc.py | 1244 --- .../fusion/tests/functional/test_fusion_se.py | 1044 -- .../fusion/tests/functional/test_fusion_ss.py | 934 -- .../fusion/tests/functional/test_fusion_tenant.py | 807 -- .../fusion/tests/functional/test_fusion_ts.py | 926 -- .../fusion/tests/functional/test_fusion_volume.py | 861 -- .../purestorage/fusion/tests/functional/utils.py | 131 - .../purestorage/fusion/tests/helpers.py | 37 - .../purestorage/fusion/tests/integration/README.md | 10 - .../tests/integration/integration_config.template | 6 - .../integration/targets/fusion_az/tasks/main.yml | 43 - .../integration/targets/fusion_hap/tasks/main.yml | 42 - .../integration/targets/fusion_ni/tasks/main.yml | 37 - .../integration/targets/fusion_nig/tasks/main.yml | 48 - .../integration/targets/fusion_pg/tasks/main.yml | 95 - .../integration/targets/fusion_pp/tasks/main.yml | 43 - .../targets/fusion_region/tasks/main.yml | 53 - .../integration/targets/fusion_sc/tasks/main.yml | 94 - .../integration/targets/fusion_se/tasks/main.yml | 100 - .../integration/targets/fusion_ss/tasks/main.yml | 77 - .../targets/fusion_tenant/tasks/main.yml | 41 - .../integration/targets/fusion_ts/tasks/main.yml | 62 - .../purestorage/fusion/tests/unit/README.md | 15 - .../fusion/tests/unit/mocks/__init__.py | 0 .../fusion/tests/unit/mocks/module_mock.py | 38 - .../fusion/tests/unit/mocks/operation_mock.py | 36 - .../fusion/tests/unit/module_utils/__init__.py | 0 .../tests/unit/module_utils/test_networking.py | 58 - .../tests/unit/module_utils/test_operations.py | 230 - .../fusion/tests/unit/module_utils/test_parsing.py | 153 - .../tests/unit/module_utils/test_prerequisites.py | 116 - .../fusion/tests/unit/modules/__init__.py | 0 .../fusion/tests/unit/modules/test_fusion_az.py | 450 - ansible_collections/splunk/es/CHANGELOG.rst | 13 + ansible_collections/splunk/es/FILES.json | 45 +- ansible_collections/splunk/es/MANIFEST.json | 6 +- ansible_collections/splunk/es/README.md | 2 +- .../splunk/es/changelogs/changelog.yaml | 12 + ansible_collections/splunk/es/meta/runtime.yml | 2 +- ansible_collections/splunk/es/tests/config.yml | 2 +- .../splunk/es/tests/sanity/ignore-2.10.txt | 1 - .../splunk/es/tests/sanity/ignore-2.11.txt | 1 - .../splunk/es/tests/sanity/ignore-2.12.txt | 1 - .../splunk/es/tests/sanity/ignore-2.13.txt | 0 .../splunk/es/tests/sanity/ignore-2.9.txt | 9 - .../telekom_mms/icinga_director/.aar_doc.yml | 72 + .../telekom_mms/icinga_director/CHANGELOG.rst | 40 + .../telekom_mms/icinga_director/FILES.json | 741 +- .../telekom_mms/icinga_director/MANIFEST.json | 4 +- .../telekom_mms/icinga_director/README.md | 30 +- .../icinga_director/changelogs/.plugin-cache.yaml | 2 +- .../icinga_director/changelogs/changelog.yaml | 444 +- .../icinga_director/docs/icinga_deploy.rst | 5 + .../icinga_director/docs/icinga_notification.rst | 28 +- .../icinga_director/examples/icinga_deploy.yml | 1 + .../examples/icinga_notification.yml | 23 +- .../telekom_mms/icinga_director/meta/runtime.yml | 2 +- .../plugins/modules/icinga_deploy.py | 12 +- .../plugins/modules/icinga_notification.py | 39 +- .../plugins/modules/icinga_service_apply.py | 14 +- .../icinga_director/roles/ansible_icinga/README.md | 2268 +++- .../roles/ansible_icinga/defaults/main.yml | 18 +- .../roles/ansible_icinga/handlers/main.yml | 8 +- .../roles/ansible_icinga/meta/argument_specs.yml | 1345 +++ .../roles/ansible_icinga/meta/main.yml | 5 +- .../roles/ansible_icinga/tasks/icinga_command.yml | 26 +- .../tasks/icinga_command_template.yml | 28 +- .../roles/ansible_icinga/tasks/icinga_endpoint.yml | 18 +- .../roles/ansible_icinga/tasks/icinga_host.yml | 72 +- .../ansible_icinga/tasks/icinga_host_template.yml | 72 +- .../ansible_icinga/tasks/icinga_hostgroup.yml | 14 +- .../ansible_icinga/tasks/icinga_notification.yml | 30 +- .../tasks/icinga_notification_template.yml | 32 +- .../tasks/icinga_scheduled_downtime.yml | 24 +- .../roles/ansible_icinga/tasks/icinga_service.yml | 53 +- .../ansible_icinga/tasks/icinga_service_apply.yml | 52 +- .../tasks/icinga_service_template.yml | 54 +- .../ansible_icinga/tasks/icinga_servicegroup.yml | 14 +- .../ansible_icinga/tasks/icinga_serviceset.yml | 14 +- .../ansible_icinga/tasks/icinga_timeperiod.yml | 16 +- .../roles/ansible_icinga/tasks/icinga_user.yml | 22 +- .../ansible_icinga/tasks/icinga_user_group.yml | 24 + .../ansible_icinga/tasks/icinga_user_template.yml | 18 +- .../roles/ansible_icinga/tasks/icinga_zone.yml | 14 +- .../roles/ansible_icinga/tasks/main.yml | 77 +- .../theforeman/foreman/CHANGELOG.rst | 20 + ansible_collections/theforeman/foreman/FILES.json | 2318 ++-- .../theforeman/foreman/MANIFEST.json | 8 +- .../theforeman/foreman/changelogs/changelog.yaml | 21 + .../theforeman/foreman/meta/runtime.yml | 2 + .../foreman/plugins/inventory/foreman.py | 2 +- .../foreman/plugins/modules/compute_profile.py | 2 +- .../foreman/plugins/modules/content_view_filter.py | 184 +- .../plugins/modules/content_view_version.py | 2 +- .../theforeman/foreman/plugins/modules/host.py | 2 +- .../foreman/plugins/modules/job_template.py | 26 +- .../foreman/plugins/modules/partition_table.py | 4 +- .../theforeman/foreman/plugins/modules/product.py | 1 - .../plugins/modules/provisioning_template.py | 4 +- .../plugins/modules/registration_command.py | 205 + .../theforeman/foreman/plugins/modules/webhook.py | 167 + .../roles/content_credentials/tasks/main.yml | 2 +- .../roles/content_view_publish/tasks/main.yml | 4 +- .../content_views/tasks/_create_content_view.yml | 19 +- .../foreman/roles/hostgroups/tasks/main.yml | 1 + .../tests/test_playbooks/content_view_filter.yml | 35 - .../content_view_filter_rule_info.yml | 2 +- .../foreman/tests/test_playbooks/filters.yml | 8 +- .../foreman/tests/test_playbooks/host_info.yml | 4 +- .../tests/test_playbooks/inventory_plugin.yml | 2 + .../test_playbooks/inventory_plugin_ansible.yml | 2 + .../tests/test_playbooks/registration_command.yml | 39 + .../tasks/content_view_filter_deb.yml | 4 - .../tasks/content_view_filter_docker.yml | 3 - .../tasks/content_view_filter_errata_date.yml | 7 - .../tasks/content_view_filter_errata_id.yml | 3 - .../tasks/content_view_filter_package.yml | 7 - .../tasks/content_view_filter_package_group.yml | 3 - .../tasks/inventory_plugin_tests.yml | 22 +- .../test_playbooks/tasks/registration_command.yml | 18 + .../foreman/tests/test_playbooks/tasks/webhook.yml | 32 + .../foreman/tests/test_playbooks/webhook.yml | 91 + .../vmware/vmware_rest/.ansible-lint | 10 + .../vmware/vmware_rest/.github/patchback.yml | 4 + .../vmware_rest/.github/workflows/changelog.yaml | 13 + .../vmware_rest/.github/workflows/linters.yaml | 27 + .../.github/workflows/sanity-tests.yaml | 129 + .../vmware/vmware_rest/CHANGELOG.rst | 38 + ansible_collections/vmware/vmware_rest/FILES.json | 685 +- .../vmware/vmware_rest/MANIFEST.json | 8 +- ansible_collections/vmware/vmware_rest/README.md | 39 +- .../vmware/vmware_rest/changelogs/changelog.yaml | 39 +- .../vmware/vmware_rest/changelogs/config.yaml | 2 +- .../vmware/vmware_rest/changelogs/fragments/.keep | 0 .../changelogs/fragments/2.1.3-changelog.yaml | 8 - .../changelogs/fragments/2.1.3-module_utils.yaml | 3 - .../fragments/allow_space_in_search_filters.yaml | 3 - .../changelogs/fragments/cloud.common-bump.yaml | 3 - .../fragments/lookup-handle-special-chars.yml | 3 - .../fragments/set_default_galaxy_version.yaml | 3 - .../fragments/use-FQCN-in-create_vm.yaml.yaml | 3 - .../vcenter_network_info-dvs-example.yaml | 3 - .../changelogs/fragments/version_added.yaml | 3 - .../changelogs/fragments/vm_template_library.yaml | 3 - .../vmware/vmware_rest/development.md | 72 + ...est.appliance_access_consolecli_info_module.rst | 4 +- ...are_rest.appliance_access_consolecli_module.rst | 4 +- ...ware_rest.appliance_access_dcui_info_module.rst | 4 +- ...re.vmware_rest.appliance_access_dcui_module.rst | 4 +- ...are_rest.appliance_access_shell_info_module.rst | 4 +- ...e.vmware_rest.appliance_access_shell_module.rst | 4 +- ...mware_rest.appliance_access_ssh_info_module.rst | 4 +- ...are.vmware_rest.appliance_access_ssh_module.rst | 4 +- ..._rest.appliance_health_applmgmt_info_module.rst | 4 +- ..._rest.appliance_health_database_info_module.rst | 4 +- ...ppliance_health_databasestorage_info_module.rst | 4 +- ...ware_rest.appliance_health_load_info_module.rst | 4 +- ...mware_rest.appliance_health_mem_info_module.rst | 4 +- ...pliance_health_softwarepackages_info_module.rst | 4 +- ...e_rest.appliance_health_storage_info_module.rst | 4 +- ...ware_rest.appliance_health_swap_info_module.rst | 4 +- ...re_rest.appliance_health_system_info_module.rst | 4 +- ....appliance_infraprofile_configs_info_module.rst | 4 +- ..._rest.appliance_infraprofile_configs_module.rst | 4 +- ...ance_localaccounts_globalpolicy_info_module.rst | 4 +- ...appliance_localaccounts_globalpolicy_module.rst | 7 +- ...re_rest.appliance_localaccounts_info_module.rst | 4 +- ...mware_rest.appliance_monitoring_info_module.rst | 7 +- ...ware_rest.appliance_monitoring_query_module.rst | 11 +- ...ppliance_networking_dns_domains_info_module.rst | 4 +- ...est.appliance_networking_dns_domains_module.rst | 4 +- ...pliance_networking_dns_hostname_info_module.rst | 4 +- ...st.appliance_networking_dns_hostname_module.rst | 4 +- ...ppliance_networking_dns_servers_info_module.rst | 4 +- ...est.appliance_networking_dns_servers_module.rst | 6 +- ...nce_networking_firewall_inbound_info_module.rst | 4 +- ...ppliance_networking_firewall_inbound_module.rst | 8 +- ...mware_rest.appliance_networking_info_module.rst | 4 +- ...appliance_networking_interfaces_info_module.rst | 7 +- ...ance_networking_interfaces_ipv4_info_module.rst | 7 +- ...appliance_networking_interfaces_ipv4_module.rst | 14 +- ...ance_networking_interfaces_ipv6_info_module.rst | 7 +- ...appliance_networking_interfaces_ipv6_module.rst | 7 +- ...are.vmware_rest.appliance_networking_module.rst | 5 +- ...st.appliance_networking_noproxy_info_module.rst | 10 +- ...re_rest.appliance_networking_noproxy_module.rst | 4 +- ...rest.appliance_networking_proxy_info_module.rst | 4 +- ...ware_rest.appliance_networking_proxy_module.rst | 16 +- ...mware.vmware_rest.appliance_ntp_info_module.rst | 4 +- .../vmware.vmware_rest.appliance_ntp_module.rst | 4 +- ....vmware_rest.appliance_services_info_module.rst | 7 +- ...mware.vmware_rest.appliance_services_module.rst | 7 +- ....vmware_rest.appliance_shutdown_info_module.rst | 4 +- ...mware.vmware_rest.appliance_shutdown_module.rst | 4 +- ...est.appliance_system_globalfips_info_module.rst | 4 +- ...are_rest.appliance_system_globalfips_module.rst | 7 +- ...e_rest.appliance_system_storage_info_module.rst | 4 +- ...vmware_rest.appliance_system_storage_module.rst | 4 +- ...ware_rest.appliance_system_time_info_module.rst | 4 +- ....appliance_system_time_timezone_info_module.rst | 4 +- ..._rest.appliance_system_time_timezone_module.rst | 4 +- ...e_rest.appliance_system_version_info_module.rst | 4 +- ....vmware_rest.appliance_timesync_info_module.rst | 4 +- ...mware.vmware_rest.appliance_timesync_module.rst | 6 +- ...re.vmware_rest.appliance_update_info_module.rst | 4 +- ...are_rest.appliance_vmon_service_info_module.rst | 4 +- ...e.vmware_rest.appliance_vmon_service_module.rst | 4 +- .../vmware.vmware_rest.cluster_moid_lookup.rst | 29 +- ...ware_rest.content_configuration_info_module.rst | 4 +- ...re.vmware_rest.content_configuration_module.rst | 4 +- ...mware_rest.content_library_item_info_module.rst | 4 +- ...mware_rest.content_locallibrary_info_module.rst | 4 +- ...are.vmware_rest.content_locallibrary_module.rst | 38 +- ..._rest.content_subscribedlibrary_info_module.rst | 4 +- ...mware_rest.content_subscribedlibrary_module.rst | 38 +- .../vmware.vmware_rest.datacenter_moid_lookup.rst | 23 +- .../vmware.vmware_rest.datastore_moid_lookup.rst | 23 +- .../docs/vmware.vmware_rest.folder_moid_lookup.rst | 23 +- .../docs/vmware.vmware_rest.host_moid_lookup.rst | 23 +- .../vmware.vmware_rest.network_moid_lookup.rst | 24 +- ...mware.vmware_rest.resource_pool_moid_lookup.rst | 23 +- ...are.vmware_rest.vcenter_cluster_info_module.rst | 20 +- ....vmware_rest.vcenter_datacenter_info_module.rst | 18 +- ...mware.vmware_rest.vcenter_datacenter_module.rst | 12 +- ...e.vmware_rest.vcenter_datastore_info_module.rst | 23 +- ...ware.vmware_rest.vcenter_folder_info_module.rst | 19 +- ...vmware.vmware_rest.vcenter_host_info_module.rst | 23 +- .../vmware.vmware_rest.vcenter_host_module.rst | 16 +- ...are.vmware_rest.vcenter_network_info_module.rst | 20 +- ....vmware_rest.vcenter_ovf_libraryitem_module.rst | 4 +- ...mware_rest.vcenter_resourcepool_info_module.rst | 27 +- ...are.vmware_rest.vcenter_resourcepool_module.rst | 83 +- ...e_rest.vcenter_storage_policies_info_module.rst | 6 +- ..._rest.vcenter_vm_guest_customization_module.rst | 85 +- ...nter_vm_guest_filesystem_directories_module.rst | 25 +- ..._rest.vcenter_vm_guest_identity_info_module.rst | 7 +- ...center_vm_guest_localfilesystem_info_module.rst | 7 +- ...est.vcenter_vm_guest_networking_info_module.rst | 7 +- ..._vm_guest_networking_interfaces_info_module.rst | 7 +- ...nter_vm_guest_networking_routes_info_module.rst | 7 +- ...est.vcenter_vm_guest_operations_info_module.rst | 7 +- ...are_rest.vcenter_vm_guest_power_info_module.rst | 7 +- ...e.vmware_rest.vcenter_vm_guest_power_module.rst | 7 +- ...center_vm_hardware_adapter_sata_info_module.rst | 10 +- ...est.vcenter_vm_hardware_adapter_sata_module.rst | 14 +- ...center_vm_hardware_adapter_scsi_info_module.rst | 10 +- ...est.vcenter_vm_hardware_adapter_scsi_module.rst | 18 +- ...vcenter_vm_hardware_boot_device_info_module.rst | 9 +- ...rest.vcenter_vm_hardware_boot_device_module.rst | 19 +- ...e_rest.vcenter_vm_hardware_boot_info_module.rst | 7 +- ...vmware_rest.vcenter_vm_hardware_boot_module.rst | 22 +- ..._rest.vcenter_vm_hardware_cdrom_info_module.rst | 10 +- ...mware_rest.vcenter_vm_hardware_cdrom_module.rst | 40 +- ...re_rest.vcenter_vm_hardware_cpu_info_module.rst | 7 +- ....vmware_rest.vcenter_vm_hardware_cpu_module.rst | 27 +- ...e_rest.vcenter_vm_hardware_disk_info_module.rst | 10 +- ...vmware_rest.vcenter_vm_hardware_disk_module.rst | 76 +- ...st.vcenter_vm_hardware_ethernet_info_module.rst | 10 +- ...re_rest.vcenter_vm_hardware_ethernet_module.rst | 46 +- ...rest.vcenter_vm_hardware_floppy_info_module.rst | 10 +- ...ware_rest.vcenter_vm_hardware_floppy_module.rst | 23 +- ...vmware_rest.vcenter_vm_hardware_info_module.rst | 7 +- ...rest.vcenter_vm_hardware_memory_info_module.rst | 7 +- ...ware_rest.vcenter_vm_hardware_memory_module.rst | 21 +- ...ware.vmware_rest.vcenter_vm_hardware_module.rst | 13 +- ...st.vcenter_vm_hardware_parallel_info_module.rst | 10 +- ...re_rest.vcenter_vm_hardware_parallel_module.rst | 23 +- ...rest.vcenter_vm_hardware_serial_info_module.rst | 10 +- ...ware_rest.vcenter_vm_hardware_serial_module.rst | 45 +- .../vmware.vmware_rest.vcenter_vm_info_module.rst | 25 +- ...are_rest.vcenter_vm_libraryitem_info_module.rst | 7 +- .../docs/vmware.vmware_rest.vcenter_vm_module.rst | 340 +- ...re.vmware_rest.vcenter_vm_power_info_module.rst | 7 +- .../vmware.vmware_rest.vcenter_vm_power_module.rst | 7 +- ...er_vm_storage_policy_compliance_info_module.rst | 7 +- ...vcenter_vm_storage_policy_compliance_module.rst | 13 +- ..._rest.vcenter_vm_storage_policy_info_module.rst | 7 +- ...mware_rest.vcenter_vm_storage_policy_module.rst | 18 +- ...re.vmware_rest.vcenter_vm_tools_info_module.rst | 7 +- ...rest.vcenter_vm_tools_installer_info_module.rst | 7 +- ...ware_rest.vcenter_vm_tools_installer_module.rst | 9 +- .../vmware.vmware_rest.vcenter_vm_tools_module.rst | 10 +- ...vcenter_vmtemplate_libraryitems_info_module.rst | 4 +- ...rest.vcenter_vmtemplate_libraryitems_module.rst | 4 +- .../docs/vmware.vmware_rest.vm_moid_lookup.rst | 23 +- .../vmware/vmware_rest/meta/runtime.yml | 137 +- .../vmware_rest/plugins/doc_fragments/moid.py | 47 +- .../vmware_rest/plugins/lookup/cluster_moid.py | 15 +- .../vmware_rest/plugins/lookup/datacenter_moid.py | 9 +- .../vmware_rest/plugins/lookup/datastore_moid.py | 9 +- .../vmware_rest/plugins/lookup/folder_moid.py | 9 +- .../vmware/vmware_rest/plugins/lookup/host_moid.py | 9 +- .../vmware_rest/plugins/lookup/network_moid.py | 11 +- .../plugins/lookup/resource_pool_moid.py | 9 +- .../vmware/vmware_rest/plugins/lookup/vm_moid.py | 9 +- .../plugins/module_utils/vmware_rest.py | 3 +- .../plugins/modules/appliance_access_consolecli.py | 27 +- .../modules/appliance_access_consolecli_info.py | 29 +- .../plugins/modules/appliance_access_dcui.py | 27 +- .../plugins/modules/appliance_access_dcui_info.py | 29 +- .../plugins/modules/appliance_access_shell.py | 27 +- .../plugins/modules/appliance_access_shell_info.py | 29 +- .../plugins/modules/appliance_access_ssh.py | 27 +- .../plugins/modules/appliance_access_ssh_info.py | 29 +- .../modules/appliance_health_applmgmt_info.py | 29 +- .../modules/appliance_health_database_info.py | 29 +- .../appliance_health_databasestorage_info.py | 29 +- .../plugins/modules/appliance_health_load_info.py | 29 +- .../plugins/modules/appliance_health_mem_info.py | 30 +- .../appliance_health_softwarepackages_info.py | 29 +- .../modules/appliance_health_storage_info.py | 29 +- .../plugins/modules/appliance_health_swap_info.py | 29 +- .../modules/appliance_health_system_info.py | 29 +- .../modules/appliance_infraprofile_configs.py | 27 +- .../modules/appliance_infraprofile_configs_info.py | 29 +- .../appliance_localaccounts_globalpolicy.py | 30 +- .../appliance_localaccounts_globalpolicy_info.py | 29 +- .../modules/appliance_localaccounts_info.py | 27 +- .../plugins/modules/appliance_monitoring_info.py | 31 +- .../plugins/modules/appliance_monitoring_query.py | 38 +- .../plugins/modules/appliance_networking.py | 28 +- .../modules/appliance_networking_dns_domains.py | 29 +- .../appliance_networking_dns_domains_info.py | 29 +- .../modules/appliance_networking_dns_hostname.py | 27 +- .../appliance_networking_dns_hostname_info.py | 29 +- .../modules/appliance_networking_dns_servers.py | 33 +- .../appliance_networking_dns_servers_info.py | 29 +- .../appliance_networking_firewall_inbound.py | 39 +- .../appliance_networking_firewall_inbound_info.py | 29 +- .../plugins/modules/appliance_networking_info.py | 29 +- .../appliance_networking_interfaces_info.py | 31 +- .../appliance_networking_interfaces_ipv4.py | 42 +- .../appliance_networking_interfaces_ipv4_info.py | 33 +- .../appliance_networking_interfaces_ipv6.py | 31 +- .../appliance_networking_interfaces_ipv6_info.py | 33 +- .../modules/appliance_networking_noproxy.py | 27 +- .../modules/appliance_networking_noproxy_info.py | 39 +- .../plugins/modules/appliance_networking_proxy.py | 55 +- .../modules/appliance_networking_proxy_info.py | 27 +- .../vmware_rest/plugins/modules/appliance_ntp.py | 27 +- .../plugins/modules/appliance_ntp_info.py | 29 +- .../plugins/modules/appliance_services.py | 33 +- .../plugins/modules/appliance_services_info.py | 31 +- .../plugins/modules/appliance_shutdown.py | 31 +- .../plugins/modules/appliance_shutdown_info.py | 29 +- .../plugins/modules/appliance_system_globalfips.py | 34 +- .../modules/appliance_system_globalfips_info.py | 29 +- .../plugins/modules/appliance_system_storage.py | 29 +- .../modules/appliance_system_storage_info.py | 29 +- .../plugins/modules/appliance_system_time_info.py | 29 +- .../modules/appliance_system_time_timezone.py | 27 +- .../modules/appliance_system_time_timezone_info.py | 29 +- .../modules/appliance_system_version_info.py | 29 +- .../plugins/modules/appliance_timesync.py | 31 +- .../plugins/modules/appliance_timesync_info.py | 29 +- .../plugins/modules/appliance_update_info.py | 29 +- .../plugins/modules/appliance_vmon_service.py | 33 +- .../plugins/modules/appliance_vmon_service_info.py | 29 +- .../plugins/modules/content_configuration.py | 30 +- .../plugins/modules/content_configuration_info.py | 29 +- .../plugins/modules/content_library_item_info.py | 27 +- .../plugins/modules/content_locallibrary.py | 49 +- .../plugins/modules/content_locallibrary_info.py | 27 +- .../plugins/modules/content_subscribedlibrary.py | 61 +- .../modules/content_subscribedlibrary_info.py | 27 +- .../plugins/modules/vcenter_cluster_info.py | 49 +- .../plugins/modules/vcenter_datacenter.py | 49 +- .../plugins/modules/vcenter_datacenter_info.py | 46 +- .../plugins/modules/vcenter_datastore_info.py | 52 +- .../plugins/modules/vcenter_folder_info.py | 51 +- .../vmware_rest/plugins/modules/vcenter_host.py | 60 +- .../plugins/modules/vcenter_host_info.py | 55 +- .../plugins/modules/vcenter_network_info.py | 48 +- .../plugins/modules/vcenter_ovf_libraryitem.py | 37 +- .../plugins/modules/vcenter_resourcepool.py | 102 +- .../plugins/modules/vcenter_resourcepool_info.py | 55 +- .../modules/vcenter_storage_policies_info.py | 32 +- .../vmware_rest/plugins/modules/vcenter_vm.py | 649 +- .../modules/vcenter_vm_guest_customization.py | 154 +- .../vcenter_vm_guest_filesystem_directories.py | 86 +- .../modules/vcenter_vm_guest_identity_info.py | 33 +- .../vcenter_vm_guest_localfilesystem_info.py | 33 +- .../modules/vcenter_vm_guest_networking_info.py | 33 +- .../vcenter_vm_guest_networking_interfaces_info.py | 33 +- .../vcenter_vm_guest_networking_routes_info.py | 33 +- .../modules/vcenter_vm_guest_operations_info.py | 33 +- .../plugins/modules/vcenter_vm_guest_power.py | 33 +- .../plugins/modules/vcenter_vm_guest_power_info.py | 33 +- .../plugins/modules/vcenter_vm_hardware.py | 47 +- .../modules/vcenter_vm_hardware_adapter_sata.py | 52 +- .../vcenter_vm_hardware_adapter_sata_info.py | 35 +- .../modules/vcenter_vm_hardware_adapter_scsi.py | 59 +- .../vcenter_vm_hardware_adapter_scsi_info.py | 35 +- .../plugins/modules/vcenter_vm_hardware_boot.py | 53 +- .../modules/vcenter_vm_hardware_boot_device.py | 58 +- .../vcenter_vm_hardware_boot_device_info.py | 35 +- .../modules/vcenter_vm_hardware_boot_info.py | 33 +- .../plugins/modules/vcenter_vm_hardware_cdrom.py | 97 +- .../modules/vcenter_vm_hardware_cdrom_info.py | 35 +- .../plugins/modules/vcenter_vm_hardware_cpu.py | 70 +- .../modules/vcenter_vm_hardware_cpu_info.py | 33 +- .../plugins/modules/vcenter_vm_hardware_disk.py | 141 +- .../modules/vcenter_vm_hardware_disk_info.py | 35 +- .../modules/vcenter_vm_hardware_ethernet.py | 117 +- .../modules/vcenter_vm_hardware_ethernet_info.py | 35 +- .../plugins/modules/vcenter_vm_hardware_floppy.py | 67 +- .../modules/vcenter_vm_hardware_floppy_info.py | 35 +- .../plugins/modules/vcenter_vm_hardware_info.py | 33 +- .../plugins/modules/vcenter_vm_hardware_memory.py | 64 +- .../modules/vcenter_vm_hardware_memory_info.py | 33 +- .../modules/vcenter_vm_hardware_parallel.py | 67 +- .../modules/vcenter_vm_hardware_parallel_info.py | 35 +- .../plugins/modules/vcenter_vm_hardware_serial.py | 110 +- .../modules/vcenter_vm_hardware_serial_info.py | 35 +- .../vmware_rest/plugins/modules/vcenter_vm_info.py | 55 +- .../plugins/modules/vcenter_vm_libraryitem_info.py | 33 +- .../plugins/modules/vcenter_vm_power.py | 35 +- .../plugins/modules/vcenter_vm_power_info.py | 33 +- .../plugins/modules/vcenter_vm_storage_policy.py | 53 +- .../vcenter_vm_storage_policy_compliance.py | 38 +- .../vcenter_vm_storage_policy_compliance_info.py | 33 +- .../modules/vcenter_vm_storage_policy_info.py | 33 +- .../plugins/modules/vcenter_vm_tools.py | 36 +- .../plugins/modules/vcenter_vm_tools_info.py | 33 +- .../plugins/modules/vcenter_vm_tools_installer.py | 39 +- .../modules/vcenter_vm_tools_installer_info.py | 33 +- .../modules/vcenter_vmtemplate_libraryitems.py | 45 +- .../vcenter_vmtemplate_libraryitems_info.py | 29 +- .../vmware_rest/plugins/plugin_utils/lookup.py | 49 +- .../vmware_rest/tests/sanity/ignore-2.10.txt | 1357 --- .../vmware_rest/tests/sanity/ignore-2.11.txt | 1384 --- .../vmware_rest/tests/sanity/ignore-2.12.txt | 2 - .../vmware_rest/tests/sanity/ignore-2.13.txt | 2 - .../vmware_rest/tests/sanity/ignore-2.16.txt | 134 + .../vmware/vmware_rest/tests/sanity/ignore-2.9.txt | 1357 --- ansible_collections/vmware/vmware_rest/tox.ini | 45 +- 5467 files changed, 230306 insertions(+), 189887 deletions(-) create mode 100644 ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group.py create mode 100644 ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group_info.py create mode 100644 ansible_collections/amazon/aws/plugins/modules/rds_engine_versions_info.py create mode 100644 ansible_collections/amazon/aws/plugins/modules/rds_instance_param_group.py delete mode 100644 ansible_collections/amazon/aws/plugins/modules/rds_param_group.py create mode 100644 ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/meta/main.yml create mode 100644 ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/alb_with_multiple_listener_certs.yml create mode 100644 ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/files/deny-assume.json create mode 100644 ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/aliases create mode 100644 ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/defaults/main.yaml create mode 100644 ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/tasks/main.yaml create mode 100644 ansible_collections/amazon/aws/tests/integration/targets/s3_object/library/test_s3_upload_multipart.py create mode 100644 ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_multipart_upload.yml create mode 100644 ansible_collections/amazon/aws/tests/sanity/ignore-2.18.txt delete mode 100644 ansible_collections/amazon/aws/tests/unit/module_utils/policy/test_sort_json_policy_dict.py create mode 100644 ansible_collections/amazon/aws/tests/unit/plugins/modules/test_lambda_event.py delete mode 100644 ansible_collections/ansible/netcommon/.github/workflows/ack.yml create mode 100644 ansible_collections/ansible/netcommon/.github/workflows/check_label.yml create mode 100644 ansible_collections/ansible/netcommon/.github/workflows/draft_release.yml delete mode 100644 ansible_collections/ansible/netcommon/.github/workflows/lint.yml delete mode 100644 ansible_collections/ansible/netcommon/.github/workflows/push.yml create mode 100644 ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_restore_module.rst create mode 100644 ansible_collections/ansible/netcommon/plugins/modules/cli_restore.py create mode 100644 ansible_collections/ansible/netcommon/tests/config.yml delete mode 100644 ansible_collections/ansible/netcommon/tests/sanity/ignore-2.12.txt delete mode 100644 ansible_collections/ansible/netcommon/tests/sanity/ignore-2.13.txt create mode 100644 ansible_collections/ansible/netcommon/tests/sanity/ignore-2.18.txt delete mode 100644 ansible_collections/ansible/netcommon/tests/sanity/ignore-2.9.txt create mode 100644 ansible_collections/ansible/netcommon/tox-ansible.ini delete mode 100644 ansible_collections/ansible/netcommon/tox.ini create mode 100644 ansible_collections/ansible/utils/.ansible-lint delete mode 100644 ansible_collections/ansible/utils/.darglint delete mode 100644 ansible_collections/ansible/utils/.github/workflows/ack.yml create mode 100644 ansible_collections/ansible/utils/.github/workflows/check_label.yml create mode 100644 ansible_collections/ansible/utils/.github/workflows/draft_release.yml delete mode 100644 ansible_collections/ansible/utils/.github/workflows/push.yml delete mode 100644 ansible_collections/ansible/utils/mypy.ini create mode 100644 ansible_collections/ansible/utils/tests/config.yml delete mode 100644 ansible_collections/ansible/utils/tests/unit/compat/__init__.py delete mode 100644 ansible_collections/ansible/utils/tests/unit/compat/mock.py delete mode 100644 ansible_collections/ansible/utils/tests/unit/compat/unittest.py delete mode 100644 ansible_collections/ansible/utils/tox.ini create mode 100644 ansible_collections/arista/eos/.flake8 create mode 100644 ansible_collections/arista/eos/.github/CODEOWNERS delete mode 100644 ansible_collections/arista/eos/.github/workflows/ack.yml create mode 100644 ansible_collections/arista/eos/.github/workflows/check_label.yml create mode 100644 ansible_collections/arista/eos/.github/workflows/draft_release.yml delete mode 100644 ansible_collections/arista/eos/.github/workflows/push.yml delete mode 100644 ansible_collections/arista/eos/docs/arista.eos.eos_bgp_module.rst delete mode 100644 ansible_collections/arista/eos/docs/arista.eos.eos_logging_module.rst delete mode 100644 ansible_collections/arista/eos/ignore-2.9.txt delete mode 100644 ansible_collections/arista/eos/plugins/modules/eos_bgp.py delete mode 100644 ansible_collections/arista/eos/plugins/modules/eos_logging.py delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_bgp/defaults/main.yaml delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_bgp/meta/main.yaml delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/cli.yaml delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/main.yaml delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tests/cli/basic.yaml create mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/cli/network_facts delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_logging/defaults/main.yaml delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_logging/meta/main.yaml delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/cli.yaml delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/eapi.yaml delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/main.yaml delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/cli/basic.yaml delete mode 100644 ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/eapi/basic.yaml create mode 100644 ansible_collections/arista/eos/tests/sanity/ignore-2.18.txt delete mode 100644 ansible_collections/arista/eos/tests/unit/compat/__init__.py delete mode 100644 ansible_collections/arista/eos/tests/unit/compat/mock.py delete mode 100644 ansible_collections/arista/eos/tests/unit/compat/unittest.py delete mode 100644 ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp.py delete mode 100644 ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging.py create mode 100644 ansible_collections/arista/eos/tox-ansible.ini delete mode 100644 ansible_collections/arista/eos/tox.ini create mode 100644 ansible_collections/awx/awx/plugins/modules/role_definition.py create mode 100644 ansible_collections/awx/awx/plugins/modules/role_team_assignment.py create mode 100644 ansible_collections/awx/awx/plugins/modules/role_user_assignment.py create mode 100644 ansible_collections/awx/awx/test/awx/test_role_definition.py create mode 100644 ansible_collections/awx/awx/test/awx/test_role_team_assignment.py create mode 100644 ansible_collections/awx/awx/test/awx/test_role_user_assignment.py create mode 100644 ansible_collections/awx/awx/tests/integration/targets/role_definition/tasks/main.yml create mode 100644 ansible_collections/awx/awx/tests/integration/targets/role_team_assignment/tasks/main.yml create mode 100644 ansible_collections/awx/awx/tests/integration/targets/role_user_assignment/tasks/main.yml delete mode 100644 ansible_collections/azure/azcollection/.idea/.gitignore delete mode 100644 ansible_collections/azure/azcollection/.idea/azcollection.iml delete mode 100644 ansible_collections/azure/azcollection/.idea/inspectionProfiles/profiles_settings.xml delete mode 100644 ansible_collections/azure/azcollection/.idea/misc.xml delete mode 100644 ansible_collections/azure/azcollection/.idea/modules.xml delete mode 100644 ansible_collections/azure/azcollection/.idea/vcs.xml delete mode 100644 ansible_collections/azure/azcollection/.idea/workspace.xml create mode 100644 ansible_collections/azure/azcollection/plugins/lookup/azure_service_principal_attribute.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_accesstoken_info.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_akscredentials_info.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedclusterkubeconfig_info.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleconfiguration_info.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase_info.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule_info.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver_info.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix_info.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey.py create mode 100644 ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey_info.py create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/aliases create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/meta/main.yml create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/tasks/main.yml delete mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/lookup_plugins/azure_service_principal_attribute.py delete mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/lookup_plugins/azure_service_principal_attribute.py delete mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/lookup_plugins/azure_service_principal_attribute.py delete mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/lookup_plugins/azure_service_principal_attribute.py create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/aliases create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/meta/main.yml create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/tasks/main.yml create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/aliases create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/meta/main.yml create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/tasks/main.yml create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/aliases create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/meta/main.yml create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/tasks/main.yml create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_encrypted.yml create mode 100644 ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/setup_des.yml delete mode 100644 ansible_collections/azure/azcollection/tests/sanity/ignore-2.13.txt delete mode 100644 ansible_collections/azure/azcollection/tests/sanity/ignore-2.14.txt delete mode 100644 ansible_collections/azure/azcollection/tests/sanity/ignore-2.15.txt create mode 100644 ansible_collections/cisco/asa/.ansible-lint create mode 100644 ansible_collections/cisco/asa/plugins/action/acls.py create mode 100644 ansible_collections/cisco/asa/plugins/action/command.py create mode 100644 ansible_collections/cisco/asa/plugins/action/config.py create mode 100644 ansible_collections/cisco/asa/plugins/action/facts.py create mode 100644 ansible_collections/cisco/asa/plugins/action/ogs.py create mode 100644 ansible_collections/cisco/asa/tests/config.yml create mode 100644 ansible_collections/cisco/intersight/playbooks/count_vms.yml delete mode 100644 ansible_collections/cisco/ios/.github/workflows/ack.yml create mode 100644 ansible_collections/cisco/ios/.github/workflows/check_label.yml create mode 100644 ansible_collections/cisco/ios/.github/workflows/draft_release.yml delete mode 100644 ansible_collections/cisco/ios/.github/workflows/lint.yml delete mode 100644 ansible_collections/cisco/ios/.github/workflows/push.yml delete mode 100644 ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_module.rst delete mode 100644 ansible_collections/cisco/ios/docs/cisco.ios.ios_ntp_module.rst create mode 100644 ansible_collections/cisco/ios/platform_guide.rst delete mode 100644 ansible_collections/cisco/ios/plugins/action/ntp.py delete mode 100644 ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/__init__.py delete mode 100644 ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/__init__.py delete mode 100644 ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/base.py delete mode 100644 ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py delete mode 100644 ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py delete mode 100644 ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py delete mode 100644 ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/process.py delete mode 100644 ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/module.py create mode 100644 ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vlans.py delete mode 100644 ansible_collections/cisco/ios/plugins/modules/ios_bgp.py delete mode 100644 ansible_collections/cisco/ios/plugins/modules/ios_ntp.py create mode 100644 ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml delete mode 100644 ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/defaults/main.yaml delete mode 100644 ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/meta/main.yaml delete mode 100644 ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/cli.yaml delete mode 100644 ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/main.yaml delete mode 100644 ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tests/cli/basic.yaml delete mode 100644 ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/defaults/main.yaml delete mode 100644 ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/meta/main.yml delete mode 100644 ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/cli.yaml delete mode 100644 ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/main.yaml delete mode 100644 ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml delete mode 100644 ansible_collections/cisco/ios/tests/sanity/ignore-2.10.txt delete mode 100644 ansible_collections/cisco/ios/tests/sanity/ignore-2.11.txt delete mode 100644 ansible_collections/cisco/ios/tests/sanity/ignore-2.12.txt delete mode 100644 ansible_collections/cisco/ios/tests/sanity/ignore-2.13.txt create mode 100644 ansible_collections/cisco/ios/tests/sanity/ignore-2.18.txt delete mode 100644 ansible_collections/cisco/ios/tests/sanity/ignore-2.9.txt delete mode 100644 ansible_collections/cisco/ios/tests/unit/compat/__init__.py delete mode 100644 ansible_collections/cisco/ios/tests/unit/compat/mock.py delete mode 100644 ansible_collections/cisco/ios/tests/unit/compat/unittest.py delete mode 100644 ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp.py delete mode 100644 ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp.py create mode 100644 ansible_collections/cisco/ios/tox-ansible.ini delete mode 100644 ansible_collections/cisco/ios/tox.ini create mode 100644 ansible_collections/cisco/iosxr/.ansible-lint create mode 100644 ansible_collections/cisco/iosxr/.flake8 create mode 100644 ansible_collections/cisco/iosxr/.github/CODEOWNERS delete mode 100644 ansible_collections/cisco/iosxr/.github/workflows/ack.yml create mode 100644 ansible_collections/cisco/iosxr/.github/workflows/check_label.yml create mode 100644 ansible_collections/cisco/iosxr/.github/workflows/draft_release.yml delete mode 100644 ansible_collections/cisco/iosxr/.github/workflows/push.yml delete mode 100644 ansible_collections/cisco/iosxr/.zuul.yaml delete mode 100644 ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_logging_module.rst create mode 100644 ansible_collections/cisco/iosxr/platform_guide.rst delete mode 100644 ansible_collections/cisco/iosxr/plugins/modules/iosxr_logging.py delete mode 100644 ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/defaults/main.yaml delete mode 100644 ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/meta/main.yaml delete mode 100644 ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/cli.yaml delete mode 100644 ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/main.yaml delete mode 100644 ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/netconf.yaml delete mode 100644 ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/cli/basic.yaml delete mode 100644 ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/netconf/basic.yaml delete mode 100644 ansible_collections/cisco/iosxr/tests/sanity/ignore-2.10.txt delete mode 100644 ansible_collections/cisco/iosxr/tests/sanity/ignore-2.11.txt delete mode 100644 ansible_collections/cisco/iosxr/tests/sanity/ignore-2.12.txt delete mode 100644 ansible_collections/cisco/iosxr/tests/sanity/ignore-2.13.txt create mode 100644 ansible_collections/cisco/iosxr/tests/sanity/ignore-2.18.txt delete mode 100644 ansible_collections/cisco/iosxr/tests/sanity/ignore-2.9.txt delete mode 100644 ansible_collections/cisco/iosxr/tests/unit/compat/__init__.py delete mode 100644 ansible_collections/cisco/iosxr/tests/unit/compat/mock.py delete mode 100644 ansible_collections/cisco/iosxr/tests/unit/compat/unittest.py create mode 100644 ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp create mode 100644 ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp_neighbors_detail create mode 100644 ansible_collections/cisco/iosxr/tox-ansible.ini delete mode 100644 ansible_collections/cisco/iosxr/tox.ini create mode 100644 ansible_collections/cisco/ise/.DS_Store create mode 100644 ansible_collections/cisco/ise/.vscode/launch.json create mode 100644 ansible_collections/cisco/ise/.vscode/settings.json delete mode 100644 ansible_collections/cisco/ise/Pipfile create mode 100644 ansible_collections/cisco/ise/plugins/.DS_Store create mode 100644 ansible_collections/cisco/ise/plugins/action/active_directories_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/ad_groups_info.py delete mode 100644 ansible_collections/cisco/ise/plugins/action/connector_config.py delete mode 100644 ansible_collections/cisco/ise/plugins/action/connector_config_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/custom_attributes.py create mode 100644 ansible_collections/cisco/ise/plugins/action/custom_attributes_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/custom_attributes_rename.py delete mode 100644 ansible_collections/cisco/ise/plugins/action/dictionary_references_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/duo_identity_sync.py create mode 100644 ansible_collections/cisco/ise/plugins/action/duo_identity_sync_cancel_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/duo_identity_sync_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/duo_identity_sync_status.py create mode 100644 ansible_collections/cisco/ise/plugins/action/duo_identitysync_sync_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/duo_mfa.py create mode 100644 ansible_collections/cisco/ise/plugins/action/duo_mfa_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/duo_mfa_testconnection.py create mode 100644 ansible_collections/cisco/ise/plugins/action/endpoints.py create mode 100644 ansible_collections/cisco/ise/plugins/action/endpoints_bulk.py create mode 100644 ansible_collections/cisco/ise/plugins/action/endpoints_bulk_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/endpoints_device_type_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/endpoints_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/endpoints_task.py create mode 100644 ansible_collections/cisco/ise/plugins/action/ipsec.py create mode 100644 ansible_collections/cisco/ise/plugins/action/ipsec_bulk.py create mode 100644 ansible_collections/cisco/ise/plugins/action/ipsec_certificates_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/ipsec_delete.py create mode 100644 ansible_collections/cisco/ise/plugins/action/ipsec_delete_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/ipsec_disable.py create mode 100644 ansible_collections/cisco/ise/plugins/action/ipsec_disable_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/ipsec_enable.py create mode 100644 ansible_collections/cisco/ise/plugins/action/ipsec_enable_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/ipsec_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/px_grid_direct.py create mode 100644 ansible_collections/cisco/ise/plugins/action/px_grid_direct_dictionary_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/px_grid_direct_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync.py create mode 100644 ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/px_grid_direct_test_connector.py create mode 100644 ansible_collections/cisco/ise/plugins/action/reservation.py create mode 100644 ansible_collections/cisco/ise/plugins/action/reservation_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/stop_replication.py create mode 100644 ansible_collections/cisco/ise/plugins/action/stop_replication_info.py delete mode 100644 ansible_collections/cisco/ise/plugins/action/test_connector.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_create.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_delete.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_update.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_vn.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_create.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_delete.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_update.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_vn_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_create.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_delete.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_update.py create mode 100644 ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/upgrade_proceed.py create mode 100644 ansible_collections/cisco/ise/plugins/action/upgrade_proceed_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel.py create mode 100644 ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/upgrade_stage_start.py create mode 100644 ansible_collections/cisco/ise/plugins/action/upgrade_stage_start_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/user_equipment.py create mode 100644 ansible_collections/cisco/ise/plugins/action/user_equipment_bulk.py create mode 100644 ansible_collections/cisco/ise/plugins/action/user_equipment_csv.py create mode 100644 ansible_collections/cisco/ise/plugins/action/user_equipment_imei_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/user_equipment_info.py create mode 100644 ansible_collections/cisco/ise/plugins/action/user_equipment_subscriber_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/active_directories_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/ad_groups_info.py delete mode 100644 ansible_collections/cisco/ise/plugins/modules/connector_config.py delete mode 100644 ansible_collections/cisco/ise/plugins/modules/connector_config_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/custom_attributes.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/custom_attributes_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/custom_attributes_rename.py delete mode 100644 ansible_collections/cisco/ise/plugins/modules/dictionary_references_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/duo_identity_sync.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_cancel_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_status.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/duo_identitysync_sync_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/duo_mfa.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/duo_mfa_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/duo_mfa_testconnection.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/endpoints.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/endpoints_bulk.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/endpoints_bulk_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/endpoints_device_type_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/endpoints_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/endpoints_task.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/ipsec.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/ipsec_bulk.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/ipsec_certificates_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/ipsec_delete.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/ipsec_delete_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/ipsec_disable.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/ipsec_disable_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/ipsec_enable.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/ipsec_enable_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/ipsec_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/px_grid_direct.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/px_grid_direct_dictionary_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/px_grid_direct_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/px_grid_direct_test_connector.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/reservation.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/reservation_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/stop_replication.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/stop_replication_info.py delete mode 100644 ansible_collections/cisco/ise/plugins/modules/test_connector.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_create.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_delete.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_update.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_vn.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_create.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_delete.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_update.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_vn_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_create.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_delete.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_update.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/upgrade_proceed.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/upgrade_proceed_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/user_equipment.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/user_equipment_bulk.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/user_equipment_csv.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/user_equipment_imei_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/user_equipment_info.py create mode 100644 ansible_collections/cisco/ise/plugins/modules/user_equipment_subscriber_info.py create mode 100644 ansible_collections/cisco/meraki/tests/sanity/ignore-2.18.txt create mode 100644 ansible_collections/cisco/nxos/.flake8 delete mode 100644 ansible_collections/cisco/nxos/.github/workflows/ack.yml create mode 100644 ansible_collections/cisco/nxos/.github/workflows/check_label.yml create mode 100644 ansible_collections/cisco/nxos/.github/workflows/draft_release.yml create mode 100644 ansible_collections/cisco/nxos/.github/workflows/integration-test.yml delete mode 100644 ansible_collections/cisco/nxos/.github/workflows/push.yml delete mode 100644 ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_module.rst delete mode 100644 ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_auth_module.rst delete mode 100644 ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_module.rst delete mode 100644 ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_options_module.rst create mode 100644 ansible_collections/cisco/nxos/platform_guide.rst delete mode 100644 ansible_collections/cisco/nxos/plugins/modules/nxos_logging.py delete mode 100644 ansible_collections/cisco/nxos/plugins/modules/nxos_ntp.py delete mode 100644 ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_auth.py delete mode 100644 ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_options.py create mode 100644 ansible_collections/cisco/nxos/tests/__init__.py create mode 100644 ansible_collections/cisco/nxos/tests/integration/__init__.py create mode 100644 ansible_collections/cisco/nxos/tests/integration/labs/single.yaml create mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tests/common/interface_facts.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/defaults/main.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/meta/main.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/cli.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/main.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/nxapi.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/basic.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/purge.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/defaults/main.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/meta/main.yml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/cli.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/main.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/nxapi.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tests/common/sanity.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/defaults/main.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/meta/main.yml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/cli.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/main.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/nxapi.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tests/common/sanity.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/defaults/main.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/meta/main.yml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/cli.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/main.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/nxapi.yaml delete mode 100644 ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tests/common/sanity.yaml create mode 100644 ansible_collections/cisco/nxos/tests/integration/test_integration.py delete mode 100644 ansible_collections/cisco/nxos/tests/sanity/ignore-2.10.txt delete mode 100644 ansible_collections/cisco/nxos/tests/sanity/ignore-2.11.txt delete mode 100644 ansible_collections/cisco/nxos/tests/sanity/ignore-2.12.txt delete mode 100644 ansible_collections/cisco/nxos/tests/sanity/ignore-2.13.txt create mode 100644 ansible_collections/cisco/nxos/tests/sanity/ignore-2.18.txt delete mode 100644 ansible_collections/cisco/nxos/tests/sanity/ignore-2.9.txt delete mode 100644 ansible_collections/cisco/nxos/tests/unit/compat/__init__.py delete mode 100644 ansible_collections/cisco/nxos/tests/unit/compat/mock.py delete mode 100644 ansible_collections/cisco/nxos/tests/unit/compat/unittest.py create mode 100644 ansible_collections/cisco/nxos/tox-ansible.ini delete mode 100644 ansible_collections/cisco/nxos/tox.ini create mode 100644 ansible_collections/cloud/common/.ansible-lint create mode 100644 ansible_collections/cloud/common/.github/workflows/changelog.yaml delete mode 100644 ansible_collections/cloud/common/.github/workflows/changelog.yml create mode 100644 ansible_collections/cloud/common/.github/workflows/galaxy-import.yaml create mode 100644 ansible_collections/cloud/common/.github/workflows/integration-tests-kubernetes-core.yaml create mode 100644 ansible_collections/cloud/common/.github/workflows/linters.yaml delete mode 100644 ansible_collections/cloud/common/.github/workflows/linters.yml create mode 100644 ansible_collections/cloud/common/.github/workflows/sanity-tests.yaml delete mode 100644 ansible_collections/cloud/common/.github/workflows/sanity_and_units.yml delete mode 100644 ansible_collections/cloud/common/.github/workflows/unit-ansible-2.9.yml create mode 100644 ansible_collections/cloud/common/.github/workflows/unit-tests.yaml create mode 100644 ansible_collections/cloud/common/tests/sanity/ignore-2.17.txt delete mode 100644 ansible_collections/community/aws/tests/sanity/ignore-2.10.txt delete mode 100644 ansible_collections/community/aws/tests/sanity/ignore-2.11.txt delete mode 100644 ansible_collections/community/aws/tests/sanity/ignore-2.12.txt delete mode 100644 ansible_collections/community/aws/tests/sanity/ignore-2.13.txt delete mode 100644 ansible_collections/community/aws/tests/sanity/ignore-2.9.txt delete mode 100644 ansible_collections/community/azure/.azure-pipelines/README.md delete mode 100644 ansible_collections/community/azure/.azure-pipelines/azure-pipelines.yml delete mode 100755 ansible_collections/community/azure/.azure-pipelines/scripts/aggregate-coverage.sh delete mode 100755 ansible_collections/community/azure/.azure-pipelines/scripts/combine-coverage.py delete mode 100755 ansible_collections/community/azure/.azure-pipelines/scripts/process-results.sh delete mode 100755 ansible_collections/community/azure/.azure-pipelines/scripts/publish-codecov.sh delete mode 100755 ansible_collections/community/azure/.azure-pipelines/scripts/report-coverage.sh delete mode 100755 ansible_collections/community/azure/.azure-pipelines/scripts/run-tests.sh delete mode 100755 ansible_collections/community/azure/.azure-pipelines/scripts/time-command.py delete mode 100644 ansible_collections/community/azure/.azure-pipelines/templates/coverage.yml delete mode 100644 ansible_collections/community/azure/.azure-pipelines/templates/matrix.yml delete mode 100644 ansible_collections/community/azure/.azure-pipelines/templates/test.yml delete mode 100644 ansible_collections/community/azure/CHANGELOG.rst delete mode 100644 ansible_collections/community/azure/COPYING delete mode 100644 ansible_collections/community/azure/FILES.json delete mode 100644 ansible_collections/community/azure/MANIFEST.json delete mode 100644 ansible_collections/community/azure/README.md delete mode 100644 ansible_collections/community/azure/changelogs/changelog.yaml delete mode 100644 ansible_collections/community/azure/changelogs/config.yaml delete mode 100644 ansible_collections/community/azure/changelogs/fragments/.keep delete mode 100644 ansible_collections/community/azure/meta/action_groups.yml delete mode 100644 ansible_collections/community/azure/meta/runtime.yml delete mode 100644 ansible_collections/community/azure/shippable.yml delete mode 100644 ansible_collections/community/azure/tests/.gitignore delete mode 100644 ansible_collections/community/azure/tests/sanity/ignore-2.10.txt delete mode 100644 ansible_collections/community/azure/tests/sanity/ignore-2.11.txt delete mode 100644 ansible_collections/community/azure/tests/sanity/ignore-2.12.txt delete mode 100644 ansible_collections/community/azure/tests/sanity/ignore-2.13.txt delete mode 100644 ansible_collections/community/azure/tests/sanity/ignore-2.14.txt delete mode 100755 ansible_collections/community/azure/tests/utils/ado/ado.sh delete mode 100755 ansible_collections/community/azure/tests/utils/shippable/azure.sh delete mode 100755 ansible_collections/community/azure/tests/utils/shippable/check_matrix.py delete mode 100755 ansible_collections/community/azure/tests/utils/shippable/cloud.sh delete mode 100755 ansible_collections/community/azure/tests/utils/shippable/sanity.sh delete mode 100755 ansible_collections/community/azure/tests/utils/shippable/shippable.sh delete mode 100755 ansible_collections/community/azure/tests/utils/shippable/timing.py delete mode 100755 ansible_collections/community/azure/tests/utils/shippable/timing.sh create mode 100644 ansible_collections/community/crypto/plugins/module_utils/argspec.py create mode 100644 ansible_collections/community/crypto/plugins/module_utils/time.py create mode 100644 ansible_collections/community/crypto/plugins/modules/acme_ari_info.py create mode 100644 ansible_collections/community/crypto/plugins/modules/acme_certificate_deactivate_authz.py create mode 100644 ansible_collections/community/crypto/plugins/modules/acme_certificate_renewal_info.py create mode 100644 ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/aliases create mode 100644 ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/meta/main.yml create mode 100644 ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/impl.yml create mode 100644 ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tasks/main.yml create mode 100644 ansible_collections/community/crypto/tests/integration/targets/acme_certificate_deactivate_authz/tests/validate.yml create mode 100644 ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/aliases create mode 100644 ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/meta/main.yml create mode 100644 ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/impl.yml create mode 100644 ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/main.yml create mode 100644 ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tasks/obtain-cert.yml create mode 100644 ansible_collections/community/crypto/tests/integration/targets/acme_certificate_renewal_info/tests/validate.yml create mode 100644 ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt create mode 100644 ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_1.txt.license create mode 100644 ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt create mode 100644 ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2-b.txt.license create mode 100644 ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem create mode 100644 ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.pem.license create mode 100644 ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt create mode 100644 ansible_collections/community/crypto/tests/unit/plugins/module_utils/acme/fixtures/cert_2.txt.license create mode 100644 ansible_collections/community/crypto/tests/unit/plugins/module_utils/crypto/test_math.py create mode 100644 ansible_collections/community/crypto/tests/unit/plugins/module_utils/test_time.py delete mode 100644 ansible_collections/community/dns/plugins/modules/hosttech_dns_records.py create mode 100644 ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_unsafe.py create mode 100644 ansible_collections/community/docker/plugins/module_utils/selectors.py create mode 100644 ansible_collections/community/docker/tests/integration/targets/docker_image_build/templates/SecretsDockerfile create mode 100644 ansible_collections/community/docker/tests/unit/plugins/plugin_utils/test_unsafe.py create mode 100644 ansible_collections/community/general/plugins/become/run0.py create mode 100644 ansible_collections/community/general/plugins/callback/timestamp.py create mode 100644 ansible_collections/community/general/plugins/doc_fragments/django.py delete mode 100644 ansible_collections/community/general/plugins/doc_fragments/rackspace.py create mode 100644 ansible_collections/community/general/plugins/module_utils/django.py create mode 100644 ansible_collections/community/general/plugins/module_utils/homebrew.py create mode 100644 ansible_collections/community/general/plugins/module_utils/python_runner.py delete mode 100644 ansible_collections/community/general/plugins/module_utils/rax.py create mode 100644 ansible_collections/community/general/plugins/modules/django_command.py delete mode 100644 ansible_collections/community/general/plugins/modules/flowdock.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_cbs.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_cbs_attachments.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_cdb.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_cdb_database.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_cdb_user.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_clb.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_clb_nodes.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_clb_ssl.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_dns.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_dns_record.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_facts.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_files.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_files_objects.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_identity.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_keypair.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_meta.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_mon_alarm.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_mon_check.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_mon_entity.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_mon_notification.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_mon_notification_plan.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_network.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_queue.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_scaling_group.py delete mode 100644 ansible_collections/community/general/plugins/modules/rax_scaling_policy.py delete mode 100644 ansible_collections/community/general/plugins/modules/stackdriver.py delete mode 100644 ansible_collections/community/general/plugins/modules/webfaction_app.py delete mode 100644 ansible_collections/community/general/plugins/modules/webfaction_db.py delete mode 100644 ansible_collections/community/general/plugins/modules/webfaction_domain.py delete mode 100644 ansible_collections/community/general/plugins/modules/webfaction_mailbox.py delete mode 100644 ansible_collections/community/general/plugins/modules/webfaction_site.py create mode 100644 ansible_collections/community/general/tests/integration/targets/callback_timestamp/aliases create mode 100644 ansible_collections/community/general/tests/integration/targets/callback_timestamp/tasks/main.yml create mode 100644 ansible_collections/community/general/tests/integration/targets/homebrew/handlers/main.yml create mode 100644 ansible_collections/community/general/tests/integration/targets/homebrew/tasks/docker.yml create mode 100644 ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_inventory.yml create mode 100644 ansible_collections/community/general/tests/integration/targets/lookup_merge_variables/test_cross_host_merge_play.yml create mode 100644 ansible_collections/community/general/tests/unit/plugins/become/test_run0.py create mode 100644 ansible_collections/community/general/tests/unit/plugins/module_utils/test_python_runner.py create mode 100644 ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.py create mode 100644 ansible_collections/community/general/tests/unit/plugins/modules/test_django_command.yaml create mode 100644 ansible_collections/community/general/tests/unit/plugins/plugin_utils/test_unsafe.py create mode 100644 ansible_collections/community/grafana/changelogs/fragments/353-docs-add-influxdb-flux-example.yml create mode 100644 ansible_collections/community/grafana/changelogs/fragments/354-fix-find-grafana-versions.yml create mode 100644 ansible_collections/community/grafana/changelogs/fragments/355-rm-dashboard-message-argument.yml create mode 100644 ansible_collections/community/grafana/changelogs/fragments/356-lookup-dashboards-add-custom-certs-verification-logic.yml create mode 100644 ansible_collections/community/grafana/changelogs/fragments/357-module-grafana-silence.yml create mode 100644 ansible_collections/community/grafana/changelogs/fragments/358-role-grafana-silence.yml create mode 100644 ansible_collections/community/grafana/changelogs/fragments/362-plugin-umask.yml create mode 100644 ansible_collections/community/grafana/changelogs/fragments/364-first-datasource-default.yml create mode 100644 ansible_collections/community/grafana/changelogs/fragments/367-dashboard-undo-breaing-change-message.yml create mode 100644 ansible_collections/community/grafana/changelogs/fragments/368-molecule-pin-requests.yml create mode 100644 ansible_collections/community/grafana/plugins/modules/grafana_silence.py create mode 100644 ansible_collections/community/grafana/tests/integration/targets/grafana_silence/defaults/main.yml create mode 100755 ansible_collections/community/grafana/tests/integration/targets/grafana_silence/runme.sh create mode 100644 ansible_collections/community/grafana/tests/integration/targets/grafana_silence/site.yml create mode 100644 ansible_collections/community/grafana/tests/integration/targets/grafana_silence/tasks/main.yml create mode 100644 ansible_collections/community/grafana/tests/sanity/ignore-2.18.txt create mode 100644 ansible_collections/community/grafana/tests/unit/modules/grafana/grafana_silence/test_grafana_silence.py create mode 100644 ansible_collections/community/okd/.config/ansible-lint.yml create mode 100644 ansible_collections/community/okd/.github/patchback.yml create mode 100644 ansible_collections/community/okd/.github/settings.yml create mode 100644 ansible_collections/community/okd/.github/stale.yml create mode 100644 ansible_collections/community/okd/.github/workflows/changelog.yml create mode 100644 ansible_collections/community/okd/.github/workflows/linters.yml create mode 100644 ansible_collections/community/okd/.github/workflows/sanity-tests.yml create mode 100644 ansible_collections/community/okd/.github/workflows/unit-tests.yml delete mode 100644 ansible_collections/community/okd/changelogs/.plugin-cache.yaml delete mode 100644 ansible_collections/community/okd/setup.cfg create mode 100644 ansible_collections/community/okd/tests/sanity/ignore-2.16.txt create mode 100644 ansible_collections/community/okd/tests/sanity/ignore-2.17.txt create mode 100644 ansible_collections/community/okd/tests/sanity/requirements.yml create mode 100644 ansible_collections/community/okd/tox.ini create mode 100644 ansible_collections/community/postgresql/tests/sanity/ignore-2.18.txt delete mode 100644 ansible_collections/community/sap/.github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 ansible_collections/community/sap/.github/ISSUE_TEMPLATE/config.yml delete mode 100644 ansible_collections/community/sap/.github/ISSUE_TEMPLATE/documentation_report.yml delete mode 100644 ansible_collections/community/sap/.github/ISSUE_TEMPLATE/feature_request.yml delete mode 100644 ansible_collections/community/sap/.github/workflows/ansible-test.yml delete mode 100644 ansible_collections/community/sap/.vscode/extensions.json delete mode 100644 ansible_collections/community/sap/CHANGELOG.rst delete mode 100644 ansible_collections/community/sap/CODE_OF_CONDUCT.md delete mode 100644 ansible_collections/community/sap/CONTRIBUTING.md delete mode 100644 ansible_collections/community/sap/FILES.json delete mode 100644 ansible_collections/community/sap/LICENSE delete mode 100644 ansible_collections/community/sap/MAINTAINERS delete mode 100644 ansible_collections/community/sap/MAINTAINING.md delete mode 100644 ansible_collections/community/sap/MANIFEST.json delete mode 100644 ansible_collections/community/sap/README.md delete mode 100644 ansible_collections/community/sap/REVIEW_CHECKLIST.md delete mode 100644 ansible_collections/community/sap/changelogs/changelog.yaml delete mode 100644 ansible_collections/community/sap/changelogs/config.yaml delete mode 100644 ansible_collections/community/sap/changelogs/fragments/.keep delete mode 100644 ansible_collections/community/sap/codecov.yml delete mode 100644 ansible_collections/community/sap/meta/runtime.yml delete mode 100644 ansible_collections/community/sap/plugins/doc_fragments/__init__.py delete mode 100644 ansible_collections/community/sap/plugins/module_utils/__init__.py delete mode 100644 ansible_collections/community/sap/plugins/modules/__init__.py delete mode 100644 ansible_collections/community/sap/tests/integration/__init__.py delete mode 100644 ansible_collections/community/sap/tests/integration/targets/__init__.py delete mode 100644 ansible_collections/community/sap/tests/sanity/__init__.py delete mode 100644 ansible_collections/community/sap/tests/unit/__init__.py delete mode 100644 ansible_collections/community/sap/tests/unit/compat/__init__.py delete mode 100644 ansible_collections/community/sap/tests/unit/compat/builtins.py delete mode 100644 ansible_collections/community/sap/tests/unit/compat/mock.py delete mode 100644 ansible_collections/community/sap/tests/unit/compat/unittest.py delete mode 100644 ansible_collections/community/sap/tests/unit/mock/__init__.py delete mode 100644 ansible_collections/community/sap/tests/unit/mock/loader.py delete mode 100644 ansible_collections/community/sap/tests/unit/mock/path.py delete mode 100644 ansible_collections/community/sap/tests/unit/mock/procenv.py delete mode 100644 ansible_collections/community/sap/tests/unit/mock/vault_helper.py delete mode 100644 ansible_collections/community/sap/tests/unit/mock/yaml_helper.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/__init__.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/__init__.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/database/__init__.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/__init__.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/database/saphana/test_hana_query.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/files/__init__.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/files/test_sapcar_extract.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_company.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/identity/test_sap_user.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/system/__init__.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_snote.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_system_facts.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/system/test_sap_task_list_execute.py delete mode 100644 ansible_collections/community/sap/tests/unit/plugins/modules/utils.py delete mode 100644 ansible_collections/community/sap/tests/unit/requirements.txt create mode 100644 ansible_collections/community/zabbix/plugins/modules/zabbix_correlation.py create mode 100644 ansible_collections/community/zabbix/plugins/modules/zabbix_service_info.py create mode 100644 ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-mysql.yml create mode 100644 ansible_collections/community/zabbix/roles/zabbix_server/tasks/initialize-pgsql.yml delete mode 100644 ansible_collections/community/zabbix/roles/zabbix_server/tasks/mysql.yml delete mode 100644 ansible_collections/community/zabbix/roles/zabbix_server/tasks/postgresql.yml create mode 100644 ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/meta/main.yml create mode 100644 ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_correlation/tasks/main.yml create mode 100644 ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/meta/main.yml create mode 100644 ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_service_info/tasks/main.yml create mode 100644 ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.json create mode 100644 ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.xml create mode 100644 ansible_collections/community/zabbix/tests/integration/targets/test_zabbix_template/files/template4_60_higher.yaml create mode 100644 ansible_collections/dellemc/openmanage/docs/ATTRIBUTION.md create mode 100644 ansible_collections/dellemc/openmanage/docs/modules/idrac_diagnostics.rst create mode 100644 ansible_collections/dellemc/openmanage/docs/modules/idrac_session.rst create mode 100644 ansible_collections/dellemc/openmanage/docs/modules/idrac_storage_volume.rst delete mode 100644 ansible_collections/dellemc/openmanage/playbooks/idrac/dellemc_idrac_storage_volume.yml create mode 100644 ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_diagnostics.yml create mode 100644 ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_session.yml create mode 100644 ansible_collections/dellemc/openmanage/playbooks/idrac/idrac_storage_volume.yml create mode 100644 ansible_collections/dellemc/openmanage/playbooks/roles/idrac_user/idrac_user.yml create mode 100644 ansible_collections/dellemc/openmanage/playbooks/roles/vars_files/user.yml create mode 100644 ansible_collections/dellemc/openmanage/plugins/module_utils/session_utils.py create mode 100644 ansible_collections/dellemc/openmanage/plugins/modules/idrac_diagnostics.py create mode 100644 ansible_collections/dellemc/openmanage/plugins/modules/idrac_session.py create mode 100644 ansible_collections/dellemc/openmanage/plugins/modules/idrac_storage_volume.py delete mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/backplane_assert.yml delete mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_gather_facts/tests/asserts/physicaldisk_assert.yml delete mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/cifs_share/prepare.yml delete mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share/prepare.yml delete mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_proxy_parameters/prepare.yml delete mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/http_share_with_showerror_certificate_warning/prepare.yml delete mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share/prepare.yml delete mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/https_share_with_proxy_parameters/prepare.yml delete mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/import_multiple_target/prepare.yml delete mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/nfs_share/prepare.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/cleanup.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/export.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/nic_helper.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_import_server_config_profile/molecule/resources/tests/raid_helper.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/README.md create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/defaults/main.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/handlers/main.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/meta/argument_specs.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/meta/main.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/converge.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152120/molecule.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/converge.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152146/molecule.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/converge.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152147/molecule.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/converge.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/molecule.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152148/prepare.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/converge.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/molecule.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152149/prepare.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/converge.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/molecule.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/TC-152150/prepare.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/converge.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/default/molecule.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/cleanup.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/molecule/resources/idrac_user/get_user_info.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/absent.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/get_user.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/main.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/tasks/present.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/tests/inventory create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/tests/test.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/idrac_user/vars/main.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__create_virtual_drive.yml create mode 100644 ansible_collections/dellemc/openmanage/roles/redfish_storage_volume/molecule/__job_track.yml create mode 100644 ansible_collections/dellemc/openmanage/tests/unit/plugins/module_utils/test_session_utils.py create mode 100644 ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_diagnostics.py create mode 100644 ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_session.py create mode 100644 ansible_collections/dellemc/openmanage/tests/unit/plugins/modules/test_idrac_storage_volume.py create mode 100644 ansible_collections/dellemc/powerflex/tests/sanity/ignore-2.18.txt delete mode 100644 ansible_collections/dellemc/unity/tests/requirements.txt delete mode 100644 ansible_collections/dellemc/unity/tests/sanity/ignore-2.13.txt create mode 100644 ansible_collections/dellemc/unity/tests/sanity/ignore-2.16.txt create mode 100644 ansible_collections/dellemc/unity/tests/sanity/ignore-2.17.txt create mode 100644 ansible_collections/dellemc/unity/tests/unit/requirements.txt create mode 100644 ansible_collections/fortinet/fortimanager/changelogs/fragments/2.5.0.yml delete mode 100644 ansible_collections/fortinet/fortimanager/tests/sanity/ignore-2.14.txt delete mode 100644 ansible_collections/gluster/gluster/.github/workflows/ansible-test-plugins.yml delete mode 100644 ansible_collections/gluster/gluster/.gitignore delete mode 100644 ansible_collections/gluster/gluster/CHANGELOG.rst delete mode 100644 ansible_collections/gluster/gluster/FILES.json delete mode 100644 ansible_collections/gluster/gluster/LICENSE delete mode 100644 ansible_collections/gluster/gluster/MANIFEST.json delete mode 100644 ansible_collections/gluster/gluster/README.md delete mode 100644 ansible_collections/gluster/gluster/changelogs/changelog.yaml delete mode 100644 ansible_collections/gluster/gluster/changelogs/config.yaml delete mode 100644 ansible_collections/gluster/gluster/meta/runtime.yml delete mode 100644 ansible_collections/gluster/gluster/plugins/modules/geo_rep.py delete mode 100644 ansible_collections/gluster/gluster/plugins/modules/gluster_heal_info.py delete mode 100644 ansible_collections/gluster/gluster/plugins/modules/gluster_peer.py delete mode 100644 ansible_collections/gluster/gluster/plugins/modules/gluster_volume.py delete mode 100644 ansible_collections/gluster/gluster/tests/sanity/ignore-2.10.txt delete mode 100644 ansible_collections/gluster/gluster/tests/sanity/ignore-2.11.txt create mode 100644 ansible_collections/grafana/grafana/.github/workflows/loki-molecule.yml create mode 100644 ansible_collections/grafana/grafana/.github/workflows/mimir-molecule.yml create mode 100644 ansible_collections/grafana/grafana/.github/workflows/promtail-molecule.yml create mode 100644 ansible_collections/grafana/grafana/examples/alloy.yaml create mode 100644 ansible_collections/grafana/grafana/examples/loki-basic-no-options.yml create mode 100644 ansible_collections/grafana/grafana/examples/loki-local-filesystem-with-retention-and-alert.yml create mode 100644 ansible_collections/grafana/grafana/examples/mimir-3-hosts.yaml create mode 100644 ansible_collections/grafana/grafana/examples/monitor-multiple-instance-otel.md create mode 100644 ansible_collections/grafana/grafana/examples/monitor-multiple-instances-agent.md delete mode 100644 ansible_collections/grafana/grafana/examples/monitor-multiple-instances.md create mode 100644 ansible_collections/grafana/grafana/examples/opentelemetry-collector.yml create mode 100644 ansible_collections/grafana/grafana/examples/promtail-multiple-logs.yml create mode 100644 ansible_collections/grafana/grafana/roles/alloy/README.md create mode 100644 ansible_collections/grafana/grafana/roles/alloy/defaults/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/alloy/handlers/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/alloy/meta/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/alloy/tasks/configure.yml create mode 100644 ansible_collections/grafana/grafana/roles/alloy/tasks/install.yml create mode 100644 ansible_collections/grafana/grafana/roles/alloy/tasks/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/alloy/tasks/service.yml create mode 100644 ansible_collections/grafana/grafana/roles/alloy/templates/alloy.service.j2 create mode 100644 ansible_collections/grafana/grafana/roles/alloy/templates/config.alloy.j2 create mode 100644 ansible_collections/grafana/grafana/roles/alloy/templates/environment.j2 create mode 100644 ansible_collections/grafana/grafana/roles/loki/README.md create mode 100644 ansible_collections/grafana/grafana/roles/loki/defaults/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/loki/handlers/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/loki/meta/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/loki/molecule/default/converge.yml create mode 100644 ansible_collections/grafana/grafana/roles/loki/molecule/default/molecule.yml create mode 100644 ansible_collections/grafana/grafana/roles/loki/tasks/deploy.yml create mode 100644 ansible_collections/grafana/grafana/roles/loki/tasks/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/loki/tasks/setup-Debian.yml create mode 100644 ansible_collections/grafana/grafana/roles/loki/tasks/setup-RedHat.yml create mode 100644 ansible_collections/grafana/grafana/roles/loki/tasks/uninstall.yml create mode 100644 ansible_collections/grafana/grafana/roles/loki/templates/config.yml.j2 create mode 100644 ansible_collections/grafana/grafana/roles/loki/templates/rules.yml.j2 create mode 100644 ansible_collections/grafana/grafana/roles/loki/vars/Debian.yml create mode 100644 ansible_collections/grafana/grafana/roles/loki/vars/RedHat.yml create mode 100644 ansible_collections/grafana/grafana/roles/mimir/README.md create mode 100644 ansible_collections/grafana/grafana/roles/mimir/defaults/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/mimir/files/.gitkeep create mode 100644 ansible_collections/grafana/grafana/roles/mimir/handlers/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/mimir/meta/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/mimir/molecule/default/converge.yml create mode 100644 ansible_collections/grafana/grafana/roles/mimir/molecule/default/molecule.yml create mode 100644 ansible_collections/grafana/grafana/roles/mimir/molecule/default/tests/test_default.py create mode 100644 ansible_collections/grafana/grafana/roles/mimir/molecule/test-requirements.txt create mode 100644 ansible_collections/grafana/grafana/roles/mimir/tasks/deploy.yml create mode 100644 ansible_collections/grafana/grafana/roles/mimir/tasks/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Debian.yml create mode 100644 ansible_collections/grafana/grafana/roles/mimir/tasks/setup-Redhat.yml create mode 100644 ansible_collections/grafana/grafana/roles/mimir/tasks/uninstall.yml create mode 100644 ansible_collections/grafana/grafana/roles/mimir/templates/.gitkeep create mode 100644 ansible_collections/grafana/grafana/roles/mimir/templates/config.yml.j2 create mode 100644 ansible_collections/grafana/grafana/roles/mimir/vars/.gitkeep create mode 100644 ansible_collections/grafana/grafana/roles/opentelemetry_collector/README.md create mode 100644 ansible_collections/grafana/grafana/roles/opentelemetry_collector/defaults/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/opentelemetry_collector/handlers/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/opentelemetry_collector/meta/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/configure.yml create mode 100644 ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/install.yml create mode 100644 ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/opentelemetry_collector/tasks/service.yml create mode 100644 ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector.service.j2 create mode 100644 ansible_collections/grafana/grafana/roles/opentelemetry_collector/templates/otel_collector_config.yml.j2 create mode 100644 ansible_collections/grafana/grafana/roles/promtail/README.md create mode 100644 ansible_collections/grafana/grafana/roles/promtail/defaults/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/handlers/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/meta/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/molecule/default/converge.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/molecule/default/molecule.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/tasks/acl_configuration.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/tasks/deploy.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/tasks/main.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/tasks/setup-Debian.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/tasks/setup-RedHat.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/tasks/uninstall.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/templates/config.yml.j2 create mode 100644 ansible_collections/grafana/grafana/roles/promtail/templates/promtail.service.j2 create mode 100644 ansible_collections/grafana/grafana/roles/promtail/templates/promtail_acl.j2 create mode 100644 ansible_collections/grafana/grafana/roles/promtail/vars/Debian.yml create mode 100644 ansible_collections/grafana/grafana/roles/promtail/vars/RedHat.yml create mode 100644 ansible_collections/hetzner/hcloud/tests/integration/cloud-config-hcloud.ini.in create mode 100644 ansible_collections/hetzner/hcloud/tests/integration/targets/network/tasks/cleanup.yml create mode 100644 ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/cleanup.yml create mode 100644 ansible_collections/hetzner/hcloud/tests/integration/targets/primary_ip/tasks/prepare.yml create mode 100644 ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/cleanup.yml create mode 100644 ansible_collections/hetzner/hcloud/tests/integration/targets/server_network/tasks/prepare.yml delete mode 100644 ansible_collections/hetzner/hcloud/tests/sanity/ignore-2.13.txt create mode 100644 ansible_collections/hetzner/hcloud/tests/unit/conftest.py create mode 100644 ansible_collections/hetzner/hcloud/tests/unit/inventory/test_hcloud.py delete mode 100644 ansible_collections/hpe/nimble/.gitignore delete mode 100644 ansible_collections/hpe/nimble/CHANGELOG.rst delete mode 100644 ansible_collections/hpe/nimble/FILES.json delete mode 100644 ansible_collections/hpe/nimble/MANIFEST.json delete mode 100644 ansible_collections/hpe/nimble/README.md delete mode 100644 ansible_collections/hpe/nimble/bindep.txt delete mode 100644 ansible_collections/hpe/nimble/changelogs/changelog.yaml delete mode 100644 ansible_collections/hpe/nimble/changelogs/config.yaml delete mode 100644 ansible_collections/hpe/nimble/meta/runtime.yml delete mode 100644 ansible_collections/hpe/nimble/plugins/doc_fragments/hpe_nimble.py delete mode 100644 ansible_collections/hpe/nimble/plugins/module_utils/hpe_nimble.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_access_control_record.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_array.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_chap_user.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_disk.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_encryption.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_fc.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_group.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_info.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_initiator_group.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_network.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_partner.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_performance_policy.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_pool.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_schedule.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_protection_template.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_shelf.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_snapshot_collection.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_user_policy.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume.py delete mode 100644 ansible_collections/hpe/nimble/plugins/modules/hpe_nimble_volume_collection.py delete mode 100644 ansible_collections/hpe/nimble/requirements.txt delete mode 100644 ansible_collections/hpe/nimble/tests/sanity/ignore-2.10.txt delete mode 100644 ansible_collections/hpe/nimble/tests/sanity/ignore-2.11.txt delete mode 100644 ansible_collections/hpe/nimble/tests/sanity/ignore-2.12.txt delete mode 100644 ansible_collections/hpe/nimble/tests/sanity/ignore-2.9.txt create mode 100644 ansible_collections/ibm/qradar/.ansible-lint create mode 100644 ansible_collections/ibm/qradar/.github/dependabot.yml create mode 100644 ansible_collections/ibm/qradar/.github/release-drafter.yml create mode 100644 ansible_collections/ibm/qradar/.github/workflows/ack.yml create mode 100644 ansible_collections/ibm/qradar/.github/workflows/codecoverage.yml create mode 100644 ansible_collections/ibm/qradar/.github/workflows/lint.yml create mode 100644 ansible_collections/ibm/qradar/.github/workflows/push.yml create mode 100644 ansible_collections/ibm/qradar/.github/workflows/release.yml delete mode 100644 ansible_collections/ibm/qradar/.github/workflows/test.yml create mode 100644 ansible_collections/ibm/qradar/.github/workflows/tests.yml create mode 100644 ansible_collections/ibm/qradar/.isort.cfg create mode 100644 ansible_collections/ibm/qradar/.prettierignore create mode 100644 ansible_collections/ibm/qradar/codecov.yml delete mode 100644 ansible_collections/ibm/qradar/tests/unit/compat/builtins.py create mode 100644 ansible_collections/inspur/ispim/.idea/.gitignore create mode 100644 ansible_collections/inspur/ispim/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 ansible_collections/inspur/ispim/.idea/inspur.ispim.iml create mode 100644 ansible_collections/inspur/ispim/.idea/misc.xml create mode 100644 ansible_collections/inspur/ispim/.idea/modules.xml create mode 100644 ansible_collections/inspur/ispim/.idea/vcs.xml create mode 100644 ansible_collections/inspur/ispim/.idea/workspace.xml create mode 100644 ansible_collections/junipernetworks/junos/.ansible-lint create mode 100644 ansible_collections/junipernetworks/junos/.flake8 delete mode 100644 ansible_collections/junipernetworks/junos/.github/workflows/ack.yml create mode 100644 ansible_collections/junipernetworks/junos/.github/workflows/check_label.yml create mode 100644 ansible_collections/junipernetworks/junos/.github/workflows/draft_release.yml delete mode 100644 ansible_collections/junipernetworks/junos/.github/workflows/push.yml delete mode 100644 ansible_collections/junipernetworks/junos/docs/junipernetworks.junos.junos_logging_module.rst create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/acl_interfaces.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/acls.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/banner.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/bgp_address_family.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/bgp_global.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/command.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/config.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/facts.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/hostname.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/interfaces.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/l2_interfaces.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/l3_intefaces.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/lacp.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/lacp_intefaces.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/lag_interfaces.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/lldp_global.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/lldp_interfaces.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/logging.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/logging_global.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/netconf.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/ntp_global.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/ospf_interfaces.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/ospfv2.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/ospfv3.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/package.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/ping.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/prefix_lists.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/routing_instances.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/routing_options.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/rpc.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/scp.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/security_policies.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/security_policies_global.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/security_zones.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/snmp_server.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/static_routes.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/system.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/user.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/vlans.py create mode 100644 ansible_collections/junipernetworks/junos/plugins/action/vrf.py delete mode 100644 ansible_collections/junipernetworks/junos/plugins/modules/junos_logging.py create mode 100644 ansible_collections/junipernetworks/junos/tests/config.yml create mode 100644 ansible_collections/junipernetworks/junos/tests/integration/targets/junos_facts/tests/netconf/network_facts.yaml delete mode 100644 ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/aliases delete mode 100644 ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/defaults/main.yaml delete mode 100644 ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/meta/main.yml delete mode 100644 ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/main.yaml delete mode 100644 ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tasks/netconf.yaml delete mode 100644 ansible_collections/junipernetworks/junos/tests/integration/targets/junos_logging/tests/netconf/basic.yaml create mode 100644 ansible_collections/junipernetworks/junos/tests/integration/targets/prepare_junos_tests/tasks/prepare.yml delete mode 100644 ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.10.txt delete mode 100644 ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.11.txt delete mode 100644 ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.12.txt delete mode 100644 ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.13.txt create mode 100644 ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.18.txt delete mode 100644 ansible_collections/junipernetworks/junos/tests/sanity/ignore-2.9.txt delete mode 100644 ansible_collections/junipernetworks/junos/tests/unit/compat/__init__.py delete mode 100644 ansible_collections/junipernetworks/junos/tests/unit/compat/mock.py delete mode 100644 ansible_collections/junipernetworks/junos/tests/unit/compat/unittest.py create mode 100644 ansible_collections/junipernetworks/junos/tox-ansible.ini delete mode 100644 ansible_collections/junipernetworks/junos/tox.ini create mode 100644 ansible_collections/kaytus/ksmanage/.github/workflows/ansible-test.yml create mode 100644 ansible_collections/kaytus/ksmanage/.idea/.gitignore create mode 100644 ansible_collections/kaytus/ksmanage/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 ansible_collections/kaytus/ksmanage/.idea/kaytus.ksmanage.iml create mode 100644 ansible_collections/kaytus/ksmanage/.idea/modules.xml create mode 100644 ansible_collections/kaytus/ksmanage/.idea/vcs.xml create mode 100644 ansible_collections/kaytus/ksmanage/.idea/workspace.xml create mode 100644 ansible_collections/kaytus/ksmanage/CHANGELOG.rst create mode 100644 ansible_collections/kaytus/ksmanage/CODE_OF_CONDUCT.md create mode 100644 ansible_collections/kaytus/ksmanage/FILES.json create mode 100644 ansible_collections/kaytus/ksmanage/LICENSE create mode 100644 ansible_collections/kaytus/ksmanage/MANIFEST.json create mode 100644 ansible_collections/kaytus/ksmanage/README.md create mode 100644 ansible_collections/kaytus/ksmanage/changelogs/.plugin-cache.yaml create mode 100644 ansible_collections/kaytus/ksmanage/changelogs/changelog.yaml create mode 100644 ansible_collections/kaytus/ksmanage/changelogs/config.yaml create mode 100644 ansible_collections/kaytus/ksmanage/changelogs/fragments/.keep create mode 100644 ansible_collections/kaytus/ksmanage/docs/ad_group_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/ad_group_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/ad_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/adapter_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/add_ldisk_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/alert_policy_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/audit_log_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/auto_capture_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/backplane_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/backup_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/bios_export_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/bios_import_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/bios_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/bmc_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/boot_image_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/boot_option_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/clear_audit_log_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/clear_event_log_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/clear_system_log_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/collect_blackbox_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/collect_log_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/connect_media_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/cpu_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/del_session_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/dns_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/download_auto_screenshot_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/download_manual_screenshot_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_ad_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_alert_policy_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_auto_capture_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_bios_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_boot_image_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_boot_option_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_connect_media_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_dns_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_event_log_policy_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_fan_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_fru_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_ipv4_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_ipv6_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_kvm_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_ldap_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_ldisk_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_log_setting_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_m6_log_setting_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_manual_capture_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_media_instance_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_ncsi_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_network_bond_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_network_link_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_network_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_ntp_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_pdisk_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_power_budget_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_power_restore_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_power_status_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_preserve_config_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_psu_config_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_psu_peak_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_restore_factory_default_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_service_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_smtp_com_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_smtp_dest_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_smtp_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_snmp_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_snmp_trap_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_threshold_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_uid_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_virtual_media_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/edit_vlan_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/event_log_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/event_log_policy_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/fan_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/fru_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/fw_version_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/gpu_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/hard_disk_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/hba_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/index.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/kvm_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/ldap_group_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/ldap_group_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/ldap_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/ldisk_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/log_setting_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/media_instance_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/mem_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/ncsi_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/network_bond_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/network_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/network_link_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/ntp_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/onboard_disk_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/pcie_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/pdisk_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/power_budget_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/power_consumption_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/power_restore_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/power_status_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/preserve_config_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/psu_config_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/psu_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/psu_peak_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/raid_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/reset_bmc_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/reset_kvm_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/restore_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/self_test_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/sensor_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/server_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/service_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/session_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/smtp_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/snmp_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/snmp_trap_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/support_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/system_log_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/temp_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/threshold_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/uid_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/update_cpld_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/update_fw_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/update_psu_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/user_group_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/user_group_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/user_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/user_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/virtual_media_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/docs/volt_info_module.rst create mode 100644 ansible_collections/kaytus/ksmanage/meta/runtime.yml create mode 100644 ansible_collections/kaytus/ksmanage/plugins/doc_fragments/ksmanage.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/module_utils/ksmanage.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/ad_group.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/ad_group_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/ad_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/adapter_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/add_ldisk.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/alert_policy_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/audit_log_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/auto_capture_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/backplane_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/backup.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/bios_export.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/bios_import.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/bios_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/bmc_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/boot_image_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/boot_option_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/clear_audit_log.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/clear_event_log.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/clear_system_log.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/collect_blackbox.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/collect_log.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/connect_media_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/cpu_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/del_session.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/dns_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/download_auto_screenshot.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/download_manual_screenshot.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_ad.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_alert_policy.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_auto_capture.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_bios.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_image.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_boot_option.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_connect_media.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_dns.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_event_log_policy.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_fan.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_fru.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv4.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_ipv6.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_kvm.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldap.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_ldisk.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_log_setting.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_m6_log_setting.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_manual_capture.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_media_instance.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_ncsi.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_network.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_bond.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_network_link.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_ntp.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_pdisk.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_budget.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_restore.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_power_status.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_preserve_config.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_config.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_psu_peak.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_restore_factory_default.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_service.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_com.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_smtp_dest.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_snmp_trap.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_threshold.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_uid.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_virtual_media.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/edit_vlan.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/event_log_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/event_log_policy_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/fan_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/fru_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/fw_version_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/gpu_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/hard_disk_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/hba_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/kvm_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/ldap_group_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/ldap_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/ldisk_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/log_setting_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/media_instance_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/mem_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/ncsi_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/network_bond_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/network_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/network_link_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/ntp_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/onboard_disk_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/pcie_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/pdisk_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/power_budget_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/power_consumption_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/power_restore_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/power_status_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/preserve_config_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/psu_config_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/psu_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/psu_peak_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/raid_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/reset_bmc.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/reset_kvm.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/restore.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/self_test_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/sensor_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/server_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/service_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/session_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/smtp_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/snmp_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/snmp_trap_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/support_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/system_log_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/temp_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/threshold_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/uid_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/update_cpld.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/update_fw.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/update_psu.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/user.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/user_group.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/user_group_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/user_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/virtual_media_info.py create mode 100644 ansible_collections/kaytus/ksmanage/plugins/modules/volt_info.py create mode 100644 ansible_collections/kaytus/ksmanage/requirements.txt create mode 100644 ansible_collections/kubernetes/core/plugins/action/k8s_json_patch.py delete mode 100644 ansible_collections/kubernetes/core/plugins/action/ks8_json_patch.py create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_pending.py create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/helm/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_reuse_values.yml create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_with_space_into_chart_name.yml create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/Chart.yaml create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/values.yaml create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/reuse_values.yml create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/runme.sh delete mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/k8s_create_file.py create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/files/deployments.yaml create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/aliases create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/defaults/main.yml create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/meta/main.yml create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/tasks/main.yml create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/runme.sh create mode 100644 ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/playbook.yaml create mode 100755 ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/runme.sh delete mode 100644 ansible_collections/kubernetes/core/tests/sanity/ignore-2.10.txt delete mode 100644 ansible_collections/kubernetes/core/tests/sanity/ignore-2.11.txt delete mode 100644 ansible_collections/kubernetes/core/tests/sanity/ignore-2.12.txt delete mode 100644 ansible_collections/kubernetes/core/tests/sanity/ignore-2.13.txt create mode 100644 ansible_collections/kubernetes/core/tests/sanity/ignore-2.18.txt delete mode 100644 ansible_collections/kubernetes/core/tests/sanity/ignore-2.9.txt delete mode 100644 ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 ansible_collections/netapp/aws/.github/ISSUE_TEMPLATE/feature_request.yml delete mode 100644 ansible_collections/netapp/aws/.github/workflows/coverage.yml delete mode 100644 ansible_collections/netapp/aws/.github/workflows/main.yml delete mode 100644 ansible_collections/netapp/aws/CHANGELOG.rst delete mode 100644 ansible_collections/netapp/aws/COPYING delete mode 100644 ansible_collections/netapp/aws/FILES.json delete mode 100644 ansible_collections/netapp/aws/MANIFEST.json delete mode 100644 ansible_collections/netapp/aws/README.md delete mode 100644 ansible_collections/netapp/aws/changelogs/changelog.yaml delete mode 100644 ansible_collections/netapp/aws/changelogs/config.yaml delete mode 100644 ansible_collections/netapp/aws/changelogs/fragments/20.2.0.yaml delete mode 100644 ansible_collections/netapp/aws/changelogs/fragments/20.6.0.yaml delete mode 100644 ansible_collections/netapp/aws/changelogs/fragments/20.8.0.yaml delete mode 100644 ansible_collections/netapp/aws/changelogs/fragments/20.9.0.yaml delete mode 100644 ansible_collections/netapp/aws/changelogs/fragments/2019.10.0.yaml delete mode 100644 ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3569.yaml delete mode 100644 ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-3644.yaml delete mode 100644 ansible_collections/netapp/aws/changelogs/fragments/DEVOPS-4416.yaml delete mode 100644 ansible_collections/netapp/aws/meta/execution-environment.yml delete mode 100644 ansible_collections/netapp/aws/meta/runtime.yml delete mode 100644 ansible_collections/netapp/aws/plugins/doc_fragments/netapp.py delete mode 100644 ansible_collections/netapp/aws/plugins/module_utils/netapp.py delete mode 100644 ansible_collections/netapp/aws/plugins/module_utils/netapp_module.py delete mode 100644 ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_active_directory.py delete mode 100644 ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_filesystems.py delete mode 100644 ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_pool.py delete mode 100644 ansible_collections/netapp/aws/plugins/modules/aws_netapp_cvs_snapshots.py delete mode 100644 ansible_collections/netapp/aws/requirements.txt delete mode 100644 ansible_collections/netapp/aws/tests/unit/compat/__init__.py delete mode 100644 ansible_collections/netapp/aws/tests/unit/compat/builtins.py delete mode 100644 ansible_collections/netapp/aws/tests/unit/compat/mock.py delete mode 100644 ansible_collections/netapp/aws/tests/unit/compat/unittest.py delete mode 100644 ansible_collections/netapp/aws/tests/unit/plugins/module_utils/test_netapp.py delete mode 100644 ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_active_directory.py delete mode 100644 ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_filesystems.py delete mode 100644 ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_pool.py delete mode 100644 ansible_collections/netapp/aws/tests/unit/plugins/modules/test_aws_netapp_cvs_snapshots.py delete mode 100644 ansible_collections/netapp/aws/tests/unit/requirements.txt delete mode 100644 ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 ansible_collections/netapp/azure/.github/ISSUE_TEMPLATE/feature_request.yml delete mode 100644 ansible_collections/netapp/azure/.github/workflows/codeql-analysis.yml delete mode 100644 ansible_collections/netapp/azure/.github/workflows/coverage.yml delete mode 100644 ansible_collections/netapp/azure/.github/workflows/main.yml delete mode 100644 ansible_collections/netapp/azure/CHANGELOG.rst delete mode 100644 ansible_collections/netapp/azure/COPYING delete mode 100644 ansible_collections/netapp/azure/FILES.json delete mode 100644 ansible_collections/netapp/azure/HACK.md delete mode 100644 ansible_collections/netapp/azure/MANIFEST.json delete mode 100644 ansible_collections/netapp/azure/README.md delete mode 100644 ansible_collections/netapp/azure/changelogs/changelog.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/config.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/20.2.0.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/20.4.0.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/20.5.0.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/20.6.0.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/20.7.0.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/20.8.0.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3505.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3526.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3663.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3704.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3849.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3935.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-3949.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4001.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4070.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4135.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4246.yaml delete mode 100644 ansible_collections/netapp/azure/changelogs/fragments/DEVOPS-4416.yaml delete mode 100644 ansible_collections/netapp/azure/meta/runtime.yml delete mode 100644 ansible_collections/netapp/azure/plugins/doc_fragments/azure.py delete mode 100644 ansible_collections/netapp/azure/plugins/doc_fragments/azure_tags.py delete mode 100644 ansible_collections/netapp/azure/plugins/doc_fragments/netapp.py delete mode 100644 ansible_collections/netapp/azure/plugins/module_utils/azure_rm_netapp_common.py delete mode 100644 ansible_collections/netapp/azure/plugins/module_utils/netapp_module.py delete mode 100644 ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_account.py delete mode 100644 ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_capacity_pool.py delete mode 100644 ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_snapshot.py delete mode 100644 ansible_collections/netapp/azure/plugins/modules/azure_rm_netapp_volume.py delete mode 100644 ansible_collections/netapp/azure/requirements.txt delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/aliases delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/meta/main.yml delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_account/tasks/main.yml delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/aliases delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/meta/main.yml delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_capacity_pool/tasks/main.yml delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/aliases delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/meta/main.yml delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_snapshot/tasks/main.yml delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/aliases delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/meta/main.yml delete mode 100644 ansible_collections/netapp/azure/tests/integration/targets/azure_rm_netapp_volume/tasks/main.yml delete mode 100644 ansible_collections/netapp/azure/tests/runner/requirements/integration.cloud.azure.txt delete mode 100644 ansible_collections/netapp/azure/tests/runner/requirements/requirements-azure.txt delete mode 100644 ansible_collections/netapp/azure/tests/runner/requirements/unit.cloud.azure.txt delete mode 100644 ansible_collections/netapp/azure/tests/runner/requirements/units.txt delete mode 100644 ansible_collections/netapp/azure/tests/unit/compat/__init__.py delete mode 100644 ansible_collections/netapp/azure/tests/unit/compat/builtins.py delete mode 100644 ansible_collections/netapp/azure/tests/unit/compat/mock.py delete mode 100644 ansible_collections/netapp/azure/tests/unit/compat/unittest.py delete mode 100644 ansible_collections/netapp/azure/tests/unit/plugins/module_utils/test_netapp_module.py delete mode 100644 ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_account.py delete mode 100644 ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_capacity_pool.py delete mode 100644 ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_snapshot.py delete mode 100644 ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume.py delete mode 100644 ansible_collections/netapp/azure/tests/unit/plugins/modules/test_azure_rm_netapp_volume_import.py delete mode 100644 ansible_collections/netapp/azure/tests/unit/requirements.txt delete mode 100644 ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 ansible_collections/netapp/elementsw/.github/ISSUE_TEMPLATE/feature_request.yml delete mode 100644 ansible_collections/netapp/elementsw/.github/workflows/coverage.yml delete mode 100644 ansible_collections/netapp/elementsw/.github/workflows/main.yml delete mode 100644 ansible_collections/netapp/elementsw/CHANGELOG.rst delete mode 100644 ansible_collections/netapp/elementsw/FILES.json delete mode 100644 ansible_collections/netapp/elementsw/MANIFEST.json delete mode 100644 ansible_collections/netapp/elementsw/README.md delete mode 100644 ansible_collections/netapp/elementsw/changelogs/changelog.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/config.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/20.2.0.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/20.6.0.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/20.8.0.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/20.9.0.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/2019.10.0.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3117.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3174.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3188.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3196.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3235.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3310.yml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3324.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3731.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3733.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3734.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-3800.yaml delete mode 100644 ansible_collections/netapp/elementsw/changelogs/fragments/DEVOPS-4416.yaml delete mode 100644 ansible_collections/netapp/elementsw/meta/runtime.yml delete mode 100644 ansible_collections/netapp/elementsw/plugins/doc_fragments/netapp.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/module_utils/netapp.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/module_utils/netapp_elementsw_module.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/module_utils/netapp_module.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_access_group_volumes.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_account.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_admin_users.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_backup.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_check_connections.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_config.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_pair.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_cluster_snmp.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_drive.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_info.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_initiators.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_ldap.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_network_interfaces.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_node.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_qos_policy.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_restore.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_snapshot_schedule.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_vlan.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_clone.py delete mode 100644 ansible_collections/netapp/elementsw/plugins/modules/na_elementsw_volume_pair.py delete mode 100644 ansible_collections/netapp/elementsw/requirements.txt delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/compat/__init__.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/compat/builtins.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/compat/mock.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/compat/unittest.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_access_group_volumes.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_account.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_config.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_cluster_snmp.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_info.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_initiators.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_network_interfaces.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_nodes.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_qos_policy.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_template.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_vlan.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules/test_na_elementsw_volume.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/plugins/modules_utils/test_netapp_module.py delete mode 100644 ansible_collections/netapp/elementsw/tests/unit/requirements.txt delete mode 100644 ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 ansible_collections/netapp/um_info/.github/ISSUE_TEMPLATE/feature_request.yml delete mode 100644 ansible_collections/netapp/um_info/.github/workflows/coverage.yml delete mode 100644 ansible_collections/netapp/um_info/.github/workflows/main.yml delete mode 100644 ansible_collections/netapp/um_info/CHANGELOG.rst delete mode 100644 ansible_collections/netapp/um_info/COPYING delete mode 100644 ansible_collections/netapp/um_info/FILES.json delete mode 100644 ansible_collections/netapp/um_info/MANIFEST.json delete mode 100644 ansible_collections/netapp/um_info/README.md delete mode 100644 ansible_collections/netapp/um_info/changelogs/changelog.yaml delete mode 100644 ansible_collections/netapp/um_info/changelogs/config.yaml delete mode 100644 ansible_collections/netapp/um_info/changelogs/fragments/20.7.0.yaml delete mode 100644 ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-2952.yaml delete mode 100644 ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3920.yaml delete mode 100644 ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-3962.yaml delete mode 100644 ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4059.yaml delete mode 100644 ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4087.yaml delete mode 100644 ansible_collections/netapp/um_info/changelogs/fragments/DEVOPS-4416.yaml delete mode 100644 ansible_collections/netapp/um_info/meta/execution-environment.yml delete mode 100644 ansible_collections/netapp/um_info/meta/runtime.yml delete mode 100644 ansible_collections/netapp/um_info/metadata-29PbAy.json delete mode 100644 ansible_collections/netapp/um_info/plugins/doc_fragments/netapp.py delete mode 100644 ansible_collections/netapp/um_info/plugins/module_utils/netapp.py delete mode 100644 ansible_collections/netapp/um_info/plugins/module_utils/netapp_module.py delete mode 100644 ansible_collections/netapp/um_info/plugins/modules/na_um_aggregates_info.py delete mode 100644 ansible_collections/netapp/um_info/plugins/modules/na_um_clusters_info.py delete mode 100644 ansible_collections/netapp/um_info/plugins/modules/na_um_list_aggregates.py delete mode 100644 ansible_collections/netapp/um_info/plugins/modules/na_um_list_clusters.py delete mode 100644 ansible_collections/netapp/um_info/plugins/modules/na_um_list_nodes.py delete mode 100644 ansible_collections/netapp/um_info/plugins/modules/na_um_list_svms.py delete mode 100644 ansible_collections/netapp/um_info/plugins/modules/na_um_list_volumes.py delete mode 100644 ansible_collections/netapp/um_info/plugins/modules/na_um_nodes_info.py delete mode 100644 ansible_collections/netapp/um_info/plugins/modules/na_um_svms_info.py delete mode 100644 ansible_collections/netapp/um_info/plugins/modules/na_um_volumes_info.py delete mode 100644 ansible_collections/netapp/um_info/requirements.txt delete mode 100644 ansible_collections/netapp/um_info/tests/unit/compat/__init__.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/compat/builtins.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/compat/mock.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/compat/unittest.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/plugins/module_utils/test_netapp.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_aggregates_info.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_clusters_info.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_aggregates.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_clusters.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_nodes.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_svms.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_list_volumes.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_nodes_info.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_svms_info.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/plugins/modules/test_na_um_volumes_info.py delete mode 100644 ansible_collections/netapp/um_info/tests/unit/requirements.txt create mode 100644 ansible_collections/netbox/netbox/docs/plugins/netbox_custom_field_choice_set_module.rst create mode 100644 ansible_collections/netbox/netbox/docs/plugins/netbox_module_bay_module.rst create mode 100644 ansible_collections/netbox/netbox/docs/plugins/netbox_module_module.rst create mode 100644 ansible_collections/netbox/netbox/plugins/modules/netbox_custom_field_choice_set.py create mode 100644 ansible_collections/netbox/netbox/plugins/modules/netbox_module.py create mode 100644 ansible_collections/netbox/netbox/plugins/modules/netbox_module_bay.py create mode 100644 ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module.yml create mode 100644 ansible_collections/netbox/netbox/tests/integration/targets/v3.5/tasks/netbox_module_bay.yml create mode 100644 ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_custom_field_choice_set.yml create mode 100644 ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module.yml create mode 100644 ansible_collections/netbox/netbox/tests/integration/targets/v3.6/tasks/netbox_module_bay.yml create mode 100644 ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module.yml create mode 100644 ansible_collections/netbox/netbox/tests/integration/targets/v3.7/tasks/netbox_module_bay.yml create mode 100644 ansible_collections/netbox/netbox/tests/unit/inventory/test_data/data.json create mode 100644 ansible_collections/netbox/netbox/tests/unit/inventory/test_data/extract_custom_fields/data.json delete mode 100644 ansible_collections/purestorage/flasharray/changelogs/210_add_rename_hgroup.yaml delete mode 100644 ansible_collections/purestorage/flasharray/changelogs/211_fix_clearing_host_inititators.yaml create mode 100644 ansible_collections/purestorage/flasharray/changelogs/fragments/210_add_rename_hgroup.yaml create mode 100644 ansible_collections/purestorage/flasharray/changelogs/fragments/211_fix_clearing_host_inititators.yaml create mode 100644 ansible_collections/purestorage/flasharray/changelogs/fragments/550_service.yaml create mode 100644 ansible_collections/purestorage/flasharray/changelogs/fragments/555_update_pg.yaml create mode 100644 ansible_collections/purestorage/flasharray/changelogs/fragments/558_add_perf_info.yaml create mode 100644 ansible_collections/purestorage/flasharray/changelogs/fragments/559_volume_response.yaml create mode 100644 ansible_collections/purestorage/flasharray/changelogs/fragments/560_snapshot_epoch.yaml create mode 100644 ansible_collections/purestorage/flasharray/changelogs/fragments/561_remote_snap_info.yaml create mode 100644 ansible_collections/purestorage/flasharray/changelogs/fragments/562_host_vol_fix.yaml delete mode 100644 ansible_collections/purestorage/fusion/.github/CONTRIBUTING.md delete mode 100644 ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 ansible_collections/purestorage/fusion/.github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 ansible_collections/purestorage/fusion/.github/pull_request_template.md delete mode 100644 ansible_collections/purestorage/fusion/.github/workflows/ansible-lint.yaml delete mode 100644 ansible_collections/purestorage/fusion/.github/workflows/black.yaml delete mode 100644 ansible_collections/purestorage/fusion/.github/workflows/create-release.yaml delete mode 100644 ansible_collections/purestorage/fusion/.github/workflows/main.yml delete mode 100644 ansible_collections/purestorage/fusion/.github/workflows/rh_automation_hub_token_keep_alive.yml delete mode 100644 ansible_collections/purestorage/fusion/.github/workflows/stale.yml delete mode 100644 ansible_collections/purestorage/fusion/.gitignore delete mode 100644 ansible_collections/purestorage/fusion/.yamllint delete mode 100644 ansible_collections/purestorage/fusion/CHANGELOG.rst delete mode 100644 ansible_collections/purestorage/fusion/COPYING.GPLv3 delete mode 100644 ansible_collections/purestorage/fusion/FILES.json delete mode 100644 ansible_collections/purestorage/fusion/MANIFEST.json delete mode 100644 ansible_collections/purestorage/fusion/README.md delete mode 100644 ansible_collections/purestorage/fusion/changelogs/.plugin-cache.yaml delete mode 100644 ansible_collections/purestorage/fusion/changelogs/changelog.yaml delete mode 100644 ansible_collections/purestorage/fusion/changelogs/config.yaml delete mode 100644 ansible_collections/purestorage/fusion/meta/runtime.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/create_array.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/create_availability_zone.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/create_tenant_space.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_all.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_api_clients.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_arrays.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_availability_zones.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_hardware_types.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_hosts.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_interfaces.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_network_interface_groups.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_placement_groups.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_protection_policies.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_roles.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_snapshots.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_storage_classes.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_storage_endpoints.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_storage_services.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_tenant_spaces.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_tenants.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_users.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/list_volumes.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/make_tenant_admin.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/remove_array.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/setup_infrastructure.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/setup_protection_policies.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/setup_storage_service_class.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/simple/setup_workloads.yml delete mode 100644 ansible_collections/purestorage/fusion/playbooks/tasks/.keep delete mode 100644 ansible_collections/purestorage/fusion/playbooks/templates/.keep delete mode 100644 ansible_collections/purestorage/fusion/playbooks/vars/.keep delete mode 100644 ansible_collections/purestorage/fusion/plugins/doc_fragments/purestorage.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/inventory/__init__.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/module_utils/errors.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/module_utils/fusion.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/module_utils/getters.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/module_utils/networking.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/module_utils/operations.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/module_utils/parsing.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/module_utils/prerequisites.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/module_utils/snapshots.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/module_utils/startup.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_api_client.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_array.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_az.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_hap.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_hw.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_info.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_ni.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_nig.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_pg.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_pp.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_ra.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_region.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_sc.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_se.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_ss.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_tenant.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_tn.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_ts.py delete mode 100644 ansible_collections/purestorage/fusion/plugins/modules/fusion_volume.py delete mode 100644 ansible_collections/purestorage/fusion/test/config.yaml delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/README.md delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/__init__.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_api_client.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_array.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_az.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_hap.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_hw.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_info.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_nig.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_pg.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_pp.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_ra.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_region.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_sc.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_se.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_ss.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_tenant.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_ts.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/test_fusion_volume.py delete mode 100644 ansible_collections/purestorage/fusion/tests/functional/utils.py delete mode 100644 ansible_collections/purestorage/fusion/tests/helpers.py delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/README.md delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/integration_config.template delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_az/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_hap/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ni/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_nig/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pg/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_pp/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_region/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_sc/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_se/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ss/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_tenant/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/integration/targets/fusion_ts/tasks/main.yml delete mode 100644 ansible_collections/purestorage/fusion/tests/unit/README.md delete mode 100644 ansible_collections/purestorage/fusion/tests/unit/mocks/__init__.py delete mode 100644 ansible_collections/purestorage/fusion/tests/unit/mocks/module_mock.py delete mode 100644 ansible_collections/purestorage/fusion/tests/unit/mocks/operation_mock.py delete mode 100644 ansible_collections/purestorage/fusion/tests/unit/module_utils/__init__.py delete mode 100644 ansible_collections/purestorage/fusion/tests/unit/module_utils/test_networking.py delete mode 100644 ansible_collections/purestorage/fusion/tests/unit/module_utils/test_operations.py delete mode 100644 ansible_collections/purestorage/fusion/tests/unit/module_utils/test_parsing.py delete mode 100644 ansible_collections/purestorage/fusion/tests/unit/module_utils/test_prerequisites.py delete mode 100644 ansible_collections/purestorage/fusion/tests/unit/modules/__init__.py delete mode 100644 ansible_collections/purestorage/fusion/tests/unit/modules/test_fusion_az.py delete mode 100644 ansible_collections/splunk/es/tests/sanity/ignore-2.10.txt delete mode 100644 ansible_collections/splunk/es/tests/sanity/ignore-2.11.txt delete mode 100644 ansible_collections/splunk/es/tests/sanity/ignore-2.12.txt delete mode 100644 ansible_collections/splunk/es/tests/sanity/ignore-2.13.txt delete mode 100644 ansible_collections/splunk/es/tests/sanity/ignore-2.9.txt create mode 100644 ansible_collections/telekom_mms/icinga_director/.aar_doc.yml create mode 100644 ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/meta/argument_specs.yml create mode 100644 ansible_collections/telekom_mms/icinga_director/roles/ansible_icinga/tasks/icinga_user_group.yml create mode 100644 ansible_collections/theforeman/foreman/plugins/modules/registration_command.py create mode 100644 ansible_collections/theforeman/foreman/plugins/modules/webhook.py create mode 100644 ansible_collections/theforeman/foreman/tests/test_playbooks/registration_command.yml create mode 100644 ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/registration_command.yml create mode 100644 ansible_collections/theforeman/foreman/tests/test_playbooks/tasks/webhook.yml create mode 100644 ansible_collections/theforeman/foreman/tests/test_playbooks/webhook.yml create mode 100644 ansible_collections/vmware/vmware_rest/.ansible-lint create mode 100644 ansible_collections/vmware/vmware_rest/.github/patchback.yml create mode 100644 ansible_collections/vmware/vmware_rest/.github/workflows/changelog.yaml create mode 100644 ansible_collections/vmware/vmware_rest/.github/workflows/linters.yaml create mode 100644 ansible_collections/vmware/vmware_rest/.github/workflows/sanity-tests.yaml create mode 100644 ansible_collections/vmware/vmware_rest/changelogs/fragments/.keep delete mode 100644 ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-changelog.yaml delete mode 100644 ansible_collections/vmware/vmware_rest/changelogs/fragments/2.1.3-module_utils.yaml delete mode 100644 ansible_collections/vmware/vmware_rest/changelogs/fragments/allow_space_in_search_filters.yaml delete mode 100644 ansible_collections/vmware/vmware_rest/changelogs/fragments/cloud.common-bump.yaml delete mode 100644 ansible_collections/vmware/vmware_rest/changelogs/fragments/lookup-handle-special-chars.yml delete mode 100644 ansible_collections/vmware/vmware_rest/changelogs/fragments/set_default_galaxy_version.yaml delete mode 100644 ansible_collections/vmware/vmware_rest/changelogs/fragments/use-FQCN-in-create_vm.yaml.yaml delete mode 100644 ansible_collections/vmware/vmware_rest/changelogs/fragments/vcenter_network_info-dvs-example.yaml delete mode 100644 ansible_collections/vmware/vmware_rest/changelogs/fragments/version_added.yaml delete mode 100644 ansible_collections/vmware/vmware_rest/changelogs/fragments/vm_template_library.yaml create mode 100644 ansible_collections/vmware/vmware_rest/development.md delete mode 100644 ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.10.txt delete mode 100644 ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.11.txt delete mode 100644 ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.12.txt delete mode 100644 ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.13.txt create mode 100644 ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.16.txt delete mode 100644 ansible_collections/vmware/vmware_rest/tests/sanity/ignore-2.9.txt (limited to 'ansible_collections') diff --git a/ansible_collections/amazon/aws/CHANGELOG.rst b/ansible_collections/amazon/aws/CHANGELOG.rst index 219d962b4..f867fc9e4 100644 --- a/ansible_collections/amazon/aws/CHANGELOG.rst +++ b/ansible_collections/amazon/aws/CHANGELOG.rst @@ -4,6 +4,104 @@ amazon.aws Release Notes .. contents:: Topics +v8.0.0 +====== + +Release Summary +--------------- + +This major release brings several new features, bug fixes, and deprecated features. It also includes the removal of some functionality for ``iam_role, iam_role_info`` and ``module_utils.policy`` that were previously deprecated. We have also removed support for ``ansible-core<2.15``. + +Minor Changes +------------- + +- autoscaling_group - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- cloudformation - apply automatic retries when paginating through stack events without a filter (https://github.com/ansible-collections/amazon.aws/pull/2049). +- cloudtrail - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- ec2_instance - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- ec2_vol - Ensure volume state is not one of ``deleted`` or ``deleting`` when trying to delete volume, to guaranty idempotency (https://github.com/ansible-collections/amazon.aws/pull/2052). +- ec2_vol - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- elb_classic_lb - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- kms_key - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- lambda_event - Add support for setting the ``maximum_batching_window_in_seconds`` option (https://github.com/ansible-collections/amazon.aws/pull/2025). +- module_uils/botocore - support sets and tuples of errors as well as lists (https://github.com/ansible-collections/amazon.aws/pull/1829). +- module_utils/elbv2 - Add support for adding listener with multiple certificates during ALB creation. Allows elb_application_elb module to handle mentioned use case. (https://github.com/ansible-collections/amazon.aws/pull/1950). +- module_utils/elbv2 - Add the possibility to update ``SslPolicy``, ``Certificates`` and ``AlpnPolicy`` for TLS listeners (https://github.com/ansible-collections/amazon.aws/issues/1198). +- rds_instance - Allow passing empty list to ``enable_cloudwatch_logs_exports`` in order to remove all existing exports (https://github.com/ansible-collections/amazon.aws/pull/1917). +- s3_bucket - refactor s3_bucket module code for improved readability and maintainability (https://github.com/ansible-collections/amazon.aws/pull/2057). +- s3_object - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). + +Breaking Changes / Porting Guide +-------------------------------- + +- amazon.aws collection - Support for ansible-core < 2.15 has been dropped (https://github.com/ansible-collections/amazon.aws/pull/2093). +- iam_role - ``iam_role.assume_role_policy_document`` is no longer converted from CamelCase to snake_case (https://github.com/ansible-collections/amazon.aws/pull/2040). +- iam_role_info - ``iam_role.assume_role_policy_document`` is no longer converted from CamelCase to snake_case (https://github.com/ansible-collections/amazon.aws/pull/2040). +- kms_key - the ``policies`` return value has been renamed to ``key_policies`` the contents has not been changed (https://github.com/ansible-collections/amazon.aws/pull/2040). +- kms_key_info - the ``policies`` return value has been renamed to ``key_policies`` the contents has not been changed (https://github.com/ansible-collections/amazon.aws/pull/2040). +- lambda_event - | ``batch_size`` no longer defaults to 100. According to the boto3 API (https://boto3.amazonaws.com/v1/documentation/api/1.26.78/reference/services/lambda.html#Lambda.Client.create_event_source_mapping), ``batch_size`` defaults to 10 for sqs sources and to 100 for stream sources (https://github.com/ansible-collections/amazon.aws/pull/2025). + +Deprecated Features +------------------- + +- aws_ec2 inventory plugin - removal of the previously deprecated ``include_extra_api_calls`` option has been assigned to release 9.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2040). +- cloudformation - the ``template`` parameter has been deprecated and will be removed in a release after 2026-05-01. The ``template_body`` parameter can be used in conjungtion with the lookup plugin (https://github.com/ansible-collections/amazon.aws/pull/2048). +- iam_policy - removal of the previously deprecated ``policies`` return key has been assigned to release 9.0.0. Use the ``policy_names`` return key instead (https://github.com/ansible-collections/amazon.aws/pull/2040). +- module_utils.botocore - the ``boto3`` parameter for ``get_aws_connection_info()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). +- module_utils.botocore - the ``boto3`` parameter for ``get_aws_region()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). +- module_utils.ec2 - the ``boto3`` parameter for ``get_ec2_security_group_ids_from_names()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). +- rds_param_group - the ``rds_param_group`` module has been renamed to ``rds_instance_param_group``. The usage of the module has not changed. The rds_param_group alias will be removed in version 10.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2058). + +Removed Features (previously deprecated) +---------------------------------------- + +- iam_role - the ``iam_role.assume_role_policy_document_raw`` return value has been deprecated. ``iam_role.assume_role_policy_document`` now returns the same format as ``iam_role.assume_role_policy_document_raw`` (https://github.com/ansible-collections/amazon.aws/pull/2040). +- iam_role_info - the ``iam_role.assume_role_policy_document_raw`` return value has been deprecated. ``iam_role.assume_role_policy_document`` now returns the same format as ``iam_role.assume_role_policy_document_raw`` (https://github.com/ansible-collections/amazon.aws/pull/2040). +- module_utils.policy - the previously deprecated ``sort_json_policy_dict()`` function has been removed, consider using ``compare_policies()`` instead (https://github.com/ansible-collections/amazon.aws/pull/2052). + +Bugfixes +-------- + +- elb_classic_lb - fixes bug where ``proxy_protocol`` not being set or being set to ``None`` may result in unexpected behaviour or errors (https://github.com/ansible-collections/amazon.aws/pull/2049). +- lambda_event - Fix when ``batch_size`` is greater than 10, by enabling support for setting ``maximum_batching_window_in_seconds`` (https://github.com/ansible-collections/amazon.aws/pull/2025). +- lambda_event - Retrieve function ARN using AWS API (get_function) instead of building it with AWS account information (https://github.com/ansible-collections/amazon.aws/issues/1859). + +v7.6.0 +====== + +Release Summary +--------------- + +This release brings several bugfixes, minor changes and some new rds modules (``rds_cluster_param_group``, ``rds_cluster_param_group_info`` and ``rds_engine_versions_info``). It also introduces a deprecation for the ``cloudformation`` module. + +Minor Changes +------------- + +- ec2_instance - add support for ``host`` option in placement.tenancy (https://github.com/ansible-collections/amazon.aws/pull/2026). +- ec2_vol - Ensure volume state is not one of ``deleted`` or ``deleting`` when trying to delete volume, to guaranty idempotency (https://github.com/ansible-collections/amazon.aws/pull/2052). + +Deprecated Features +------------------- + +- cloudformation - the ``template`` parameter has been deprecated and will be removed in a release after 2026-05-01. The ``template_body`` parameter can be used in conjungtion with the lookup plugin (https://github.com/ansible-collections/amazon.aws/pull/2048). +- module_utils.botocore - the ``boto3`` parameter for ``get_aws_connection_info()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). +- module_utils.botocore - the ``boto3`` parameter for ``get_aws_region()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). +- module_utils.ec2 - the ``boto3`` parameter for ``get_ec2_security_group_ids_from_names()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). + +Bugfixes +-------- + +- iam_managed_policy - fixes bug that causes ``ParamValidationError`` when attempting to delete a policy that's attached to a role or a user (https://github.com/ansible-collections/amazon.aws/issues/2067). +- iam_role_info - fixes bug in handling paths missing the ``/`` prefix and/or suffix (https://github.com/ansible-collections/amazon.aws/issues/2065). +- s3_object - fix idempotency issue when copying object uploaded using multipart upload (https://github.com/ansible-collections/amazon.aws/issues/2016). + +New Modules +----------- + +- rds_cluster_param_group - Manage RDS cluster parameter groups +- rds_cluster_param_group_info - Describes the properties of specific RDS cluster parameter group. +- rds_engine_versions_info - Describes the properties of specific versions of DB engines. + v7.5.0 ====== @@ -244,6 +342,69 @@ New Modules - ec2_import_image_info - Gather information about import virtual machine tasks - rds_global_cluster_info - Obtain information about Aurora global database clusters +v6.5.4 +====== + +Release Summary +--------------- + +This release includes bugfixes for the ``cloudwatchlogs_log_group_info`` module and the inventory plugins. + +Bugfixes +-------- + +- cloudwatchlogs_log_group_info - Implement exponential backoff when making API calls to prevent throttling exceptions (https://github.com/ansible-collections/amazon.aws/issues/2011). +- plugin_utils.inventory - Ensure templated options in lookup plugins are converted (https://github.com/ansible-collections/amazon.aws/issues/1955). + +v6.5.3 +====== + +Release Summary +--------------- + +This release includes bugfixes for the``cloudwatchevent_rule`` module and ``secretsmanager_secret`` lookup plugin. + +Bugfixes +-------- + +- cloudwatchevent_rule - Fix to avoid adding quotes to JSON input for provided input_template (https://github.com/ansible-collections/amazon.aws/pull/1883). +- lookup/secretsmanager_secret - fix the issue when the nested secret is missing and on_missing is set to warn, the lookup was raising an error instead of a warning message (https://github.com/ansible-collections/amazon.aws/issues/1781). + +v6.5.2 +====== + +Release Summary +--------------- + +This release includes a bugfix for the ``amazon.aws.aws_ec2`` inventory plugin when retrieving information for more than 40 instances with ``use_ssm_inventory``. + +Bugfixes +-------- + +- plugins/inventory/aws_ec2 - Fix failure when retrieving information for more than 40 instances with use_ssm_inventory (https://github.com/ansible-collections/amazon.aws/issues/1713). + +v6.5.1 +====== + +Release Summary +--------------- + +This release includes several bugfixes. + +Minor Changes +------------- + +- ec2_vpc_subnet - use ``wait_timeout`` to also control maximum time to wait for initial creation of subnets (https://github.com/ansible-collections/amazon.aws/pull/1848). + +Bugfixes +-------- + +- ec2_instance - retry API call if we get ``InvalidInstanceID.NotFound`` error (https://github.com/ansible-collections/amazon.aws/pull/1650). +- ec2_vpc_subnet - cleanly handle failure when subnet isn't created in time (https://github.com/ansible-collections/amazon.aws/pull/1848). +- s3_object - Fix typo that caused false deprecation warning when setting ``overwrite=latest`` (https://github.com/ansible-collections/amazon.aws/pull/1847). +- s3_object - fixed ``NoSuchTagSet`` error when S3 endpoint doesn't support tags (https://github.com/ansible-collections/amazon.aws/issues/1607). +- s3_object - when doing a put and specifying ``Content-Type`` in metadata, this module (since 6.0.0) erroneously set the ``Content-Type`` to ``None`` causing the put to fail. Fix now correctly honours the specified ``Content-Type`` (https://github.com/ansible-collections/amazon.aws/issues/1881). + v6.5.0 ====== diff --git a/ansible_collections/amazon/aws/CI.md b/ansible_collections/amazon/aws/CI.md index adc42482a..9b6c78590 100644 --- a/ansible_collections/amazon/aws/CI.md +++ b/ansible_collections/amazon/aws/CI.md @@ -2,7 +2,7 @@ ## AWS Collections -GitHub Actions are used to run the Continuous Integration for amazon.aws collection. The workflows used for the CI can be found [here](https://github.com/ansible-collections/amazon.aws/tree/stable-7/.github/workflows). These workflows include jobs to run the unit tests, integration tests, sanity tests, linters, changelog check and doc related checks. The following table lists the python and ansible versions against which these jobs are run. +GitHub Actions are used to run the Continuous Integration for amazon.aws collection. The workflows used for the CI can be found [here](https://github.com/ansible-collections/amazon.aws/tree/stable-8/.github/workflows). These workflows include jobs to run the unit tests, integration tests, sanity tests, linters, changelog check and doc related checks. The following table lists the python and ansible versions against which these jobs are run. | Jobs | Description | Python Versions | Ansible Versions | | ------ |-------| ------ | -----------| diff --git a/ansible_collections/amazon/aws/FILES.json b/ansible_collections/amazon/aws/FILES.json index 61352c6b6..ad0709691 100644 --- a/ansible_collections/amazon/aws/FILES.json +++ b/ansible_collections/amazon/aws/FILES.json @@ -221,7 +221,7 @@ "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fab623a9b576e9d450f5285c5ad77eed36f30882a396eeba97046f4b8fdbf3cd", + "chksum_sha256": "d715aea5ddd297081527d05cc6d228ce4d3e181dcc9bb050ccbd6a6d8952d73a", "format": 1 }, { @@ -256,7 +256,7 @@ "name": "docs/docsite/rst/CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f60899f9e09f217d9c8963676ddad7d070ce9233e0f32c02b96ad1839ec3cd9f", + "chksum_sha256": "da8a721530a2d8c3c3e98ddc0f99b457215be51f4dac8b2a89f388a4ed0813c9", "format": 1 }, { @@ -298,7 +298,7 @@ "name": "docs/docsite/links.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40b9f123ae7842857f70b823dd5620cc7ad06c6e1f06983ad581f5aa21029789", + "chksum_sha256": "b72e5133d2ef165b4ab66aed1a59121dcf5070b78751ef7af15edbc0f306bb14", "format": 1 }, { @@ -312,7 +312,7 @@ "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2fabb91839258dc50bcf1925e53f0aafdeb2f187fc252f2f70939d667207ec7c", + "chksum_sha256": "ac5c11f98b5966b21849b80f9d34c786433a12160e86aa537a0b4f19f7302ef9", "format": 1 }, { @@ -431,7 +431,7 @@ "name": "plugins/inventory/aws_ec2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f3f3aa496835abc1f5d3686d68ff5e50252fdf46c491ef6effc85815ec3e36c3", + "chksum_sha256": "0b71ac6256e1d399db81ab54a414d3bed2a00628198004840113106f8e305bf9", "format": 1 }, { @@ -459,21 +459,21 @@ "name": "plugins/lookup/aws_collection_constants.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2be170ee49ffe1032dbf2bd6bfd4721599bef128bb4424b707856175beba8b3b", + "chksum_sha256": "b3952eec1b6fccb10b8755b7d1478e00abd1e3bfb255979dc438c588a6cf83c7", "format": 1 }, { "name": "plugins/lookup/aws_service_ip_ranges.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "002391d821e70902d5d58f111fa095552d6236f493d9bbefc44f797ba3dcf14c", + "chksum_sha256": "a9bbcb1b4e3c504a928e51854e3f920628ddc470166215daec995e742950bf2f", "format": 1 }, { "name": "plugins/lookup/secretsmanager_secret.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89cf70f3f030acf9773e8a9b8aef94e5c424d675a4099fa33075b13a32167e80", + "chksum_sha256": "2ed5f6b922ef2c7bc4b803312cbcf0d1191a26572a311674a60746ae3c0297c7", "format": 1 }, { @@ -494,7 +494,7 @@ "name": "plugins/module_utils/acm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b7d7425e00290759785de0f4c83bd6247e3fb4745a2da48721981c76865fa648", + "chksum_sha256": "9a99b8632e7fe768c5d78cec4936784b342a76d7da8b9b1f87b7033e55e54247", "format": 1 }, { @@ -522,7 +522,7 @@ "name": "plugins/module_utils/botocore.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "92fd10ff6db03a74d5bb0f973e956a33f09d24489e608506e52899175684eda8", + "chksum_sha256": "309acd7b7183d6b12f09539366d32fc46e517a2ee904afc2f4fb1cd433eafb43", "format": 1 }, { @@ -543,7 +543,7 @@ "name": "plugins/module_utils/common.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cef7b396d560a646961755d2a54c7131e553dfe26fbb26e04be073cce5bb0095", + "chksum_sha256": "b4931cbe751c155b1c71aae1b5c36f22301d289c7b2051e821fe51613c8a55a9", "format": 1 }, { @@ -564,7 +564,7 @@ "name": "plugins/module_utils/ec2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "936be7a0317850e190866fb6056c9cadb0b478be0b592d50951664ceba1e9b3d", + "chksum_sha256": "a3238f9f1ce1f1c09a9c515c59d403088f814d2b7b5c1c65b9954544e5c44236", "format": 1 }, { @@ -578,7 +578,7 @@ "name": "plugins/module_utils/elbv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d15f3ae29632e8d16bc76ca410c25f5449f350aba78dae643febc8a763f99f04", + "chksum_sha256": "8092136fb3d8803ccf2d9474d7aa916b425283e61c6826ca5038f9a490cceb35", "format": 1 }, { @@ -599,28 +599,28 @@ "name": "plugins/module_utils/iam.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cd5d5532049e4afd2858a35480cd173f72c4ed9174c67bb26186e47fe183ba5", + "chksum_sha256": "b2a6130696f5323dab36892f695d485fe89d0f04667bd08cb1f5d0c70c5a1d9c", "format": 1 }, { "name": "plugins/module_utils/modules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2ee4448ed60b569db05ccd679fe94283764369e73c2065c2ffdd3d98fb00486", + "chksum_sha256": "84a3a62d80370c61e1cd95816c8f328b3b3dfc863a0c6785a0c51fcd3af8f4ee", "format": 1 }, { "name": "plugins/module_utils/policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "506ff6fc6d3505c88609520d9a41e26f9d976f003d0f06cfe4d9bba1cf86c65c", + "chksum_sha256": "e8f25c0113d98d8941a5fc13b756c05ba0f4e6368f3fccfa4810d80d67b53964", "format": 1 }, { "name": "plugins/module_utils/rds.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6471ccfddef1b9e14da5ddbba61b6da6aeea93c49544e4c13fc865b81f0e9164", + "chksum_sha256": "1623ea7cd2d4536e7a7497a822fa7846749a08a1524bf496ad1374885dce665f", "format": 1 }, { @@ -641,7 +641,7 @@ "name": "plugins/module_utils/s3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fa3caa0404d81c7a15ece8d7088f08c69626a2e08dcabf187771c9d6e84868b2", + "chksum_sha256": "2f3ec99690f68c29457d4b04b0fb18755647fa409a87669f06360fe8e7b9aca7", "format": 1 }, { @@ -697,7 +697,7 @@ "name": "plugins/modules/autoscaling_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "58117ad5dbf878ed764d0449c3dfae62e666815fa308eaebefc0bee7ca773a27", + "chksum_sha256": "f8c89e7496adb20dbc3f3cb1934efc033e944fb6657e52c3143338e7ea25dce8", "format": 1 }, { @@ -795,7 +795,7 @@ "name": "plugins/modules/cloudformation.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fa729a1ddb3196b4e6227c7eaa535edf45f6dc5094ed57b51140fad233ae87f6", + "chksum_sha256": "8db5349baa49448cc4fbad544af33a7c9cec6aa7894bb3ceddda30a465c3574c", "format": 1 }, { @@ -809,7 +809,7 @@ "name": "plugins/modules/cloudtrail.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4804d5364e1681a1c2926cc84872865eb62e20d57b7bca997de67ce709616af8", + "chksum_sha256": "e26c260292647f658be27b38b57aeba8802cd9891ac2984f931f704e05814838", "format": 1 }, { @@ -865,14 +865,14 @@ "name": "plugins/modules/ec2_ami.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0757b11eb9acef39eb674e47acd89a610fcead711a4c8de303b10bad7c900517", + "chksum_sha256": "74896198bfee77da5fc121f7d3e9cffcd33fcf331b94138980ab428b5bf8a879", "format": 1 }, { "name": "plugins/modules/ec2_ami_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b97d9c04ec5f504d8e1284eebd074fc4ce268700601ca09e9c57ce4f91e955c9", + "chksum_sha256": "7d59b2d8478ef918340be80a7c913381770764c9c1f3cb5416b0cb7a838626bd", "format": 1 }, { @@ -886,21 +886,21 @@ "name": "plugins/modules/ec2_eip_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c9406d58cddcb5e4f4bee96273ab8f264a0b5750eb4498c81f0713680607520", + "chksum_sha256": "eaaf4c42294a5512b1dd47e5b5c0e98fdb90d2cfee3eff7fab479e0f59d5ac0d", "format": 1 }, { "name": "plugins/modules/ec2_eni.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "88d056f7fc85634b30f5c00501c1cc67d3a2c0dc39455398c5e14668079ee313", + "chksum_sha256": "de0e264d45e50aae330b18d2102cf75f847c1215a6a09e0ff20e1ca4b8196368", "format": 1 }, { "name": "plugins/modules/ec2_eni_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f1db2ca6dc313be56cce8a4970c29cd38536172745772e5ab9840b4817e753ae", + "chksum_sha256": "4e1bf14d5bc08404255eb0f8145f09ed3fb1f34221a4efe74979fbb099f6266a", "format": 1 }, { @@ -921,14 +921,14 @@ "name": "plugins/modules/ec2_instance.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b731a8ca8cc6cb9760700b68bb72bcaf4f31218569886e4237203c073b493aa7", + "chksum_sha256": "ffd0c2409add19494978e82ca7451aed82d416dc6fc3702a0dff629cbe6ece6e", "format": 1 }, { "name": "plugins/modules/ec2_instance_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "036e792937d3a55b5a43094e74c4c0c4b7b9982d3eded7b7d28f67491dd58cb0", + "chksum_sha256": "6688f94dfe4a62894c64f508b72a46bed2a54d05a9a3190214a3ffd9ebf0da00", "format": 1 }, { @@ -949,21 +949,21 @@ "name": "plugins/modules/ec2_metadata_facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d27460949e9c35fc706d1602aad4137fb2527461f355056f81d9f2b714cdfd15", + "chksum_sha256": "27929f05a4f472bb3bce739921f5327a263ae24e17920aacd910a615850c586e", "format": 1 }, { "name": "plugins/modules/ec2_security_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e86e40d3f1074e93d19a63fd8d369fabc85b94a067cb49d946feb57f71dadecb", + "chksum_sha256": "fc3698f0966e826e886f177c3f4058d6f1c4e82035e40815f8e61c720456fe5e", "format": 1 }, { "name": "plugins/modules/ec2_security_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3bdf6ad7f9a88f1e87fb3963dd4d5189713ad08cc338471179ff6b87e0f7e318", + "chksum_sha256": "50f4bbe475ec1bca18c34f5bb097b92f7933361caed1640bceb5e27a6739c361", "format": 1 }, { @@ -1012,7 +1012,7 @@ "name": "plugins/modules/ec2_vol.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d24fcfef21b2a977ba4ba8a96e4de3ae83981f9c3c756a56c4bcdc94ec9ce93f", + "chksum_sha256": "fe07a9bfb7925ba5004a9f2be27573324e0360bc29c0fd9dc0d6e01cfc12dfc9", "format": 1 }, { @@ -1103,7 +1103,7 @@ "name": "plugins/modules/ec2_vpc_route_table.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7b8b59c5ef4102fe6a095b8d48fb3e2c83703e81f9c9f77184c0c0363683a10", + "chksum_sha256": "bb1617639fc00615a10cc55939a3ece5a2e85d14d51268d2e9b85be39bef5548", "format": 1 }, { @@ -1131,7 +1131,7 @@ "name": "plugins/modules/elb_application_lb.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2451345c585062e3c39a62da4291be7478e2db5a74f6f12f5783bce6fdc8961b", + "chksum_sha256": "ae5a975a37dfdf4facfbc5a94f34ddceeef89928faf95433b23d562c2079c872", "format": 1 }, { @@ -1145,7 +1145,7 @@ "name": "plugins/modules/elb_classic_lb.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "00664954f71d3ccd3441bda765c134589be5bc016cee802be92516bfedb7ec20", + "chksum_sha256": "ff5bd43133dc8176e0479501979e8b1bedbb7bf8507e206da31f954eb1ef7a5e", "format": 1 }, { @@ -1208,7 +1208,7 @@ "name": "plugins/modules/iam_policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "664bb0af3653c14b6eb2abe5ed48fec6d0eed428ff714ffbea36b1f273462a4b", + "chksum_sha256": "00a602cd8eebb0eb8fdc305917b41f52f9ec5ba454e60bd213e65eb5c1cafc01", "format": 1 }, { @@ -1222,14 +1222,14 @@ "name": "plugins/modules/iam_role.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c173f8a6bd4e64f91a23d7dfef6f30e3a3fd4dffe797d8f906a102de930664fd", + "chksum_sha256": "9061d5324b63cdc58a842c5e1d21892f27ac20df0aff2c97222c99e2c7b53317", "format": 1 }, { "name": "plugins/modules/iam_role_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d384be35ea61b426a5ee9758e356b43e30d0d7bd071e50f8b192f06345a2c56", + "chksum_sha256": "7a3f682a8f8830a0275233a55a6ef9a8e314a55ebea53e4e861f55711fb1ec9f", "format": 1 }, { @@ -1250,14 +1250,14 @@ "name": "plugins/modules/kms_key.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d446696fb60d8da18aaf6eaec2d84e5eeb7a18c3d0589ce2e89c7d8b631c8d74", + "chksum_sha256": "e25568d292ce5b021470ae5dd3150f29fec6260622c90ee2c9f17aed3819d1b5", "format": 1 }, { "name": "plugins/modules/kms_key_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5811daba5959a939dec7fc5936eec3024c825c720d5ddbb13309b5c5c965477", + "chksum_sha256": "8d29447319868152716b94e4fa952d35faecd5a39f8b6cfcd7d67b69562f5bdf", "format": 1 }, { @@ -1278,7 +1278,7 @@ "name": "plugins/modules/lambda_event.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2276f30d87f6c569e145a641611ac50e57b12b048fe69f3bffd515f0d3b23150", + "chksum_sha256": "3dde0c0a4e704e0489fdc68ff49a54d05f1d47ee61fca5910acda707dc1a1c71", "format": 1 }, { @@ -1292,7 +1292,7 @@ "name": "plugins/modules/lambda_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4bd9b8c9cdc11c0ae73fe4a252ad023aa2503e5e2d845d4f8dabd984b9242347", + "chksum_sha256": "a916feabe54856fd2ca1c190cc7f5f10f3706673454c7eaf18c2ae721cfc020c", "format": 1 }, { @@ -1320,7 +1320,7 @@ "name": "plugins/modules/rds_cluster.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54abecf06781a6e1cb9abdbe6f4ce63ba742ff30fadc4c691dc378f366f837ab", + "chksum_sha256": "52d143815e168f6a8902300aee11477f12fdd433b6b06b0d8f2db48e3665f0a9", "format": 1 }, { @@ -1330,6 +1330,20 @@ "chksum_sha256": "487ee3b42f7061c89e2b078b75fb88ebb3321745e9a405d7480c7085251064d4", "format": 1 }, + { + "name": "plugins/modules/rds_cluster_param_group.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "72280419ed4b96ffdd83f9c71b5ae11c9b2f9c91d8cc724835504b2eab772486", + "format": 1 + }, + { + "name": "plugins/modules/rds_cluster_param_group_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "88366c308385ac90b32d303fcd723e31a91bd2c943c5b23d072d52613389943c", + "format": 1 + }, { "name": "plugins/modules/rds_cluster_snapshot.py", "ftype": "file", @@ -1337,6 +1351,13 @@ "chksum_sha256": "02b2ab483a139e543ef5fab3992cfdb0d1243a5396e6fe2a70f70122942d9167", "format": 1 }, + { + "name": "plugins/modules/rds_engine_versions_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "611b8cd17f5f48e66102525884a8478ae8de94782a8b64f58efc7e49d45d2526", + "format": 1 + }, { "name": "plugins/modules/rds_global_cluster_info.py", "ftype": "file", @@ -1348,7 +1369,7 @@ "name": "plugins/modules/rds_instance.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "504e06fb4396104e8862c84c168592fba08be53442290308b81851e118290d5c", + "chksum_sha256": "85e1518a78d5a4b6d1edd522ceb113fc68ffc9ca408f960a774e54da51535d5c", "format": 1 }, { @@ -1358,6 +1379,13 @@ "chksum_sha256": "c13c5958e56cbf9d0e5bd81aaeb3fb7f88fdbd28a129559ef3755d79ec4dd040", "format": 1 }, + { + "name": "plugins/modules/rds_instance_param_group.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8773ac163a1751321085fc0a480e55cf006b6d03207965f19a8a14df3f9aec3d", + "format": 1 + }, { "name": "plugins/modules/rds_instance_snapshot.py", "ftype": "file", @@ -1379,13 +1407,6 @@ "chksum_sha256": "03fd8deb1508806956baba3c932409af4a3ed1003d99ab3596c8cf800457ba54", "format": 1 }, - { - "name": "plugins/modules/rds_param_group.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "549686e39733802d5ae6a9a07b1ccd463224e5eb414a1afab495082b24bcd369", - "format": 1 - }, { "name": "plugins/modules/rds_snapshot_info.py", "ftype": "file", @@ -1411,7 +1432,7 @@ "name": "plugins/modules/route53_health_check.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c34142ed7d3f7728d6072e8389ee64c6223af92c2bef3e95bccc7b4329578468", + "chksum_sha256": "9bf3e8ea9182d544cd23b5b1a9aad5c6539bf9d1f5c26856c323837ed015a63e", "format": 1 }, { @@ -1432,7 +1453,7 @@ "name": "plugins/modules/s3_bucket.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2e0a82a49cd95a5171cbf36964814f605cd12c9d4cb96e643cadabb8e216c1b", + "chksum_sha256": "590ff2f40a99b6cecc72c33f0fe410880336145438abd28aa60e9370e4705e9c", "format": 1 }, { @@ -1446,14 +1467,14 @@ "name": "plugins/modules/s3_object.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "47610c1c778b26def1d5c3aef8c5f6d2089537445ae420d1da5f1afb4a0b8600", + "chksum_sha256": "e17e5c421f076a0748478720a844df908d2350c46b63c8c03769995352d03da0", "format": 1 }, { "name": "plugins/modules/s3_object_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9dd2dce52f773c41a7ff167eb16511f0a15f6d56c64258b0c1cd380cb7632604", + "chksum_sha256": "a6b0837b0dceb593bb88eba9d765ad0274bae582ec74e19da038d6eda590b4f0", "format": 1 }, { @@ -1775,7 +1796,7 @@ "name": "tests/integration/targets/aws_region_info/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fb318b5de7438166fae97aee9ef2c91a1627b7b812e4b33ad1ac43abe9fddc5c", + "chksum_sha256": "9acb5a901f9cb39c4eb5f270fb82fd1650c01cc68b4f085b7427f7398581d9ea", "format": 1 }, { @@ -1887,7 +1908,7 @@ "name": "tests/integration/targets/backup_selection/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "62babbcf4801df3634de64cbdbbcb9799e7196e68e79ae2467eef00f94d006e3", + "chksum_sha256": "06017040cb63c7219aceb5f1355d0e57f59b94fa2d988bae246fe84c841e62ed", "format": 1 }, { @@ -2216,7 +2237,7 @@ "name": "tests/integration/targets/cloudtrail/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf758e82bdee23917b64cb50d3819fcb0e37a08b839651667d650233a2912e95", + "chksum_sha256": "a9cb2880678971b4cf7c219d1386406a8aff391baee0595e152bf2989be03e9c", "format": 1 }, { @@ -3385,7 +3406,7 @@ "name": "tests/integration/targets/ec2_instance_iam_instance_role/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8090dd20b9fd152460ecb440752342981b5a7dd622b70f21d285c8d237fc8427", + "chksum_sha256": "070f55805c4bf94cff515299783013b40d0da550fdff8e3c4fcd746ec25bd687", "format": 1 }, { @@ -4568,7 +4589,7 @@ "name": "tests/integration/targets/ec2_vol/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "34570fb0003b114ab3f32a96dd54baed32237644756383a4cbce1586b464ab3e", + "chksum_sha256": "1949441e222e6b7fe0a3f344850ada6bb8e28baa7385a380b735956b038a8193", "format": 1 }, { @@ -5044,7 +5065,21 @@ "name": "tests/integration/targets/elb_application_lb/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "117345e107fdfcd7c61eb0efd221c8dfc89f50f16995fed04ce042a696a206a1", + "chksum_sha256": "96485e804f115e34eb4dcc22296b533132a1b5e7377aaf3ebdcd1a8a1ca61792", + "format": 1 + }, + { + "name": "tests/integration/targets/elb_application_lb/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/elb_application_lb/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2d6e22eb282a5ef5a9b95f7ea5a0ab29337ae87205ec20f7a29fd732a4d15f17", "format": 1 }, { @@ -5054,11 +5089,18 @@ "chksum_sha256": null, "format": 1 }, + { + "name": "tests/integration/targets/elb_application_lb/tasks/alb_with_multiple_listener_certs.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ba5a7dafb52e116b621694ef5dced0a4e083eac0856be442281155eca97c8b69", + "format": 1 + }, { "name": "tests/integration/targets/elb_application_lb/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b67635615261ebad66e54c874a157697fa8b1077ba4162f449054365c06c8425", + "chksum_sha256": "da7642df21db7298f3bbbe8ec97dd5639a56ed480a581b9d18918ca5a193387d", "format": 1 }, { @@ -5464,7 +5506,7 @@ "name": "tests/integration/targets/iam_group/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aae88f8768d56e9f0da979319e7693c61c02e58b0fc4b42ec6e7e191cf28eca5", + "chksum_sha256": "192edd49b90afe7d78f0d0e7d13270d444debd1b9c23325857750c449a3ffedc", "format": 1 }, { @@ -5555,7 +5597,7 @@ "name": "tests/integration/targets/iam_instance_profile/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e42e5dde8164648b63372350df5fcec9ba73c739385f5c3c72c10558f65d201", + "chksum_sha256": "c5d3dc19fa0c29a44b027cad450447041b1dd0f38934cce127c3076541cb2e11", "format": 1 }, { @@ -5590,7 +5632,21 @@ "name": "tests/integration/targets/iam_managed_policy/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93d9ea38d4e024e6d3586b12ade39769ebb91141c2a7bf2b2ad6fc378d6a14d4", + "chksum_sha256": "759855f441d8979bd29a3059e400e54345e2651877806a0439f6e2c3fbc66a5c", + "format": 1 + }, + { + "name": "tests/integration/targets/iam_managed_policy/files", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iam_managed_policy/files/deny-assume.json", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "252bc63ef45bb6343320a9afacb88299ac8badf8b2cfbb2ecfd0a443dc28fa2f", "format": 1 }, { @@ -5618,7 +5674,7 @@ "name": "tests/integration/targets/iam_managed_policy/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84b8e44df62276a2a8fb0be783a6c5443f3253fdf7bbeb013cbf7164ed6af3f6", + "chksum_sha256": "088fc86bbbd03afe0818993ab660b74aa4314bdbcd8cba76f7536b16e4cb23e2", "format": 1 }, { @@ -5667,7 +5723,7 @@ "name": "tests/integration/targets/iam_password_policy/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "17535f416ceea8bc36cd1ba23ff7b303d806ed83ca9363496baa255d5f106908", + "chksum_sha256": "15bc89da02be6f6d5cc9e527498b75531c4eaadd1ab368e8f36c22af376cc80b", "format": 1 }, { @@ -5758,7 +5814,7 @@ "name": "tests/integration/targets/iam_policy/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ab3fbd83a86f0eeb1c53097aa9a3c44140d66c347f3b3a16f2dd91d02d126e4", + "chksum_sha256": "bbc9206834079d8c2a0496d79a6e70bc4fd8502c49f774db3e1a568a1846e19c", "format": 1 }, { @@ -5793,7 +5849,7 @@ "name": "tests/integration/targets/iam_role/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "741abccb048f212947c96cdb810e5c2894714b4d588ef572336e9e2b8d11e427", + "chksum_sha256": "359c0e7cdd4d39463467cb765ffe11b91c2796301d83b75edc8068b18d3cd573", "format": 1 }, { @@ -5856,77 +5912,77 @@ "name": "tests/integration/targets/iam_role/tasks/boundary_policy.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64d9dd8ca827b13ec32824934db94c3854a78710382bacc5d685906054b47dd7", + "chksum_sha256": "3a98327df29d30b67036b3934446f5ccfc2edd99ebbac8fde56fdb85304cc039", "format": 1 }, { "name": "tests/integration/targets/iam_role/tasks/complex_role_creation.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a52547e18b9336fd168fc9f511deecbfad4356d0c65c08753dec9f50bbef78f", + "chksum_sha256": "4cc4b530c2e5d2773cbfd98bb1de5cd809bbfbb44d7d4eac7b42b5806cdc490b", "format": 1 }, { "name": "tests/integration/targets/iam_role/tasks/creation_deletion.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7ed84bbc84db3f546f63df4fdc0a359cf523817edb3a0a1ff7e758b54876b162", + "chksum_sha256": "f54eaf422f769b49d439f4148a31d4cd56c95ad77b5d3c1f3efb2f56a3a86a8a", "format": 1 }, { "name": "tests/integration/targets/iam_role/tasks/description_update.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e58de3daadf95cb8479641bf23a89402c6a0802a4ec4f45745aeba3972b1c44", + "chksum_sha256": "87b762ee83d77421b78e71fc0b4ec017fad520f06a4349b9d6fc26ca38f42120", "format": 1 }, { "name": "tests/integration/targets/iam_role/tasks/inline_policy_update.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c82ffe31cb45ba34076251d0d71871f7b9fa2d2849271a0dda2090c1bc3d32f", + "chksum_sha256": "67486baab98a84c0ad6bffd21d1b29ff7609900476736d297b7e1707976e5390", "format": 1 }, { "name": "tests/integration/targets/iam_role/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a56f46cb51b1a365bfbb62c0f986f5146389797f5c7a8a491537f5dfdc8b9818", + "chksum_sha256": "b970fdbfad230b92fa7ccbe35fcdc2cc560933d46ba1850221a829fa9a2c4afa", "format": 1 }, { "name": "tests/integration/targets/iam_role/tasks/max_session_update.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec05f81e22efca10da58ecc5523fb0cd89209eca5eaa85941c14483b6f0c95ce", + "chksum_sha256": "6a0f8d80351117f8781bc7ec3adccc300011a99fa2baf3152350aa0a16469d36", "format": 1 }, { "name": "tests/integration/targets/iam_role/tasks/parameter_checks.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "32204f0d4d1c5f399d358b30c46e3ded2884214fac5aea6f5dd5fd0fa4490b57", + "chksum_sha256": "e29eef33395e6aeb9d754dba6d640298589623de5818c37cb006aa067acbf6a5", "format": 1 }, { "name": "tests/integration/targets/iam_role/tasks/policy_update.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb74e9f499be8906682a08ea75178de84b1e4302f4eb300df77eb198ca6d9e4b", + "chksum_sha256": "650898eef42a40fcb7f80e46360efdd93783b829a22153adeced56e3b967a7fd", "format": 1 }, { "name": "tests/integration/targets/iam_role/tasks/role_removal.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d31edc2bc4c61e150adbec443b48c558b83764952ee007919836c53f2332adee", + "chksum_sha256": "84266d9d96f9a8a08b1e5beba54fd39ba49f5f50eca1de5477b251d79eec7992", "format": 1 }, { "name": "tests/integration/targets/iam_role/tasks/tags_update.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d130601264f877ded1a81afcc4d695f4b4458db5d7017c464f6a910a4d7f1c74", + "chksum_sha256": "427ee5a026f085bc0a3b5fa681b4ceee7ff9b2ce63c3adb0e9b27369c198cfa1", "format": 1 }, { @@ -5996,7 +6052,7 @@ "name": "tests/integration/targets/iam_user/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fca44566391f40361845be32c7178bf6dc49804b7f19bbd2f02314b956ab5bdb", + "chksum_sha256": "d0e8932f7042782ce6c06198d484fd5874ef1f26e9facf38cb2ca95207ea21de", "format": 1 }, { @@ -6157,7 +6213,7 @@ "name": "tests/integration/targets/inventory_aws_ec2/playbooks/test_inventory_ssm.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e372db3e66570a3ec99cf82144c0ae3477065dd9589d17d4ca1d6d7c1dd877b1", + "chksum_sha256": "1268f6613b4fc6de091ce44d0414bd956904ae61f02a1166786e2646670d3cfc", "format": 1 }, { @@ -6626,14 +6682,14 @@ "name": "tests/integration/targets/kms_key/roles/kms_key/tasks/test_grants.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c782911da94cb4988bffc549f08e427fbc1bdf39f5a2afeb9cb00e000c8d627b", + "chksum_sha256": "076e4ad88c1c0c494e423b1385033afc295cb3aaee3eedc469704b0d7ab9c23d", "format": 1 }, { "name": "tests/integration/targets/kms_key/roles/kms_key/tasks/test_modify.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6307eef0b11b17182fcf930a523e3a08f7a86714433abc5a697cca4ca98c287", + "chksum_sha256": "4de0a962cdebc773e46d8e98b0f85711ce8c1110967c7f866214c262e3956da2", "format": 1 }, { @@ -6773,7 +6829,7 @@ "name": "tests/integration/targets/lambda/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "158dacd3059d5f761f02bd8a6fa025c5ca3c4746097b6059702e9ec87e85971c", + "chksum_sha256": "e2acedb2e10b0a305fcf9a89a30d8b19ad270bfdad146054db1150944b3d141d", "format": 1 }, { @@ -6857,7 +6913,7 @@ "name": "tests/integration/targets/lambda_alias/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fad37b015cecc39aab3e080d572a96bd81d379e0f86093c4c50df66b1c26fd8d", + "chksum_sha256": "efc4da58e3aa37859b3f645e5a20ee9aec39026bbf08ab2599ce9d0d6e13b9ea", "format": 1 }, { @@ -6934,21 +6990,21 @@ "name": "tests/integration/targets/lambda_event/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8f2e0d97fcaed9c7b72de4dbcb3ccbfeccc6e736939061367f0e2d3e5548fae1", + "chksum_sha256": "a87cffe1267dd514f3f1dce793f135efd867852cbd7382872d15d65f6d7b4257", "format": 1 }, { "name": "tests/integration/targets/lambda_event/tasks/setup.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "38be23da5e06f42ee93238b265d6322edb3837645719284600ecc7126afadc0f", + "chksum_sha256": "563e40aaeb7ae433c3f4533c44e935dc2da9c0f1e7d5db6a1a5c19d0b409e823", "format": 1 }, { "name": "tests/integration/targets/lambda_event/tasks/teardown.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a9a5e92990bbfe9a6cc8b54d63e69160bc627575da74f51bf399df9da663eb3", + "chksum_sha256": "aa57c6b258d8832221ecabed655bd4b830a557f4277641fda317885aab400dd7", "format": 1 }, { @@ -7067,7 +7123,7 @@ "name": "tests/integration/targets/lambda_policy/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b8f7ec6930a42885e71c8544d31274966ad12a8ebb932f1d6238f3821d4096e", + "chksum_sha256": "abac3a6782941145983eee6fe69701d90e755c4e6e13b5862f557e3539690431", "format": 1 }, { @@ -7896,6 +7952,48 @@ "chksum_sha256": "f23e235cde074cfce2be11a047a03ca7356bddf72e28a33edab44dd89b72661f", "format": 1 }, + { + "name": "tests/integration/targets/rds_cluster_param_group", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/rds_cluster_param_group/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/rds_cluster_param_group/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "78700a32b519a47837c515e07f0866af6c17054c7a6bd92be13e658c96a5ee03", + "format": 1 + }, + { + "name": "tests/integration/targets/rds_cluster_param_group/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/rds_cluster_param_group/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "341c36bba5f85c189827ac74d41378957f5a042e39238ddb8bffb54f2a4b9bf1", + "format": 1 + }, + { + "name": "tests/integration/targets/rds_cluster_param_group/aliases", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "81a91f0a74f0df45dacfdf9852dd53b3d4f91a4a5eea810c0b8d3f4e78181371", + "format": 1 + }, { "name": "tests/integration/targets/rds_cluster_promote", "ftype": "dir", @@ -8222,7 +8320,7 @@ "name": "tests/integration/targets/rds_instance_complex/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c1211c77b57aa2f1b14a77d59fab7b3f6ffb6ed87a0877266302eb20af08ff1", + "chksum_sha256": "002a8503cfa24dd65864d91bf7ffc3b8e4fede1384daff2fcc767009a55cdcca", "format": 1 }, { @@ -8264,7 +8362,7 @@ "name": "tests/integration/targets/rds_instance_complex/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4095a8bfeb09d5b42f6b122a8cfd3d2c1c38e905091b7099b970503e07b9264", + "chksum_sha256": "12a546f097ea2e3c14cfb763420c9d26b66f860d6b121e3ba334508d715f3c33", "format": 1 }, { @@ -8292,7 +8390,7 @@ "name": "tests/integration/targets/rds_instance_modify/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "662a79a2f3a0652893a1670e9d458a497041a9674fa3e845fc8a96b1ae06d3d5", + "chksum_sha256": "6f40a4edf26c98d33dd5052243c68709f961ef09c72958f4876e6f8adbb31981", "format": 1 }, { @@ -8320,7 +8418,7 @@ "name": "tests/integration/targets/rds_instance_modify/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d08bb138ad6e81e3b4f0466d5dd9e2e874ab44bfaccd8d327fb3bc9a453bf3bf", + "chksum_sha256": "6ceab35775a16e513f60a097890e13a6441ef67dcca8f7758bf8b9e9a68e6db9", "format": 1 }, { @@ -8516,7 +8614,7 @@ "name": "tests/integration/targets/rds_instance_snapshot/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41d6531cd5e27ef6d38ae9b088278434b723c8fb1f710070d3180763bbc373a3", + "chksum_sha256": "716af89f882b306fe95c431a069bb9ee3c99a668d2648ca67fc9b6b159cea257", "format": 1 }, { @@ -8747,7 +8845,7 @@ "name": "tests/integration/targets/rds_option_group/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "157966ee1883147d42f021d1a10db168210a43ab8aa1bf9c974ee79ad68e5958", + "chksum_sha256": "c2e08a6dae20976ef57a6695bc4eeb46b34b3ccb22471fb557a2dad53dfd8ccb", "format": 1 }, { @@ -8831,7 +8929,7 @@ "name": "tests/integration/targets/rds_param_group/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08b35a90309cc90693f6094e7ad8b78147e027ce522e58b3ae417584da2cd067", + "chksum_sha256": "545cb6217e6089547cb19e9ce4b9db90e88e26c03ed0a9cbbe9ada2f1103cd6e", "format": 1 }, { @@ -9377,7 +9475,7 @@ "name": "tests/integration/targets/s3_bucket_info/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea2a43f6b1fc35b0f6997300fd3d552d1eb48f562853a8b6c38f9a485c6eae8d", + "chksum_sha256": "3ceaf43cde3fa8ba5c6e88b03f68cf2018a284cd5e5d8353f3aab7080d52325b", "format": 1 }, { @@ -9429,6 +9527,20 @@ "chksum_sha256": "bae277f309fbffab9590300ccc1e75805c9795bbcef69edfda22c5b2327e12ba", "format": 1 }, + { + "name": "tests/integration/targets/s3_object/library", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/s3_object/library/test_s3_upload_multipart.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "43d9e289c074629a7d5d3d1b4dc42c3d6c178f37328f4f5b58a7a01f7914edc0", + "format": 1 + }, { "name": "tests/integration/targets/s3_object/meta", "ftype": "dir", @@ -9450,11 +9562,18 @@ "chksum_sha256": null, "format": 1 }, + { + "name": "tests/integration/targets/s3_object/tasks/copy_multipart_upload.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "54e55d5f565dd5cb2d27c1d6e643aff1292bf498b2333f0a76127c4e704a9ac7", + "format": 1 + }, { "name": "tests/integration/targets/s3_object/tasks/copy_object.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a935fc78dc9973eac71decd7308d4e827c27a7f30b29c7c416f9f676163b4ec7", + "chksum_sha256": "b37f07be2da85fa70b7bc64336cb07b6e7830f534d72568eb971ccb80b3832e8", "format": 1 }, { @@ -9482,7 +9601,7 @@ "name": "tests/integration/targets/s3_object/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "697d66379fe4c4b33f82b1f7ac363f1e25331480201701b23d28494165346043", + "chksum_sha256": "749b020d702b900613fb0af184c973a352075cde62642885b54ecec7aaec2b5e", "format": 1 }, { @@ -9937,7 +10056,7 @@ "name": "tests/integration/targets/sts_assume_role/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ed33b9c99c2880e76ec8f9fba9339414484cc956cd06b69d22cc41d1603c7d8", + "chksum_sha256": "32acd11db8baad6e636a80d2e7c1cbf43020b1f684e7254e78c9f4e745ef63fe", "format": 1 }, { @@ -10024,6 +10143,13 @@ "chksum_sha256": "a20cbabc70cf2098b78b862d252444c4699d58d9c4b7a71fe66dd3768c75c6af", "format": 1 }, + { + "name": "tests/sanity/ignore-2.18.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a20cbabc70cf2098b78b862d252444c4699d58d9c4b7a71fe66dd3768c75c6af", + "format": 1 + }, { "name": "tests/unit", "ftype": "dir", @@ -10112,7 +10238,7 @@ "name": "tests/unit/module_utils/botocore/test_is_boto3_error_code.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c714e748e66b64bdd3e00aa7428ecfbfa91b7d4e2cedd41ce2c76ebf308af9e6", + "chksum_sha256": "0b8f2e621125c0a9bff6422d8135378711aff4d63476211999de0b7038d6f88e", "format": 1 }, { @@ -10294,7 +10420,7 @@ "name": "tests/unit/module_utils/iam/test_iam_resource_transforms.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ba95e45f5d2c2502a8ae6ea6dacc35e340f931a4d4d7fde2064ba0f89018ed0", + "chksum_sha256": "cdf2c63ba6eb4f5b50a406d5ccab09724cd5f08d7b4a50480bfe5352c9eba0ed", "format": 1 }, { @@ -10343,7 +10469,7 @@ "name": "tests/unit/module_utils/modules/ansible_aws_module/test_passthrough.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "79fd79b924fb43e8f9b793bba30117beb2d210b536ec98f8c1d9fbeb6d68f560", + "chksum_sha256": "d50e7d1b4413e827cce2cd2c48e897ed34943d25da2fa23176017b6fa51f7206", "format": 1 }, { @@ -10402,13 +10528,6 @@ "chksum_sha256": "3d867633f1e6040a81dd3d869291511687a945487fd6e111cc266cfc8ef603fb", "format": 1 }, - { - "name": "tests/unit/module_utils/policy/test_sort_json_policy_dict.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "85396f02abd5a62aaaebcaf17aa26481065d363fb30c9f002e70e4f9013480db", - "format": 1 - }, { "name": "tests/unit/module_utils/retries", "ftype": "dir", @@ -10518,7 +10637,7 @@ "name": "tests/unit/module_utils/test_elbv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b29a1b8fb6b96bc4bff39292b3b73a9d9416c64745c977f7bda6643e1d07a5bf", + "chksum_sha256": "bdaa8265c4c769c6f31f6c62e8c4aa81db0bf193f368199d712ca836eeb2ec08", "format": 1 }, { @@ -11557,6 +11676,13 @@ "chksum_sha256": "575986ca407470c51a1823f4fbe66c6b8536e92e1aee857c44d0e48a45fc7610", "format": 1 }, + { + "name": "tests/unit/plugins/modules/test_lambda_event.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "41efee03ff9ca344cf8eb91104baec65785cab74722dee324e7d377d8505b263", + "format": 1 + }, { "name": "tests/unit/plugins/modules/test_lambda_layer.py", "ftype": "file", @@ -11680,14 +11806,14 @@ "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f60899f9e09f217d9c8963676ddad7d070ce9233e0f32c02b96ad1839ec3cd9f", + "chksum_sha256": "da8a721530a2d8c3c3e98ddc0f99b457215be51f4dac8b2a89f388a4ed0813c9", "format": 1 }, { "name": "CI.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af0c6bdfd9336e31a336e71db052555ecd691c3edd8f094382a69fa372db41a4", + "chksum_sha256": "87f530f9758927edd7cd21f5628548e9680a8ab51dc32f034c4d5378a705b315", "format": 1 }, { @@ -11708,7 +11834,7 @@ "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca9ea646ad4dfc288a174b6f64ce7362a6fbc01fac7236be815b8a679e305cdb", + "chksum_sha256": "6513a5b89d2514593c661cc251029be394fdda83185f373f3ed2053d2b3f2f99", "format": 1 }, { @@ -11743,7 +11869,7 @@ "name": "tox.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1201123003e01af03ffb7cf8669ea1fc7a8ddc0bff1a181c2484d0bd0087ed5e", + "chksum_sha256": "afbb20decd896a762321709bf0813adc283c10e9ae776355021f779dff5c54ce", "format": 1 } ], diff --git a/ansible_collections/amazon/aws/MANIFEST.json b/ansible_collections/amazon/aws/MANIFEST.json index cd19577e3..a1dd8b884 100644 --- a/ansible_collections/amazon/aws/MANIFEST.json +++ b/ansible_collections/amazon/aws/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "amazon", "name": "aws", - "version": "7.5.0", + "version": "8.0.0", "authors": [ "Ansible (https://github.com/ansible)" ], @@ -17,7 +17,7 @@ "license_file": "COPYING", "dependencies": {}, "repository": "https://github.com/ansible-collections/amazon.aws", - "documentation": "https://ansible-collections.github.io/amazon.aws/branch/stable-7/collections/amazon/aws/index.html", + "documentation": "https://ansible-collections.github.io/amazon.aws/branch/main/collections/amazon/aws/index.html", "homepage": "https://github.com/ansible-collections/amazon.aws", "issues": "https://github.com/ansible-collections/amazon.aws/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc" }, @@ -25,7 +25,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "34bdeb6686c662a0a524953b80ae953b67d328542ba5d43bc1e4058c45ed4136", + "chksum_sha256": "3973d6f227d778fb935a07725724715ec807dc1b82e133e1f9fd73b95968b735", "format": 1 }, "format": 1 diff --git a/ansible_collections/amazon/aws/README.md b/ansible_collections/amazon/aws/README.md index d5e751b91..2fa2b74f7 100644 --- a/ansible_collections/amazon/aws/README.md +++ b/ansible_collections/amazon/aws/README.md @@ -5,7 +5,7 @@ AWS related modules and plugins supported by the Ansible community are in the [c ## Ansible version compatibility -Tested with the Ansible Core >= 2.13.0 versions, and the current development version of Ansible. Ansible Core versions prior to 2.13.0 are not supported. +Tested with the Ansible Core >= 2.15.0 versions, and the current development version of Ansible. Ansible Core versions prior to 2.15.0 are not supported. ## Python version compatibility @@ -43,7 +43,7 @@ All support for the original AWS SDK `boto` was removed in release 4.0.0. ## Included content -See the complete list of collection content in the [Plugin Index](https://ansible-collections.github.io/amazon.aws/branch/stable-7/collections/amazon/aws/index.html#plugin-index). +See the complete list of collection content in the [Plugin Index](https://ansible-collections.github.io/amazon.aws/branch/stable-8/collections/amazon/aws/index.html#plugin-index). @@ -107,9 +107,9 @@ You can either call modules by their Fully Qualified Collection Name (FQCN), suc ## Contributing to this collection We welcome community contributions to this collection. If you find problems, please open an issue or create a PR against the [Amazon AWS collection repository](https://github.com/ansible-collections/amazon.aws). -See [CONTRIBUTING.md](https://github.com/ansible-collections/amazon.aws/blob/stable-7/CONTRIBUTING.md) for more details. +See [CONTRIBUTING.md](https://github.com/ansible-collections/amazon.aws/blob/stable-8/CONTRIBUTING.md) for more details. -This collection is tested using GitHub Actions. To know more about testing, refer to [CI.md](https://github.com/ansible-collections/amazon.aws/blob/stable-7/CI.md). +This collection is tested using GitHub Actions. To know more about testing, refer to [CI.md](https://github.com/ansible-collections/amazon.aws/blob/stable-8/CI.md). You can also join us on: @@ -124,7 +124,7 @@ You can also join us on: ## Release notes -See the [rendered changelog](https://ansible-collections.github.io/amazon.aws/branch/stable-7/collections/amazon/aws/docsite/CHANGELOG.html) or the [raw generated changelog](https://github.com/ansible-collections/amazon.aws/tree/stable-7/CHANGELOG.rst). +See the [rendered changelog](https://ansible-collections.github.io/amazon.aws/branch/stable-8/collections/amazon/aws/docsite/CHANGELOG.html) or the [raw generated changelog](https://github.com/ansible-collections/amazon.aws/tree/stable-8/CHANGELOG.rst). ## Roadmap diff --git a/ansible_collections/amazon/aws/changelogs/changelog.yaml b/ansible_collections/amazon/aws/changelogs/changelog.yaml index 587c55a28..546b1fe22 100644 --- a/ansible_collections/amazon/aws/changelogs/changelog.yaml +++ b/ansible_collections/amazon/aws/changelogs/changelog.yaml @@ -2422,6 +2422,75 @@ releases: - ec2_region.yml - release-summary.yml release_date: '2023-10-03' + 6.5.1: + changes: + bugfixes: + - ec2_instance - retry API call if we get ``InvalidInstanceID.NotFound`` error + (https://github.com/ansible-collections/amazon.aws/pull/1650). + - ec2_vpc_subnet - cleanly handle failure when subnet isn't created in time + (https://github.com/ansible-collections/amazon.aws/pull/1848). + - s3_object - Fix typo that caused false deprecation warning when setting ``overwrite=latest`` + (https://github.com/ansible-collections/amazon.aws/pull/1847). + - s3_object - fixed ``NoSuchTagSet`` error when S3 endpoint doesn't support + tags (https://github.com/ansible-collections/amazon.aws/issues/1607). + - s3_object - when doing a put and specifying ``Content-Type`` in metadata, + this module (since 6.0.0) erroneously set the ``Content-Type`` to ``None`` + causing the put to fail. Fix now correctly honours the specified ``Content-Type`` + (https://github.com/ansible-collections/amazon.aws/issues/1881). + minor_changes: + - ec2_vpc_subnet - use ``wait_timeout`` to also control maximum time to wait + for initial creation of subnets (https://github.com/ansible-collections/amazon.aws/pull/1848). + release_summary: This release includes several bugfixes. + fragments: + - 1607-NoSuchTagSet.yml + - 1650-fix-invalidinstanceid-notfound.yml + - 1799-s3_object-bucket.yml + - 1847-s3_object-fix-false-deprecation-warning.yml + - 1848-ec2_vpc_subnet-wait-creation.yml + - 1881-allow-s3_object-to-specify-content-type-in-metadata.yml + - release_summary.yml + release_date: '2023-12-07' + 6.5.2: + changes: + bugfixes: + - plugins/inventory/aws_ec2 - Fix failure when retrieving information for more + than 40 instances with use_ssm_inventory (https://github.com/ansible-collections/amazon.aws/issues/1713). + release_summary: This release includes a bugfix for the ``amazon.aws.aws_ec2`` + inventory plugin when retrieving information for more than 40 instances with + ``use_ssm_inventory``. + fragments: + - 20240129-aws_ec2-inventory-bugfix.yml + - release_summary.yml + release_date: '2024-02-06' + 6.5.3: + changes: + bugfixes: + - cloudwatchevent_rule - Fix to avoid adding quotes to JSON input for provided + input_template (https://github.com/ansible-collections/amazon.aws/pull/1883). + - lookup/secretsmanager_secret - fix the issue when the nested secret is missing + and on_missing is set to warn, the lookup was raising an error instead of + a warning message (https://github.com/ansible-collections/amazon.aws/issues/1781). + release_summary: This release includes bugfixes for the``cloudwatchevent_rule`` + module and ``secretsmanager_secret`` lookup plugin. + fragments: + - 1883-cloudwatchevent_rule-fix-json-input-handling-for-input_template.yml + - 20240212-lookup-secretsmanager_secret-fix-issue-when-nested-is-missing-and-on_missing-is-set-to-warn.yaml + - release_summary.yml + - remove_rendundant_workflow.yml + release_date: '2024-03-06' + 6.5.4: + changes: + bugfixes: + - cloudwatchlogs_log_group_info - Implement exponential backoff when making + API calls to prevent throttling exceptions (https://github.com/ansible-collections/amazon.aws/issues/2011). + - plugin_utils.inventory - Ensure templated options in lookup plugins are converted + (https://github.com/ansible-collections/amazon.aws/issues/1955). + release_summary: This release includes bugfixes for the ``cloudwatchlogs_log_group_info`` + module and the inventory plugins. + fragments: + - 20240314-cloudwatchlogs_log_group_info-fix-throttling-exceptions.yml + - 6.5.4-release-summary.yml + release_date: '2024-04-03' 7.0.0: changes: breaking_changes: @@ -2802,3 +2871,158 @@ releases: - 20240314-s3_object-copy-mode-with-metadata.yml - 20240321-iam-user-info.yml release_date: '2024-04-03' + 7.6.0: + changes: + bugfixes: + - iam_managed_policy - fixes bug that causes ``ParamValidationError`` when attempting + to delete a policy that's attached to a role or a user (https://github.com/ansible-collections/amazon.aws/issues/2067). + - iam_role_info - fixes bug in handling paths missing the ``/`` prefix and/or + suffix (https://github.com/ansible-collections/amazon.aws/issues/2065). + - s3_object - fix idempotency issue when copying object uploaded using multipart + upload (https://github.com/ansible-collections/amazon.aws/issues/2016). + deprecated_features: + - cloudformation - the ``template`` parameter has been deprecated and will be + removed in a release after 2026-05-01. The ``template_body`` parameter can + be used in conjungtion with the lookup plugin (https://github.com/ansible-collections/amazon.aws/pull/2048). + - module_utils.botocore - the ``boto3`` parameter for ``get_aws_connection_info()`` + will be removed in a release after 2025-05-01. The ``boto3`` parameter has + been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). + - module_utils.botocore - the ``boto3`` parameter for ``get_aws_region()`` will + be removed in a release after 2025-05-01. The ``boto3`` parameter has been + ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). + - module_utils.ec2 - the ``boto3`` parameter for ``get_ec2_security_group_ids_from_names()`` + will be removed in a release after 2025-05-01. The ``boto3`` parameter has + been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). + minor_changes: + - ec2_instance - add support for ``host`` option in placement.tenancy (https://github.com/ansible-collections/amazon.aws/pull/2026). + - ec2_vol - Ensure volume state is not one of ``deleted`` or ``deleting`` when + trying to delete volume, to guaranty idempotency (https://github.com/ansible-collections/amazon.aws/pull/2052). + release_summary: This release brings several bugfixes, minor changes and some + new rds modules (``rds_cluster_param_group``, ``rds_cluster_param_group_info`` + and ``rds_engine_versions_info``). It also introduces a deprecation for the + ``cloudformation`` module. + fragments: + - 20240322-s3_object-fix-idempotency-copy-issue-with-multipart-uploaded-object.yml + - 20240403-ec2_securty_group-sanity.yml + - 20240411-ec2_vol.yml + - 2026-ec2_instance-add-support-for-placement-tenancy-host.yml + - 2065-iam_role_info.yml + - 2067-iam_managed_policy-delete.yml + - cloudformation-template.yml + - release_summary.yml + - sanity-boto3.yml + modules: + - description: Manage RDS cluster parameter groups + name: rds_cluster_param_group + namespace: '' + - description: Describes the properties of specific RDS cluster parameter group. + name: rds_cluster_param_group_info + namespace: '' + - description: Describes the properties of specific versions of DB engines. + name: rds_engine_versions_info + namespace: '' + release_date: '2024-05-07' + 8.0.0: + changes: + breaking_changes: + - amazon.aws collection - Support for ansible-core < 2.15 has been dropped (https://github.com/ansible-collections/amazon.aws/pull/2093). + - iam_role - ``iam_role.assume_role_policy_document`` is no longer converted + from CamelCase to snake_case (https://github.com/ansible-collections/amazon.aws/pull/2040). + - iam_role_info - ``iam_role.assume_role_policy_document`` is no longer converted + from CamelCase to snake_case (https://github.com/ansible-collections/amazon.aws/pull/2040). + - kms_key - the ``policies`` return value has been renamed to ``key_policies`` + the contents has not been changed (https://github.com/ansible-collections/amazon.aws/pull/2040). + - kms_key_info - the ``policies`` return value has been renamed to ``key_policies`` + the contents has not been changed (https://github.com/ansible-collections/amazon.aws/pull/2040). + - lambda_event - | ``batch_size`` no longer defaults to 100. According to the + boto3 API (https://boto3.amazonaws.com/v1/documentation/api/1.26.78/reference/services/lambda.html#Lambda.Client.create_event_source_mapping), + ``batch_size`` defaults to 10 for sqs sources and to 100 for stream sources + (https://github.com/ansible-collections/amazon.aws/pull/2025). + bugfixes: + - elb_classic_lb - fixes bug where ``proxy_protocol`` not being set or being + set to ``None`` may result in unexpected behaviour or errors (https://github.com/ansible-collections/amazon.aws/pull/2049). + - lambda_event - Fix when ``batch_size`` is greater than 10, by enabling support + for setting ``maximum_batching_window_in_seconds`` (https://github.com/ansible-collections/amazon.aws/pull/2025). + - lambda_event - Retrieve function ARN using AWS API (get_function) instead + of building it with AWS account information (https://github.com/ansible-collections/amazon.aws/issues/1859). + deprecated_features: + - aws_ec2 inventory plugin - removal of the previously deprecated ``include_extra_api_calls`` + option has been assigned to release 9.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2040). + - cloudformation - the ``template`` parameter has been deprecated and will be + removed in a release after 2026-05-01. The ``template_body`` parameter can + be used in conjungtion with the lookup plugin (https://github.com/ansible-collections/amazon.aws/pull/2048). + - iam_policy - removal of the previously deprecated ``policies`` return key + has been assigned to release 9.0.0. Use the ``policy_names`` return key instead + (https://github.com/ansible-collections/amazon.aws/pull/2040). + - module_utils.botocore - the ``boto3`` parameter for ``get_aws_connection_info()`` + will be removed in a release after 2025-05-01. The ``boto3`` parameter has + been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). + - module_utils.botocore - the ``boto3`` parameter for ``get_aws_region()`` will + be removed in a release after 2025-05-01. The ``boto3`` parameter has been + ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). + - module_utils.ec2 - the ``boto3`` parameter for ``get_ec2_security_group_ids_from_names()`` + will be removed in a release after 2025-05-01. The ``boto3`` parameter has + been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). + - rds_param_group - the ``rds_param_group`` module has been renamed to ``rds_instance_param_group``. + The usage of the module has not changed. The rds_param_group alias will be + removed in version 10.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2058). + minor_changes: + - autoscaling_group - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). + - cloudformation - apply automatic retries when paginating through stack events + without a filter (https://github.com/ansible-collections/amazon.aws/pull/2049). + - cloudtrail - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). + - ec2_instance - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). + - ec2_vol - Ensure volume state is not one of ``deleted`` or ``deleting`` when + trying to delete volume, to guaranty idempotency (https://github.com/ansible-collections/amazon.aws/pull/2052). + - ec2_vol - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). + - elb_classic_lb - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). + - kms_key - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). + - lambda_event - Add support for setting the ``maximum_batching_window_in_seconds`` + option (https://github.com/ansible-collections/amazon.aws/pull/2025). + - module_uils/botocore - support sets and tuples of errors as well as lists + (https://github.com/ansible-collections/amazon.aws/pull/1829). + - module_utils/elbv2 - Add support for adding listener with multiple certificates + during ALB creation. Allows elb_application_elb module to handle mentioned + use case. (https://github.com/ansible-collections/amazon.aws/pull/1950). + - module_utils/elbv2 - Add the possibility to update ``SslPolicy``, ``Certificates`` + and ``AlpnPolicy`` for TLS listeners (https://github.com/ansible-collections/amazon.aws/issues/1198). + - rds_instance - Allow passing empty list to ``enable_cloudwatch_logs_exports`` + in order to remove all existing exports (https://github.com/ansible-collections/amazon.aws/pull/1917). + - s3_bucket - refactor s3_bucket module code for improved readability and maintainability + (https://github.com/ansible-collections/amazon.aws/pull/2057). + - s3_object - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). + release_summary: This major release brings several new features, bug fixes, + and deprecated features. It also includes the removal of some functionality + for ``iam_role, iam_role_info`` and ``module_utils.policy`` that were previously + deprecated. We have also removed support for ``ansible-core<2.15``. + removed_features: + - iam_role - the ``iam_role.assume_role_policy_document_raw`` return value has + been deprecated. ``iam_role.assume_role_policy_document`` now returns the + same format as ``iam_role.assume_role_policy_document_raw`` (https://github.com/ansible-collections/amazon.aws/pull/2040). + - iam_role_info - the ``iam_role.assume_role_policy_document_raw`` return value + has been deprecated. ``iam_role.assume_role_policy_document`` now returns + the same format as ``iam_role.assume_role_policy_document_raw`` (https://github.com/ansible-collections/amazon.aws/pull/2040). + - module_utils.policy - the previously deprecated ``sort_json_policy_dict()`` + function has been removed, consider using ``compare_policies()`` instead (https://github.com/ansible-collections/amazon.aws/pull/2052). + fragments: + - 1829-is_boto3_error-tuple.yml + - 1950-elb_application_lb-multiple-listener-certificates-for-alb.yml + - 20231127-module_utils-elbv2-update.yaml + - 20231211-rds_instance_cloudwatch.yml + - 20240208-lambda_event-fix-validate-params.yml + - 20240227-zombies.yml + - 20240325-lambda_event-bugfix.yml + - 20240411-remove-deprecated-sort_json_policy_dict.yml + - 20240502-docs_cleanup.yml + - 20240516-rds_param_group.yml + - 20250513-update-docs.yml + - 2057-s3_bucket-refactor.yml + - 8.0.0-deprecation-removal.yml + - 8.0.0-dev0.yml + - 8.0.0-increase-ansible-core-version.yml + - cloudformation-template.yml + - release_summary.yml + - return_block_update_ec2_1.yml + - sanity-boto3.yml + - sanity-simple.yml + release_date: '2024-05-16' diff --git a/ansible_collections/amazon/aws/docs/docsite/links.yml b/ansible_collections/amazon/aws/docs/docsite/links.yml index 6bdcc680b..e50089d15 100644 --- a/ansible_collections/amazon/aws/docs/docsite/links.yml +++ b/ansible_collections/amazon/aws/docs/docsite/links.yml @@ -7,7 +7,7 @@ # functionality for your collection. edit_on_github: repository: ansible-collections/amazon.aws - branch: stable-7 + branch: stable-8 # If your collection root (the directory containing galaxy.yml) does not coincide with your # repository's root, you have to specify the path to the collection root here. For example, # if the collection root is in a subdirectory ansible_collections/community/REPO_NAME diff --git a/ansible_collections/amazon/aws/docs/docsite/rst/CHANGELOG.rst b/ansible_collections/amazon/aws/docs/docsite/rst/CHANGELOG.rst index 219d962b4..f867fc9e4 100644 --- a/ansible_collections/amazon/aws/docs/docsite/rst/CHANGELOG.rst +++ b/ansible_collections/amazon/aws/docs/docsite/rst/CHANGELOG.rst @@ -4,6 +4,104 @@ amazon.aws Release Notes .. contents:: Topics +v8.0.0 +====== + +Release Summary +--------------- + +This major release brings several new features, bug fixes, and deprecated features. It also includes the removal of some functionality for ``iam_role, iam_role_info`` and ``module_utils.policy`` that were previously deprecated. We have also removed support for ``ansible-core<2.15``. + +Minor Changes +------------- + +- autoscaling_group - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- cloudformation - apply automatic retries when paginating through stack events without a filter (https://github.com/ansible-collections/amazon.aws/pull/2049). +- cloudtrail - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- ec2_instance - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- ec2_vol - Ensure volume state is not one of ``deleted`` or ``deleting`` when trying to delete volume, to guaranty idempotency (https://github.com/ansible-collections/amazon.aws/pull/2052). +- ec2_vol - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- elb_classic_lb - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- kms_key - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). +- lambda_event - Add support for setting the ``maximum_batching_window_in_seconds`` option (https://github.com/ansible-collections/amazon.aws/pull/2025). +- module_uils/botocore - support sets and tuples of errors as well as lists (https://github.com/ansible-collections/amazon.aws/pull/1829). +- module_utils/elbv2 - Add support for adding listener with multiple certificates during ALB creation. Allows elb_application_elb module to handle mentioned use case. (https://github.com/ansible-collections/amazon.aws/pull/1950). +- module_utils/elbv2 - Add the possibility to update ``SslPolicy``, ``Certificates`` and ``AlpnPolicy`` for TLS listeners (https://github.com/ansible-collections/amazon.aws/issues/1198). +- rds_instance - Allow passing empty list to ``enable_cloudwatch_logs_exports`` in order to remove all existing exports (https://github.com/ansible-collections/amazon.aws/pull/1917). +- s3_bucket - refactor s3_bucket module code for improved readability and maintainability (https://github.com/ansible-collections/amazon.aws/pull/2057). +- s3_object - removed unused code (https://github.com/ansible-collections/amazon.aws/pull/1996). + +Breaking Changes / Porting Guide +-------------------------------- + +- amazon.aws collection - Support for ansible-core < 2.15 has been dropped (https://github.com/ansible-collections/amazon.aws/pull/2093). +- iam_role - ``iam_role.assume_role_policy_document`` is no longer converted from CamelCase to snake_case (https://github.com/ansible-collections/amazon.aws/pull/2040). +- iam_role_info - ``iam_role.assume_role_policy_document`` is no longer converted from CamelCase to snake_case (https://github.com/ansible-collections/amazon.aws/pull/2040). +- kms_key - the ``policies`` return value has been renamed to ``key_policies`` the contents has not been changed (https://github.com/ansible-collections/amazon.aws/pull/2040). +- kms_key_info - the ``policies`` return value has been renamed to ``key_policies`` the contents has not been changed (https://github.com/ansible-collections/amazon.aws/pull/2040). +- lambda_event - | ``batch_size`` no longer defaults to 100. According to the boto3 API (https://boto3.amazonaws.com/v1/documentation/api/1.26.78/reference/services/lambda.html#Lambda.Client.create_event_source_mapping), ``batch_size`` defaults to 10 for sqs sources and to 100 for stream sources (https://github.com/ansible-collections/amazon.aws/pull/2025). + +Deprecated Features +------------------- + +- aws_ec2 inventory plugin - removal of the previously deprecated ``include_extra_api_calls`` option has been assigned to release 9.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2040). +- cloudformation - the ``template`` parameter has been deprecated and will be removed in a release after 2026-05-01. The ``template_body`` parameter can be used in conjungtion with the lookup plugin (https://github.com/ansible-collections/amazon.aws/pull/2048). +- iam_policy - removal of the previously deprecated ``policies`` return key has been assigned to release 9.0.0. Use the ``policy_names`` return key instead (https://github.com/ansible-collections/amazon.aws/pull/2040). +- module_utils.botocore - the ``boto3`` parameter for ``get_aws_connection_info()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). +- module_utils.botocore - the ``boto3`` parameter for ``get_aws_region()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). +- module_utils.ec2 - the ``boto3`` parameter for ``get_ec2_security_group_ids_from_names()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). +- rds_param_group - the ``rds_param_group`` module has been renamed to ``rds_instance_param_group``. The usage of the module has not changed. The rds_param_group alias will be removed in version 10.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2058). + +Removed Features (previously deprecated) +---------------------------------------- + +- iam_role - the ``iam_role.assume_role_policy_document_raw`` return value has been deprecated. ``iam_role.assume_role_policy_document`` now returns the same format as ``iam_role.assume_role_policy_document_raw`` (https://github.com/ansible-collections/amazon.aws/pull/2040). +- iam_role_info - the ``iam_role.assume_role_policy_document_raw`` return value has been deprecated. ``iam_role.assume_role_policy_document`` now returns the same format as ``iam_role.assume_role_policy_document_raw`` (https://github.com/ansible-collections/amazon.aws/pull/2040). +- module_utils.policy - the previously deprecated ``sort_json_policy_dict()`` function has been removed, consider using ``compare_policies()`` instead (https://github.com/ansible-collections/amazon.aws/pull/2052). + +Bugfixes +-------- + +- elb_classic_lb - fixes bug where ``proxy_protocol`` not being set or being set to ``None`` may result in unexpected behaviour or errors (https://github.com/ansible-collections/amazon.aws/pull/2049). +- lambda_event - Fix when ``batch_size`` is greater than 10, by enabling support for setting ``maximum_batching_window_in_seconds`` (https://github.com/ansible-collections/amazon.aws/pull/2025). +- lambda_event - Retrieve function ARN using AWS API (get_function) instead of building it with AWS account information (https://github.com/ansible-collections/amazon.aws/issues/1859). + +v7.6.0 +====== + +Release Summary +--------------- + +This release brings several bugfixes, minor changes and some new rds modules (``rds_cluster_param_group``, ``rds_cluster_param_group_info`` and ``rds_engine_versions_info``). It also introduces a deprecation for the ``cloudformation`` module. + +Minor Changes +------------- + +- ec2_instance - add support for ``host`` option in placement.tenancy (https://github.com/ansible-collections/amazon.aws/pull/2026). +- ec2_vol - Ensure volume state is not one of ``deleted`` or ``deleting`` when trying to delete volume, to guaranty idempotency (https://github.com/ansible-collections/amazon.aws/pull/2052). + +Deprecated Features +------------------- + +- cloudformation - the ``template`` parameter has been deprecated and will be removed in a release after 2026-05-01. The ``template_body`` parameter can be used in conjungtion with the lookup plugin (https://github.com/ansible-collections/amazon.aws/pull/2048). +- module_utils.botocore - the ``boto3`` parameter for ``get_aws_connection_info()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). +- module_utils.botocore - the ``boto3`` parameter for ``get_aws_region()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). +- module_utils.ec2 - the ``boto3`` parameter for ``get_ec2_security_group_ids_from_names()`` will be removed in a release after 2025-05-01. The ``boto3`` parameter has been ignored since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2047). + +Bugfixes +-------- + +- iam_managed_policy - fixes bug that causes ``ParamValidationError`` when attempting to delete a policy that's attached to a role or a user (https://github.com/ansible-collections/amazon.aws/issues/2067). +- iam_role_info - fixes bug in handling paths missing the ``/`` prefix and/or suffix (https://github.com/ansible-collections/amazon.aws/issues/2065). +- s3_object - fix idempotency issue when copying object uploaded using multipart upload (https://github.com/ansible-collections/amazon.aws/issues/2016). + +New Modules +----------- + +- rds_cluster_param_group - Manage RDS cluster parameter groups +- rds_cluster_param_group_info - Describes the properties of specific RDS cluster parameter group. +- rds_engine_versions_info - Describes the properties of specific versions of DB engines. + v7.5.0 ====== @@ -244,6 +342,69 @@ New Modules - ec2_import_image_info - Gather information about import virtual machine tasks - rds_global_cluster_info - Obtain information about Aurora global database clusters +v6.5.4 +====== + +Release Summary +--------------- + +This release includes bugfixes for the ``cloudwatchlogs_log_group_info`` module and the inventory plugins. + +Bugfixes +-------- + +- cloudwatchlogs_log_group_info - Implement exponential backoff when making API calls to prevent throttling exceptions (https://github.com/ansible-collections/amazon.aws/issues/2011). +- plugin_utils.inventory - Ensure templated options in lookup plugins are converted (https://github.com/ansible-collections/amazon.aws/issues/1955). + +v6.5.3 +====== + +Release Summary +--------------- + +This release includes bugfixes for the``cloudwatchevent_rule`` module and ``secretsmanager_secret`` lookup plugin. + +Bugfixes +-------- + +- cloudwatchevent_rule - Fix to avoid adding quotes to JSON input for provided input_template (https://github.com/ansible-collections/amazon.aws/pull/1883). +- lookup/secretsmanager_secret - fix the issue when the nested secret is missing and on_missing is set to warn, the lookup was raising an error instead of a warning message (https://github.com/ansible-collections/amazon.aws/issues/1781). + +v6.5.2 +====== + +Release Summary +--------------- + +This release includes a bugfix for the ``amazon.aws.aws_ec2`` inventory plugin when retrieving information for more than 40 instances with ``use_ssm_inventory``. + +Bugfixes +-------- + +- plugins/inventory/aws_ec2 - Fix failure when retrieving information for more than 40 instances with use_ssm_inventory (https://github.com/ansible-collections/amazon.aws/issues/1713). + +v6.5.1 +====== + +Release Summary +--------------- + +This release includes several bugfixes. + +Minor Changes +------------- + +- ec2_vpc_subnet - use ``wait_timeout`` to also control maximum time to wait for initial creation of subnets (https://github.com/ansible-collections/amazon.aws/pull/1848). + +Bugfixes +-------- + +- ec2_instance - retry API call if we get ``InvalidInstanceID.NotFound`` error (https://github.com/ansible-collections/amazon.aws/pull/1650). +- ec2_vpc_subnet - cleanly handle failure when subnet isn't created in time (https://github.com/ansible-collections/amazon.aws/pull/1848). +- s3_object - Fix typo that caused false deprecation warning when setting ``overwrite=latest`` (https://github.com/ansible-collections/amazon.aws/pull/1847). +- s3_object - fixed ``NoSuchTagSet`` error when S3 endpoint doesn't support tags (https://github.com/ansible-collections/amazon.aws/issues/1607). +- s3_object - when doing a put and specifying ``Content-Type`` in metadata, this module (since 6.0.0) erroneously set the ``Content-Type`` to ``None`` causing the put to fail. Fix now correctly honours the specified ``Content-Type`` (https://github.com/ansible-collections/amazon.aws/issues/1881). + v6.5.0 ====== diff --git a/ansible_collections/amazon/aws/meta/runtime.yml b/ansible_collections/amazon/aws/meta/runtime.yml index 37e524c9d..94614615f 100644 --- a/ansible_collections/amazon/aws/meta/runtime.yml +++ b/ansible_collections/amazon/aws/meta/runtime.yml @@ -1,5 +1,5 @@ --- -requires_ansible: ">=2.13.0" +requires_ansible: ">=2.15.0" action_groups: aws: - autoscaling_group @@ -98,10 +98,14 @@ action_groups: - lambda_policy - rds_cluster - rds_cluster_info - - rds_global_cluster_info + - rds_cluster_param_group + - rds_cluster_param_group_info - rds_cluster_snapshot + - rds_engine_versions_info + - rds_global_cluster_info - rds_instance - rds_instance_info + - rds_instance_param_group - rds_instance_snapshot - rds_option_group - rds_option_group_info @@ -155,6 +159,13 @@ plugin_routing: execute_lambda: # Deprecation for this alias should not *start* prior to 2024-09-01 redirect: amazon.aws.lambda_execute + rds_param_group: + redirect: amazon.aws.rds_instance_param_group + deprecation: + removal_version: 10.0.0 + warning_text: >- + rds_param_group has been renamed to rds_instance_param_group. + Please update your tasks. lookup: aws_ssm: # Deprecation for this alias should not *start* prior to 2024-09-01 diff --git a/ansible_collections/amazon/aws/plugins/inventory/aws_ec2.py b/ansible_collections/amazon/aws/plugins/inventory/aws_ec2.py index 8b9796b7f..bf0bc50b1 100644 --- a/ansible_collections/amazon/aws/plugins/inventory/aws_ec2.py +++ b/ansible_collections/amazon/aws/plugins/inventory/aws_ec2.py @@ -633,17 +633,17 @@ class InventoryModule(AWSInventoryBase): """ instances = [] ids_to_ignore = [] - for filter in exclude_filters: + for filter_dict in exclude_filters: for i in self._get_instances_by_region( regions, - ansible_dict_to_boto3_filter_list(filter), + ansible_dict_to_boto3_filter_list(filter_dict), strict_permissions, ): ids_to_ignore.append(i["InstanceId"]) - for filter in include_filters: + for filter_dict in include_filters: for i in self._get_instances_by_region( regions, - ansible_dict_to_boto3_filter_list(filter), + ansible_dict_to_boto3_filter_list(filter_dict), strict_permissions, ): if i["InstanceId"] not in ids_to_ignore: @@ -805,8 +805,8 @@ class InventoryModule(AWSInventoryBase): if self.get_option("include_extra_api_calls"): self.display.deprecate( - "The include_extra_api_calls option has been deprecated and will be removed in release 6.0.0.", - date="2024-09-01", + "The include_extra_api_calls option has been deprecated and will be removed in release 9.0.0.", + version="9.0.0", collection_name="amazon.aws", ) diff --git a/ansible_collections/amazon/aws/plugins/lookup/aws_collection_constants.py b/ansible_collections/amazon/aws/plugins/lookup/aws_collection_constants.py index 35f05c94e..c03f14450 100644 --- a/ansible_collections/amazon/aws/plugins/lookup/aws_collection_constants.py +++ b/ansible_collections/amazon/aws/plugins/lookup/aws_collection_constants.py @@ -49,7 +49,7 @@ except ImportError: class LookupModule(LookupBase): - def lookup_constant(self, name): + def lookup_constant(self, name): # pylint: disable=too-many-return-statements if name == "MINIMUM_BOTOCORE_VERSION": return botocore_utils.MINIMUM_BOTOCORE_VERSION if name == "MINIMUM_BOTO3_VERSION": diff --git a/ansible_collections/amazon/aws/plugins/lookup/aws_service_ip_ranges.py b/ansible_collections/amazon/aws/plugins/lookup/aws_service_ip_ranges.py index c01f583f0..d5ced781b 100644 --- a/ansible_collections/amazon/aws/plugins/lookup/aws_service_ip_ranges.py +++ b/ansible_collections/amazon/aws/plugins/lookup/aws_service_ip_ranges.py @@ -44,13 +44,10 @@ _raw: import json +import ansible.module_utils.six.moves.urllib.error +import ansible.module_utils.urls from ansible.errors import AnsibleLookupError from ansible.module_utils._text import to_native -from ansible.module_utils.six.moves.urllib.error import HTTPError -from ansible.module_utils.six.moves.urllib.error import URLError -from ansible.module_utils.urls import ConnectionError -from ansible.module_utils.urls import SSLValidationError -from ansible.module_utils.urls import open_url from ansible.plugins.lookup import LookupBase @@ -64,19 +61,19 @@ class LookupModule(LookupBase): ip_prefix_label = "ip_prefix" try: - resp = open_url("https://ip-ranges.amazonaws.com/ip-ranges.json") + resp = ansible.module_utils.urls.open_url("https://ip-ranges.amazonaws.com/ip-ranges.json") amazon_response = json.load(resp)[prefixes_label] except getattr(json.decoder, "JSONDecodeError", ValueError) as e: # on Python 3+, json.decoder.JSONDecodeError is raised for bad # JSON. On 2.x it's a ValueError raise AnsibleLookupError(f"Could not decode AWS IP ranges: {to_native(e)}") - except HTTPError as e: + except ansible.module_utils.six.moves.urllib.error.HTTPError as e: raise AnsibleLookupError(f"Received HTTP error while pulling IP ranges: {to_native(e)}") - except SSLValidationError as e: + except ansible.module_utils.urls.SSLValidationError as e: raise AnsibleLookupError(f"Error validating the server's certificate for: {to_native(e)}") - except URLError as e: + except ansible.module_utils.six.moves.urllib.error.URLError as e: raise AnsibleLookupError(f"Failed look up IP range service: {to_native(e)}") - except ConnectionError as e: + except ansible.module_utils.urls.ConnectionError as e: raise AnsibleLookupError(f"Error connecting to IP range service: {to_native(e)}") if "region" in kwargs: diff --git a/ansible_collections/amazon/aws/plugins/lookup/secretsmanager_secret.py b/ansible_collections/amazon/aws/plugins/lookup/secretsmanager_secret.py index 06ad10be5..254182f30 100644 --- a/ansible_collections/amazon/aws/plugins/lookup/secretsmanager_secret.py +++ b/ansible_collections/amazon/aws/plugins/lookup/secretsmanager_secret.py @@ -182,9 +182,9 @@ class LookupModule(AWSLookupBase): secrets = {} for term in terms: try: - for object in _list_secrets(client, term): - if "SecretList" in object: - for secret_obj in object["SecretList"]: + for secret_wrapper in _list_secrets(client, term): + if "SecretList" in secret_wrapper: + for secret_obj in secret_wrapper["SecretList"]: secrets.update( { secret_obj["Name"]: self.get_secret_value( diff --git a/ansible_collections/amazon/aws/plugins/module_utils/acm.py b/ansible_collections/amazon/aws/plugins/module_utils/acm.py index ab3a9f073..4febe8743 100644 --- a/ansible_collections/amazon/aws/plugins/module_utils/acm.py +++ b/ansible_collections/amazon/aws/plugins/module_utils/acm.py @@ -40,7 +40,7 @@ def acm_catch_boto_exception(func): return func(*args, **kwargs) except is_boto3_error_code(ignore_error_codes): return None - except (BotoCoreError, ClientError) as e: + except (BotoCoreError, ClientError) as e: # pylint: disable=duplicate-except if not module: raise module.fail_json_aws(e, msg=error) diff --git a/ansible_collections/amazon/aws/plugins/module_utils/botocore.py b/ansible_collections/amazon/aws/plugins/module_utils/botocore.py index 858e4e593..d5ad7ea83 100644 --- a/ansible_collections/amazon/aws/plugins/module_utils/botocore.py +++ b/ansible_collections/amazon/aws/plugins/module_utils/botocore.py @@ -202,7 +202,14 @@ def _aws_region(params): return None -def get_aws_region(module, boto3=None): +def get_aws_region(module, boto3=None): # pylint: disable=redefined-outer-name + if boto3 is not None: + module.deprecate( + "get_aws_region(): the boto3 parameter will be removed in a release after 2025-05-01. " + "The parameter has been ignored since release 4.0.0.", + date="2025-05-01", + collection_name="amazon.aws", + ) try: return _aws_region(module.params) except AnsibleBotocoreError as e: @@ -266,7 +273,14 @@ def _aws_connection_info(params): return region, endpoint_url, boto_params -def get_aws_connection_info(module, boto3=None): +def get_aws_connection_info(module, boto3=None): # pylint: disable=redefined-outer-name + if boto3 is not None: + module.deprecate( + "get_aws_connection_info(): the boto3 parameter will be removed in a release after 2025-05-01. " + "The parameter has been ignored since release 4.0.0.", + date="2025-05-01", + collection_name="amazon.aws", + ) try: return _aws_connection_info(module.params) except AnsibleBotocoreError as e: @@ -335,7 +349,7 @@ def is_boto3_error_code(code, e=None): import sys dummy, e, dummy = sys.exc_info() - if not isinstance(code, list): + if not isinstance(code, (list, tuple, set)): code = [code] if isinstance(e, ClientError) and e.response["Error"]["Code"] in code: return ClientError diff --git a/ansible_collections/amazon/aws/plugins/module_utils/common.py b/ansible_collections/amazon/aws/plugins/module_utils/common.py index 41ba80231..e802a8d80 100644 --- a/ansible_collections/amazon/aws/plugins/module_utils/common.py +++ b/ansible_collections/amazon/aws/plugins/module_utils/common.py @@ -4,7 +4,7 @@ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) AMAZON_AWS_COLLECTION_NAME = "amazon.aws" -AMAZON_AWS_COLLECTION_VERSION = "7.5.0" +AMAZON_AWS_COLLECTION_VERSION = "8.0.0" _collection_info_context = { diff --git a/ansible_collections/amazon/aws/plugins/module_utils/ec2.py b/ansible_collections/amazon/aws/plugins/module_utils/ec2.py index afe8208f5..f3aa9f3f1 100644 --- a/ansible_collections/amazon/aws/plugins/module_utils/ec2.py +++ b/ansible_collections/amazon/aws/plugins/module_utils/ec2.py @@ -39,6 +39,7 @@ up in this module because "that's where the AWS code was" (originally). import re +import ansible.module_utils.common.warnings as ansible_warnings from ansible.module_utils.ansible_release import __version__ # Used to live here, moved into ansible.module_utils.common.dict_transformations @@ -72,7 +73,6 @@ from .modules import aws_argument_spec as ec2_argument_spec # pylint: disable=u # Used to live here, moved into ansible_collections.amazon.aws.plugins.module_utils.policy from .policy import _py3cmp as py3cmp # pylint: disable=unused-import from .policy import compare_policies # pylint: disable=unused-import -from .policy import sort_json_policy_dict # pylint: disable=unused-import # Used to live here, moved into ansible_collections.amazon.aws.plugins.module_utils.retries from .retries import AWSRetry # pylint: disable=unused-import @@ -99,12 +99,22 @@ def get_ec2_security_group_ids_from_names(sec_group_list, ec2_connection, vpc_id a try block """ - def get_sg_name(sg, boto3=None): + def get_sg_name(sg): return str(sg["GroupName"]) - def get_sg_id(sg, boto3=None): + def get_sg_id(sg): return str(sg["GroupId"]) + if boto3 is not None: + ansible_warnings.deprecate( + ( + "The boto3 parameter for get_ec2_security_group_ids_from_names() has been deprecated." + "The parameter has been ignored since release 4.0.0." + ), + date="2025-05-01", + collection_name="amazon.aws", + ) + sec_group_id_list = [] if isinstance(sec_group_list, string_types): @@ -124,7 +134,7 @@ def get_ec2_security_group_ids_from_names(sec_group_list, ec2_connection, vpc_id else: all_sec_groups = ec2_connection.describe_security_groups()["SecurityGroups"] - unmatched = set(sec_group_list).difference(str(get_sg_name(all_sg, boto3)) for all_sg in all_sec_groups) + unmatched = set(sec_group_list).difference(str(get_sg_name(all_sg)) for all_sg in all_sec_groups) sec_group_name_list = list(set(sec_group_list) - set(unmatched)) if len(unmatched) > 0: diff --git a/ansible_collections/amazon/aws/plugins/module_utils/elbv2.py b/ansible_collections/amazon/aws/plugins/module_utils/elbv2.py index 758eb9a33..3da2114c7 100644 --- a/ansible_collections/amazon/aws/plugins/module_utils/elbv2.py +++ b/ansible_collections/amazon/aws/plugins/module_utils/elbv2.py @@ -449,7 +449,7 @@ class ApplicationLoadBalancer(ElasticLoadBalancerV2): if module.params.get("security_groups") is not None: try: self.security_groups = AWSRetry.jittered_backoff()(get_ec2_security_group_ids_from_names)( - module.params.get("security_groups"), self.connection_ec2, boto3=True + module.params.get("security_groups"), self.connection_ec2 ) except ValueError as e: self.module.fail_json(msg=str(e), exception=traceback.format_exc()) @@ -775,6 +775,9 @@ class ELBListeners: dict((x, listener_dict[x]) for x in listener_dict if listener_dict[x] is not None) for listener_dict in listeners ] + # AlpnPolicy is set as str into input but API is expected a list + # Transform a single item into a list of one element + listeners = self._ensure_listeners_alpn_policy(listeners) self.listeners = self._ensure_listeners_default_action_has_arn(listeners) self.current_listeners = self._get_elb_listeners() self.purge_listeners = module.params.get("purge_listeners") @@ -805,6 +808,16 @@ class ELBListeners: except (BotoCoreError, ClientError) as e: self.module.fail_json_aws(e) + @staticmethod + def _ensure_listeners_alpn_policy(listeners): + result = [] + for l in listeners: + update_listener = deepcopy(l) + if "AlpnPolicy" in l: + update_listener["AlpnPolicy"] = [update_listener["AlpnPolicy"]] + result.append(update_listener) + return result + def _ensure_listeners_default_action_has_arn(self, listeners): """ If a listener DefaultAction has been passed with a Target Group Name instead of ARN, lookup the ARN and @@ -863,7 +876,8 @@ class ELBListeners: return listeners_to_add, listeners_to_modify, listeners_to_delete - def _compare_listener(self, current_listener, new_listener): + @staticmethod + def _compare_listener(current_listener, new_listener): """ Compare two listeners. @@ -882,43 +896,53 @@ class ELBListeners: if current_listener["Protocol"] != new_listener["Protocol"]: modified_listener["Protocol"] = new_listener["Protocol"] - # If Protocol is HTTPS, check additional attributes - if current_listener["Protocol"] == "HTTPS" and new_listener["Protocol"] == "HTTPS": - # Cert - if current_listener["SslPolicy"] != new_listener["SslPolicy"]: - modified_listener["SslPolicy"] = new_listener["SslPolicy"] - if ( - current_listener["Certificates"][0]["CertificateArn"] - != new_listener["Certificates"][0]["CertificateArn"] + # If Protocol is HTTPS or TLS, check additional attributes + # SslPolicy + new_ssl_policy = new_listener.get("SslPolicy") + if new_ssl_policy and new_listener["Protocol"] in ("HTTPS", "TLS"): + current_ssl_policy = current_listener.get("SslPolicy") + if not current_ssl_policy or (current_ssl_policy and current_ssl_policy != new_ssl_policy): + modified_listener["SslPolicy"] = new_ssl_policy + + # Certificates + new_certificates = new_listener.get("Certificates") + if new_certificates and new_listener["Protocol"] in ("HTTPS", "TLS"): + current_certificates = current_listener.get("Certificates") + if not current_certificates or ( + current_certificates + and current_certificates[0]["CertificateArn"] != new_certificates[0]["CertificateArn"] ): - modified_listener["Certificates"] = [] - modified_listener["Certificates"].append({}) - modified_listener["Certificates"][0]["CertificateArn"] = new_listener["Certificates"][0][ - "CertificateArn" - ] - elif current_listener["Protocol"] != "HTTPS" and new_listener["Protocol"] == "HTTPS": - modified_listener["SslPolicy"] = new_listener["SslPolicy"] - modified_listener["Certificates"] = [] - modified_listener["Certificates"].append({}) - modified_listener["Certificates"][0]["CertificateArn"] = new_listener["Certificates"][0]["CertificateArn"] + modified_listener["Certificates"] = [{"CertificateArn": new_certificates[0]["CertificateArn"]}] # Default action # If the lengths of the actions are the same, we'll have to verify that the # contents of those actions are the same - if len(current_listener["DefaultActions"]) == len(new_listener["DefaultActions"]): - current_actions_sorted = _sort_actions(current_listener["DefaultActions"]) - new_actions_sorted = _sort_actions(new_listener["DefaultActions"]) - - new_actions_sorted_no_secret = [_prune_secret(i) for i in new_actions_sorted] - - if [_prune_ForwardConfig(i) for i in current_actions_sorted] != [ - _prune_ForwardConfig(i) for i in new_actions_sorted_no_secret - ]: - modified_listener["DefaultActions"] = new_listener["DefaultActions"] - # If the action lengths are different, then replace with the new actions - else: - modified_listener["DefaultActions"] = new_listener["DefaultActions"] + current_default_actions = current_listener.get("DefaultActions") + new_default_actions = new_listener.get("DefaultActions") + if new_default_actions: + if current_default_actions and len(current_default_actions) == len(new_default_actions): + current_actions_sorted = _sort_actions(current_default_actions) + new_actions_sorted = _sort_actions(new_default_actions) + + new_actions_sorted_no_secret = [_prune_secret(i) for i in new_actions_sorted] + + if [_prune_ForwardConfig(i) for i in current_actions_sorted] != [ + _prune_ForwardConfig(i) for i in new_actions_sorted_no_secret + ]: + modified_listener["DefaultActions"] = new_default_actions + # If the action lengths are different, then replace with the new actions + else: + modified_listener["DefaultActions"] = new_default_actions + + new_alpn_policy = new_listener.get("AlpnPolicy") + if new_alpn_policy: + if current_listener["Protocol"] == "TLS" and new_listener["Protocol"] == "TLS": + current_alpn_policy = current_listener.get("AlpnPolicy") + if not current_alpn_policy or current_alpn_policy[0] != new_alpn_policy[0]: + modified_listener["AlpnPolicy"] = new_alpn_policy + elif current_listener["Protocol"] != "TLS" and new_listener["Protocol"] == "TLS": + modified_listener["AlpnPolicy"] = new_alpn_policy if modified_listener: return modified_listener @@ -946,7 +970,23 @@ class ELBListener: # Rules is not a valid parameter for create_listener if "Rules" in self.listener: self.listener.pop("Rules") - AWSRetry.jittered_backoff()(self.connection.create_listener)(LoadBalancerArn=self.elb_arn, **self.listener) + + # handle multiple certs by adding only 1 cert during listener creation and make calls to add_listener_certificates to add other certs + listener_certificates = self.listener.get("Certificates", []) + first_certificate, other_certs = [], [] + if len(listener_certificates) > 0: + first_certificate, other_certs = listener_certificates[0], listener_certificates[1:] + self.listener["Certificates"] = [first_certificate] + # create listener + create_listener_result = AWSRetry.jittered_backoff()(self.connection.create_listener)( + LoadBalancerArn=self.elb_arn, **self.listener + ) + # only one cert can be specified per call to add_listener_certificates + for cert in other_certs: + AWSRetry.jittered_backoff()(self.connection.add_listener_certificates)( + ListenerArn=create_listener_result["Listeners"][0]["ListenerArn"], Certificates=[cert] + ) + except (BotoCoreError, ClientError) as e: self.module.fail_json_aws(e) diff --git a/ansible_collections/amazon/aws/plugins/module_utils/iam.py b/ansible_collections/amazon/aws/plugins/module_utils/iam.py index 56920d53e..155a63152 100644 --- a/ansible_collections/amazon/aws/plugins/module_utils/iam.py +++ b/ansible_collections/amazon/aws/plugins/module_utils/iam.py @@ -49,14 +49,14 @@ def detach_iam_group_policy(client, arn, group): @IAMErrorHandler.deletion_error_handler("detach role policy") @AWSRetry.jittered_backoff() def detach_iam_role_policy(client, arn, role): - client.detach_group_policy(PolicyArn=arn, RoleName=role) + client.detach_role_policy(PolicyArn=arn, RoleName=role) return True @IAMErrorHandler.deletion_error_handler("detach user policy") @AWSRetry.jittered_backoff() def detach_iam_user_policy(client, arn, user): - client.detach_group_policy(PolicyArn=arn, UserName=user) + client.detach_user_policy(PolicyArn=arn, UserName=user) return True @@ -446,8 +446,6 @@ def normalize_iam_access_keys(access_keys: BotoResourceList) -> AnsibleAWSResour def normalize_iam_instance_profile(profile: BotoResource) -> AnsibleAWSResource: """ Converts a boto3 format IAM instance profile into "Ansible" format - - _v7_compat is deprecated and will be removed in release after 2025-05-01 DO NOT USE. """ transforms = {"Roles": _normalize_iam_roles} transformed_profile = boto3_resource_to_ansible_dict(profile, nested_transforms=transforms) @@ -458,10 +456,10 @@ def normalize_iam_role(role: BotoResource, _v7_compat: bool = False) -> AnsibleA """ Converts a boto3 format IAM instance role into "Ansible" format - _v7_compat is deprecated and will be removed in release after 2025-05-01 DO NOT USE. + _v7_compat is deprecated and will be removed in release after 2026-05-01 DO NOT USE. """ transforms = {"InstanceProfiles": _normalize_iam_instance_profiles} - ignore_list = [] if _v7_compat else ["AssumeRolePolicyDocument"] + ignore_list = ["AssumeRolePolicyDocument"] transformed_role = boto3_resource_to_ansible_dict(role, nested_transforms=transforms, ignore_list=ignore_list) if _v7_compat and role.get("AssumeRolePolicyDocument"): transformed_role["assume_role_policy_document_raw"] = role["AssumeRolePolicyDocument"] diff --git a/ansible_collections/amazon/aws/plugins/module_utils/modules.py b/ansible_collections/amazon/aws/plugins/module_utils/modules.py index 8a2ff3c0b..82a81811d 100644 --- a/ansible_collections/amazon/aws/plugins/module_utils/modules.py +++ b/ansible_collections/amazon/aws/plugins/module_utils/modules.py @@ -84,11 +84,11 @@ class AnsibleAWSModule: def __init__(self, **kwargs): local_settings = {} - for key in AnsibleAWSModule.default_settings: + for key, default_value in AnsibleAWSModule.default_settings.items(): try: local_settings[key] = kwargs.pop(key) except KeyError: - local_settings[key] = AnsibleAWSModule.default_settings[key] + local_settings[key] = default_value self.settings = local_settings if local_settings["default_args"]: @@ -192,21 +192,21 @@ class AnsibleAWSModule: return self._module.md5(*args, **kwargs) def client(self, service, retry_decorator=None, **extra_params): - region, endpoint_url, aws_connect_kwargs = get_aws_connection_info(self, boto3=True) + region, endpoint_url, aws_connect_kwargs = get_aws_connection_info(self) kw_args = dict(region=region, endpoint=endpoint_url, **aws_connect_kwargs) kw_args.update(extra_params) conn = boto3_conn(self, conn_type="client", resource=service, **kw_args) return conn if retry_decorator is None else RetryingBotoClientWrapper(conn, retry_decorator) def resource(self, service, **extra_params): - region, endpoint_url, aws_connect_kwargs = get_aws_connection_info(self, boto3=True) + region, endpoint_url, aws_connect_kwargs = get_aws_connection_info(self) kw_args = dict(region=region, endpoint=endpoint_url, **aws_connect_kwargs) kw_args.update(extra_params) return boto3_conn(self, conn_type="resource", resource=service, **kw_args) @property def region(self): - return get_aws_region(self, True) + return get_aws_region(self) def fail_json_aws(self, exception, msg=None, **kwargs): """call fail_json with processed exception diff --git a/ansible_collections/amazon/aws/plugins/module_utils/policy.py b/ansible_collections/amazon/aws/plugins/module_utils/policy.py index 60b096f84..61b5edc1c 100644 --- a/ansible_collections/amazon/aws/plugins/module_utils/policy.py +++ b/ansible_collections/amazon/aws/plugins/module_utils/policy.py @@ -30,7 +30,6 @@ from functools import cmp_to_key -import ansible.module_utils.common.warnings as ansible_warnings from ansible.module_utils._text import to_text from ansible.module_utils.six import binary_type from ansible.module_utils.six import string_types @@ -151,59 +150,3 @@ def compare_policies(current_policy, new_policy, default_version="2008-10-17"): new_policy.setdefault("Version", default_version) return set(_hashable_policy(new_policy, [])) != set(_hashable_policy(current_policy, [])) - - -def sort_json_policy_dict(policy_dict): - """ - DEPRECATED - will be removed in amazon.aws 8.0.0 - - Sort any lists in an IAM JSON policy so that comparison of two policies with identical values but - different orders will return true - Args: - policy_dict (dict): Dict representing IAM JSON policy. - Basic Usage: - >>> my_iam_policy = {'Principle': {'AWS':["31","7","14","101"]} - >>> sort_json_policy_dict(my_iam_policy) - Returns: - Dict: Will return a copy of the policy as a Dict but any List will be sorted - { - 'Principle': { - 'AWS': [ '7', '14', '31', '101' ] - } - } - """ - - ansible_warnings.deprecate( - ( - "amazon.aws.module_utils.policy.sort_json_policy_dict has been deprecated, consider using " - "amazon.aws.module_utils.policy.compare_policies instead" - ), - version="8.0.0", - collection_name="amazon.aws", - ) - - def value_is_list(my_list): - checked_list = [] - for item in my_list: - if isinstance(item, dict): - checked_list.append(sort_json_policy_dict(item)) - elif isinstance(item, list): - checked_list.append(value_is_list(item)) - else: - checked_list.append(item) - - # Sort list. If it's a list of dictionaries, sort by tuple of key-value - # pairs, since Python 3 doesn't allow comparisons such as `<` between dictionaries. - checked_list.sort(key=lambda x: sorted(x.items()) if isinstance(x, dict) else x) - return checked_list - - ordered_policy_dict = {} - for key, value in policy_dict.items(): - if isinstance(value, dict): - ordered_policy_dict[key] = sort_json_policy_dict(value) - elif isinstance(value, list): - ordered_policy_dict[key] = value_is_list(value) - else: - ordered_policy_dict[key] = value - - return ordered_policy_dict diff --git a/ansible_collections/amazon/aws/plugins/module_utils/rds.py b/ansible_collections/amazon/aws/plugins/module_utils/rds.py index 85cde2e4e..20e0ae5e0 100644 --- a/ansible_collections/amazon/aws/plugins/module_utils/rds.py +++ b/ansible_collections/amazon/aws/plugins/module_utils/rds.py @@ -5,6 +5,9 @@ from collections import namedtuple from time import sleep +from typing import Any +from typing import Dict +from typing import List try: from botocore.exceptions import BotoCoreError @@ -16,6 +19,8 @@ except ImportError: from ansible.module_utils._text import to_text from ansible.module_utils.common.dict_transformations import snake_dict_to_camel_dict +from .botocore import is_boto3_error_code +from .core import AnsibleAWSModule from .retries import AWSRetry from .tagging import ansible_dict_to_boto3_tag_list from .tagging import boto3_tag_list_to_ansible_dict @@ -440,3 +445,39 @@ def update_iam_roles(client, module, instance_id, roles_to_add, roles_to_remove) params = {"DBInstanceIdentifier": instance_id, "RoleArn": role["role_arn"], "FeatureName": role["feature_name"]} _result, changed = call_method(client, module, method_name="add_role_to_db_instance", parameters=params) return changed + + +@AWSRetry.jittered_backoff() +def describe_db_cluster_parameter_groups( + module: AnsibleAWSModule, connection: Any, group_name: str +) -> List[Dict[str, Any]]: + result = [] + try: + params = {} + if group_name is not None: + params["DBClusterParameterGroupName"] = group_name + paginator = connection.get_paginator("describe_db_cluster_parameter_groups") + result = paginator.paginate(**params).build_full_result()["DBClusterParameterGroups"] + except is_boto3_error_code("DBParameterGroupNotFound"): + pass + except ClientError as e: # pylint: disable=duplicate-except + module.fail_json_aws(e, msg="Couldn't access parameter groups information") + return result + + +@AWSRetry.jittered_backoff() +def describe_db_cluster_parameters( + module: AnsibleAWSModule, connection: Any, group_name: str, source: str = "all" +) -> List[Dict[str, Any]]: + result = [] + try: + paginator = connection.get_paginator("describe_db_cluster_parameters") + params = {"DBClusterParameterGroupName": group_name} + if source != "all": + params["Source"] = source + result = paginator.paginate(**params).build_full_result()["Parameters"] + except is_boto3_error_code("DBParameterGroupNotFound"): + pass + except ClientError as e: # pylint: disable=duplicate-except + module.fail_json_aws(e, msg="Couldn't access RDS cluster parameters information") + return result diff --git a/ansible_collections/amazon/aws/plugins/module_utils/s3.py b/ansible_collections/amazon/aws/plugins/module_utils/s3.py index 73297ffc7..961f36f22 100644 --- a/ansible_collections/amazon/aws/plugins/module_utils/s3.py +++ b/ansible_collections/amazon/aws/plugins/module_utils/s3.py @@ -58,7 +58,7 @@ def calculate_etag(module, filename, etag, s3, bucket, obj, version=None): if not HAS_MD5: return None - if "-" in etag: + if etag is not None and "-" in etag: # Multi-part ETag; a hash of the hashes of each part. parts = int(etag[1:-1].split("-")[1]) try: @@ -73,7 +73,7 @@ def calculate_etag_content(module, content, etag, s3, bucket, obj, version=None) if not HAS_MD5: return None - if "-" in etag: + if etag is not None and "-" in etag: # Multi-part ETag; a hash of the hashes of each part. parts = int(etag[1:-1].split("-")[1]) try: diff --git a/ansible_collections/amazon/aws/plugins/modules/autoscaling_group.py b/ansible_collections/amazon/aws/plugins/modules/autoscaling_group.py index fcd89b467..520bf9320 100644 --- a/ansible_collections/amazon/aws/plugins/modules/autoscaling_group.py +++ b/ansible_collections/amazon/aws/plugins/modules/autoscaling_group.py @@ -668,25 +668,6 @@ from ansible_collections.amazon.aws.plugins.module_utils.modules import AnsibleA from ansible_collections.amazon.aws.plugins.module_utils.retries import AWSRetry from ansible_collections.amazon.aws.plugins.module_utils.transformation import scrub_none_parameters -ASG_ATTRIBUTES = ( - "AvailabilityZones", - "DefaultCooldown", - "DesiredCapacity", - "HealthCheckGracePeriod", - "HealthCheckType", - "LaunchConfigurationName", - "LoadBalancerNames", - "MaxInstanceLifetime", - "MaxSize", - "MinSize", - "AutoScalingGroupName", - "PlacementGroup", - "TerminationPolicies", - "VPCZoneIdentifier", -) - -INSTANCE_ATTRIBUTES = ("instance_id", "health_status", "lifecycle_state", "launch_config_name") - backoff_params = dict(retries=10, delay=3, backoff=1.5) @@ -1109,7 +1090,7 @@ def wait_for_target_group(asg_connection, group_name): def suspend_processes(ec2_connection, as_group): - suspend_processes = set(module.params.get("suspend_processes")) + processes_to_suspend = set(module.params.get("suspend_processes")) try: suspended_processes = set([p["ProcessName"] for p in as_group["SuspendedProcesses"]]) @@ -1117,15 +1098,15 @@ def suspend_processes(ec2_connection, as_group): # New ASG being created, no suspended_processes defined yet suspended_processes = set() - if suspend_processes == suspended_processes: + if processes_to_suspend == suspended_processes: return False - resume_processes = list(suspended_processes - suspend_processes) + resume_processes = list(suspended_processes - processes_to_suspend) if resume_processes: resume_asg_processes(ec2_connection, module.params.get("name"), resume_processes) - if suspend_processes: - suspend_asg_processes(ec2_connection, module.params.get("name"), list(suspend_processes)) + if processes_to_suspend: + suspend_asg_processes(ec2_connection, module.params.get("name"), list(processes_to_suspend)) return True diff --git a/ansible_collections/amazon/aws/plugins/modules/cloudformation.py b/ansible_collections/amazon/aws/plugins/modules/cloudformation.py index ae2e78068..49392fde0 100644 --- a/ansible_collections/amazon/aws/plugins/modules/cloudformation.py +++ b/ansible_collections/amazon/aws/plugins/modules/cloudformation.py @@ -57,6 +57,8 @@ options: must be specified (but only one of them). - If I(state=present), the stack does exist, and neither I(template), I(template_body) nor I(template_url) are specified, the previous template will be reused. + - The I(template) parameter has been deprecated and will be remove in a release after + 2026-05-01. It is recommended to use I(template_body) with the lookup plugin. type: path notification_arns: description: @@ -172,7 +174,9 @@ EXAMPLES = r""" state: "present" region: "us-east-1" disable_rollback: true - template: "files/cloudformation-example.json" + # The template parameter has been deprecated, use template_body with lookup instead. + # template: "files/cloudformation-example.json" + template_body: "{{ lookup('file', 'cloudformation-example.json') }}" template_parameters: KeyName: "jmartin" DiskType: "ephemeral" @@ -188,7 +192,9 @@ EXAMPLES = r""" state: "present" region: "us-east-1" disable_rollback: true - template: "roles/cloudformation/files/cloudformation-example.json" + # The template parameter has been deprecated, use template_body with lookup instead. + # template: "roles/cloudformation/files/cloudformation-example.json" + template_body: "{{ lookup('file', 'cloudformation-example.json') }}" role_arn: 'arn:aws:iam::123456789012:role/cloudformation-iam-role' - name: delete a stack @@ -339,9 +345,17 @@ from ansible_collections.amazon.aws.plugins.module_utils.modules import AnsibleA from ansible_collections.amazon.aws.plugins.module_utils.retries import AWSRetry from ansible_collections.amazon.aws.plugins.module_utils.tagging import ansible_dict_to_boto3_tag_list -# Set a default, mostly for our integration tests. This will be overridden in -# the main() loop to match the parameters we're passed -retry_decorator = AWSRetry.jittered_backoff() + +@AWSRetry.jittered_backoff() +def _search_events(cfn, stack_name, events_limit, token_filter): + pg = cfn.get_paginator("describe_stack_events").paginate( + StackName=stack_name, + PaginationConfig={"MaxItems": events_limit}, + ) + if token_filter is None: + return list(pg.search("StackEvents[*]")) + + return list(pg.search(f"StackEvents[?ClientRequestToken == '{token_filter}']")) def get_stack_events(cfn, stack_name, events_limit, token_filter=None): @@ -349,13 +363,7 @@ def get_stack_events(cfn, stack_name, events_limit, token_filter=None): ret = {"events": [], "log": []} try: - pg = cfn.get_paginator("describe_stack_events").paginate( - StackName=stack_name, PaginationConfig={"MaxItems": events_limit} - ) - if token_filter is not None: - events = list(retry_decorator(pg.search)(f"StackEvents[?ClientRequestToken == '{token_filter}']")) - else: - events = list(pg.search("StackEvents[*]")) + events = _search_events(cfn, stack_name, events_limit, token_filter) except is_boto3_error_message("does not exist"): ret["log"].append("Stack does not exist.") return ret @@ -640,7 +648,13 @@ def main(): stack_name=dict(required=True), template_parameters=dict(required=False, type="dict", default={}), state=dict(default="present", choices=["present", "absent"]), - template=dict(default=None, required=False, type="path"), + template=dict( + default=None, + required=False, + type="path", + removed_at_date="2026-05-01", + removed_from_collection="amazon.aws", + ), notification_arns=dict(default=None, required=False), stack_policy=dict(default=None, required=False), stack_policy_body=dict(default=None, required=False, type="json"), diff --git a/ansible_collections/amazon/aws/plugins/modules/cloudtrail.py b/ansible_collections/amazon/aws/plugins/modules/cloudtrail.py index 597d43f1b..6d9017f67 100644 --- a/ansible_collections/amazon/aws/plugins/modules/cloudtrail.py +++ b/ansible_collections/amazon/aws/plugins/modules/cloudtrail.py @@ -334,19 +334,6 @@ def tag_trail(module, client, tags, trail_arn, curr_tags=None, purge_tags=True): return True -def get_tag_list(keys, tags): - """ - Returns a list of dicts with tags to act on - keys : set of keys to get the values for - tags : the dict of tags to turn into a list - """ - tag_list = [] - for k in keys: - tag_list.append({"Key": k, "Value": tags[k]}) - - return tag_list - - def set_logging(module, client, name, action): """ Starts or stops logging based on given state diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_ami.py b/ansible_collections/amazon/aws/plugins/modules/ec2_ami.py index 00ead5ce5..ec6663146 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_ami.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_ami.py @@ -339,6 +339,11 @@ description: returned: when AMI is created or already exists type: str sample: "nat-server" +enhanced_networking: + description: Specifies whether enhanced networking with ENA is enabled. + returned: when AMI is created or already exists + type: bool + sample: true hypervisor: description: Type of hypervisor. returned: when AMI is created or already exists @@ -349,11 +354,26 @@ image_id: returned: when AMI is created or already exists type: str sample: "ami-1234abcd" +image_owner_alias: + description: The owner alias ( amazon | aws-marketplace). + returned: when AMI is created or already exists + type: str + sample: "amazon" +image_type: + description: Type of image. + returned: when AMI is created or already exists + type: str + sample: "machine" is_public: description: Whether image is public. returned: when AMI is created or already exists type: bool sample: false +kernel_id: + description: The kernel associated with the image, if any. Only applicable for machine images. + returned: when AMI is created or already exists + type: str + sample: "aki-88aa75e1" launch_permission: description: Permissions allowing other accounts to access the AMI. returned: when AMI is created or already exists @@ -379,6 +399,16 @@ platform: description: Platform of image. returned: when AMI is created or already exists type: str + sample: "Windows" +product_codes: + description: Any product codes associated with the AMI. + returned: when AMI is created or already exists + type: list + sample: [] +ramdisk_id: + description: The RAM disk associated with the image, if any. Only applicable for machine images. + returned: when AMI is created or already exists + type: str sample: null root_device_name: description: Root device name of image. @@ -390,11 +420,24 @@ root_device_type: returned: when AMI is created or already exists type: str sample: "ebs" +sriov_net_support: + description: Specifies whether enhanced networking with the Intel 82599 Virtual Function interface is enabled. + returned: when AMI is created or already exists + type: str + sample: "simple" state: description: State of image. returned: when AMI is created or already exists type: str sample: "available" +state_reason: + description: The reason for the state change. + returned: when AMI is created or already exists + type: dict + sample: { + 'Code': 'string', + 'Message': 'string' + } tags: description: A dictionary of tags assigned to image. returned: when AMI is created or already exists diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_ami_info.py b/ansible_collections/amazon/aws/plugins/modules/ec2_ami_info.py index 2929a0292..906c141e1 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_ami_info.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_ami_info.py @@ -112,7 +112,6 @@ images: sample: '2017-10-16T19:22:13.000Z' description: description: The description of the AMI. - returned: always type: str sample: '' ena_support: @@ -163,6 +162,11 @@ images: returned: always type: str sample: '123456789012' + platform_details: + description: Platform of image. + returned: always + type: str + sample: "Windows" public: description: Whether the image has public launch permissions. returned: always @@ -180,7 +184,6 @@ images: sample: ebs sriov_net_support: description: Whether enhanced networking is enabled. - returned: always type: str sample: simple state: @@ -192,6 +195,11 @@ images: description: Any tags assigned to the image. returned: always type: dict + usage_operation: + description: The operation of the Amazon EC2 instance and the billing code that is associated with the AMI. + returned: always + type: str + sample: "RunInstances" virtualization_type: description: The type of virtualization of the AMI. returned: always diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_eip_info.py b/ansible_collections/amazon/aws/plugins/modules/ec2_eip_info.py index c00dc515c..8e775582b 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_eip_info.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_eip_info.py @@ -79,19 +79,58 @@ addresses: description: Properties of all Elastic IP addresses matching the provided filters. Each element is a dict with all the information related to an EIP. returned: on success type: list - sample: [{ - "allocation_id": "eipalloc-64de1b01", - "association_id": "eipassoc-0fe9ce90d6e983e97", - "domain": "vpc", - "instance_id": "i-01020cfeb25b0c84f", - "network_interface_id": "eni-02fdeadfd4beef9323b", - "network_interface_owner_id": "0123456789", - "private_ip_address": "10.0.0.1", - "public_ip": "54.81.104.1", - "tags": { + elements: dict + contains: + "allocation_id": + description: The ID representing the allocation of the address. + returned: always + type: str + sample: "eipalloc-64de1b01" + "association_id": + description: The ID representing the association of the address with an instance. + type: str + sample: "eipassoc-0fe9ce90d6e983e97" + "domain": + description: The network ( vpc). + type: str + returned: always + sample: "vpc" + "instance_id": + description: The ID of the instance that the address is associated with (if any). + returned: if any instance is associated + type: str + sample: "i-01020cfeb25b0c84f" + "network_border_group": + description: The name of the unique set of Availability Zones, Local Zones, or Wavelength Zones from which Amazon Web Services advertises IP addresses. + returned: if any instance is associated + type: str + sample: "us-east-1" + "network_interface_id": + description: The ID of the network interface. + returned: if any instance is associated + type: str + sample: "eni-02fdeadfd4beef9323b" + "network_interface_owner_id": + description: The ID of the network interface. + returned: if any instance is associated + type: str + sample: "0123456789" + "private_ip_address": + description: The private IP address associated with the Elastic IP address. + returned: always + type: str + sample: "10.0.0.1" + "public_ip": + description: The Elastic IP address. + returned: if any instance is associated + type: str + sample: "54.81.104.1" + "tags": + description: Any tags assigned to the Elastic IP address. + type: dict + sample: { "Name": "test-vm-54.81.104.1" } - }] """ try: diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_eni.py b/ansible_collections/amazon/aws/plugins/modules/ec2_eni.py index bf8e76a2b..794ed45a9 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_eni.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_eni.py @@ -217,15 +217,25 @@ interface: returned: when state != absent type: complex contains: + attachment: + description: The network interface attachment. + type: dict + sample: { + "attach_time": "2024-04-25T20:57:20+00:00", + "attachment_id": "eni-attach-0ddce58b341a1846f", + "delete_on_termination": true, + "device_index": 0, + "instance_id": "i-032cb1cceb29250d2", + "status": "attached" + } description: description: interface description type: str sample: Firewall network interface groups: - description: list of security groups - type: list - elements: dict - sample: [ { "sg-f8a8a9da": "default" } ] + description: dict of security groups + type: dict + sample: { "sg-f8a8a9da": "default" } id: description: network interface id type: str @@ -368,10 +378,7 @@ def correct_ip_count(connection, ip_count, module, eni_id): for ip in eni["PrivateIpAddresses"]: private_addresses.add(ip["PrivateIpAddress"]) - if len(private_addresses) == ip_count: - return True - else: - return False + return bool(len(private_addresses) == ip_count) def wait_for(function_pointer, *args): @@ -395,7 +402,7 @@ def create_eni(connection, vpc_id, module): private_ip_address = module.params.get("private_ip_address") description = module.params.get("description") security_groups = get_ec2_security_group_ids_from_names( - module.params.get("security_groups"), connection, vpc_id=vpc_id, boto3=True + module.params.get("security_groups"), connection, vpc_id=vpc_id ) secondary_private_ip_addresses = module.params.get("secondary_private_ip_addresses") secondary_private_ip_address_count = module.params.get("secondary_private_ip_address_count") @@ -510,7 +517,7 @@ def modify_eni(connection, module, eni): ) changed = True if len(security_groups) > 0: - groups = get_ec2_security_group_ids_from_names(security_groups, connection, vpc_id=eni["VpcId"], boto3=True) + groups = get_ec2_security_group_ids_from_names(security_groups, connection, vpc_id=eni["VpcId"]) if sorted(get_sec_group_list(eni["Groups"])) != sorted(groups): if not module.check_mode: connection.modify_network_interface_attribute( diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_eni_info.py b/ansible_collections/amazon/aws/plugins/modules/ec2_eni_info.py index 5ef36b258..ca0a4bb22 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_eni_info.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_eni_info.py @@ -73,6 +73,7 @@ network_interfaces: device_index: 1, instance_id: "i-15b8d3cadbafa1234", instance_owner_id: "123456789012", + "network_card_index": 0, status: "attached" } availability_zone: @@ -147,7 +148,6 @@ network_interfaces: sample: [] requester_id: description: The ID of the entity that launched the ENI. - returned: always type: str sample: "AIDA12345EXAMPLE54321" requester_managed: diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_instance.py b/ansible_collections/amazon/aws/plugins/modules/ec2_instance.py index 06089e4fe..c09cce97b 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_instance.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_instance.py @@ -359,10 +359,12 @@ options: type: int required: false tenancy: - description: Type of tenancy to allow an instance to use. Default is shared tenancy. Dedicated tenancy will incur additional charges. + description: + - Type of tenancy to allow an instance to use. Default is shared tenancy. Dedicated tenancy will incur additional charges. + - Support for I(tenancy=host) was added in amazon.aws 7.6.0. type: str required: false - choices: ['dedicated', 'default'] + choices: ['dedicated', 'default', 'host'] license_specifications: description: - The license specifications to be used for the instance. @@ -671,16 +673,67 @@ instances: returned: always type: str sample: vol-12345678 + capacity_reservation_specification: + description: Information about the Capacity Reservation targeting option. + type: complex + contains: + capacity_reservation_preference: + description: Describes the Capacity Reservation preferences. + type: str + sample: open client_token: description: The idempotency token you provided when you launched the instance, if applicable. returned: always type: str sample: mytoken + cpu_options: + description: The CPU options for the instance. + type: complex + contains: + core_count: + description: The number of CPU cores for the instance. + type: int + sample: 1 + threads_per_core: + description: The number of threads per CPU core. + type: int + sample: 2 + amd_sev_snp: + description: Indicates whether the instance is enabled for AMD SEV-SNP. + type: str + sample: enabled + current_instance_boot_mode: + description: The boot mode that is used to boot the instance at launch or start. + type: str + sample: legacy-bios ebs_optimized: description: Indicates whether the instance is optimized for EBS I/O. returned: always type: bool sample: false + ena_support: + description: Specifies whether enhanced networking with ENA is enabled. + returned: always + type: bool + sample: true + enclave_options: + description: Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. + type: dict + contains: + enabled: + description: If this parameter is set to true, the instance is enabled for Amazon Web Services Nitro Enclaves. + returned: always + type: bool + sample: false + hibernation_options: + description: Indicates whether the instance is enabled for hibernation. + type: dict + contains: + configured: + description: If true, your instance is enabled for hibernation; otherwise, it is not enabled for hibernation. + returned: always + type: bool + sample: false hypervisor: description: The hypervisor type of the instance. returned: always @@ -737,6 +790,35 @@ instances: returned: always type: str sample: arn:aws:license-manager:us-east-1:123456789012:license-configuration:lic-0123456789 + metadata_options: + description: The metadata options for the instance. + returned: always + type: complex + contains: + http_endpoint: + description: Indicates whether the HTTP metadata endpoint on your instances is enabled or disabled. + type: str + sample: enabled + http_protocol_ipv6: + description: Indicates whether the IPv6 endpoint for the instance metadata service is enabled or disabled. + type: str + sample: disabled + http_put_response_hop_limit: + description: The maximum number of hops that the metadata token can travel. + type: int + sample: 1 + http_tokens: + description: Indicates whether IMDSv2 is required. + type: str + sample: optional + instance_metadata_tags: + description: Indicates whether access to instance tags from the instance metadata is enabled or disabled. + type: str + sample: disabled + state: + description: The state of the metadata option changes. + type: str + sample: applied monitoring: description: The monitoring for the instance. returned: always @@ -750,7 +832,8 @@ instances: network_interfaces: description: One or more network interfaces for the instance. returned: always - type: complex + type: list + elements: dict contains: association: description: The association information for an Elastic IPv4 associated with the network interface. @@ -797,6 +880,11 @@ instances: returned: always type: int sample: 0 + network_card_index: + description: The index of the network card. + returned: always + type: int + sample: 0 status: description: The attachment state. returned: always @@ -823,6 +911,11 @@ instances: returned: always type: str sample: mygroup + interface_type: + description: The type of network interface. + returned: always + type: str + sample: interface ipv6_addresses: description: One or more IPv6 addresses associated with the network interface. returned: always @@ -849,6 +942,11 @@ instances: returned: always type: str sample: 01234567890 + private_dns_name: + description: The private DNS hostname name assigned to the instance. + type: str + returned: always + sample: ip-10-1-0-156.ec2.internal private_ip_address: description: The IPv4 address of the network interface within the subnet. returned: always @@ -862,7 +960,6 @@ instances: contains: association: description: The association information for an Elastic IP address (IPv4) associated with the network interface. - returned: always type: complex contains: ip_owner_id: @@ -885,6 +982,11 @@ instances: returned: always type: bool sample: true + private_dns_name: + description: The private DNS hostname name assigned to the instance. + type: str + returned: always + sample: ip-10-1-0-156.ec2.internal private_ip_address: description: The private IPv4 address of the network interface. returned: always @@ -926,7 +1028,6 @@ instances: type: str group_id: description: The ID of the placement group the instance is in (for cluster compute instances). - returned: always type: str sample: "pg-01234566" group_name: @@ -936,16 +1037,13 @@ instances: sample: "my-placement-group" host_id: description: The ID of the Dedicated Host on which the instance resides. - returned: always type: str host_resource_group_arn: description: The ARN of the host resource group in which the instance is in. - returned: always type: str sample: "arn:aws:resource-groups:us-east-1:123456789012:group/MyResourceGroup" partition_number: description: The number of the partition the instance is in. - returned: always type: int sample: 1 tenancy: @@ -959,11 +1057,32 @@ instances: type: str version_added: 7.1.0 sample: + platform_details: + description: The platform details value for the instance. + returned: always + type: str + sample: Linux/UNIX private_dns_name: description: The private DNS name. returned: always type: str sample: ip-10-0-0-1.ap-southeast-2.compute.internal + private_dns_name_options: + description: The options for the instance hostname. + type: dict + contains: + enable_resource_name_dns_a_record: + description: Indicates whether to respond to DNS queries for instance hostnames with DNS A records. + type: bool + sample: false + enable_resource_name_dns_aaaa_record: + description: Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records. + type: bool + sample: false + hostname_type: + description: The type of hostname to assign to an instance. + type: str + sample: ip-name private_ip_address: description: The IPv4 address of the network interface within the subnet. returned: always @@ -1021,7 +1140,7 @@ instances: returned: always type: str sample: my-security-group - network.source_dest_check: + source_dest_check: description: Indicates whether source/destination checking is enabled. returned: always type: bool @@ -1458,7 +1577,7 @@ def build_top_level_options(params): return spec -def build_instance_tags(params, propagate_tags_to_volumes=True): +def build_instance_tags(params): tags = params.get("tags") or {} if params.get("name") is not None: tags["Name"] = params.get("name") @@ -1930,7 +2049,7 @@ def change_instance_state(filters, desired_module_state): if inst["State"]["Name"] in ("pending", "running"): unchanged.add(inst["InstanceId"]) continue - elif inst["State"]["Name"] == "stopping": + if inst["State"]["Name"] == "stopping": await_instances([inst["InstanceId"]], desired_module_state="stopped", force_wait=True) if module.check_mode: @@ -2029,63 +2148,60 @@ def handle_existing(existing_matches, state, filters): return result -def enforce_count(existing_matches, module, desired_module_state): +def enforce_count(existing_matches, desired_module_state): exact_count = module.params.get("exact_count") - try: - current_count = len(existing_matches) - if current_count == exact_count: - module.exit_json( - changed=False, - instances=[pretty_instance(i) for i in existing_matches], - instance_ids=[i["InstanceId"] for i in existing_matches], - msg=f"{exact_count} instances already running, nothing to do.", - ) + current_count = len(existing_matches) + if current_count == exact_count: + return dict( + changed=False, + instances=[pretty_instance(i) for i in existing_matches], + instance_ids=[i["InstanceId"] for i in existing_matches], + msg=f"{exact_count} instances already running, nothing to do.", + ) - elif current_count < exact_count: - # launch instances - try: - ensure_present( - existing_matches=existing_matches, - desired_module_state=desired_module_state, - current_count=current_count, - ) - except botocore.exceptions.ClientError as e: - module.fail_json(e, msg="Unable to launch instances") - elif current_count > exact_count: - to_terminate = current_count - exact_count - # sort the instances from least recent to most recent based on launch time - existing_matches = sorted(existing_matches, key=lambda inst: inst["LaunchTime"]) - # get the instance ids of instances with the count tag on them - all_instance_ids = [x["InstanceId"] for x in existing_matches] - terminate_ids = all_instance_ids[0:to_terminate] - if module.check_mode: - module.exit_json( - changed=True, - terminated_ids=terminate_ids, - instance_ids=all_instance_ids, - msg=f"Would have terminated following instances if not in check mode {terminate_ids}", - ) - # terminate instances - try: - client.terminate_instances(aws_retry=True, InstanceIds=terminate_ids) - await_instances(terminate_ids, desired_module_state="terminated", force_wait=True) - except is_boto3_error_code("InvalidInstanceID.NotFound"): - pass - except botocore.exceptions.ClientError as e: # pylint: disable=duplicate-except - module.fail_json(e, msg="Unable to terminate instances") - # include data for all matched instances in addition to the list of terminations - # allowing for recovery of metadata from the destructive operation - module.exit_json( - changed=True, - msg="Successfully terminated instances.", - terminated_ids=terminate_ids, - instance_ids=all_instance_ids, - instances=existing_matches, - ) + if current_count < exact_count: + # launch instances + return ensure_present( + existing_matches=existing_matches, + desired_module_state=desired_module_state, + current_count=current_count, + ) - except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: - module.fail_json_aws(e, msg="Failed to enforce instance count") + to_terminate = current_count - exact_count + # sort the instances from least recent to most recent based on launch time + existing_matches = sorted(existing_matches, key=lambda inst: inst["LaunchTime"]) + # get the instance ids of instances with the count tag on them + all_instance_ids = [x["InstanceId"] for x in existing_matches] + terminate_ids = all_instance_ids[0:to_terminate] + if module.check_mode: + return dict( + changed=True, + terminated_ids=terminate_ids, + instance_ids=all_instance_ids, + msg=f"Would have terminated following instances if not in check mode {terminate_ids}", + ) + # terminate instances + try: + client.terminate_instances(aws_retry=True, InstanceIds=terminate_ids) + await_instances(terminate_ids, desired_module_state="terminated", force_wait=True) + except is_boto3_error_code("InvalidInstanceID.NotFound"): + pass + except ( + botocore.exceptions.BotoCoreError, + botocore.exceptions.ClientError, + ) as e: # pylint: disable=duplicate-except + module.fail_json(e, msg="Unable to terminate instances") + + # include data for all matched instances in addition to the list of terminations + # allowing for recovery of metadata from the destructive operation + return dict( + changed=True, + msg="Successfully terminated instances.", + terminated_ids=terminate_ids, + instance_ids=all_instance_ids, + instances=existing_matches, + ) def ensure_present(existing_matches, desired_module_state, current_count=None): @@ -2100,7 +2216,7 @@ def ensure_present(existing_matches, desired_module_state, current_count=None): if module.check_mode: if existing_matches: instance_ids = [x["InstanceId"] for x in existing_matches] - module.exit_json( + return dict( changed=True, instance_ids=instance_ids, instances=existing_matches, @@ -2108,7 +2224,7 @@ def ensure_present(existing_matches, desired_module_state, current_count=None): msg="Would have launched instances if not in check_mode.", ) else: - module.exit_json( + return dict( changed=True, spec=instance_spec, msg="Would have launched instances if not in check_mode.", @@ -2144,14 +2260,14 @@ def ensure_present(existing_matches, desired_module_state, current_count=None): all_instance_ids = [x["InstanceId"] for x in existing_matches] + instance_ids if not module.params.get("wait"): if existing_matches: - module.exit_json( + return dict( changed=True, changed_ids=instance_ids, instance_ids=all_instance_ids, spec=instance_spec, ) else: - module.exit_json( + return dict( changed=True, instance_ids=instance_ids, spec=instance_spec, @@ -2161,7 +2277,7 @@ def ensure_present(existing_matches, desired_module_state, current_count=None): if existing_matches: all_instances = existing_matches + instances - module.exit_json( + return dict( changed=True, changed_ids=instance_ids, instance_ids=all_instance_ids, @@ -2169,7 +2285,7 @@ def ensure_present(existing_matches, desired_module_state, current_count=None): spec=instance_spec, ) else: - module.exit_json( + return dict( changed=True, instance_ids=instance_ids, instances=[pretty_instance(i) for i in instances], @@ -2307,7 +2423,7 @@ def main(): host_id=dict(type="str"), host_resource_group_arn=dict(type="str"), partition_number=dict(type="int"), - tenancy=dict(type="str", choices=["dedicated", "default"]), + tenancy=dict(type="str", choices=["dedicated", "default", "host"]), ), ), instance_initiated_shutdown_behavior=dict(type="str", choices=["stop", "terminate"]), @@ -2396,7 +2512,7 @@ def main(): changed=False, ) elif module.params.get("exact_count"): - enforce_count(existing_matches, module, desired_module_state=state) + result = enforce_count(existing_matches, desired_module_state=state) elif existing_matches and not module.params.get("count"): for match in existing_matches: warn_if_public_ip_assignment_changed(match) diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_instance_info.py b/ansible_collections/amazon/aws/plugins/modules/ec2_instance_info.py index 1caea9365..af12729eb 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_instance_info.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_instance_info.py @@ -161,6 +161,14 @@ instances: returned: always type: str sample: vol-12345678 + capacity_reservation_specification: + description: Information about the Capacity Reservation targeting option. + type: complex + contains: + capacity_reservation_preference: + description: Describes the Capacity Reservation preferences. + type: str + sample: open cpu_options: description: The CPU options set for the instance. returned: always @@ -181,11 +189,38 @@ instances: returned: always type: str sample: mytoken + current_instance_boot_mode: + description: The boot mode that is used to boot the instance at launch or start. + type: str + sample: legacy-bios ebs_optimized: description: Indicates whether the instance is optimized for EBS I/O. returned: always type: bool sample: false + ena_support: + description: Specifies whether enhanced networking with ENA is enabled. + returned: always + type: bool + sample: true + enclave_options: + description: Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. + type: dict + contains: + enabled: + description: If this parameter is set to true, the instance is enabled for Amazon Web Services Nitro Enclaves. + returned: always + type: bool + sample: false + hibernation_options: + description: Indicates whether the instance is enabled for hibernation. + type: dict + contains: + configured: + description: If true, your instance is enabled for hibernation; otherwise, it is not enabled for hibernation. + returned: always + type: bool + sample: false hypervisor: description: The hypervisor type of the instance. returned: always @@ -193,7 +228,6 @@ instances: sample: xen iam_instance_profile: description: The IAM instance profile associated with the instance, if applicable. - returned: always type: complex contains: arn: @@ -231,6 +265,44 @@ instances: returned: always type: str sample: "2017-03-23T22:51:24+00:00" + maintenance_options: + description: Provides information on the recovery and maintenance options of your instance. + returned: always + type: dict + contains: + auto_recovery: + description: Provides information on the current automatic recovery behavior of your instance. + type: str + sample: default + metadata_options: + description: The metadata options for the instance. + returned: always + type: complex + contains: + http_endpoint: + description: Indicates whether the HTTP metadata endpoint on your instances is enabled or disabled. + type: str + sample: enabled + http_protocol_ipv6: + description: Indicates whether the IPv6 endpoint for the instance metadata service is enabled or disabled. + type: str + sample: disabled + http_put_response_hop_limit: + description: The maximum number of hops that the metadata token can travel. + type: int + sample: 1 + http_tokens: + description: Indicates whether IMDSv2 is required. + type: str + sample: optional + instance_metadata_tags: + description: Indicates whether access to instance tags from the instance metadata is enabled or disabled. + type: str + sample: disabled + state: + description: The state of the metadata option changes. + type: str + sample: applied monitoring: description: The monitoring for the instance. returned: always @@ -291,6 +363,11 @@ instances: returned: always type: int sample: 0 + network_card_index: + description: The index of the network card. + returned: always + type: int + sample: 0 status: description: The attachment state. returned: always @@ -317,6 +394,11 @@ instances: returned: always type: str sample: mygroup + interface_type: + description: The type of network interface. + returned: always + type: str + sample: interface ipv6_addresses: description: One or more IPv6 addresses associated with the network interface. returned: always @@ -343,6 +425,11 @@ instances: returned: always type: str sample: 01234567890 + private_dns_name: + description: The private DNS hostname name assigned to the instance. + type: str + returned: always + sample: ip-10-1-0-156.ec2.internal private_ip_address: description: The IPv4 address of the network interface within the subnet. returned: always @@ -356,7 +443,6 @@ instances: contains: association: description: The association information for an Elastic IP address (IPv4) associated with the network interface. - returned: always type: complex contains: ip_owner_id: @@ -379,6 +465,11 @@ instances: returned: always type: bool sample: true + private_dns_name: + description: The private DNS hostname name assigned to the instance. + type: str + returned: always + sample: ip-10-1-0-156.ec2.internal private_ip_address: description: The private IPv4 address of the network interface. returned: always @@ -424,11 +515,32 @@ instances: returned: always type: str sample: default + platform_details: + description: The platform details value for the instance. + returned: always + type: str + sample: Linux/UNIX private_dns_name: description: The private DNS name. returned: always type: str sample: ip-10-0-0-1.ap-southeast-2.compute.internal + private_dns_name_options: + description: The options for the instance hostname. + type: dict + contains: + enable_resource_name_dns_a_record: + description: Indicates whether to respond to DNS queries for instance hostnames with DNS A records. + type: bool + sample: false + enable_resource_name_dns_aaaa_record: + description: Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records. + type: bool + sample: false + hostname_type: + description: The type of hostname to assign to an instance. + type: str + sample: ip-name private_ip_address: description: The IPv4 address of the network interface within the subnet. returned: always diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_metadata_facts.py b/ansible_collections/amazon/aws/plugins/modules/ec2_metadata_facts.py index 26ecaad0a..83fdd4417 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_metadata_facts.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_metadata_facts.py @@ -450,6 +450,8 @@ socket.setdefaulttimeout(5) # The ec2_metadata_facts module is a special case, while we generally dropped support for Python < 3.6 # this module doesn't depend on the SDK and still has valid use cases for folks working with older # OSes. + +# pylint: disable=consider-using-f-string try: json_decode_error = json.JSONDecodeError except AttributeError: diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_security_group.py b/ansible_collections/amazon/aws/plugins/modules/ec2_security_group.py index 9d16f339f..44afa7bff 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_security_group.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_security_group.py @@ -413,8 +413,8 @@ EXAMPLES = r""" """ RETURN = r""" -group_name: - description: Security group name +description: + description: Description of security group sample: My Security Group type: str returned: on create/update @@ -423,11 +423,132 @@ group_id: sample: sg-abcd1234 type: str returned: on create/update -description: - description: Description of security group +group_name: + description: Security group name sample: My Security Group type: str returned: on create/update +ip_permissions: + description: The inbound rules associated with the security group. + returned: always + type: list + elements: dict + contains: + from_port: + description: If the protocol is TCP or UDP, this is the start of the port range. + type: int + sample: 80 + ip_protocol: + description: The IP protocol name or number. + returned: always + type: str + ip_ranges: + description: The IPv4 ranges. + returned: always + type: list + elements: dict + contains: + cidr_ip: + description: The IPv4 CIDR range. + returned: always + type: str + ipv6_ranges: + description: The IPv6 ranges. + returned: always + type: list + elements: dict + contains: + cidr_ipv6: + description: The IPv6 CIDR range. + returned: always + type: str + prefix_list_ids: + description: The prefix list IDs. + returned: always + type: list + elements: dict + contains: + prefix_list_id: + description: The ID of the prefix. + returned: always + type: str + to_group: + description: If the protocol is TCP or UDP, this is the end of the port range. + type: int + sample: 80 + user_id_group_pairs: + description: The security group and AWS account ID pairs. + returned: always + type: list + elements: dict + contains: + group_id: + description: The security group ID of the pair. + returned: always + type: str + user_id: + description: The user ID of the pair. + returned: always + type: str +ip_permissions_egress: + description: The outbound rules associated with the security group. + returned: always + type: list + elements: dict + contains: + ip_protocol: + description: The IP protocol name or number. + returned: always + type: str + ip_ranges: + description: The IPv4 ranges. + returned: always + type: list + elements: dict + contains: + cidr_ip: + description: The IPv4 CIDR range. + returned: always + type: str + ipv6_ranges: + description: The IPv6 ranges. + returned: always + type: list + elements: dict + contains: + cidr_ipv6: + description: The IPv6 CIDR range. + returned: always + type: str + prefix_list_ids: + description: The prefix list IDs. + returned: always + type: list + elements: dict + contains: + prefix_list_id: + description: The ID of the prefix. + returned: always + type: str + user_id_group_pairs: + description: The security group and AWS account ID pairs. + returned: always + type: list + elements: dict + contains: + group_id: + description: The security group ID of the pair. + returned: always + type: str + user_id: + description: The user ID of the pair. + returned: always + type: str +owner_id: + description: AWS Account ID of the security group + sample: 123456789012 + type: int + returned: on create/update tags: description: Tags associated with the security group sample: @@ -440,35 +561,6 @@ vpc_id: sample: vpc-abcd1234 type: str returned: on create/update -ip_permissions: - description: Inbound rules associated with the security group. - sample: - - from_port: 8182 - ip_protocol: tcp - ip_ranges: - - cidr_ip: "198.51.100.1/32" - ipv6_ranges: [] - prefix_list_ids: [] - to_port: 8182 - user_id_group_pairs: [] - type: list - returned: on create/update -ip_permissions_egress: - description: Outbound rules associated with the security group. - sample: - - ip_protocol: -1 - ip_ranges: - - cidr_ip: "0.0.0.0/0" - ipv6_ranges: [] - prefix_list_ids: [] - user_id_group_pairs: [] - type: list - returned: on create/update -owner_id: - description: AWS Account ID of the security group - sample: 123456789012 - type: int - returned: on create/update """ import itertools @@ -532,7 +624,7 @@ def rule_cmp(a, b): # equal protocols can interchange `(-1, -1)` and `(None, None)` if a.port_range in ((None, None), (-1, -1)) and b.port_range in ((None, None), (-1, -1)): continue - elif getattr(a, prop) != getattr(b, prop): + if getattr(a, prop) != getattr(b, prop): return False elif getattr(a, prop) != getattr(b, prop): return False @@ -1296,8 +1388,7 @@ def flatten_nested_targets(module, rules): date="2024-12-01", collection_name="amazon.aws", ) - for t in _flatten(target): - yield t + yield from _flatten(target) elif isinstance(target, string_types): yield target diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_security_group_info.py b/ansible_collections/amazon/aws/plugins/modules/ec2_security_group_info.py index 8b7a04ba1..fe1002f2c 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_security_group_info.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_security_group_info.py @@ -107,6 +107,10 @@ security_groups: type: list elements: dict contains: + from_port: + description: If the protocol is TCP or UDP, this is the start of the port range. + type: int + sample: 80 ip_protocol: description: The IP protocol name or number. returned: always @@ -141,6 +145,10 @@ security_groups: description: The ID of the prefix. returned: always type: str + to_group: + description: If the protocol is TCP or UDP, this is the end of the port range. + type: int + sample: 80 user_id_group_pairs: description: The security group and AWS account ID pairs. returned: always diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_vol.py b/ansible_collections/amazon/aws/plugins/modules/ec2_vol.py index 6fa2ca47b..de63d3703 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_vol.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_vol.py @@ -329,22 +329,6 @@ def get_volume(module, ec2_conn, vol_id=None, fail_on_not_found=True): return vol -def get_volumes(module, ec2_conn): - instance = module.params.get("instance") - - find_params = dict() - if instance: - find_params["Filters"] = ansible_dict_to_boto3_filter_list({"attachment.instance-id": instance}) - - vols = [] - try: - vols_response = ec2_conn.describe_volumes(aws_retry=True, **find_params) - vols = [camel_dict_to_snake_dict(vol) for vol in vols_response.get("Volumes", [])] - except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: - module.fail_json_aws(e, msg="Error while getting EBS volumes") - return vols - - def delete_volume(module, ec2_conn, volume_id=None): changed = False if volume_id: @@ -858,7 +842,7 @@ def main(): elif state == "absent": if not name and not param_id: module.fail_json("A volume name or id is required for deletion") - if volume: + if volume and volume.get("state") not in ("deleting", "deleted"): if module.check_mode: module.exit_json(changed=True, msg="Would have deleted volume if not in check mode.") detach_volume(module, ec2_conn, volume_dict=volume) diff --git a/ansible_collections/amazon/aws/plugins/modules/ec2_vpc_route_table.py b/ansible_collections/amazon/aws/plugins/modules/ec2_vpc_route_table.py index 34f12e789..1d41b89ea 100644 --- a/ansible_collections/amazon/aws/plugins/modules/ec2_vpc_route_table.py +++ b/ansible_collections/amazon/aws/plugins/modules/ec2_vpc_route_table.py @@ -843,7 +843,8 @@ def ensure_route_table_present(connection, module): if changed: # pause to allow route table routes/subnets/associations to be updated before exiting with final state sleep(5) - module.exit_json(changed=changed, route_table=get_route_table_info(connection, module, route_table)) + + return dict(changed=changed, route_table=get_route_table_info(connection, module, route_table)) def main(): diff --git a/ansible_collections/amazon/aws/plugins/modules/elb_application_lb.py b/ansible_collections/amazon/aws/plugins/modules/elb_application_lb.py index ac3bb3642..25ebd8c84 100644 --- a/ansible_collections/amazon/aws/plugins/modules/elb_application_lb.py +++ b/ansible_collections/amazon/aws/plugins/modules/elb_application_lb.py @@ -236,7 +236,7 @@ EXAMPLES = r""" Port: 80 # Required. The port on which the load balancer is listening. # The security policy that defines which ciphers and protocols are supported. The default is the current predefined security policy. SslPolicy: ELBSecurityPolicy-2015-05 - Certificates: # The ARN of the certificate (only one certficate ARN should be provided) + Certificates: # The ARN of the certificate - CertificateArn: arn:aws:iam::123456789012:server-certificate/test.domain.com DefaultActions: - Type: forward # Required. @@ -260,7 +260,7 @@ EXAMPLES = r""" Port: 80 # Required. The port on which the load balancer is listening. # The security policy that defines which ciphers and protocols are supported. The default is the current predefined security policy. SslPolicy: ELBSecurityPolicy-2015-05 - Certificates: # The ARN of the certificate (only one certficate ARN should be provided) + Certificates: # The ARN of the certificate - CertificateArn: arn:aws:iam::123456789012:server-certificate/test.domain.com DefaultActions: - Type: forward # Required. @@ -330,6 +330,29 @@ EXAMPLES = r""" Type: forward state: present +# Create an ALB with a listener having multiple listener certificates +- amazon.aws.elb_application_lb: + name: myalb + security_groups: + - sg-12345678 + - my-sec-group + subnets: + - subnet-012345678 + - subnet-abcdef000 + listeners: + - Protocol: HTTP # Required. The protocol for connections from clients to the load balancer (HTTP or HTTPS) (case-sensitive). + Port: 80 # Required. The port on which the load balancer is listening. + # The security policy that defines which ciphers and protocols are supported. The default is the current predefined security policy. + SslPolicy: ELBSecurityPolicy-2015-05 + Certificates: # The ARN of the certificate (first certificate in the list will be set as default certificate) + - CertificateArn: arn:aws:iam::123456789012:server-certificate/test.domain.com + - CertificateArn: arn:aws:iam::123456789012:server-certificate/secondtest.domain.com + - CertificateArn: arn:aws:iam::123456789012:server-certificate/thirdtest.domain.com + DefaultActions: + - Type: forward # Required. + TargetGroupName: # Required. The name of the target group + state: present + # Remove an ALB - amazon.aws.elb_application_lb: name: myalb diff --git a/ansible_collections/amazon/aws/plugins/modules/elb_classic_lb.py b/ansible_collections/amazon/aws/plugins/modules/elb_classic_lb.py index 4008b8029..60134f0e3 100644 --- a/ansible_collections/amazon/aws/plugins/modules/elb_classic_lb.py +++ b/ansible_collections/amazon/aws/plugins/modules/elb_classic_lb.py @@ -1412,7 +1412,7 @@ class ElbManager: if not self.health_check: return False - """Set health check values on ELB as needed""" + # Set health check values on ELB as needed health_check_config = self._format_healthcheck() if self.elb and health_check_config == self.elb["HealthCheck"]: @@ -1490,14 +1490,6 @@ class ElbManager: def _policy_name(self, policy_type): return f"ec2-elb-lb-{policy_type}" - def _get_listener_policies(self): - """Get a list of listener policies mapped to the LoadBalancerPort""" - if not self.elb: - return {} - listener_descriptions = self.elb.get("ListenerDescriptions", []) - policies = {l["LoadBalancerPort"]: l["PolicyNames"] for l in listener_descriptions} - return policies - def _set_listener_policies(self, port, policies): self.changed = True if self.check_mode: @@ -1705,7 +1697,7 @@ class ElbManager: proxy_protocol = listener.get("proxy_protocol", None) # Only look at the listeners for which proxy_protocol is defined if proxy_protocol is None: - next + continue instance_port = listener.get("instance_port") if proxy_ports.get(instance_port, None) is not None: if proxy_ports[instance_port] != proxy_protocol: @@ -1725,10 +1717,10 @@ class ElbManager: if any(proxy_ports.values()): changed |= self._set_proxy_protocol_policy(proxy_policy_name) - for port in proxy_ports: + for port, port_policy in proxy_ports.items(): current_policies = set(backend_policies.get(port, [])) new_policies = list(current_policies - proxy_policies) - if proxy_ports[port]: + if port_policy: new_policies.append(proxy_policy_name) changed |= self._set_backend_policy(port, new_policies) diff --git a/ansible_collections/amazon/aws/plugins/modules/iam_policy.py b/ansible_collections/amazon/aws/plugins/modules/iam_policy.py index fb2d98e08..0a654dec5 100644 --- a/ansible_collections/amazon/aws/plugins/modules/iam_policy.py +++ b/ansible_collections/amazon/aws/plugins/modules/iam_policy.py @@ -340,7 +340,7 @@ def main(): "The 'policies' return key is deprecated and will be replaced by 'policy_names'. Both values are" " returned for now." ), - date="2024-08-01", + version="9.0.0", collection_name="amazon.aws", ) diff --git a/ansible_collections/amazon/aws/plugins/modules/iam_role.py b/ansible_collections/amazon/aws/plugins/modules/iam_role.py index a7da38c31..3262a7a92 100644 --- a/ansible_collections/amazon/aws/plugins/modules/iam_role.py +++ b/ansible_collections/amazon/aws/plugins/modules/iam_role.py @@ -174,8 +174,8 @@ iam_role: description: - the policy that grants an entity permission to assume the role - | - note: the case of keys in this dictionary are currently converted from CamelCase to - snake_case. In a release after 2023-12-01 this behaviour will change + Note: the case of keys in this dictionary are no longer converted from CamelCase to + snake_case. This behaviour changed in release 8.0.0. type: dict returned: always sample: { @@ -192,23 +192,14 @@ iam_role: 'version': '2012-10-17' } assume_role_policy_document_raw: - description: the policy that grants an entity permission to assume the role + description: + - | + Note: this return value has been deprecated and will be removed in a release after + 2026-05-01. assume_role_policy_document and assume_role_policy_document_raw now use + the same format. type: dict returned: always version_added: 5.3.0 - sample: { - 'Statement': [ - { - 'Action': 'sts:AssumeRole', - 'Effect': 'Allow', - 'Principal': { - 'Service': 'ec2.amazonaws.com' - }, - 'Sid': '' - } - ], - 'Version': '2012-10-17' - } attached_policies: description: a list of dicts containing the name and ARN of the managed IAM policies attached to the role @@ -504,7 +495,7 @@ def create_or_update_role(module, client): role["AttachedPolicies"] = list_iam_role_attached_policies(client, role_name) camel_role = normalize_iam_role(role, _v7_compat=True) - module.exit_json(changed=changed, iam_role=camel_role, **camel_role) + module.exit_json(changed=changed, iam_role=camel_role) def create_instance_profiles(client, check_mode, role_name, path): @@ -658,17 +649,10 @@ def main(): ) module.deprecate( - "All return values other than iam_role and changed have been deprecated and " - "will be removed in a release after 2023-12-01.", - date="2023-12-01", - collection_name="amazon.aws", - ) - module.deprecate( - "In a release after 2023-12-01 the contents of iam_role.assume_role_policy_document " - "will no longer be converted from CamelCase to snake_case. The " - "iam_role.assume_role_policy_document_raw return value already returns the " - "policy document in this future format.", - date="2023-12-01", + "In a release after 2026-05-01 iam_role.assume_role_policy_document_raw " + "will no longer be returned. Since release 8.0.0 assume_role_policy_document " + "has been returned with the same format as iam_role.assume_role_policy_document_raw", + date="2026-05-01", collection_name="amazon.aws", ) diff --git a/ansible_collections/amazon/aws/plugins/modules/iam_role_info.py b/ansible_collections/amazon/aws/plugins/modules/iam_role_info.py index e77689878..fb4a06466 100644 --- a/ansible_collections/amazon/aws/plugins/modules/iam_role_info.py +++ b/ansible_collections/amazon/aws/plugins/modules/iam_role_info.py @@ -67,12 +67,16 @@ iam_roles: description: - The policy that grants an entity permission to assume the role - | - Note: the case of keys in this dictionary are currently converted from CamelCase to - snake_case. In a release after 2023-12-01 this behaviour will change. + Note: the case of keys in this dictionary are no longer converted from CamelCase to + snake_case. This behaviour changed in release 8.0.0. returned: always type: dict assume_role_policy_document_raw: - description: The policy document describing what can assume the role. + description: + - | + Note: this return value has been deprecated and will be removed in a release after + 2026-05-01. assume_role_policy_document and assume_role_policy_document_raw now use + the same format. returned: always type: dict version_added: 5.3.0 @@ -208,11 +212,10 @@ def main(): path_prefix = module.params["path_prefix"] module.deprecate( - "In a release after 2023-12-01 the contents of assume_role_policy_document " - "will no longer be converted from CamelCase to snake_case. The " - ".assume_role_policy_document_raw return value already returns the " - "policy document in this future format.", - date="2023-12-01", + "In a release after 2026-05-01 iam_role.assume_role_policy_document_raw " + "will no longer be returned. Since release 8.0.0 assume_role_policy_document " + "has been returned with the same format as iam_role.assume_role_policy_document_raw", + date="2026-05-01", collection_name="amazon.aws", ) @@ -226,10 +229,10 @@ def main(): if validation_error: _prefix = "/" if not path_prefix.startswith("/") else "" _suffix = "/" if not path_prefix.endswith("/") else "" - path_prefix = "{_prefix}{path_prefix}{_suffix}" + path_prefix = f"{_prefix}{path_prefix}{_suffix}" module.deprecate( "In a release after 2026-05-01 paths must begin and end with /. " - "path_prefix has been modified to '{path_prefix}'", + f"path_prefix has been modified to '{path_prefix}'", date="2026-05-01", collection_name="amazon.aws", ) diff --git a/ansible_collections/amazon/aws/plugins/modules/kms_key.py b/ansible_collections/amazon/aws/plugins/modules/kms_key.py index 82f73b370..47e52978d 100644 --- a/ansible_collections/amazon/aws/plugins/modules/kms_key.py +++ b/ansible_collections/amazon/aws/plugins/modules/kms_key.py @@ -156,6 +156,7 @@ notes: This can cause issues when running duplicate tasks in succession or using the M(amazon.aws.kms_key_info) module to fetch key metadata shortly after modifying keys. For this reason, it is recommended to use the return data from this module (M(amazon.aws.kms_key)) to fetch a key's metadata. + - The C(policies) return key was removed in amazon.aws release 8.0.0. """ EXAMPLES = r""" @@ -281,41 +282,6 @@ aliases: sample: - aws/acm - aws/ebs -policies: - description: List of policy documents for the key. Empty when access is denied even if there are policies. - type: list - returned: always - elements: str - sample: - Version: "2012-10-17" - Id: "auto-ebs-2" - Statement: - - Sid: "Allow access through EBS for all principals in the account that are authorized to use EBS" - Effect: "Allow" - Principal: - AWS: "*" - Action: - - "kms:Encrypt" - - "kms:Decrypt" - - "kms:ReEncrypt*" - - "kms:GenerateDataKey*" - - "kms:CreateGrant" - - "kms:DescribeKey" - Resource: "*" - Condition: - StringEquals: - kms:CallerAccount: "123456789012" - kms:ViaService: "ec2.ap-southeast-2.amazonaws.com" - - Sid: "Allow direct access to key metadata to the account" - Effect: "Allow" - Principal: - AWS: "arn:aws:iam::123456789012:root" - Action: - - "kms:Describe*" - - "kms:Get*" - - "kms:List*" - - "kms:RevokeGrant" - Resource: "*" key_policies: description: List of policy documents for the key. Empty when access is denied even if there are policies. type: list @@ -435,14 +401,6 @@ multi_region: sample: False """ -# these mappings are used to go from simple labels to the actual 'Sid' values returned -# by get_policy. They seem to be magic values. -statement_label = { - "role": "Allow use of the key", - "role grant": "Allow attachment of persistent resources", - "admin": "Allow access for Key Administrators", -} - import json try: @@ -461,12 +419,6 @@ from ansible_collections.amazon.aws.plugins.module_utils.tagging import boto3_ta from ansible_collections.amazon.aws.plugins.module_utils.tagging import compare_aws_tags -@AWSRetry.jittered_backoff(retries=5, delay=5, backoff=2.0) -def get_iam_roles_with_backoff(connection): - paginator = connection.get_paginator("list_roles") - return paginator.paginate().build_full_result() - - @AWSRetry.jittered_backoff(retries=5, delay=5, backoff=2.0) def get_kms_keys_with_backoff(connection): paginator = connection.get_paginator("list_keys") @@ -598,20 +550,11 @@ def get_key_details(connection, module, key_id): module.fail_json_aws(e, msg="Failed to obtain key grants") tags = get_kms_tags(connection, module, key_id) result["tags"] = boto3_tag_list_to_ansible_dict(tags, "TagKey", "TagValue") - result["policies"] = get_kms_policies(connection, module, key_id) - result["key_policies"] = [json.loads(policy) for policy in result["policies"]] + policies = get_kms_policies(connection, module, key_id) + result["key_policies"] = [json.loads(policy) for policy in policies] return result -def get_kms_facts(connection, module): - try: - keys = get_kms_keys_with_backoff(connection)["Keys"] - except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: - module.fail_json_aws(e, msg="Failed to obtain keys") - - return [get_key_details(connection, module, key["KeyId"]) for key in keys] - - def convert_grant_params(grant, key): grant_params = dict(KeyId=key["key_arn"], GranteePrincipal=grant["grantee_principal"]) if grant.get("operations"): @@ -947,13 +890,6 @@ def delete_key(connection, module, key_metadata): return result -def get_arn_from_role_name(iam, rolename): - ret = iam.get_role(RoleName=rolename) - if ret.get("Role") and ret["Role"].get("Arn"): - return ret["Role"]["Arn"] - raise Exception(f"could not find arn for name {rolename}.") - - def canonicalize_alias_name(alias): if alias is None: return None @@ -1037,15 +973,6 @@ def main(): kms = module.client("kms") - module.deprecate( - ( - "The 'policies' return key is deprecated and will be replaced by 'key_policies'. Both values are returned" - " for now." - ), - date="2024-05-01", - collection_name="amazon.aws", - ) - key_metadata = fetch_key_metadata(kms, module, module.params.get("key_id"), module.params.get("alias")) validate_params(module, key_metadata) diff --git a/ansible_collections/amazon/aws/plugins/modules/kms_key_info.py b/ansible_collections/amazon/aws/plugins/modules/kms_key_info.py index 4ba249940..6f0eb2f4b 100644 --- a/ansible_collections/amazon/aws/plugins/modules/kms_key_info.py +++ b/ansible_collections/amazon/aws/plugins/modules/kms_key_info.py @@ -49,6 +49,8 @@ options: description: Whether to get full details (tags, grants etc.) of keys pending deletion. default: False type: bool +notes: + - The C(policies) return key was removed in amazon.aws release 8.0.0. extends_documentation_fragment: - amazon.aws.common.modules - amazon.aws.region.modules @@ -154,41 +156,6 @@ kms_keys: sample: Name: myKey Purpose: protecting_stuff - policies: - description: List of policy documents for the key. Empty when access is denied even if there are policies. - type: list - returned: always - elements: str - sample: - Version: "2012-10-17" - Id: "auto-ebs-2" - Statement: - - Sid: "Allow access through EBS for all principals in the account that are authorized to use EBS" - Effect: "Allow" - Principal: - AWS: "*" - Action: - - "kms:Encrypt" - - "kms:Decrypt" - - "kms:ReEncrypt*" - - "kms:GenerateDataKey*" - - "kms:CreateGrant" - - "kms:DescribeKey" - Resource: "*" - Condition: - StringEquals: - kms:CallerAccount: "123456789012" - kms:ViaService: "ec2.ap-southeast-2.amazonaws.com" - - Sid: "Allow direct access to key metadata to the account" - Effect: "Allow" - Principal: - AWS: "arn:aws:iam::123456789012:root" - Action: - - "kms:Describe*" - - "kms:Get*" - - "kms:List*" - - "kms:RevokeGrant" - Resource: "*" key_policies: description: List of policy documents for the key. Empty when access is denied even if there are policies. type: list @@ -480,8 +447,8 @@ def get_key_details(connection, module, key_id, tokens=None): result = camel_dict_to_snake_dict(result) result["tags"] = boto3_tag_list_to_ansible_dict(tags, "TagKey", "TagValue") - result["policies"] = get_kms_policies(connection, module, key_id) - result["key_policies"] = [json.loads(policy) for policy in result["policies"]] + policies = get_kms_policies(connection, module, key_id) + result["key_policies"] = [json.loads(policy) for policy in policies] return result @@ -523,15 +490,6 @@ def main(): except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: module.fail_json_aws(e, msg="Failed to connect to AWS") - module.deprecate( - ( - "The 'policies' return key is deprecated and will be replaced by 'key_policies'. Both values are returned" - " for now." - ), - date="2024-05-01", - collection_name="amazon.aws", - ) - all_keys = get_kms_info(connection, module) filtered_keys = [key for key in all_keys if key_matches_filters(key, module.params["filters"])] ret_params = dict(kms_keys=filtered_keys) diff --git a/ansible_collections/amazon/aws/plugins/modules/lambda_event.py b/ansible_collections/amazon/aws/plugins/modules/lambda_event.py index c916ae8e8..424ad5abe 100644 --- a/ansible_collections/amazon/aws/plugins/modules/lambda_event.py +++ b/ansible_collections/amazon/aws/plugins/modules/lambda_event.py @@ -54,22 +54,28 @@ options: type: str source_params: description: - - Sub-parameters required for event source. + - Sub-parameters required for event source. suboptions: source_arn: description: - - The Amazon Resource Name (ARN) of the SQS queue, Kinesis stream or DynamoDB stream that is the event source. + - The Amazon Resource Name (ARN) of the SQS queue, Kinesis stream or DynamoDB stream that is the event source. type: str required: true enabled: description: - - Indicates whether AWS Lambda should begin polling or readin from the event source. + - Indicates whether AWS Lambda should begin polling or readin from the event source. default: true type: bool batch_size: description: - - The largest number of records that AWS Lambda will retrieve from your event source at the time of invoking your function. - default: 100 + - The largest number of records that AWS Lambda will retrieve from your event source at the time of invoking your function. + - Amazon Kinesis - Default V(100). Max V(10000). + - Amazon DynamoDB Streams - Default V(100). Max V(10000). + - Amazon Simple Queue Service - Default V(10). For standard queues the max is V(10000). For FIFO queues the max is V(10). + - Amazon Managed Streaming for Apache Kafka - Default V(100). Max V(10000). + - Self-managed Apache Kafka - Default C(100). Max V(10000). + - Amazon MQ (ActiveMQ and RabbitMQ) - Default V(100). Max V(10000). + - DocumentDB - Default V(100). Max V(10000). type: int starting_position: description: @@ -84,6 +90,15 @@ options: elements: str choices: [ReportBatchItemFailures] version_added: 5.5.0 + maximum_batching_window_in_seconds: + description: + - The maximum amount of time, in seconds, that Lambda spends gathering records before invoking the function. + - You can configure O(source_params.maximum_batching_window_in_seconds) to any value from V(0) seconds to V(300) seconds in increments of seconds. + - For streams and Amazon SQS event sources, when O(source_params.batch_size) is set to a value greater than V(10), + O(source_params.maximum_batching_window_in_seconds) defaults to V(1). + - O(source_params.maximum_batching_window_in_seconds) is not supported by FIFO queues. + type: int + version_added: 8.0.0 required: true type: dict extends_documentation_fragment: @@ -135,9 +150,11 @@ lambda_stream_events: type: list """ +import copy import re try: + from botocore.exceptions import BotoCoreError from botocore.exceptions import ClientError from botocore.exceptions import MissingParametersError from botocore.exceptions import ParamValidationError @@ -146,9 +163,9 @@ except ImportError: from ansible.module_utils.common.dict_transformations import camel_dict_to_snake_dict -from ansible_collections.amazon.aws.plugins.module_utils.botocore import boto3_conn -from ansible_collections.amazon.aws.plugins.module_utils.botocore import get_aws_connection_info +from ansible_collections.amazon.aws.plugins.module_utils.botocore import is_boto3_error_code from ansible_collections.amazon.aws.plugins.module_utils.modules import AnsibleAWSModule +from ansible_collections.amazon.aws.plugins.module_utils.retries import AWSRetry # --------------------------------------------------------------------------------------------------- # @@ -157,122 +174,47 @@ from ansible_collections.amazon.aws.plugins.module_utils.modules import AnsibleA # --------------------------------------------------------------------------------------------------- -class AWSConnection: - """ - Create the connection object and client objects as required. - """ - - def __init__(self, ansible_obj, resources, use_boto3=True): - try: - self.region, self.endpoint, aws_connect_kwargs = get_aws_connection_info(ansible_obj, boto3=use_boto3) - - self.resource_client = dict() - if not resources: - resources = ["lambda"] - - resources.append("iam") - - for resource in resources: - aws_connect_kwargs.update( - dict(region=self.region, endpoint=self.endpoint, conn_type="client", resource=resource) - ) - self.resource_client[resource] = boto3_conn(ansible_obj, **aws_connect_kwargs) - - # if region is not provided, then get default profile/session region - if not self.region: - self.region = self.resource_client["lambda"].meta.region_name - - except (ClientError, ParamValidationError, MissingParametersError) as e: - ansible_obj.fail_json(msg=f"Unable to connect, authorize or access resource: {e}") - - # set account ID - try: - self.account_id = self.resource_client["iam"].get_user()["User"]["Arn"].split(":")[4] - except (ClientError, ValueError, KeyError, IndexError): - self.account_id = "" - - def client(self, resource="lambda"): - return self.resource_client[resource] - - -def pc(key): - """ - Changes python key into Pascale case equivalent. For example, 'this_function_name' becomes 'ThisFunctionName'. - - :param key: - :return: - """ - - return "".join([token.capitalize() for token in key.split("_")]) - - -def ordered_obj(obj): - """ - Order object for comparison purposes - - :param obj: - :return: - """ - - if isinstance(obj, dict): - return sorted((k, ordered_obj(v)) for k, v in obj.items()) - if isinstance(obj, list): - return sorted(ordered_obj(x) for x in obj) - else: - return obj - - -def set_api_sub_params(params): - """ - Sets module sub-parameters to those expected by the boto3 API. - - :param params: - :return: - """ - - api_params = dict() - - for param in params.keys(): - param_value = params.get(param, None) - if param_value: - api_params[pc(param)] = param_value - - return api_params - - -def validate_params(module, aws): +def validate_params(module, client): """ Performs basic parameter validation. - :param module: - :param aws: + :param module: The AnsibleAWSModule object + :param client: The client used to perform requests to AWS :return: """ function_name = module.params["lambda_function_arn"] + qualifier = get_qualifier(module) # validate function name if not re.search(r"^[\w\-:]+$", function_name): module.fail_json( msg=f"Function name {function_name} is invalid. Names must contain only alphanumeric characters and hyphens.", ) - if len(function_name) > 64 and not function_name.startswith("arn:aws:lambda:"): - module.fail_json(msg=f'Function name "{function_name}" exceeds 64 character limit') - elif len(function_name) > 140 and function_name.startswith("arn:aws:lambda:"): - module.fail_json(msg=f'ARN "{function_name}" exceeds 140 character limit') - - # check if 'function_name' needs to be expanded in full ARN format - if not module.params["lambda_function_arn"].startswith("arn:aws:lambda:"): - function_name = module.params["lambda_function_arn"] - module.params["lambda_function_arn"] = f"arn:aws:lambda:{aws.region}:{aws.account_id}:function:{function_name}" - - qualifier = get_qualifier(module) - if qualifier: - function_arn = module.params["lambda_function_arn"] - module.params["lambda_function_arn"] = f"{function_arn}:{qualifier}" + # lamba_fuction_arn contains only the function name (not the arn) + if not function_name.startswith("arn:aws:lambda:"): + if len(function_name) > 64: + module.fail_json(msg=f'Function name "{function_name}" exceeds 64 character limit') + try: + params = {"FunctionName": function_name} + if qualifier: + params["Qualifier"] = qualifier + response = client.get_function(**params) + module.params["lambda_function_arn"] = response["Configuration"]["FunctionArn"] + except is_boto3_error_code("ResourceNotFoundException"): + msg = f"An error occurred: The function '{function_name}' does not exist." + if qualifier: + msg = f"An error occurred: The function '{function_name}' (qualifier={qualifier}) does not exist." + module.fail_json(msg=msg) + except ClientError as e: # pylint: disable=duplicate-except + module.fail_json(msg=f"An error occurred while trying to describe function '{function_name}': {e}") + else: + if len(function_name) > 140: + module.fail_json(msg=f'ARN "{function_name}" exceeds 140 character limit') - return + if qualifier: + module.params["lambda_function_arn"] = f"{function_name}:{qualifier}" def get_qualifier(module): @@ -302,7 +244,38 @@ def get_qualifier(module): # --------------------------------------------------------------------------------------------------- -def lambda_event_stream(module, aws): +def set_default_values(module, source_params): + _source_params_cpy = copy.deepcopy(source_params) + + if module.params["event_source"].lower() == "sqs": + # Default 10. For standard queues the max is 10,000. For FIFO queues the max is 10. + _source_params_cpy.setdefault("batch_size", 10) + + if source_params["source_arn"].endswith(".fifo"): + if _source_params_cpy["batch_size"] > 10: + module.fail_json(msg="For FIFO queues the maximum batch_size is 10.") + if _source_params_cpy.get("maximum_batching_window_in_seconds"): + module.fail_json( + msg="maximum_batching_window_in_seconds is not supported by Amazon SQS FIFO event sources." + ) + else: + if _source_params_cpy["batch_size"] >= 10000: + module.fail_json(msg="For standard queue batch_size must be between lower than 10000.") + + elif module.params["event_source"].lower() == "stream": + # Default 100. + _source_params_cpy.setdefault("batch_size", 100) + + if not (100 <= _source_params_cpy["batch_size"] <= 10000): + module.fail_json(msg="batch_size for streams must be between 100 and 10000") + + if _source_params_cpy["batch_size"] > 10 and not _source_params_cpy.get("maximum_batching_window_in_seconds"): + _source_params_cpy["maximum_batching_window_in_seconds"] = 1 + + return _source_params_cpy + + +def lambda_event_stream(module, client): """ Adds, updates or deletes lambda stream (DynamoDb, Kinesis) event notifications. :param module: @@ -310,7 +283,6 @@ def lambda_event_stream(module, aws): :return: """ - client = aws.client("lambda") facts = dict() changed = False current_state = "absent" @@ -327,15 +299,8 @@ def lambda_event_stream(module, aws): else: module.fail_json(msg="Source parameter 'source_arn' is required for stream event notification.") - # check if optional sub-parameters are valid, if present - batch_size = source_params.get("batch_size") - if batch_size: - try: - source_params["batch_size"] = int(batch_size) - except ValueError: - module.fail_json( - msg=f"Source parameter 'batch_size' must be an integer, found: {source_params['batch_size']}" - ) + if state == "present": + source_params = set_default_values(module, source_params) # optional boolean value needs special treatment as not present does not imply False source_param_enabled = module.boolean(source_params.get("enabled", "True")) @@ -351,18 +316,21 @@ def lambda_event_stream(module, aws): if state == "present": if current_state == "absent": starting_position = source_params.get("starting_position") - if starting_position: + event_source = module.params.get("event_source") + if event_source == "stream": + if not starting_position: + module.fail_json( + msg="Source parameter 'starting_position' is required for stream event notification." + ) api_params.update(StartingPosition=starting_position) - elif module.params.get("event_source") == "sqs": - # starting position is not required for SQS - pass - else: - module.fail_json(msg="Source parameter 'starting_position' is required for stream event notification.") - - if source_arn: - api_params.update(Enabled=source_param_enabled) + + api_params.update(Enabled=source_param_enabled) if source_params.get("batch_size"): api_params.update(BatchSize=source_params.get("batch_size")) + if source_params.get("maximum_batching_window_in_seconds"): + api_params.update( + MaximumBatchingWindowInSeconds=source_params.get("maximum_batching_window_in_seconds") + ) if source_params.get("function_response_types"): api_params.update(FunctionResponseTypes=source_params.get("function_response_types")) @@ -375,9 +343,8 @@ def lambda_event_stream(module, aws): else: # current_state is 'present' - api_params = dict(FunctionName=module.params["lambda_function_arn"]) current_mapping = facts[0] - api_params.update(UUID=current_mapping["UUID"]) + api_params = dict(FunctionName=module.params["lambda_function_arn"], UUID=current_mapping["UUID"]) mapping_changed = False # check if anything changed @@ -426,7 +393,18 @@ def main(): state=dict(required=False, default="present", choices=["present", "absent"]), lambda_function_arn=dict(required=True, aliases=["function_name", "function_arn"]), event_source=dict(required=False, default="stream", choices=source_choices), - source_params=dict(type="dict", required=True), + source_params=dict( + type="dict", + required=True, + options=dict( + source_arn=dict(type="str", required=True), + enabled=dict(type="bool", default=True), + batch_size=dict(type="int"), + starting_position=dict(type="str", choices=["TRIM_HORIZON", "LATEST"]), + function_response_types=dict(type="list", elements="str", choices=["ReportBatchItemFailures"]), + maximum_batching_window_in_seconds=dict(type="int"), + ), + ), alias=dict(required=False, default=None), version=dict(type="int", required=False, default=0), ) @@ -438,12 +416,15 @@ def main(): required_together=[], ) - aws = AWSConnection(module, ["lambda"]) + try: + client = module.client("lambda", retry_decorator=AWSRetry.jittered_backoff()) + except (ClientError, BotoCoreError) as e: + module.fail_json_aws(e, msg="Trying to connect to AWS") - validate_params(module, aws) + validate_params(module, client) if module.params["event_source"].lower() in ("stream", "sqs"): - results = lambda_event_stream(module, aws) + results = lambda_event_stream(module, client) else: module.fail_json(msg="Please select `stream` or `sqs` as the event type") diff --git a/ansible_collections/amazon/aws/plugins/modules/lambda_info.py b/ansible_collections/amazon/aws/plugins/modules/lambda_info.py index 83ba4feaa..fbd443bb7 100644 --- a/ansible_collections/amazon/aws/plugins/modules/lambda_info.py +++ b/ansible_collections/amazon/aws/plugins/modules/lambda_info.py @@ -95,7 +95,7 @@ functions: elements: str architectures: description: The architectures supported by the function. - returned: successful run where botocore >= 1.21.51 + returned: success type: list elements: str sample: ['arm64'] diff --git a/ansible_collections/amazon/aws/plugins/modules/rds_cluster.py b/ansible_collections/amazon/aws/plugins/modules/rds_cluster.py index 0e5634e59..30a7145e7 100644 --- a/ansible_collections/amazon/aws/plugins/modules/rds_cluster.py +++ b/ansible_collections/amazon/aws/plugins/modules/rds_cluster.py @@ -170,7 +170,6 @@ options: - For the full list of DB instance classes and availability for your engine visit U(https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html). - This setting is required to create a Multi-AZ DB cluster. - - I(db_cluster_instance_class) require botocore >= 1.23.44. type: str version_added: 5.5.0 enable_iam_database_authentication: @@ -182,7 +181,6 @@ options: description: - The amount of storage in gibibytes (GiB) to allocate to each DB instance in the Multi-AZ DB cluster. - This setting is required to create a Multi-AZ DB cluster. - - I(allocated_storage) require botocore >= 1.23.44. type: int version_added: 5.5.0 storage_type: @@ -190,7 +188,6 @@ options: - Specifies the storage type to be associated with the DB cluster. - This setting is required to create a Multi-AZ DB cluster. - When specified, a value for the I(iops) parameter is required. - - I(storage_type) require botocore >= 1.23.44. - Defaults to C(io1). type: str choices: @@ -201,7 +198,6 @@ options: - The amount of Provisioned IOPS (input/output operations per second) to be initially allocated for each DB instance in the Multi-AZ DB cluster. - This setting is required to create a Multi-AZ DB cluster - Must be a multiple between .5 and 50 of the storage amount for the DB cluster. - - I(iops) require botocore >= 1.23.44. type: int version_added: 5.5.0 engine: @@ -1174,7 +1170,7 @@ def ensure_present(cluster, parameters, method_name, method_options_name): return changed -def handle_remove_from_global_db(module, cluster): +def handle_remove_from_global_db(cluster): global_cluster_id = module.params.get("global_cluster_identifier") db_cluster_id = module.params.get("db_cluster_identifier") db_cluster_arn = cluster["DBClusterArn"] @@ -1361,7 +1357,7 @@ def main(): if method_name == "delete_db_cluster": if cluster and module.params.get("remove_from_global_db"): if cluster["Engine"] in ["aurora", "aurora-mysql", "aurora-postgresql"]: - changed = handle_remove_from_global_db(module, cluster) + changed = handle_remove_from_global_db(cluster) call_method(client, module, method_name, eval(method_options_name)(parameters)) changed = True @@ -1377,7 +1373,7 @@ def main(): if cluster["Engine"] in ["aurora", "aurora-mysql", "aurora-postgresql"]: if changed: wait_for_cluster_status(client, module, cluster_id, "cluster_available") - changed |= handle_remove_from_global_db(module, cluster) + changed |= handle_remove_from_global_db(cluster) result = camel_dict_to_snake_dict(get_cluster(cluster_id)) diff --git a/ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group.py b/ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group.py new file mode 100644 index 000000000..dc94bca1a --- /dev/null +++ b/ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group.py @@ -0,0 +1,275 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright: Contributors to the Ansible project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: rds_cluster_param_group +version_added: 7.6.0 +short_description: Manage RDS cluster parameter groups +description: + - Creates, modifies, and deletes RDS cluster parameter groups. +options: + state: + description: + - Specifies whether the RDS cluster parameter group should be present or absent. + default: present + choices: [ 'present' , 'absent' ] + type: str + name: + description: + - The name of the RDS cluster parameter group to create, modify or delete. + required: true + type: str + description: + description: + - The description for the RDS cluster parameter group. + - Required for O(state=present). + type: str + db_parameter_group_family: + description: + - The RDS cluster parameter group family name. + - An RDS cluster parameter group can be associated with one and only one RDS cluster parameter group family, + and can be applied only to a RDS cluster running a database engine and engine version compatible with that RDS cluster parameter group family. + - Please use M(amazon.aws.rds_engine_versions_info) module To list all of the available parameter group families for a DB engine. + - The RDS cluster parameter group family is immutable and can't be changed when updating a RDS cluster parameter group. + See U(https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbclusterparametergroup.html) + - Required for O(state=present). + type: str + parameters: + description: + - A list of parameters to update. + type: list + elements: dict + suboptions: + parameter_name: + description: Specifies the name of the parameter. + type: str + required: true + parameter_value: + description: + - Specifies the value of the parameter. + type: str + required: true + apply_method: + description: + - Indicates when to apply parameter updates. + choices: + - immediate + - pending-reboot + type: str + required: true +author: + - "Aubin Bikouo (@abikouo)" +extends_documentation_fragment: + - amazon.aws.common.modules + - amazon.aws.region.modules + - amazon.aws.tags + - amazon.aws.boto3 +""" + +EXAMPLES = r""" +- name: Add or change a parameter group, in this case setting authentication_timeout to 200 + amazon.aws.rds_cluster_param_group: + state: present + name: test-cluster-group + description: 'My test RDS cluster group' + db_parameter_group_family: 'mysql5.6' + parameters: + - parameter_name: authentication_timeout + parameter_value: "200" + apply_method: immediate + tags: + Environment: production + Application: parrot + +- name: Remove a parameter group + amazon.aws.rds_param_group: + state: absent + name: test-cluster-group +""" + +RETURN = r""" +db_cluster_parameter_group: + description: dictionary containing all the RDS cluster parameter group information + returned: success + type: complex + contains: + db_cluster_parameter_group_arn: + description: The Amazon Resource Name (ARN) for the RDS cluster parameter group. + type: str + returned: when state is present + db_cluster_parameter_group_name: + description: The name of the RDS cluster parameter group. + type: str + returned: when state is present + db_parameter_group_family: + description: The name of the RDS parameter group family that this RDS cluster parameter group is compatible with. + type: str + returned: when state is present + description: + description: Provides the customer-specified description for this RDS cluster parameter group. + type: str + returned: when state is present + tags: + description: dictionary of tags + type: dict + returned: when state is present +""" + +from itertools import zip_longest +from typing import Any +from typing import Dict +from typing import List + +try: + import botocore +except ImportError: + pass # Handled by AnsibleAWSModule + +from ansible.module_utils.common.dict_transformations import camel_dict_to_snake_dict +from ansible.module_utils.common.dict_transformations import snake_dict_to_camel_dict + +from ansible_collections.amazon.aws.plugins.module_utils.modules import AnsibleAWSModule +from ansible_collections.amazon.aws.plugins.module_utils.rds import describe_db_cluster_parameter_groups +from ansible_collections.amazon.aws.plugins.module_utils.rds import describe_db_cluster_parameters +from ansible_collections.amazon.aws.plugins.module_utils.rds import ensure_tags +from ansible_collections.amazon.aws.plugins.module_utils.rds import get_tags +from ansible_collections.amazon.aws.plugins.module_utils.retries import AWSRetry +from ansible_collections.amazon.aws.plugins.module_utils.tagging import ansible_dict_to_boto3_tag_list + + +def modify_parameters( + module: AnsibleAWSModule, connection: Any, group_name: str, parameters: List[Dict[str, Any]] +) -> bool: + current_params = describe_db_cluster_parameters(module, connection, group_name) + parameters = snake_dict_to_camel_dict(parameters, capitalize_first=True) + # compare current resource parameters with the value from module parameters + changed = False + for param in parameters: + found = False + for current_p in current_params: + if param.get("ParameterName") == current_p.get("ParameterName"): + found = True + if not current_p["IsModifiable"]: + module.fail_json(f"The parameter {param.get('ParameterName')} cannot be modified") + changed |= any((current_p.get(k) != v for k, v in param.items())) + if not found: + module.fail_json(msg=f"Could not find parameter with name: {param.get('ParameterName')}") + if changed: + if not module.check_mode: + # When calling modify_db_cluster_parameter_group() function + # A maximum of 20 parameters can be modified in a single request. + # This is why we are creating chunk containing at max 20 items + for chunk in zip_longest(*[iter(parameters)] * 20, fillvalue=None): + non_empty_chunk = [item for item in chunk if item] + try: + connection.modify_db_cluster_parameter_group( + aws_retry=True, DBClusterParameterGroupName=group_name, Parameters=non_empty_chunk + ) + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Couldn't update RDS cluster parameters") + return changed + + +def ensure_present(module: AnsibleAWSModule, connection: Any) -> None: + group_name = module.params["name"] + db_parameter_group_family = module.params["db_parameter_group_family"] + tags = module.params.get("tags") + purge_tags = module.params.get("purge_tags") + changed = False + + response = describe_db_cluster_parameter_groups(module=module, connection=connection, group_name=group_name) + if not response: + # Create RDS cluster parameter group + params = dict( + DBClusterParameterGroupName=group_name, + DBParameterGroupFamily=db_parameter_group_family, + Description=module.params["description"], + ) + if tags: + params["Tags"] = ansible_dict_to_boto3_tag_list(tags) + if module.check_mode: + module.exit_json(changed=True, msg="Would have create RDS parameter group if not in check mode.") + try: + response = connection.create_db_cluster_parameter_group(aws_retry=True, **params) + changed = True + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Couldn't create parameter group") + else: + group = response[0] + if db_parameter_group_family != group["DBParameterGroupFamily"]: + module.warn( + "The RDS cluster parameter group family is immutable and can't be changed when updating a RDS cluster parameter group." + ) + + if tags: + existing_tags = get_tags(connection, module, group["DBClusterParameterGroupArn"]) + changed = ensure_tags( + connection, module, group["DBClusterParameterGroupArn"], existing_tags, tags, purge_tags + ) + + parameters = module.params.get("parameters") + if parameters: + changed |= modify_parameters(module, connection, group_name, parameters) + + response = describe_db_cluster_parameter_groups(module=module, connection=connection, group_name=group_name) + group = camel_dict_to_snake_dict(response[0]) + group["tags"] = get_tags(connection, module, group["db_cluster_parameter_group_arn"]) + + module.exit_json(changed=changed, db_cluster_parameter_group=group) + + +def ensure_absent(module: AnsibleAWSModule, connection: Any) -> None: + group = module.params["name"] + response = describe_db_cluster_parameter_groups(module=module, connection=connection, group_name=group) + if not response: + module.exit_json(changed=False, msg="The RDS cluster parameter group does not exist.") + + if not module.check_mode: + try: + response = connection.delete_db_cluster_parameter_group(aws_retry=True, DBClusterParameterGroupName=group) + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Couldn't delete RDS cluster parameter group") + module.exit_json(changed=True) + + +def main() -> None: + argument_spec = dict( + state=dict(default="present", choices=["present", "absent"]), + name=dict(required=True), + db_parameter_group_family=dict(), + description=dict(), + tags=dict(type="dict", aliases=["resource_tags"]), + purge_tags=dict(type="bool", default=True), + parameters=dict( + type="list", + elements="dict", + options=dict( + parameter_name=dict(required=True), + parameter_value=dict(required=True), + apply_method=dict(choices=["immediate", "pending-reboot"], required=True), + ), + ), + ) + module = AnsibleAWSModule( + argument_spec=argument_spec, + required_if=[["state", "present", ["description", "db_parameter_group_family"]]], + supports_check_mode=True, + ) + + try: + connection = module.client("rds", retry_decorator=AWSRetry.jittered_backoff()) + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Failed to connect to AWS") + + if module.params.get("state") == "present": + ensure_present(module=module, connection=connection) + else: + ensure_absent(module=module, connection=connection) + + +if __name__ == "__main__": + main() diff --git a/ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group_info.py b/ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group_info.py new file mode 100644 index 000000000..bad0433a7 --- /dev/null +++ b/ansible_collections/amazon/aws/plugins/modules/rds_cluster_param_group_info.py @@ -0,0 +1,157 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024 Aubin Bikouo (@abikouo) +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +module: rds_cluster_param_group_info +version_added: 7.6.0 +short_description: Describes the properties of specific RDS cluster parameter group. +description: + - Obtain information about a list or one specific RDS cluster parameter group. +options: + name: + description: + - The RDS cluster parameter group name. + type: str + include_parameters: + description: + - Specifies whether to include the detailed parameters of the RDS cluster parameter group. + - V(all) include all parameters. + - V(engine-default) include engine-default parameters. + - V(system) include system parameters. + - V(user) include user parameters. + type: str + choices: + - all + - engine-default + - system + - user +author: + - Aubin Bikouo (@abikouo) +extends_documentation_fragment: + - amazon.aws.common.modules + - amazon.aws.region.modules + - amazon.aws.boto3 +""" + +EXAMPLES = r""" +- name: Describe a specific RDS cluster parameter group + amazon.aws.rds_cluster_param_group_info: + name: myrdsclustergroup + +- name: Describe all RDS cluster parameter group + amazon.aws.rds_cluster_param_group_info: + +- name: Describe a specific RDS cluster parameter group including user parameters + amazon.aws.rds_cluster_param_group_info: + name: myrdsclustergroup + include_parameters: user +""" + +RETURN = r""" +db_cluster_parameter_groups: + description: List of RDS cluster parameter groups. + returned: always + type: list + contains: + db_cluster_parameter_group_name: + description: + - The name of the RDS cluster parameter group. + type: str + db_parameter_group_family: + description: + - The name of the RDS parameter group family that this RDS cluster parameter group is compatible with. + type: str + description: + description: + - Provides the customer-specified description for this RDS cluster parameter group. + type: str + db_cluster_parameter_group_arn: + description: + - The Amazon Resource Name (ARN) for the RDS cluster parameter group. + type: str + db_parameters: + description: + - Provides a list of parameters for the RDS cluster parameter group. + returned: When O(include_parameters) is set + type: list + elements: dict + sample: [ + { + "allowed_values": "1-600", + "apply_method": "pending-reboot", + "apply_type": "dynamic", + "data_type": "integer", + "description": "(s) Sets the maximum allowed time to complete client authentication.", + "is_modifiable": true, + "parameter_name": "authentication_timeout", + "parameter_value": "100", + "source": "user", + "supported_engine_modes": [ + "provisioned" + ] + } + ] + tags: + description: A dictionary of key value pairs. + type: dict + sample: { + "Name": "rds-cluster-demo" + } +""" + +from typing import Any + +try: + import botocore +except ImportError: + pass # handled by AnsibleAWSModule + +from ansible.module_utils.common.dict_transformations import camel_dict_to_snake_dict + +from ansible_collections.amazon.aws.plugins.module_utils.modules import AnsibleAWSModule +from ansible_collections.amazon.aws.plugins.module_utils.rds import describe_db_cluster_parameter_groups +from ansible_collections.amazon.aws.plugins.module_utils.rds import describe_db_cluster_parameters +from ansible_collections.amazon.aws.plugins.module_utils.rds import get_tags +from ansible_collections.amazon.aws.plugins.module_utils.retries import AWSRetry + + +def describe_rds_cluster_parameter_group(connection: Any, module: AnsibleAWSModule) -> None: + group_name = module.params.get("name") + include_parameters = module.params.get("include_parameters") + results = [] + response = describe_db_cluster_parameter_groups(module, connection, group_name) + if response: + for resource in response: + resource["tags"] = get_tags(connection, module, resource["DBClusterParameterGroupArn"]) + if include_parameters is not None: + resource["db_parameters"] = describe_db_cluster_parameters( + module, connection, resource["DBClusterParameterGroupName"], include_parameters + ) + results.append(camel_dict_to_snake_dict(resource, ignore_list=["tags"])) + module.exit_json(changed=False, db_cluster_parameter_groups=results) + + +def main() -> None: + argument_spec = dict( + name=dict(), + include_parameters=dict(choices=["user", "all", "system", "engine-default"]), + ) + + module = AnsibleAWSModule( + argument_spec=argument_spec, + supports_check_mode=True, + ) + + try: + client = module.client("rds", retry_decorator=AWSRetry.jittered_backoff(retries=10)) + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Failed to connect to AWS.") + + describe_rds_cluster_parameter_group(client, module) + + +if __name__ == "__main__": + main() diff --git a/ansible_collections/amazon/aws/plugins/modules/rds_engine_versions_info.py b/ansible_collections/amazon/aws/plugins/modules/rds_engine_versions_info.py new file mode 100644 index 000000000..c2391946c --- /dev/null +++ b/ansible_collections/amazon/aws/plugins/modules/rds_engine_versions_info.py @@ -0,0 +1,388 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024 Aubin Bikouo (@abikouo) +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +module: rds_engine_versions_info +version_added: 7.6.0 +short_description: Describes the properties of specific versions of DB engines. +description: + - Obtain information about a specific versions of DB engines. +options: + engine: + description: + - The database engine to return version details for. + type: str + choices: + - aurora-mysql + - aurora-postgresql + - custom-oracle-ee + - db2-ae + - db2-se + - mariadb + - mysql + - oracle-ee + - oracle-ee-cdb + - oracle-se2 + - oracle-se2-cdb + - postgres + - sqlserver-ee + - sqlserver-se + - sqlserver-ex + - sqlserver-web + engine_version: + description: + - A specific database engine version to return details for. + type: str + db_parameter_group_family: + description: + - The name of a specific RDS parameter group family to return details for. + type: str + default_only: + description: + - Specifies whether to return only the default version of the specified engine + or the engine and major version combination. + type: bool + default: False + filters: + description: + - A filter that specifies one or more DB engine versions to describe. + See U(https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBEngineVersions.html). + type: dict +author: + - Aubin Bikouo (@abikouo) +extends_documentation_fragment: + - amazon.aws.common.modules + - amazon.aws.region.modules + - amazon.aws.boto3 +""" + +EXAMPLES = r""" +- name: List all of the available parameter group families for the Aurora PostgreSQL DB engine + amazon.aws.rds_engine_versions_info: + engine: aurora-postgresql + +- name: List all of the available parameter group families for the Aurora PostgreSQL DB engine on a specific version + amazon.aws.rds_engine_versions_info: + engine: aurora-postgresql + engine_version: 16.1 + +- name: Get default engine version for DB parameter group family postgres16 + amazon.aws.rds_engine_versions_info: + engine: postgres + default_only: true + db_parameter_group_family: postgres16 +""" + +RETURN = r""" +db_engine_versions: + description: List of RDS engine versions. + returned: always + type: list + contains: + engine: + description: + - The name of the database engine. + type: str + engine_version: + description: + - The version number of the database engine. + type: str + db_parameter_group_family: + description: + - The name of the DB parameter group family for the database engine. + type: str + db_engine_description: + description: + - The description of the database engine. + type: str + db_engine_version_description: + description: + - The description of the database engine version. + type: str + default_character_set: + description: + - The default character set for new instances of this engine version. + type: dict + sample: { + "character_set_description": "Unicode 5.0 UTF-8 Universal character set", + "character_set_name": "AL32UTF8" + } + image: + description: + - The EC2 image + type: complex + contains: + image_id: + description: + - A value that indicates the ID of the AMI. + type: str + status: + description: + - A value that indicates the status of a custom engine version (CEV). + type: str + db_engine_media_type: + description: + - A value that indicates the source media provider of the AMI based on the usage operation. + type: str + supported_character_sets: + description: + - A list of the character sets supported by this engine for the CharacterSetName parameter of the CreateDBInstance operation. + type: list + elements: dict + contains: + character_set_name: + description: + - The name of the character set. + type: str + character_set_description: + description: + - The description of the character set. + type: str + supported_nchar_character_sets: + description: + - A list of the character sets supported by the Oracle DB engine. + type: list + elements: dict + contains: + character_set_name: + description: + - The name of the character set. + type: str + character_set_description: + description: + - The description of the character set. + type: str + valid_upgrade_target: + description: + - A list of engine versions that this database engine version can be upgraded to. + type: list + elements: dict + sample: [ + { + "auto_upgrade": false, + "description": "Aurora PostgreSQL (Compatible with PostgreSQL 15.5)", + "engine": "aurora-postgresql", + "engine_version": "15.5", + "is_major_version_upgrade": false, + "supported_engine_modes": [ + "provisioned" + ], + "supports_babelfish": true, + "supports_global_databases": true, + "supports_integrations": false, + "supports_local_write_forwarding": true, + "supports_parallel_query": false + } + ] + supported_timezones: + description: + - A list of the time zones supported by this engine for the Timezone parameter of the CreateDBInstance action. + type: list + elements: dict + sample: [ + {"TimezoneName": "xxx"} + ] + exportable_log_types: + description: + - The types of logs that the database engine has available for export to CloudWatch Logs. + type: list + elements: str + supports_log_exports_to_cloudwatchLogs: + description: + - Indicates whether the engine version supports exporting the log types specified by ExportableLogTypes to CloudWatch Logs. + type: bool + supports_read_replica: + description: + - Indicates whether the database engine version supports read replicas. + type: bool + supported_engine_modes: + description: + - A list of the supported DB engine modes. + type: list + elements: str + supported_feature_names: + description: + - A list of features supported by the DB engine. + type: list + elements: str + sample: [ + "Comprehend", + "Lambda", + "s3Export", + "s3Import", + "SageMaker" + ] + status: + description: + - The status of the DB engine version, either available or deprecated. + type: str + supports_parallel_query: + description: + - Indicates whether you can use Aurora parallel query with a specific DB engine version. + type: bool + supports_global_databases: + description: + - Indicates whether you can use Aurora global databases with a specific DB engine version. + type: bool + major_engine_version: + description: + - The major engine version of the CEV. + type: str + database_installation_files_s3_bucket_name: + description: + - The name of the Amazon S3 bucket that contains your database installation files. + type: str + database_installation_files_s3_prefix: + description: + - The Amazon S3 directory that contains the database installation files. + type: str + db_engine_version_arn: + description: + - The ARN of the custom engine version. + type: str + kms_key_id: + description: + - The Amazon Web Services KMS key identifier for an encrypted CEV. + type: str + create_time: + description: + - The creation time of the DB engine version. + type: str + tags: + description: A dictionary of key value pairs. + type: dict + sample: { + "some": "tag" + } + supports_babelfish: + description: + - Indicates whether the engine version supports Babelfish for Aurora PostgreSQL. + type: bool + custom_db_engine_version_manifest: + description: + - JSON string that lists the installation files and parameters that RDS Custom uses to create a custom engine version (CEV). + type: str + supports_certificate_rotation_without_restart: + description: + - Indicates whether the engine version supports rotating the server certificate without rebooting the DB instance. + type: bool + supported_ca_certificate_identifiers: + description: + - A list of the supported CA certificate identifiers. + type: list + elements: str + sample: [ + "rds-ca-2019", + "rds-ca-ecc384-g1", + "rds-ca-rsa4096-g1", + "rds-ca-rsa2048-g1" + ] + supports_local_write_forwarding: + description: + - Indicates whether the DB engine version supports forwarding write operations from reader DB instances to the writer DB instance in the DB cluster. + type: bool + supports_integrations: + description: + - Indicates whether the DB engine version supports zero-ETL integrations with Amazon Redshift. + type: bool +""" + +from typing import Any +from typing import Dict +from typing import List + +try: + import botocore +except ImportError: + pass # handled by AnsibleAWSModule + +from ansible.module_utils.common.dict_transformations import camel_dict_to_snake_dict + +from ansible_collections.amazon.aws.plugins.module_utils.modules import AnsibleAWSModule +from ansible_collections.amazon.aws.plugins.module_utils.retries import AWSRetry +from ansible_collections.amazon.aws.plugins.module_utils.tagging import boto3_tag_list_to_ansible_dict + + +@AWSRetry.jittered_backoff(retries=10) +def _describe_db_engine_versions(connection: Any, **params: Dict[str, Any]) -> List[Dict[str, Any]]: + paginator = connection.get_paginator("describe_db_engine_versions") + return paginator.paginate(**params).build_full_result()["DBEngineVersions"] + + +def describe_db_engine_versions(connection: Any, module: AnsibleAWSModule) -> Dict[str, Any]: + engine = module.params.get("engine") + engine_version = module.params.get("engine_version") + db_parameter_group_family = module.params.get("db_parameter_group_family") + default_only = module.params.get("default_only") + filters = module.params.get("filters") + + params = {"DefaultOnly": default_only} + if engine: + params["Engine"] = engine + if engine_version: + params["EngineVersion"] = engine_version + if db_parameter_group_family: + params["DBParameterGroupFamily"] = db_parameter_group_family + if filters: + params["Filters"] = filters + + try: + result = _describe_db_engine_versions(connection, **params) + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, "Couldn't get RDS engine versions.") + + def _transform_item(v): + tag_list = v.pop("TagList", []) + v = camel_dict_to_snake_dict(v) + v["tags"] = boto3_tag_list_to_ansible_dict(tag_list) + return v + + return dict(changed=False, db_engine_versions=[_transform_item(v) for v in result]) + + +def main() -> None: + argument_spec = dict( + engine=dict( + choices=[ + "aurora-mysql", + "aurora-postgresql", + "custom-oracle-ee", + "db2-ae", + "db2-se", + "mariadb", + "mysql", + "oracle-ee", + "oracle-ee-cdb", + "oracle-se2", + "oracle-se2-cdb", + "postgres", + "sqlserver-ee", + "sqlserver-se", + "sqlserver-ex", + "sqlserver-web", + ] + ), + engine_version=dict(), + db_parameter_group_family=dict(), + default_only=dict(type="bool", default=False), + filters=dict(type="dict"), + ) + + module = AnsibleAWSModule( + argument_spec=argument_spec, + supports_check_mode=True, + ) + + try: + client = module.client("rds", retry_decorator=AWSRetry.jittered_backoff(retries=10)) + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Failed to connect to AWS.") + + module.exit_json(**describe_db_engine_versions(client, module)) + + +if __name__ == "__main__": + main() diff --git a/ansible_collections/amazon/aws/plugins/modules/rds_instance.py b/ansible_collections/amazon/aws/plugins/modules/rds_instance.py index 4451d7638..0362df0ba 100644 --- a/ansible_collections/amazon/aws/plugins/modules/rds_instance.py +++ b/ansible_collections/amazon/aws/plugins/modules/rds_instance.py @@ -43,7 +43,9 @@ options: type: bool default: false purge_cloudwatch_logs_exports: - description: Set to C(false) to retain any enabled cloudwatch logs that aren't specified in the task and are associated with the instance. + description: + - Set to C(false) to retain any enabled cloudwatch logs that aren't specified in the task and are associated with the instance. + - Set I(enable_cloudwatch_logs_exports) to an empty list to disable all. type: bool default: true read_replica: @@ -1028,7 +1030,7 @@ def get_options_with_changing_values(client, module, parameters): parameters["DBPortNumber"] = port if not force_update_password: parameters.pop("MasterUserPassword", None) - if cloudwatch_logs_enabled: + if cloudwatch_logs_enabled is not None: parameters["CloudwatchLogsExportConfiguration"] = cloudwatch_logs_enabled if not module.params["storage_type"]: parameters.pop("Iops", None) @@ -1162,8 +1164,7 @@ def get_current_attributes_with_inconsistent_keys(instance): def get_changing_options_with_inconsistent_keys(modify_params, instance, purge_cloudwatch_logs, purge_security_groups): changing_params = {} current_options = get_current_attributes_with_inconsistent_keys(instance) - for option in current_options: - current_option = current_options[option] + for option, current_option in current_options.items(): desired_option = modify_params.pop(option, None) if desired_option is None: continue @@ -1565,8 +1566,7 @@ def main(): instance = get_instance(client, module, instance_id) if instance: break - else: - sleep(5) + sleep(5) if state == "absent" and changed and not module.params["skip_final_snapshot"]: instance.update( diff --git a/ansible_collections/amazon/aws/plugins/modules/rds_instance_param_group.py b/ansible_collections/amazon/aws/plugins/modules/rds_instance_param_group.py new file mode 100644 index 000000000..82d0112fd --- /dev/null +++ b/ansible_collections/amazon/aws/plugins/modules/rds_instance_param_group.py @@ -0,0 +1,361 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright: Contributors to the Ansible project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: rds_instance_param_group +version_added: 5.0.0 +short_description: manage RDS parameter groups +description: + - Creates, modifies, and deletes RDS parameter groups. + - This module was originally added to C(community.aws) in release 1.0.0. +options: + state: + description: + - Specifies whether the group should be present or absent. + required: true + choices: [ 'present' , 'absent' ] + type: str + name: + description: + - Database parameter group identifier. + required: true + type: str + description: + description: + - Database parameter group description. Only set when a new group is added. + type: str + engine: + description: + - The type of database for this group. + - Please use M(amazon.aws.rds_engine_versions_info) to get list of all supported db engines and their respective versions. + - The DB parameter group family is immutable and can't be changed when updating a DB parameter group. + See U(https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbparametergroup.html) + - Required for I(state=present). + type: str + immediate: + description: + - Whether to apply the changes immediately, or after the next reboot of any associated instances. + aliases: + - apply_immediately + type: bool + params: + description: + - Map of parameter names and values. Numeric values may be represented as K for kilo (1024), M for mega (1024^2), G for giga (1024^3), + or T for tera (1024^4), and these values will be expanded into the appropriate number before being set in the parameter group. + aliases: [parameters] + type: dict +author: + - "Scott Anderson (@tastychutney)" + - "Will Thames (@willthames)" +extends_documentation_fragment: + - amazon.aws.common.modules + - amazon.aws.region.modules + - amazon.aws.tags + - amazon.aws.boto3 +""" + +EXAMPLES = r""" +- name: Add or change a parameter group, in this case setting auto_increment_increment to 42 * 1024 + amazon.aws.rds_instance_param_group: + state: present + name: norwegian-blue + description: 'My Fancy Ex Parrot Group' + engine: 'mysql5.6' + params: + auto_increment_increment: "42K" + tags: + Environment: production + Application: parrot + +- name: Remove a parameter group + amazon.aws.rds_instance_param_group: + state: absent + name: norwegian-blue +""" + +RETURN = r""" +db_parameter_group_name: + description: Name of DB parameter group + type: str + returned: when state is present +db_parameter_group_family: + description: DB parameter group family that this DB parameter group is compatible with. + type: str + returned: when state is present +db_parameter_group_arn: + description: ARN of the DB parameter group + type: str + returned: when state is present +description: + description: description of the DB parameter group + type: str + returned: when state is present +errors: + description: list of errors from attempting to modify parameters that are not modifiable + type: list + returned: when state is present +tags: + description: dictionary of tags + type: dict + returned: when state is present +""" + +from itertools import zip_longest + +try: + import botocore +except ImportError: + pass # Handled by AnsibleAWSModule + +from ansible.module_utils.common.dict_transformations import camel_dict_to_snake_dict +from ansible.module_utils.parsing.convert_bool import BOOLEANS_TRUE +from ansible.module_utils.six import string_types + +from ansible_collections.amazon.aws.plugins.module_utils.botocore import is_boto3_error_code +from ansible_collections.amazon.aws.plugins.module_utils.modules import AnsibleAWSModule +from ansible_collections.amazon.aws.plugins.module_utils.retries import AWSRetry +from ansible_collections.amazon.aws.plugins.module_utils.tagging import ansible_dict_to_boto3_tag_list +from ansible_collections.amazon.aws.plugins.module_utils.tagging import boto3_tag_list_to_ansible_dict +from ansible_collections.amazon.aws.plugins.module_utils.tagging import compare_aws_tags + +INT_MODIFIERS = { + "K": 1024, + "M": pow(1024, 2), + "G": pow(1024, 3), + "T": pow(1024, 4), +} + + +@AWSRetry.jittered_backoff() +def _describe_db_parameters(connection, **params): + try: + paginator = connection.get_paginator("describe_db_parameters") + return paginator.paginate(**params).build_full_result() + except is_boto3_error_code("DBParameterGroupNotFound"): + return None + + +def convert_parameter(param, value): + """ + Allows setting parameters with 10M = 10* 1024 * 1024 and so on. + """ + converted_value = value + + if param["DataType"] == "integer": + if isinstance(value, string_types): + try: + for name, modifier in INT_MODIFIERS.items(): + if value.endswith(name): + converted_value = int(value[:-1]) * modifier + except ValueError: + # may be based on a variable (ie. {foo*3/4}) so + # just pass it on through to the AWS SDK + pass + elif isinstance(value, bool): + converted_value = 1 if value else 0 + + elif param["DataType"] == "boolean": + if isinstance(value, string_types): + converted_value = value in BOOLEANS_TRUE + # convert True/False to 1/0 + converted_value = 1 if converted_value else 0 + return str(converted_value) + + +def update_parameters(module, connection): + groupname = module.params["name"] + desired = module.params["params"] + apply_method = "immediate" if module.params["immediate"] else "pending-reboot" + errors = [] + modify_list = [] + existing = {} + try: + _existing = _describe_db_parameters(connection, DBParameterGroupName=groupname) + if _existing: + existing = _existing["Parameters"] + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Failed to describe existing parameter groups") + lookup = dict((param["ParameterName"], param) for param in existing) + for param_key, param_value in desired.items(): + if param_key not in lookup: + errors.append( + f"Parameter {param_key} is not an available parameter for the {module.params.get('engine')} engine" + ) + else: + converted_value = convert_parameter(lookup[param_key], param_value) + # engine-default parameters do not have a ParameterValue, so we'll always override those. + if converted_value != lookup[param_key].get("ParameterValue"): + if lookup[param_key]["IsModifiable"]: + modify_list.append( + dict(ParameterValue=converted_value, ParameterName=param_key, ApplyMethod=apply_method) + ) + else: + errors.append(f"Parameter {param_key} is not modifiable") + + # modify_db_parameters takes at most 20 parameters + if modify_list and not module.check_mode: + for modify_slice in zip_longest(*[iter(modify_list)] * 20, fillvalue=None): + non_empty_slice = [item for item in modify_slice if item] + try: + connection.modify_db_parameter_group( + aws_retry=True, DBParameterGroupName=groupname, Parameters=non_empty_slice + ) + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Couldn't update parameters") + return True, errors + return False, errors + + +def update_tags(module, connection, group, tags): + if tags is None: + return False + changed = False + + existing_tags = connection.list_tags_for_resource(aws_retry=True, ResourceName=group["DBParameterGroupArn"])[ + "TagList" + ] + to_update, to_delete = compare_aws_tags( + boto3_tag_list_to_ansible_dict(existing_tags), tags, module.params["purge_tags"] + ) + + if module.check_mode: + if not to_update and not to_delete: + return False + else: + return True + + if to_update: + try: + connection.add_tags_to_resource( + aws_retry=True, + ResourceName=group["DBParameterGroupArn"], + Tags=ansible_dict_to_boto3_tag_list(to_update), + ) + changed = True + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Couldn't add tags to parameter group") + if to_delete: + try: + connection.remove_tags_from_resource( + aws_retry=True, ResourceName=group["DBParameterGroupArn"], TagKeys=to_delete + ) + changed = True + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Couldn't remove tags from parameter group") + return changed + + +def ensure_present(module, connection): + groupname = module.params["name"] + tags = module.params.get("tags") + changed = False + errors = [] + try: + response = connection.describe_db_parameter_groups(aws_retry=True, DBParameterGroupName=groupname) + except is_boto3_error_code("DBParameterGroupNotFound"): + response = None + except botocore.exceptions.ClientError as e: # pylint: disable=duplicate-except + module.fail_json_aws(e, msg="Couldn't access parameter group information") + if not response: + params = dict( + DBParameterGroupName=groupname, + DBParameterGroupFamily=module.params["engine"], + Description=module.params["description"], + ) + if tags: + params["Tags"] = ansible_dict_to_boto3_tag_list(tags) + if not module.check_mode: + try: + response = connection.create_db_parameter_group(aws_retry=True, **params) + changed = True + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Couldn't create parameter group") + else: + group = response["DBParameterGroups"][0] + db_parameter_group_family = group["DBParameterGroupFamily"] + + if module.params.get("engine") != db_parameter_group_family: + module.warn("The DB parameter group family (engine) can't be changed when updating a DB parameter group.") + + if tags: + changed = update_tags(module, connection, group, tags) + + if module.params.get("params"): + params_changed, errors = update_parameters(module, connection) + changed = changed or params_changed + + try: + response = connection.describe_db_parameter_groups(aws_retry=True, DBParameterGroupName=groupname) + group = camel_dict_to_snake_dict(response["DBParameterGroups"][0]) + except is_boto3_error_code("DBParameterGroupNotFound"): + module.exit_json(changed=True, errors=errors) + except ( + botocore.exceptions.ClientError, + botocore.exceptions.BotoCoreError, + ) as e: # pylint: disable=duplicate-except + module.fail_json_aws(e, msg="Couldn't obtain parameter group information") + try: + tags = connection.list_tags_for_resource(aws_retry=True, ResourceName=group["db_parameter_group_arn"])[ + "TagList" + ] + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Couldn't obtain parameter group tags") + group["tags"] = boto3_tag_list_to_ansible_dict(tags) + + module.exit_json(changed=changed, errors=errors, **group) + + +def ensure_absent(module, connection): + group = module.params["name"] + try: + response = connection.describe_db_parameter_groups(DBParameterGroupName=group) + except is_boto3_error_code("DBParameterGroupNotFound"): + module.exit_json(changed=False) + except botocore.exceptions.ClientError as e: # pylint: disable=duplicate-except + module.fail_json_aws(e, msg="Couldn't access parameter group information") + + if response and module.check_mode: + module.exit_json(changed=True) + + try: + response = connection.delete_db_parameter_group(aws_retry=True, DBParameterGroupName=group) + module.exit_json(changed=True) + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Couldn't delete parameter group") + + +def main(): + argument_spec = dict( + state=dict(required=True, choices=["present", "absent"]), + name=dict(required=True), + engine=dict(), + description=dict(), + params=dict(aliases=["parameters"], type="dict"), + immediate=dict(type="bool", aliases=["apply_immediately"]), + tags=dict(type="dict", aliases=["resource_tags"]), + purge_tags=dict(type="bool", default=True), + ) + module = AnsibleAWSModule( + argument_spec=argument_spec, + required_if=[["state", "present", ["description", "engine"]]], + supports_check_mode=True, + ) + + try: + conn = module.client("rds", retry_decorator=AWSRetry.jittered_backoff()) + except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: + module.fail_json_aws(e, msg="Failed to connect to AWS") + + state = module.params.get("state") + if state == "present": + ensure_present(module, conn) + if state == "absent": + ensure_absent(module, conn) + + +if __name__ == "__main__": + main() diff --git a/ansible_collections/amazon/aws/plugins/modules/rds_param_group.py b/ansible_collections/amazon/aws/plugins/modules/rds_param_group.py deleted file mode 100644 index abdb57c9b..000000000 --- a/ansible_collections/amazon/aws/plugins/modules/rds_param_group.py +++ /dev/null @@ -1,362 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# Copyright: Contributors to the Ansible project -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -DOCUMENTATION = r""" ---- -module: rds_param_group -version_added: 5.0.0 -short_description: manage RDS parameter groups -description: - - Creates, modifies, and deletes RDS parameter groups. - - This module was originally added to C(community.aws) in release 1.0.0. -options: - state: - description: - - Specifies whether the group should be present or absent. - required: true - choices: [ 'present' , 'absent' ] - type: str - name: - description: - - Database parameter group identifier. - required: true - type: str - description: - description: - - Database parameter group description. Only set when a new group is added. - type: str - engine: - description: - - The type of database for this group. - - Please use following command to get list of all supported db engines and their respective versions. - - '# aws rds describe-db-engine-versions --query "DBEngineVersions[].DBParameterGroupFamily"' - - The DB parameter group family is immutable and can't be changed when updating a DB parameter group. - See U(https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rds-dbparametergroup.html) - - Required for I(state=present). - type: str - immediate: - description: - - Whether to apply the changes immediately, or after the next reboot of any associated instances. - aliases: - - apply_immediately - type: bool - params: - description: - - Map of parameter names and values. Numeric values may be represented as K for kilo (1024), M for mega (1024^2), G for giga (1024^3), - or T for tera (1024^4), and these values will be expanded into the appropriate number before being set in the parameter group. - aliases: [parameters] - type: dict -author: - - "Scott Anderson (@tastychutney)" - - "Will Thames (@willthames)" -extends_documentation_fragment: - - amazon.aws.common.modules - - amazon.aws.region.modules - - amazon.aws.tags - - amazon.aws.boto3 -""" - -EXAMPLES = r""" -- name: Add or change a parameter group, in this case setting auto_increment_increment to 42 * 1024 - amazon.aws.rds_param_group: - state: present - name: norwegian-blue - description: 'My Fancy Ex Parrot Group' - engine: 'mysql5.6' - params: - auto_increment_increment: "42K" - tags: - Environment: production - Application: parrot - -- name: Remove a parameter group - amazon.aws.rds_param_group: - state: absent - name: norwegian-blue -""" - -RETURN = r""" -db_parameter_group_name: - description: Name of DB parameter group - type: str - returned: when state is present -db_parameter_group_family: - description: DB parameter group family that this DB parameter group is compatible with. - type: str - returned: when state is present -db_parameter_group_arn: - description: ARN of the DB parameter group - type: str - returned: when state is present -description: - description: description of the DB parameter group - type: str - returned: when state is present -errors: - description: list of errors from attempting to modify parameters that are not modifiable - type: list - returned: when state is present -tags: - description: dictionary of tags - type: dict - returned: when state is present -""" - -from itertools import zip_longest - -try: - import botocore -except ImportError: - pass # Handled by AnsibleAWSModule - -from ansible.module_utils.common.dict_transformations import camel_dict_to_snake_dict -from ansible.module_utils.parsing.convert_bool import BOOLEANS_TRUE -from ansible.module_utils.six import string_types - -from ansible_collections.amazon.aws.plugins.module_utils.botocore import is_boto3_error_code -from ansible_collections.amazon.aws.plugins.module_utils.modules import AnsibleAWSModule -from ansible_collections.amazon.aws.plugins.module_utils.retries import AWSRetry -from ansible_collections.amazon.aws.plugins.module_utils.tagging import ansible_dict_to_boto3_tag_list -from ansible_collections.amazon.aws.plugins.module_utils.tagging import boto3_tag_list_to_ansible_dict -from ansible_collections.amazon.aws.plugins.module_utils.tagging import compare_aws_tags - -INT_MODIFIERS = { - "K": 1024, - "M": pow(1024, 2), - "G": pow(1024, 3), - "T": pow(1024, 4), -} - - -@AWSRetry.jittered_backoff() -def _describe_db_parameters(connection, **params): - try: - paginator = connection.get_paginator("describe_db_parameters") - return paginator.paginate(**params).build_full_result() - except is_boto3_error_code("DBParameterGroupNotFound"): - return None - - -def convert_parameter(param, value): - """ - Allows setting parameters with 10M = 10* 1024 * 1024 and so on. - """ - converted_value = value - - if param["DataType"] == "integer": - if isinstance(value, string_types): - try: - for modifier in INT_MODIFIERS.keys(): - if value.endswith(modifier): - converted_value = int(value[:-1]) * INT_MODIFIERS[modifier] - except ValueError: - # may be based on a variable (ie. {foo*3/4}) so - # just pass it on through to the AWS SDK - pass - elif isinstance(value, bool): - converted_value = 1 if value else 0 - - elif param["DataType"] == "boolean": - if isinstance(value, string_types): - converted_value = value in BOOLEANS_TRUE - # convert True/False to 1/0 - converted_value = 1 if converted_value else 0 - return str(converted_value) - - -def update_parameters(module, connection): - groupname = module.params["name"] - desired = module.params["params"] - apply_method = "immediate" if module.params["immediate"] else "pending-reboot" - errors = [] - modify_list = [] - existing = {} - try: - _existing = _describe_db_parameters(connection, DBParameterGroupName=groupname) - if _existing: - existing = _existing["Parameters"] - except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: - module.fail_json_aws(e, msg="Failed to describe existing parameter groups") - lookup = dict((param["ParameterName"], param) for param in existing) - for param_key, param_value in desired.items(): - if param_key not in lookup: - errors.append( - f"Parameter {param_key} is not an available parameter for the {module.params.get('engine')} engine" - ) - else: - converted_value = convert_parameter(lookup[param_key], param_value) - # engine-default parameters do not have a ParameterValue, so we'll always override those. - if converted_value != lookup[param_key].get("ParameterValue"): - if lookup[param_key]["IsModifiable"]: - modify_list.append( - dict(ParameterValue=converted_value, ParameterName=param_key, ApplyMethod=apply_method) - ) - else: - errors.append(f"Parameter {param_key} is not modifiable") - - # modify_db_parameters takes at most 20 parameters - if modify_list and not module.check_mode: - for modify_slice in zip_longest(*[iter(modify_list)] * 20, fillvalue=None): - non_empty_slice = [item for item in modify_slice if item] - try: - connection.modify_db_parameter_group( - aws_retry=True, DBParameterGroupName=groupname, Parameters=non_empty_slice - ) - except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: - module.fail_json_aws(e, msg="Couldn't update parameters") - return True, errors - return False, errors - - -def update_tags(module, connection, group, tags): - if tags is None: - return False - changed = False - - existing_tags = connection.list_tags_for_resource(aws_retry=True, ResourceName=group["DBParameterGroupArn"])[ - "TagList" - ] - to_update, to_delete = compare_aws_tags( - boto3_tag_list_to_ansible_dict(existing_tags), tags, module.params["purge_tags"] - ) - - if module.check_mode: - if not to_update and not to_delete: - return False - else: - return True - - if to_update: - try: - connection.add_tags_to_resource( - aws_retry=True, - ResourceName=group["DBParameterGroupArn"], - Tags=ansible_dict_to_boto3_tag_list(to_update), - ) - changed = True - except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: - module.fail_json_aws(e, msg="Couldn't add tags to parameter group") - if to_delete: - try: - connection.remove_tags_from_resource( - aws_retry=True, ResourceName=group["DBParameterGroupArn"], TagKeys=to_delete - ) - changed = True - except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: - module.fail_json_aws(e, msg="Couldn't remove tags from parameter group") - return changed - - -def ensure_present(module, connection): - groupname = module.params["name"] - tags = module.params.get("tags") - changed = False - errors = [] - try: - response = connection.describe_db_parameter_groups(aws_retry=True, DBParameterGroupName=groupname) - except is_boto3_error_code("DBParameterGroupNotFound"): - response = None - except botocore.exceptions.ClientError as e: # pylint: disable=duplicate-except - module.fail_json_aws(e, msg="Couldn't access parameter group information") - if not response: - params = dict( - DBParameterGroupName=groupname, - DBParameterGroupFamily=module.params["engine"], - Description=module.params["description"], - ) - if tags: - params["Tags"] = ansible_dict_to_boto3_tag_list(tags) - if not module.check_mode: - try: - response = connection.create_db_parameter_group(aws_retry=True, **params) - changed = True - except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: - module.fail_json_aws(e, msg="Couldn't create parameter group") - else: - group = response["DBParameterGroups"][0] - db_parameter_group_family = group["DBParameterGroupFamily"] - - if module.params.get("engine") != db_parameter_group_family: - module.warn("The DB parameter group family (engine) can't be changed when updating a DB parameter group.") - - if tags: - changed = update_tags(module, connection, group, tags) - - if module.params.get("params"): - params_changed, errors = update_parameters(module, connection) - changed = changed or params_changed - - try: - response = connection.describe_db_parameter_groups(aws_retry=True, DBParameterGroupName=groupname) - group = camel_dict_to_snake_dict(response["DBParameterGroups"][0]) - except is_boto3_error_code("DBParameterGroupNotFound"): - module.exit_json(changed=True, errors=errors) - except ( - botocore.exceptions.ClientError, - botocore.exceptions.BotoCoreError, - ) as e: # pylint: disable=duplicate-except - module.fail_json_aws(e, msg="Couldn't obtain parameter group information") - try: - tags = connection.list_tags_for_resource(aws_retry=True, ResourceName=group["db_parameter_group_arn"])[ - "TagList" - ] - except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: - module.fail_json_aws(e, msg="Couldn't obtain parameter group tags") - group["tags"] = boto3_tag_list_to_ansible_dict(tags) - - module.exit_json(changed=changed, errors=errors, **group) - - -def ensure_absent(module, connection): - group = module.params["name"] - try: - response = connection.describe_db_parameter_groups(DBParameterGroupName=group) - except is_boto3_error_code("DBParameterGroupNotFound"): - module.exit_json(changed=False) - except botocore.exceptions.ClientError as e: # pylint: disable=duplicate-except - module.fail_json_aws(e, msg="Couldn't access parameter group information") - - if response and module.check_mode: - module.exit_json(changed=True) - - try: - response = connection.delete_db_parameter_group(aws_retry=True, DBParameterGroupName=group) - module.exit_json(changed=True) - except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: - module.fail_json_aws(e, msg="Couldn't delete parameter group") - - -def main(): - argument_spec = dict( - state=dict(required=True, choices=["present", "absent"]), - name=dict(required=True), - engine=dict(), - description=dict(), - params=dict(aliases=["parameters"], type="dict"), - immediate=dict(type="bool", aliases=["apply_immediately"]), - tags=dict(type="dict", aliases=["resource_tags"]), - purge_tags=dict(type="bool", default=True), - ) - module = AnsibleAWSModule( - argument_spec=argument_spec, - required_if=[["state", "present", ["description", "engine"]]], - supports_check_mode=True, - ) - - try: - conn = module.client("rds", retry_decorator=AWSRetry.jittered_backoff()) - except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: - module.fail_json_aws(e, msg="Failed to connect to AWS") - - state = module.params.get("state") - if state == "present": - ensure_present(module, conn) - if state == "absent": - ensure_absent(module, conn) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/amazon/aws/plugins/modules/route53_health_check.py b/ansible_collections/amazon/aws/plugins/modules/route53_health_check.py index 369c7c774..b2924145d 100644 --- a/ansible_collections/amazon/aws/plugins/modules/route53_health_check.py +++ b/ansible_collections/amazon/aws/plugins/modules/route53_health_check.py @@ -535,21 +535,21 @@ def update_health_check(existing_check): return True, "update", check_id -def describe_health_check(id): - if not id: +def describe_health_check(check_id): + if not check_id: return dict() try: result = client.get_health_check( aws_retry=True, - HealthCheckId=id, + HealthCheckId=check_id, ) except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: - module.fail_json_aws(e, msg="Failed to get health check.", id=id) + module.fail_json_aws(e, msg="Failed to get health check.", id=check_id) health_check = result.get("HealthCheck", {}) health_check = camel_dict_to_snake_dict(health_check) - tags = get_tags(module, client, "healthcheck", id) + tags = get_tags(module, client, "healthcheck", check_id) health_check["tags"] = tags return health_check @@ -705,7 +705,7 @@ def main(): if check_id: changed |= manage_tags(module, client, "healthcheck", check_id, tags, purge_tags) - health_check = describe_health_check(id=check_id) + health_check = describe_health_check(check_id) health_check["action"] = action module.exit_json( changed=changed, diff --git a/ansible_collections/amazon/aws/plugins/modules/s3_bucket.py b/ansible_collections/amazon/aws/plugins/modules/s3_bucket.py index d68223ede..d259286f9 100644 --- a/ansible_collections/amazon/aws/plugins/modules/s3_bucket.py +++ b/ansible_collections/amazon/aws/plugins/modules/s3_bucket.py @@ -352,6 +352,9 @@ acl: import json import time +from typing import Iterator +from typing import List +from typing import Tuple try: import botocore @@ -372,47 +375,21 @@ from ansible_collections.amazon.aws.plugins.module_utils.tagging import ansible_ from ansible_collections.amazon.aws.plugins.module_utils.tagging import boto3_tag_list_to_ansible_dict -def create_or_update_bucket(s3_client, module): - policy = module.params.get("policy") - name = module.params.get("name") - requester_pays = module.params.get("requester_pays") - tags = module.params.get("tags") - purge_tags = module.params.get("purge_tags") +def handle_bucket_versioning(s3_client, module: AnsibleAWSModule, name: str) -> tuple[bool, dict]: + """ + Manage versioning for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + name (str): The name of the bucket to handle versioning for. + Returns: + A tuple containing a boolean indicating whether versioning + was changed and a dictionary containing the updated versioning status. + """ versioning = module.params.get("versioning") - encryption = module.params.get("encryption") - encryption_key_id = module.params.get("encryption_key_id") - bucket_key_enabled = module.params.get("bucket_key_enabled") - public_access = module.params.get("public_access") - delete_public_access = module.params.get("delete_public_access") - delete_object_ownership = module.params.get("delete_object_ownership") - object_ownership = module.params.get("object_ownership") - object_lock_enabled = module.params.get("object_lock_enabled") - acl = module.params.get("acl") - # default to US Standard region, - # note: module.region will also try to pull a default out of the boto3 configs. - location = module.region or "us-east-1" - - changed = False - result = {} + versioning_changed = False + versioning_status = {} - try: - bucket_is_present = bucket_exists(s3_client, name) - except botocore.exceptions.EndpointConnectionError as e: - module.fail_json_aws(e, msg=f"Invalid endpoint provided: {to_text(e)}") - except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: - module.fail_json_aws(e, msg="Failed to check bucket presence") - - if not bucket_is_present: - try: - bucket_changed = create_bucket(s3_client, name, location, object_lock_enabled) - s3_client.get_waiter("bucket_exists").wait(Bucket=name) - changed = changed or bucket_changed - except botocore.exceptions.WaiterError as e: - module.fail_json_aws(e, msg="An error occurred waiting for the bucket to become available") - except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: - module.fail_json_aws(e, msg="Failed while creating bucket") - - # Versioning try: versioning_status = get_bucket_versioning(s3_client, name) except is_boto3_error_code(["NotImplemented", "XNotImplemented"]) as e: @@ -438,19 +415,34 @@ def create_or_update_bucket(s3_client, module): if required_versioning: try: put_bucket_versioning(s3_client, name, required_versioning) - changed = True + versioning_changed = True except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: module.fail_json_aws(e, msg="Failed to update bucket versioning") versioning_status = wait_versioning_is_applied(module, s3_client, name, required_versioning) - # This output format is there to ensure compatibility with previous versions of the module - result["versioning"] = { + versioning_result = { "Versioning": versioning_status.get("Status", "Disabled"), "MfaDelete": versioning_status.get("MFADelete", "Disabled"), } + # This output format is there to ensure compatibility with previous versions of the module + return versioning_changed, versioning_result - # Requester pays + +def handle_bucket_requester_pays(s3_client, module: AnsibleAWSModule, name: str) -> tuple[bool, dict]: + """ + Manage requester pays setting for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + name (str): The name of the bucket to handle requester pays setting for. + Returns: + A tuple containing a boolean indicating whether requester pays setting + was changed and a dictionary containing the updated requester pays status. + """ + requester_pays = module.params.get("requester_pays") + requester_pays_changed = False + requester_pays_status = {} try: requester_pays_status = get_bucket_request_payment(s3_client, name) except is_boto3_error_code(["NotImplemented", "XNotImplemented"]) as e: @@ -476,11 +468,27 @@ def create_or_update_bucket(s3_client, module): # account, so we retry one more time put_bucket_request_payment(s3_client, name, payer) requester_pays_status = wait_payer_is_applied(module, s3_client, name, payer, should_fail=True) - changed = True + requester_pays_changed = True - result["requester_pays"] = requester_pays + return requester_pays_changed, requester_pays + + +def handle_bucket_public_access_config(s3_client, module: AnsibleAWSModule, name: str) -> tuple[bool, dict]: + """ + Manage public access configuration for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + name (str): The name of the bucket to handle public access configuration for. + Returns: + A tuple containing a boolean indicating whether public access configuration + was changed and a dictionary containing the updated public access configuration. + """ + public_access = module.params.get("public_access") + delete_public_access = module.params.get("delete_public_access") + public_access_changed = False + public_access_result = {} - # Public access clock configuration current_public_access = {} try: current_public_access = get_bucket_public_access(s3_client, name) @@ -502,22 +510,38 @@ def create_or_update_bucket(s3_client, module): camel_public_block = snake_dict_to_camel_dict(public_access, capitalize_first=True) if current_public_access == camel_public_block: - result["public_access_block"] = current_public_access + public_access_result = current_public_access else: put_bucket_public_access(s3_client, name, camel_public_block) - changed = True - result["public_access_block"] = camel_public_block + public_access_changed = True + public_access_result = camel_public_block # -- Delete public access block if delete_public_access: if current_public_access == {}: - result["public_access_block"] = current_public_access + public_access_result = current_public_access else: delete_bucket_public_access(s3_client, name) - changed = True - result["public_access_block"] = {} + public_access_changed = True + public_access_result = {} - # Policy + # Return the result + return public_access_changed, public_access_result + + +def handle_bucket_policy(s3_client, module: AnsibleAWSModule, name: str) -> tuple[bool, dict]: + """ + Manage bucket policy for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + name (str): The name of the bucket to handle the policy for. + Returns: + A tuple containing a boolean indicating whether the bucket policy + was changed and a dictionary containing the updated bucket policy. + """ + policy = module.params.get("policy") + policy_changed = False try: current_policy = get_bucket_policy(s3_client, name) except is_boto3_error_code(["NotImplemented", "XNotImplemented"]) as e: @@ -543,7 +567,7 @@ def create_or_update_bucket(s3_client, module): except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: module.fail_json_aws(e, msg="Failed to delete bucket policy") current_policy = wait_policy_is_applied(module, s3_client, name, policy) - changed = True + policy_changed = True elif compare_policies(current_policy, policy): try: put_bucket_policy(s3_client, name, policy) @@ -555,11 +579,26 @@ def create_or_update_bucket(s3_client, module): # account, so we retry one more time put_bucket_policy(s3_client, name, policy) current_policy = wait_policy_is_applied(module, s3_client, name, policy, should_fail=True) - changed = True + policy_changed = True - result["policy"] = current_policy + return policy_changed, current_policy + + +def handle_bucket_tags(s3_client, module: AnsibleAWSModule, name: str) -> tuple[bool, dict]: + """ + Manage tags for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + name (str): The name of the bucket to handle tags for. + Returns: + A tuple containing a boolean indicating whether tags were changed + and a dictionary containing the updated tags. + """ + tags = module.params.get("tags") + purge_tags = module.params.get("purge_tags") + bucket_tags_changed = False - # Tags try: current_tags_dict = get_current_bucket_tags_dict(s3_client, name) except is_boto3_error_code(["NotImplemented", "XNotImplemented"]) as e: @@ -596,11 +635,27 @@ def create_or_update_bucket(s3_client, module): except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: module.fail_json_aws(e, msg="Failed to delete bucket tags") current_tags_dict = wait_tags_are_applied(module, s3_client, name, tags) - changed = True + bucket_tags_changed = True - result["tags"] = current_tags_dict + return bucket_tags_changed, current_tags_dict + + +def handle_bucket_encryption(s3_client, module: AnsibleAWSModule, name: str) -> tuple[bool, dict]: + """ + Manage encryption settings for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + name (str): The name of the bucket to handle encryption for. + Returns: + A tuple containing a boolean indicating whether encryption settings + were changed and a dictionary containing the updated encryption settings. + """ + encryption = module.params.get("encryption") + encryption_key_id = module.params.get("encryption_key_id") + bucket_key_enabled = module.params.get("bucket_key_enabled") + encryption_changed = False - # Encryption try: current_encryption = get_bucket_encryption(s3_client, name) except is_boto3_error_code(["NotImplemented", "XNotImplemented"]) as e: @@ -626,7 +681,7 @@ def create_or_update_bucket(s3_client, module): except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: module.fail_json_aws(e, msg="Failed to delete bucket encryption") current_encryption = wait_encryption_is_applied(module, s3_client, name, None) - changed = True + encryption_changed = True else: if (encryption != current_encryption_algorithm) or ( encryption == "aws:kms" and current_encryption_key != encryption_key_id @@ -635,24 +690,37 @@ def create_or_update_bucket(s3_client, module): if encryption == "aws:kms" and encryption_key_id is not None: expected_encryption.update({"KMSMasterKeyID": encryption_key_id}) current_encryption = put_bucket_encryption_with_retry(module, s3_client, name, expected_encryption) - changed = True + encryption_changed = True if bucket_key_enabled is not None: current_encryption_algorithm = current_encryption.get("SSEAlgorithm") if current_encryption else None if current_encryption_algorithm == "aws:kms": if get_bucket_key(s3_client, name) != bucket_key_enabled: - if bucket_key_enabled: - expected_encryption = True - else: - expected_encryption = False + expected_encryption = bool(bucket_key_enabled) current_encryption = put_bucket_key_with_retry(module, s3_client, name, expected_encryption) - changed = True - result["encryption"] = current_encryption + encryption_changed = True - # -- Bucket ownership + return encryption_changed, current_encryption + + +def handle_bucket_ownership(s3_client, module: AnsibleAWSModule, name: str) -> tuple[bool, dict]: + """ + Manage ownership settings for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + name (str): The name of the bucket to handle ownership for. + Returns: + A tuple containing a boolean indicating whether ownership settings were changed + and a dictionary containing the updated ownership settings. + """ + delete_object_ownership = module.params.get("delete_object_ownership") + object_ownership = module.params.get("object_ownership") + bucket_ownership_changed = False + bucket_ownership_result = {} try: bucket_ownership = get_bucket_ownership_cntrl(s3_client, name) - result["object_ownership"] = bucket_ownership + bucket_ownership_result = bucket_ownership except KeyError as e: # Some non-AWS providers appear to return policy documents that aren't # compatible with AWS, cleanly catch KeyError so users can continue to use @@ -676,21 +744,36 @@ def create_or_update_bucket(s3_client, module): # delete S3 buckect ownership if bucket_ownership is not None: delete_bucket_ownership(s3_client, name) - changed = True - result["object_ownership"] = None + bucket_ownership_changed = True + bucket_ownership_result = None elif object_ownership is not None: # update S3 bucket ownership if bucket_ownership != object_ownership: put_bucket_ownership(s3_client, name, object_ownership) - changed = True - result["object_ownership"] = object_ownership + bucket_ownership_changed = True + bucket_ownership_result = object_ownership - # -- Bucket ACL + return bucket_ownership_changed, bucket_ownership_result + + +def handle_bucket_acl(s3_client, module: AnsibleAWSModule, name: str) -> tuple[bool, dict]: + """ + Manage Access Control List (ACL) for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + name (str): The name of the bucket to handle ACL for. + Returns: + A tuple containing a boolean indicating whether ACL was changed and a dictionary containing the updated ACL. + """ + acl = module.params.get("acl") + bucket_acl_changed = False + bucket_acl_result = {} if acl: try: s3_client.put_bucket_acl(Bucket=name, ACL=acl) - result["acl"] = acl - changed = True + bucket_acl_result = acl + bucket_acl_changed = True except KeyError as e: # Some non-AWS providers appear to return policy documents that aren't # compatible with AWS, cleanly catch KeyError so users can continue to use @@ -706,17 +789,31 @@ def create_or_update_bucket(s3_client, module): ) as e: # pylint: disable=duplicate-except module.fail_json_aws(e, msg="Failed to update bucket ACL") - # -- Object Lock + return bucket_acl_changed, bucket_acl_result + + +def handle_bucket_object_lock(s3_client, module: AnsibleAWSModule, name: str) -> dict: + """ + Manage object lock configuration for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + name (str): The name of the bucket to handle object lock for. + Returns: + The updated object lock configuration. + """ + object_lock_enabled = module.params.get("object_lock_enabled") + object_lock_result = {} try: object_lock_status = get_bucket_object_lock_enabled(s3_client, name) - result["object_lock_enabled"] = object_lock_status + object_lock_result = object_lock_status except is_boto3_error_code(["NotImplemented", "XNotImplemented"]) as e: if object_lock_enabled is not None: module.fail_json(msg="Fetching bucket object lock state is not supported") except is_boto3_error_code("ObjectLockConfigurationNotFoundError"): # pylint: disable=duplicate-except if object_lock_enabled: module.fail_json(msg="Enabling object lock for existing buckets is not supported") - result["object_lock_enabled"] = False + object_lock_result = False except is_boto3_error_code("AccessDenied") as e: # pylint: disable=duplicate-except if object_lock_enabled is not None: module.fail_json(msg="Permission denied fetching object lock state for bucket") @@ -732,21 +829,128 @@ def create_or_update_bucket(s3_client, module): if object_lock_enabled and not object_lock_status: module.fail_json(msg="Enabling object lock for existing buckets is not supported") + return object_lock_result + + +def create_or_update_bucket(s3_client, module: AnsibleAWSModule): + """ + Create or update an S3 bucket along with its associated configurations. + This function creates a new S3 bucket if it does not already exist, and updates its configurations, + such as versioning, requester pays, public access block configuration, policy, tags, encryption, bucket ownership, + ACL, and object lock settings. It returns whether any changes were made and the updated configurations. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + Returns: + None + """ + name = module.params.get("name") + object_lock_enabled = module.params.get("object_lock_enabled") + # default to US Standard region, + # note: module.region will also try to pull a default out of the boto3 configs. + location = module.region or "us-east-1" + + changed = False + result = {} + + try: + bucket_is_present = bucket_exists(s3_client, name) + except botocore.exceptions.EndpointConnectionError as e: + module.fail_json_aws(e, msg=f"Invalid endpoint provided: {to_text(e)}") + except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: + module.fail_json_aws(e, msg="Failed to check bucket presence") + + if not bucket_is_present: + try: + bucket_changed = create_bucket(s3_client, name, location, object_lock_enabled) + s3_client.get_waiter("bucket_exists").wait(Bucket=name) + changed = changed or bucket_changed + except botocore.exceptions.WaiterError as e: + module.fail_json_aws(e, msg="An error occurred waiting for the bucket to become available") + except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: + module.fail_json_aws(e, msg="Failed while creating bucket") + + # Versioning + versioning_changed, versioning_result = handle_bucket_versioning(s3_client, module, name) + result["versioning"] = versioning_result + + # Requester pays + requester_pays_changed, requester_pays_result = handle_bucket_requester_pays(s3_client, module, name) + result["requester_pays"] = requester_pays_result + + # Public access clock configuration + public_access_config_changed, public_access_config_result = handle_bucket_public_access_config( + s3_client, module, name + ) + result["public_access_block"] = public_access_config_result + + # Policy + policy_changed, current_policy = handle_bucket_policy(s3_client, module, name) + result["policy"] = current_policy + + # Tags + tags_changed, current_tags_dict = handle_bucket_tags(s3_client, module, name) + result["tags"] = current_tags_dict + + # Encryption + encryption_changed, current_encryption = handle_bucket_encryption(s3_client, module, name) + result["encryption"] = current_encryption + + # -- Bucket ownership + bucket_ownership_changed, object_ownership_result = handle_bucket_ownership(s3_client, module, name) + result["object_ownership"] = object_ownership_result + + # -- Bucket ACL + bucket_acl_changed, bucket_acl_result = handle_bucket_acl(s3_client, module, name) + result["acl"] = bucket_acl_result + + # -- Object Lock + bucket_object_lock_result = handle_bucket_object_lock(s3_client, module, name) + result["object_lock_enabled"] = bucket_object_lock_result + # Module exit + changed = ( + changed + or versioning_changed + or requester_pays_changed + or public_access_config_changed + or policy_changed + or tags_changed + or encryption_changed + or bucket_ownership_changed + or bucket_acl_changed + ) module.exit_json(changed=changed, name=name, **result) -def bucket_exists(s3_client, bucket_name): +def bucket_exists(s3_client, bucket_name: str) -> bool: + """ + Checks if a given bucket exists in an AWS S3 account. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the bucket to check for existence. + Returns: + True if the bucket exists, False otherwise. + """ try: s3_client.head_bucket(Bucket=bucket_name) - bucket_exists = True + return True except is_boto3_error_code("404"): - bucket_exists = False - return bucket_exists + return False @AWSRetry.exponential_backoff(max_delay=120) -def create_bucket(s3_client, bucket_name, location, object_lock_enabled=False): +def create_bucket(s3_client, bucket_name: str, location: str, object_lock_enabled: bool = False) -> bool: + """ + Create an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the bucket to create. + location (str): The AWS region where the bucket should be created. If None, it defaults to "us-east-1". + object_lock_enabled (bool): Whether to enable object lock for the bucket. Defaults to False. + Returns: + True if the bucket was successfully created, False otherwise. + """ try: params = {"Bucket": bucket_name} @@ -770,22 +974,56 @@ def create_bucket(s3_client, bucket_name, location, object_lock_enabled=False): @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def put_bucket_tagging(s3_client, bucket_name, tags): +def put_bucket_tagging(s3_client, bucket_name: str, tags: dict): + """ + Set tags for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + tags (dict): A dictionary containing the tags to be set on the bucket. + Returns: + None + """ s3_client.put_bucket_tagging(Bucket=bucket_name, Tagging={"TagSet": ansible_dict_to_boto3_tag_list(tags)}) @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def put_bucket_policy(s3_client, bucket_name, policy): +def put_bucket_policy(s3_client, bucket_name: str, policy: dict): + """ + Set the policy for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + policy (dict): A dictionary containing the policy to be set on the bucket. + Returns: + None + """ s3_client.put_bucket_policy(Bucket=bucket_name, Policy=json.dumps(policy)) @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def delete_bucket_policy(s3_client, bucket_name): +def delete_bucket_policy(s3_client, bucket_name: str): + """ + Delete the policy for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + None + """ s3_client.delete_bucket_policy(Bucket=bucket_name) @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def get_bucket_policy(s3_client, bucket_name): +def get_bucket_policy(s3_client, bucket_name: str) -> str: + """ + Get the policy for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + Current bucket policy. + """ try: current_policy_string = s3_client.get_bucket_policy(Bucket=bucket_name).get("Policy") if not current_policy_string: @@ -798,33 +1036,83 @@ def get_bucket_policy(s3_client, bucket_name): @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def put_bucket_request_payment(s3_client, bucket_name, payer): +def put_bucket_request_payment(s3_client, bucket_name: str, payer: str): + """ + Set the request payment configuration for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + payer (str): The entity responsible for charges related to fulfilling the request. + Returns: + None + """ s3_client.put_bucket_request_payment(Bucket=bucket_name, RequestPaymentConfiguration={"Payer": payer}) @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def get_bucket_request_payment(s3_client, bucket_name): +def get_bucket_request_payment(s3_client, bucket_name: str) -> str: + """ + Get the request payment configuration for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + Payer of the download and request fees. + """ return s3_client.get_bucket_request_payment(Bucket=bucket_name).get("Payer") @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def get_bucket_versioning(s3_client, bucket_name): +def get_bucket_versioning(s3_client, bucket_name: str) -> dict: + """ + Get the versioning configuration for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + Returns the versioning state of a bucket. + """ return s3_client.get_bucket_versioning(Bucket=bucket_name) @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def put_bucket_versioning(s3_client, bucket_name, required_versioning): +def put_bucket_versioning(s3_client, bucket_name: str, required_versioning: str): + """ + Set the versioning configuration for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + required_versioning (str): The desired versioning state for the bucket ("Enabled", "Suspended"). + Returns: + None + """ s3_client.put_bucket_versioning(Bucket=bucket_name, VersioningConfiguration={"Status": required_versioning}) @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def get_bucket_object_lock_enabled(s3_client, bucket_name): +def get_bucket_object_lock_enabled(s3_client, bucket_name: str) -> bool: + """ + Retrieve the object lock configuration status for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + True if object lock is enabled for the bucket, False otherwise. + """ object_lock_configuration = s3_client.get_object_lock_configuration(Bucket=bucket_name) return object_lock_configuration["ObjectLockConfiguration"]["ObjectLockEnabled"] == "Enabled" @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def get_bucket_encryption(s3_client, bucket_name): +def get_bucket_encryption(s3_client, bucket_name: str) -> dict: + """ + Retrieve the encryption configuration for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + Encryption configuration of the bucket. + """ try: result = s3_client.get_bucket_encryption(Bucket=bucket_name) return ( @@ -839,7 +1127,15 @@ def get_bucket_encryption(s3_client, bucket_name): @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def get_bucket_key(s3_client, bucket_name): +def get_bucket_key(s3_client, bucket_name: str) -> bool: + """ + Retrieve the status of server-side encryption for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + Whether or not if server-side encryption is enabled for the bucket. + """ try: result = s3_client.get_bucket_encryption(Bucket=bucket_name) return result.get("ServerSideEncryptionConfiguration", {}).get("Rules", [])[0].get("BucketKeyEnabled") @@ -849,7 +1145,17 @@ def get_bucket_key(s3_client, bucket_name): return None -def put_bucket_encryption_with_retry(module, s3_client, name, expected_encryption): +def put_bucket_encryption_with_retry(module: AnsibleAWSModule, s3_client, name: str, expected_encryption: dict) -> dict: + """ + Set the encryption configuration for an S3 bucket with retry logic. + Parameters: + module (AnsibleAWSModule): The Ansible module object. + s3_client (boto3.client): The Boto3 S3 client object. + name (str): The name of the S3 bucket. + expected_encryption (dict): A dictionary containing the expected encryption configuration. + Returns: + Updated encryption configuration of the bucket. + """ max_retries = 3 for retries in range(1, max_retries + 1): try: @@ -877,14 +1183,33 @@ def put_bucket_encryption_with_retry(module, s3_client, name, expected_encryptio @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def put_bucket_encryption(s3_client, bucket_name, encryption): +def put_bucket_encryption(s3_client, bucket_name: str, encryption: dict) -> None: + """ + Set the encryption configuration for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + encryption (dict): A dictionary containing the encryption configuration. + Returns: + None + """ server_side_encryption_configuration = {"Rules": [{"ApplyServerSideEncryptionByDefault": encryption}]} s3_client.put_bucket_encryption( Bucket=bucket_name, ServerSideEncryptionConfiguration=server_side_encryption_configuration ) -def put_bucket_key_with_retry(module, s3_client, name, expected_encryption): +def put_bucket_key_with_retry(module: AnsibleAWSModule, s3_client, name: str, expected_encryption: bool) -> dict: + """ + Set the status of server-side encryption for an S3 bucket. + Parameters: + module (AnsibleAWSModule): The Ansible module object. + s3_client (boto3.client): The Boto3 S3 client object. + name (str): The name of the S3 bucket. + expected_encryption (bool): The expected status of server-side encryption using AWS KMS. + Returns: + The updated status of server-side encryption using AWS KMS for the bucket. + """ max_retries = 3 for retries in range(1, max_retries + 1): try: @@ -909,7 +1234,16 @@ def put_bucket_key_with_retry(module, s3_client, name, expected_encryption): @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def put_bucket_key(s3_client, bucket_name, encryption): +def put_bucket_key(s3_client, bucket_name: str, encryption: bool) -> None: + """ + Set the status of server-side encryption for an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + encryption (bool): The status of server-side encryption using AWS KMS. + Returns: + None + """ # server_side_encryption_configuration ={'Rules': [{'BucketKeyEnabled': encryption}]} encryption_status = s3_client.get_bucket_encryption(Bucket=bucket_name) encryption_status["ServerSideEncryptionConfiguration"]["Rules"][0]["BucketKeyEnabled"] = encryption @@ -919,17 +1253,41 @@ def put_bucket_key(s3_client, bucket_name, encryption): @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def delete_bucket_tagging(s3_client, bucket_name): +def delete_bucket_tagging(s3_client, bucket_name: str) -> None: + """ + Delete the tagging configuration of an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + None + """ s3_client.delete_bucket_tagging(Bucket=bucket_name) @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def delete_bucket_encryption(s3_client, bucket_name): +def delete_bucket_encryption(s3_client, bucket_name: str) -> None: + """ + Delete the encryption configuration of an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + None + """ s3_client.delete_bucket_encryption(Bucket=bucket_name) @AWSRetry.exponential_backoff(max_delay=240, catch_extra_error_codes=["OperationAborted"]) -def delete_bucket(s3_client, bucket_name): +def delete_bucket(s3_client, bucket_name: str) -> None: + """ + Delete an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + None + """ try: s3_client.delete_bucket(Bucket=bucket_name) except is_boto3_error_code("NoSuchBucket"): @@ -939,40 +1297,74 @@ def delete_bucket(s3_client, bucket_name): @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def put_bucket_public_access(s3_client, bucket_name, public_acces): +def put_bucket_public_access(s3_client, bucket_name: str, public_acces: dict) -> None: """ Put new public access block to S3 bucket + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + public_access (dict): The public access block configuration. + Returns: + None """ s3_client.put_public_access_block(Bucket=bucket_name, PublicAccessBlockConfiguration=public_acces) @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def delete_bucket_public_access(s3_client, bucket_name): +def delete_bucket_public_access(s3_client, bucket_name: str) -> None: """ Delete public access block from S3 bucket + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + None """ s3_client.delete_public_access_block(Bucket=bucket_name) @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def delete_bucket_ownership(s3_client, bucket_name): +def delete_bucket_ownership(s3_client, bucket_name: str) -> None: """ Delete bucket ownership controls from S3 bucket + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + None """ s3_client.delete_bucket_ownership_controls(Bucket=bucket_name) @AWSRetry.exponential_backoff(max_delay=120, catch_extra_error_codes=["NoSuchBucket", "OperationAborted"]) -def put_bucket_ownership(s3_client, bucket_name, target): +def put_bucket_ownership(s3_client, bucket_name: str, target: str) -> None: """ Put bucket ownership controls for S3 bucket + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + None """ s3_client.put_bucket_ownership_controls( Bucket=bucket_name, OwnershipControls={"Rules": [{"ObjectOwnership": target}]} ) -def wait_policy_is_applied(module, s3_client, bucket_name, expected_policy, should_fail=True): +def wait_policy_is_applied( + module: AnsibleAWSModule, s3_client, bucket_name: str, expected_policy: dict, should_fail: bool = True +) -> dict: + """ + Wait for a bucket policy to be applied to an S3 bucket. + Parameters: + module (AnsibleAWSModule): The Ansible module object. + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + expected_policy (dict): The expected bucket policy. + should_fail (bool): Flag indicating whether to fail if the policy is not applied within the expected time. Default is True. + Returns: + The current policy applied to the bucket, or None if the policy failed to apply within the expected time. + """ for dummy in range(0, 12): try: current_policy = get_bucket_policy(s3_client, bucket_name) @@ -993,7 +1385,20 @@ def wait_policy_is_applied(module, s3_client, bucket_name, expected_policy, shou return None -def wait_payer_is_applied(module, s3_client, bucket_name, expected_payer, should_fail=True): +def wait_payer_is_applied( + module: AnsibleAWSModule, s3_client, bucket_name: str, expected_payer: bool, should_fail=True +) -> str: + """ + Wait for the requester pays setting to be applied to an S3 bucket. + Parameters: + module (AnsibleAWSModule): The Ansible module object. + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + expected_payer (bool): The expected status of the requester pays setting. + should_fail (bool): Flag indicating whether to fail if the setting is not applied within the expected time. Default is True. + Returns: + The current status of the requester pays setting applied to the bucket. + """ for dummy in range(0, 12): try: requester_pays_status = get_bucket_request_payment(s3_client, bucket_name) @@ -1013,7 +1418,21 @@ def wait_payer_is_applied(module, s3_client, bucket_name, expected_payer, should return None -def wait_encryption_is_applied(module, s3_client, bucket_name, expected_encryption, should_fail=True, retries=12): +def wait_encryption_is_applied( + module: AnsibleAWSModule, s3_client, bucket_name: str, expected_encryption: dict, should_fail=True, retries=12 +) -> dict: + """ + Wait for the encryption setting to be applied to an S3 bucket. + Parameters: + module (AnsibleAWSModule): The Ansible module object. + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + expected_encryption(dict): The expected encryption setting. + should_fail (bool): Flag indicating whether to fail if the setting is not applied within the expected time. Default is True. + retries (int): The number of retries to attempt. Default is 12. + Returns: + The current encryption setting applied to the bucket. + """ for dummy in range(0, retries): try: encryption = get_bucket_encryption(s3_client, bucket_name) @@ -1034,7 +1453,21 @@ def wait_encryption_is_applied(module, s3_client, bucket_name, expected_encrypti return encryption -def wait_bucket_key_is_applied(module, s3_client, bucket_name, expected_encryption, should_fail=True, retries=12): +def wait_bucket_key_is_applied( + module: AnsibleAWSModule, s3_client, bucket_name: str, expected_encryption: bool, should_fail=True, retries=12 +) -> bool: + """ + Wait for the bucket key setting to be applied to an S3 bucket. + Parameters: + module (AnsibleAWSModule): The Ansible module object. + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + expected_encryption (bool): The expected bucket key setting. + should_fail (bool): Flag indicating whether to fail if the setting is not applied within the expected time. Default is True. + retries (int): The number of retries to attempt. Default is 12. + Returns: + The current bucket key setting applied to the bucket. + """ for dummy in range(0, retries): try: encryption = get_bucket_key(s3_client, bucket_name) @@ -1054,7 +1487,19 @@ def wait_bucket_key_is_applied(module, s3_client, bucket_name, expected_encrypti return encryption -def wait_versioning_is_applied(module, s3_client, bucket_name, required_versioning): +def wait_versioning_is_applied( + module: AnsibleAWSModule, s3_client, bucket_name: str, required_versioning: dict +) -> dict: + """ + Wait for the versioning setting to be applied to an S3 bucket. + Parameters: + module (AnsibleAWSModule): The Ansible module object. + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + required_versioning (dict): The required versioning status. + Returns: + The current versioning status applied to the bucket. + """ for dummy in range(0, 24): try: versioning_status = get_bucket_versioning(s3_client, bucket_name) @@ -1071,7 +1516,17 @@ def wait_versioning_is_applied(module, s3_client, bucket_name, required_versioni ) -def wait_tags_are_applied(module, s3_client, bucket_name, expected_tags_dict): +def wait_tags_are_applied(module: AnsibleAWSModule, s3_client, bucket_name: str, expected_tags_dict: dict) -> dict: + """ + Wait for the tags to be applied to an S3 bucket. + Parameters: + module (AnsibleAWSModule): The Ansible module object. + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + expected_tags_dict (dict): The expected tags dictionary. + Returns: + The current tags dictionary applied to the bucket. + """ for dummy in range(0, 12): try: current_tags_dict = get_current_bucket_tags_dict(s3_client, bucket_name) @@ -1088,7 +1543,15 @@ def wait_tags_are_applied(module, s3_client, bucket_name, expected_tags_dict): ) -def get_current_bucket_tags_dict(s3_client, bucket_name): +def get_current_bucket_tags_dict(s3_client, bucket_name: str) -> dict: + """ + Get the current tags applied to an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + The current tags dictionary applied to the bucket. + """ try: current_tags = s3_client.get_bucket_tagging(Bucket=bucket_name).get("TagSet") except is_boto3_error_code("NoSuchTagSet"): @@ -1100,9 +1563,14 @@ def get_current_bucket_tags_dict(s3_client, bucket_name): return boto3_tag_list_to_ansible_dict(current_tags) -def get_bucket_public_access(s3_client, bucket_name): +def get_bucket_public_access(s3_client, bucket_name: str) -> dict: """ - Get current bucket public access block + Get current public access block configuration for a bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + The current public access block configuration for the bucket. """ try: bucket_public_access_block = s3_client.get_public_access_block(Bucket=bucket_name) @@ -1111,9 +1579,14 @@ def get_bucket_public_access(s3_client, bucket_name): return {} -def get_bucket_ownership_cntrl(s3_client, bucket_name): +def get_bucket_ownership_cntrl(s3_client, bucket_name: str) -> str: """ - Get current bucket public access block + Get the current bucket ownership controls. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + bucket_name (str): The name of the S3 bucket. + Returns: + The object ownership rule """ try: bucket_ownership = s3_client.get_bucket_ownership_controls(Bucket=bucket_name) @@ -1122,13 +1595,31 @@ def get_bucket_ownership_cntrl(s3_client, bucket_name): return None -def paginated_list(s3_client, **pagination_params): +def paginated_list(s3_client, **pagination_params) -> Iterator[List[str]]: + """ + Paginate through the list of objects in an S3 bucket. + This function yields the keys of objects in the S3 bucket, paginating through the results. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + **pagination_params: Additional parameters to pass to the paginator. + Yields: + list: A list of keys of objects in the bucket for each page of results. + """ pg = s3_client.get_paginator("list_objects_v2") for page in pg.paginate(**pagination_params): yield [data["Key"] for data in page.get("Contents", [])] -def paginated_versions_list(s3_client, **pagination_params): +def paginated_versions_list(s3_client, **pagination_params) -> Iterator[List[Tuple[str, str]]]: + """ + Paginate through the list of object versions in an S3 bucket. + This function yields the keys and version IDs of object versions in the S3 bucket, paginating through the results. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + **pagination_params: Additional parameters to pass to the paginator. + Yields: + list: A list of tuples containing keys and version IDs of object versions in the bucket for each page of results. + """ try: pg = s3_client.get_paginator("list_object_versions") for page in pg.paginate(**pagination_params): @@ -1140,7 +1631,48 @@ def paginated_versions_list(s3_client, **pagination_params): yield [] -def destroy_bucket(s3_client, module): +def delete_objects(s3_client, module: AnsibleAWSModule, name: str) -> None: + """ + Delete objects from an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + name (str): The name of the S3 bucket. + Returns: + None + """ + try: + for key_version_pairs in paginated_versions_list(s3_client, Bucket=name): + formatted_keys = [{"Key": key, "VersionId": version} for key, version in key_version_pairs] + for fk in formatted_keys: + # remove VersionId from cases where they are `None` so that + # unversioned objects are deleted using `DeleteObject` + # rather than `DeleteObjectVersion`, improving backwards + # compatibility with older IAM policies. + if not fk.get("VersionId") or fk.get("VersionId") == "null": + fk.pop("VersionId") + if formatted_keys: + resp = s3_client.delete_objects(Bucket=name, Delete={"Objects": formatted_keys}) + if resp.get("Errors"): + objects_to_delete = ", ".join([k["Key"] for k in resp["Errors"]]) + module.fail_json( + msg=(f"Could not empty bucket before deleting. Could not delete objects: {objects_to_delete}"), + errors=resp["Errors"], + response=resp, + ) + except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: + module.fail_json_aws(e, msg="Failed while deleting bucket") + + +def destroy_bucket(s3_client, module: AnsibleAWSModule) -> None: + """ + This function destroys an S3 bucket. + Parameters: + s3_client (boto3.client): The Boto3 S3 client object. + module (AnsibleAWSModule): The Ansible module object. + Returns: + None + """ force = module.params.get("force") name = module.params.get("name") try: @@ -1156,29 +1688,9 @@ def destroy_bucket(s3_client, module): if force: # if there are contents then we need to delete them (including versions) before we can delete the bucket try: - for key_version_pairs in paginated_versions_list(s3_client, Bucket=name): - formatted_keys = [{"Key": key, "VersionId": version} for key, version in key_version_pairs] - for fk in formatted_keys: - # remove VersionId from cases where they are `None` so that - # unversioned objects are deleted using `DeleteObject` - # rather than `DeleteObjectVersion`, improving backwards - # compatibility with older IAM policies. - if not fk.get("VersionId") or fk.get("VersionId") == "null": - fk.pop("VersionId") - - if formatted_keys: - resp = s3_client.delete_objects(Bucket=name, Delete={"Objects": formatted_keys}) - if resp.get("Errors"): - objects_to_delete = ", ".join([k["Key"] for k in resp["Errors"]]) - module.fail_json( - msg=( - f"Could not empty bucket before deleting. Could not delete objects: {objects_to_delete}" - ), - errors=resp["Errors"], - response=resp, - ) + delete_objects(s3_client, module, name) except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e: - module.fail_json_aws(e, msg="Failed while deleting bucket") + module.fail_json_aws(e, msg="Failed while deleting objects") try: delete_bucket(s3_client, name) diff --git a/ansible_collections/amazon/aws/plugins/modules/s3_object.py b/ansible_collections/amazon/aws/plugins/modules/s3_object.py index 2cd897c89..0486d3b9f 100644 --- a/ansible_collections/amazon/aws/plugins/modules/s3_object.py +++ b/ansible_collections/amazon/aws/plugins/modules/s3_object.py @@ -473,7 +473,7 @@ def key_check(module, s3, bucket, obj, version=None, validate=True): def etag_compare(module, s3, bucket, obj, version=None, local_file=None, content=None): - s3_etag = get_etag(s3, bucket, obj, version=version) + s3_etag = _head_object(s3, bucket, obj, version=version).get("ETag") if local_file is not None: local_etag = calculate_etag(module, local_file, s3_etag, s3, bucket, obj, version) else: @@ -481,27 +481,49 @@ def etag_compare(module, s3, bucket, obj, version=None, local_file=None, content return s3_etag == local_etag -def get_etag(s3, bucket, obj, version=None): +def _head_object(s3, bucket, obj, version=None): try: if version: key_check = s3.head_object(aws_retry=True, Bucket=bucket, Key=obj, VersionId=version) else: key_check = s3.head_object(aws_retry=True, Bucket=bucket, Key=obj) if not key_check: - return None - return key_check["ETag"] + return {} + key_check.pop("ResponseMetadata") + return key_check except is_boto3_error_code("404"): - return None + return {} + + +def _get_object_content(module, s3, bucket, obj, version=None): + try: + if version: + contents = s3.get_object(aws_retry=True, Bucket=bucket, Key=obj, VersionId=version)["Body"].read() + else: + contents = s3.get_object(aws_retry=True, Bucket=bucket, Key=obj)["Body"].read() + return contents + except is_boto3_error_code(["404", "403"]) as e: + # AccessDenied errors may be triggered if 1) file does not exist or 2) file exists but + # user does not have the s3:GetObject permission. + module.fail_json_aws(e, msg=f"Could not find the key {obj}.") + except is_boto3_error_message("require AWS Signature Version 4"): # pylint: disable=duplicate-except + raise Sigv4Required() + except is_boto3_error_code("InvalidArgument") as e: # pylint: disable=duplicate-except + module.fail_json_aws(e, msg=f"Could not find the key {obj}.") + except ( + botocore.exceptions.BotoCoreError, + botocore.exceptions.ClientError, + boto3.exceptions.Boto3Error, + ) as e: # pylint: disable=duplicate-except + raise S3ObjectFailure(f"Could not find the key {obj}.", e) def get_s3_last_modified_timestamp(s3, bucket, obj, version=None): - if version: - key_check = s3.head_object(aws_retry=True, Bucket=bucket, Key=obj, VersionId=version) - else: - key_check = s3.head_object(aws_retry=True, Bucket=bucket, Key=obj) - if not key_check: - return None - return key_check["LastModified"].timestamp() + last_modified = None + obj_info = _head_object(s3, bucket, obj, version) + if obj_info: + last_modified = obj_info["LastModified"].timestamp() + return last_modified def is_local_object_latest(s3, bucket, obj, version=None, local_file=None): @@ -550,22 +572,6 @@ def paginated_list(s3, **pagination_params): yield data["Key"] -def paginated_versioned_list_with_fallback(s3, **pagination_params): - try: - versioned_pg = s3.get_paginator("list_object_versions") - for page in versioned_pg.paginate(**pagination_params): - delete_markers = [ - {"Key": data["Key"], "VersionId": data["VersionId"]} for data in page.get("DeleteMarkers", []) - ] - current_objects = [ - {"Key": data["Key"], "VersionId": data["VersionId"]} for data in page.get("Versions", []) - ] - yield delete_markers + current_objects - except is_boto3_error_code(IGNORE_S3_DROP_IN_EXCEPTIONS + ["AccessDenied"]): - for key in paginated_list(s3, **pagination_params): - yield [{"Key": key}] - - def list_keys(s3, bucket, prefix=None, marker=None, max_keys=None): pagination_params = { "Bucket": bucket, @@ -779,29 +785,7 @@ def download_s3file(module, s3, bucket, obj, dest, retries, version=None): module.exit_json(msg="GET operation skipped - running in check mode", changed=True) # retries is the number of loops; range/xrange needs to be one # more to get that count of loops. - try: - # Note: Something of a permissions related hack - # get_object returns the HEAD information, plus a *stream* which can be read. - # because the stream's dropped on the floor, we never pull the data and this is the - # functional equivalent of calling get_head which still relying on the 'GET' permission - if version: - s3.get_object(aws_retry=True, Bucket=bucket, Key=obj, VersionId=version) - else: - s3.get_object(aws_retry=True, Bucket=bucket, Key=obj) - except is_boto3_error_code(["404", "403"]) as e: - # AccessDenied errors may be triggered if 1) file does not exist or 2) file exists but - # user does not have the s3:GetObject permission. 404 errors are handled by download_file(). - module.fail_json_aws(e, msg=f"Could not find the key {obj}.") - except is_boto3_error_message("require AWS Signature Version 4"): # pylint: disable=duplicate-except - raise Sigv4Required() - except is_boto3_error_code("InvalidArgument") as e: # pylint: disable=duplicate-except - module.fail_json_aws(e, msg=f"Could not find the key {obj}.") - except ( - botocore.exceptions.BotoCoreError, - botocore.exceptions.ClientError, - boto3.exceptions.Boto3Error, - ) as e: # pylint: disable=duplicate-except - raise S3ObjectFailure(f"Could not find the key {obj}.", e) + _get_object_content(module, s3, bucket, obj, version) optional_kwargs = {"ExtraArgs": {"VersionId": version}} if version else {} for x in range(0, retries + 1): @@ -827,27 +811,8 @@ def download_s3file(module, s3, bucket, obj, dest, retries, version=None): def download_s3str(module, s3, bucket, obj, version=None): if module.check_mode: module.exit_json(msg="GET operation skipped - running in check mode", changed=True) - try: - if version: - contents = to_native( - s3.get_object(aws_retry=True, Bucket=bucket, Key=obj, VersionId=version)["Body"].read() - ) - else: - contents = to_native(s3.get_object(aws_retry=True, Bucket=bucket, Key=obj)["Body"].read()) - module.exit_json(msg="GET operation complete", contents=contents, changed=True) - except is_boto3_error_message("require AWS Signature Version 4"): - raise Sigv4Required() - except is_boto3_error_code("InvalidArgument") as e: # pylint: disable=duplicate-except - module.fail_json_aws( - e, - msg=f"Failed while getting contents of object {obj} as a string.", - ) - except ( - botocore.exceptions.BotoCoreError, - botocore.exceptions.ClientError, - boto3.exceptions.Boto3Error, - ) as e: # pylint: disable=duplicate-except - raise S3ObjectFailure(f"Failed while getting contents of object {obj} as a string.", e) + contents = to_native(_get_object_content(module, s3, bucket, obj, version)) + module.exit_json(msg="GET operation complete", contents=contents, changed=True) def get_download_url(module, s3, bucket, obj, expiry, tags=None, changed=True): @@ -997,13 +962,13 @@ def ensure_tags(client, module, bucket, obj): return current_tags_dict, changed -def get_binary_content(vars): +def get_binary_content(s3_vars): # the content will be uploaded as a byte string, so we must encode it first bincontent = None - if vars.get("content"): - bincontent = vars["content"].encode("utf-8") - if vars.get("content_base64"): - bincontent = base64.standard_b64decode(vars["content_base64"]) + if s3_vars.get("content"): + bincontent = s3_vars["content"].encode("utf-8") + if s3_vars.get("content_base64"): + bincontent = base64.standard_b64decode(s3_vars["content_base64"]) return bincontent @@ -1271,6 +1236,17 @@ def check_object_tags(module, connection, bucket, obj): return diff +def calculate_object_etag(module, s3, bucket, obj, head_etag, version=None): + etag = head_etag + if "-" in etag: + # object has been created using multipart upload, compute ETag using + # object content to ensure idempotency. + contents = _get_object_content(module, s3, bucket, obj, version) + # Set ETag to None, to force function to compute ETag from content + etag = calculate_etag_content(module, contents, None, s3, bucket, obj) + return etag + + def copy_object_to_bucket(module, s3, bucket, obj, encrypt, metadata, validate, src_bucket, src_obj, versionId=None): try: params = {"Bucket": bucket, "Key": obj} @@ -1281,14 +1257,33 @@ def copy_object_to_bucket(module, s3, bucket, obj, encrypt, metadata, validate, changed=False, ) - s_etag = get_etag(s3, src_bucket, src_obj, version=versionId) - d_etag = get_etag(s3, bucket, obj) - if s_etag == d_etag: + s_obj_info = _head_object(s3, src_bucket, src_obj, version=versionId) + d_obj_info = _head_object(s3, bucket, obj) + do_match = True + diff_msg = None + if d_obj_info: + src_etag = calculate_object_etag(module, s3, src_bucket, src_obj, s_obj_info.get("ETag"), versionId) + dst_etag = calculate_object_etag(module, s3, bucket, obj, d_obj_info.get("ETag")) + if src_etag != dst_etag: + # Source and destination objects ETag differ + do_match = False + diff_msg = "ETag from source and destination differ" + if do_match and metadata and metadata != d_obj_info.get("Metadata"): + # Metadata from module inputs differs from what has been retrieved from object header + diff_msg = "Would have update object Metadata if not running in check mode." + do_match = False + else: + # The destination object does not exists + do_match = False + diff_msg = "Would have copy object if not running in check mode." + + if do_match: + # S3 objects are equals, ensure tags will not be updated if module.check_mode: changed = check_object_tags(module, s3, bucket, obj) result = {} if changed: - result.update({"msg": "Would have update object tags is not running in check mode."}) + result.update({"msg": "Would have update object tags if not running in check mode."}) return changed, result # Ensure tags @@ -1297,8 +1292,9 @@ def copy_object_to_bucket(module, s3, bucket, obj, encrypt, metadata, validate, if changed: result = {"msg": "tags successfully updated.", "tags": tags} return changed, result - elif module.check_mode: - return True, {"msg": "ETag from source and destination differ"} + # S3 objects differ + if module.check_mode: + return True, {"msg": diff_msg} else: changed = True bucketsrc = { diff --git a/ansible_collections/amazon/aws/plugins/modules/s3_object_info.py b/ansible_collections/amazon/aws/plugins/modules/s3_object_info.py index 65bd5e328..39f0c2798 100644 --- a/ansible_collections/amazon/aws/plugins/modules/s3_object_info.py +++ b/ansible_collections/amazon/aws/plugins/modules/s3_object_info.py @@ -741,8 +741,10 @@ def main(): result.append(object_details) elif object_name is None: object_list = list_bucket_objects(connection, module, bucket_name) - for object in object_list: - result.append(get_object_details(connection, module, bucket_name, object, requested_object_details)) + for bucket_object in object_list: + result.append( + get_object_details(connection, module, bucket_name, bucket_object, requested_object_details) + ) elif not requested_object_details and object_name: # if specific details are not requested, return object metadata diff --git a/ansible_collections/amazon/aws/tests/integration/targets/aws_region_info/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/aws_region_info/tasks/main.yml index d83b14440..0b07bec77 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/aws_region_info/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/aws_region_info/tasks/main.yml @@ -7,7 +7,7 @@ region: "{{ aws_region }}" block: - name: List available Regions - community.aws.aws_region_info: + amazon.aws.aws_region_info: register: regions - name: check task return attributes vars: @@ -22,7 +22,7 @@ - '"region_name" in first_region' - name: List available Regions - check_mode - community.aws.aws_region_info: + amazon.aws.aws_region_info: register: check_regions - name: check task return attributes - check_mode vars: @@ -37,7 +37,7 @@ - '"region_name" in first_region' - name: Filter available Regions using - ("region-name") - community.aws.aws_region_info: + amazon.aws.aws_region_info: filters: region-name: us-west-1 register: us_west_1 @@ -58,7 +58,7 @@ - first_region.region_name == 'us-west-1' - name: Filter available Regions using _ ("region_name") - community.aws.aws_region_info: + amazon.aws.aws_region_info: filters: region_name: us-west-2 register: us_west_2 @@ -79,7 +79,7 @@ - first_region.region_name == 'us-west-2' - name: Filter available Regions using _ and - to check precedence - community.aws.aws_region_info: + amazon.aws.aws_region_info: filters: region-name: eu-west-1 region_name: eu-central-1 diff --git a/ansible_collections/amazon/aws/tests/integration/targets/backup_selection/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/backup_selection/tasks/main.yml index 7cf27ce8c..11d550d48 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/backup_selection/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/backup_selection/tasks/main.yml @@ -12,7 +12,7 @@ # ============================================================ - name: Create an IAM Role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ backup_iam_role_name }}" assume_role_policy_document: '{{ lookup("file", "backup-policy.json") }}' create_instance_profile: false @@ -745,7 +745,7 @@ ignore_errors: true - name: Delete IAM role created during this test - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ backup_iam_role_name }}" state: absent ignore_errors: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/cloudtrail/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/cloudtrail/tasks/main.yml index 3d4f60144..6f9e8fe48 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/cloudtrail/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/cloudtrail/tasks/main.yml @@ -141,7 +141,7 @@ register: kms_key2 - name: Create CloudWatch IAM Role - community.aws.iam_role: + amazon.aws.iam_role: state: present name: "{{ cloudwatch_role }}" assume_role_policy_document: "{{ lookup('template', 'cloudwatch-assume-policy.j2') }}" @@ -167,7 +167,7 @@ policy_json: "{{ lookup('template', 'cloudwatch-policy.j2') | to_json }}" - name: Create CloudWatch IAM Role with no kms permissions - community.aws.iam_role: + amazon.aws.iam_role: state: present name: "{{ cloudwatch_no_kms_role }}" assume_role_policy_document: "{{ lookup('template', 'cloudtrail-no-kms-assume-policy.j2') }}" @@ -551,7 +551,7 @@ state: present name: "{{ cloudtrail_name }}" cloudwatch_logs_log_group_arn: "{{ output_cloudwatch_log_group.arn }}" - cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.arn }}" + cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.iam_role.arn }}" register: output check_mode: true - ansible.builtin.assert: @@ -563,28 +563,28 @@ state: present name: "{{ cloudtrail_name }}" cloudwatch_logs_log_group_arn: "{{ output_cloudwatch_log_group.arn }}" - cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.arn }}" + cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.iam_role.arn }}" register: output - ansible.builtin.assert: that: - output is changed - output.trail.name == cloudtrail_name - output.trail.cloud_watch_logs_log_group_arn == output_cloudwatch_log_group.arn - - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.arn + - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.iam_role.arn - name: Set CloudWatch Log Group (no change) amazon.aws.cloudtrail: state: present name: "{{ cloudtrail_name }}" cloudwatch_logs_log_group_arn: "{{ output_cloudwatch_log_group.arn }}" - cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.arn }}" + cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.iam_role.arn }}" register: output - ansible.builtin.assert: that: - output is not changed - output.trail.name == cloudtrail_name - output.trail.cloud_watch_logs_log_group_arn == output_cloudwatch_log_group.arn - - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.arn + - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.iam_role.arn - name: No-op update to trail amazon.aws.cloudtrail: @@ -596,7 +596,7 @@ - output is not changed - output.trail.name == cloudtrail_name - output.trail.cloud_watch_logs_log_group_arn == output_cloudwatch_log_group.arn - - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.arn + - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.iam_role.arn - name: Get the trail info with CloudWatch Log Group amazon.aws.cloudtrail_info: @@ -608,49 +608,49 @@ ansible.builtin.assert: that: - info.trail_list[0].cloud_watch_logs_log_group_arn == output_cloudwatch_log_group.arn - - info.trail_list[0].cloud_watch_logs_role_arn == output_cloudwatch_role.arn + - info.trail_list[0].cloud_watch_logs_role_arn == output_cloudwatch_role.iam_role.arn - name: Update CloudWatch Log Group (CHECK MODE) amazon.aws.cloudtrail: state: present name: "{{ cloudtrail_name }}" cloudwatch_logs_log_group_arn: "{{ output_cloudwatch_log_group2.arn }}" - cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.arn }}" + cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.iam_role.arn }}" register: output check_mode: true - ansible.builtin.assert: that: - output is changed - output.trail.cloud_watch_logs_log_group_arn == output_cloudwatch_log_group2.arn - - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.arn + - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.iam_role.arn - name: Update CloudWatch Log Group amazon.aws.cloudtrail: state: present name: "{{ cloudtrail_name }}" cloudwatch_logs_log_group_arn: "{{ output_cloudwatch_log_group2.arn }}" - cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.arn }}" + cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.iam_role.arn }}" register: output - ansible.builtin.assert: that: - output is changed - output.trail.name == cloudtrail_name - output.trail.cloud_watch_logs_log_group_arn == output_cloudwatch_log_group2.arn - - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.arn + - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.iam_role.arn - name: Update CloudWatch Log Group (no change) amazon.aws.cloudtrail: state: present name: "{{ cloudtrail_name }}" cloudwatch_logs_log_group_arn: "{{ output_cloudwatch_log_group2.arn }}" - cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.arn }}" + cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.iam_role.arn }}" register: output - ansible.builtin.assert: that: - output is not changed - output.trail.name == cloudtrail_name - output.trail.cloud_watch_logs_log_group_arn == output_cloudwatch_log_group2.arn - - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.arn + - output.trail.cloud_watch_logs_role_arn == output_cloudwatch_role.iam_role.arn - name: Get the trail info with CloudWatch Log Group after update amazon.aws.cloudtrail_info: @@ -662,7 +662,7 @@ ansible.builtin.assert: that: - info.trail_list[0].cloud_watch_logs_log_group_arn == output_cloudwatch_log_group2.arn - - info.trail_list[0].cloud_watch_logs_role_arn == output_cloudwatch_role.arn + - info.trail_list[0].cloud_watch_logs_role_arn == output_cloudwatch_role.iam_role.arn #- name: 'Remove CloudWatch Log Group (CHECK MODE)' # amazon.aws.cloudtrail: @@ -1332,7 +1332,7 @@ # Assume role to a role with Denied access to KMS - amazon.aws.sts_assume_role: - role_arn: "{{ output_cloudwatch_no_kms_role.arn }}" + role_arn: "{{ output_cloudwatch_no_kms_role.iam_role.arn }}" role_session_name: cloudtrailNoKms region: "{{ aws_region }}" register: noKms_assumed_role @@ -1438,7 +1438,7 @@ s3_key_prefix: "{{ cloudtrail_prefix }}" sns_topic_name: "{{ sns_topic }}" cloudwatch_logs_log_group_arn: "{{ output_cloudwatch_log_group.arn }}" - cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.arn }}" + cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.iam_role.arn }}" is_multi_region_trail: true include_global_events: true enable_log_file_validation: true @@ -1468,7 +1468,7 @@ s3_key_prefix: "{{ cloudtrail_prefix }}" sns_topic_name: "{{ sns_topic }}" cloudwatch_logs_log_group_arn: "{{ output_cloudwatch_log_group.arn }}" - cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.arn }}" + cloudwatch_logs_role_arn: "{{ output_cloudwatch_role.iam_role.arn }}" is_multi_region_trail: true include_global_events: true enable_log_file_validation: true @@ -1572,7 +1572,7 @@ policy_name: CloudWatch ignore_errors: true - name: Delete CloudWatch IAM Role - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ cloudwatch_role }}" ignore_errors: true @@ -1584,7 +1584,7 @@ policy_name: CloudWatchNokms ignore_errors: true - name: Delete CloudWatch No KMS IAM Role - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ cloudwatch_no_kms_role }}" ignore_errors: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/ec2_instance_iam_instance_role/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/ec2_instance_iam_instance_role/tasks/main.yml index 14f44c2eb..336ebdb08 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/ec2_instance_iam_instance_role/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/ec2_instance_iam_instance_role/tasks/main.yml @@ -7,7 +7,7 @@ region: "{{ aws_region }}" block: - name: Create IAM role for test - community.aws.iam_role: + amazon.aws.iam_role: state: present name: "{{ first_iam_role }}" assume_role_policy_document: "{{ lookup('file','assume-role-policy.json') }}" @@ -17,7 +17,7 @@ register: iam_role - name: Create second IAM role for test - community.aws.iam_role: + amazon.aws.iam_role: state: present name: "{{ second_iam_role }}" assume_role_policy_document: "{{ lookup('file','assume-role-policy.json') }}" @@ -46,7 +46,7 @@ - ansible.builtin.assert: that: - - instance_with_role.instances[0].iam_instance_profile.arn == iam_role.arn.replace(":role/", ":instance-profile/") + - instance_with_role.instances[0].iam_instance_profile.arn == iam_role.iam_role.arn.replace(":role/", ":instance-profile/") - name: Make instance with an instance_role(check mode) amazon.aws.ec2_instance: @@ -55,7 +55,7 @@ image_id: "{{ ec2_ami_id }}" security_groups: "{{ sg.group_id }}" instance_type: "{{ ec2_instance_type }}" - instance_role: "{{ iam_role.arn.replace(':role/', ':instance-profile/') }}" + instance_role: "{{ iam_role.iam_role.arn.replace(':role/', ':instance-profile/') }}" vpc_subnet_id: "{{ testing_subnet_a.subnet.id }}" tags: TestId: "{{ ec2_instance_tag_TestId }}" @@ -86,7 +86,7 @@ image_id: "{{ ec2_ami_id }}" security_groups: "{{ sg.group_id }}" instance_type: "{{ ec2_instance_type }}" - instance_role: "{{ iam_role_2.arn.replace(':role/', ':instance-profile/') }}" + instance_role: "{{ iam_role_2.iam_role.arn.replace(':role/', ':instance-profile/') }}" vpc_subnet_id: "{{ testing_subnet_a.subnet.id }}" tags: TestId: "{{ ec2_instance_tag_TestId }}" @@ -105,7 +105,7 @@ - ansible.builtin.assert: that: - - updates_instance_info.instances[0].iam_instance_profile.arn == iam_role_2.arn.replace(":role/", ":instance-profile/") + - updates_instance_info.instances[0].iam_instance_profile.arn == iam_role_2.iam_role.arn.replace(":role/", ":instance-profile/") - updates_instance_info.instances[0].instance_id == instance_with_role.instances[0].instance_id always: @@ -119,7 +119,7 @@ ignore_errors: true - name: Delete IAM role for test - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ item }}" delete_instance_profile: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/ec2_vol/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/ec2_vol/tasks/main.yml index edeccb4ea..3867885a7 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/ec2_vol/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/ec2_vol/tasks/main.yml @@ -685,7 +685,6 @@ ansible.builtin.assert: that: - not delete_volume_result_idem.changed - - '"Volume "+ volume2.volume_id +" does not exist" in delete_volume_result_idem.msg' # Originally from ec2_vol_info diff --git a/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/defaults/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/defaults/main.yml index b591e4ae6..399f98acf 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/defaults/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/defaults/main.yml @@ -4,6 +4,7 @@ resource_short: "{{ '%0.8x' % ((16**8) | random(seed=resource_prefix)) }}" alb_name: alb-test-{{ resource_short }} alb_2_name: alb-test-2-{{ resource_short }} +alb_name_multiple_listener_test: alb-test-{{ resource_short }}-lt tg_name: alb-test-{{ resource_short }} tg_2_name: alb-test-2-{{ resource_short }} vpc_cidr: 10.{{ 256 | random(seed=resource_prefix) }}.0.0/16 @@ -26,3 +27,15 @@ elb_access_log_account_id_map: us-gov-west-1: "048591011584" elb_account_id: "{{ elb_access_log_account_id_map[aws_region] }}" + +local_certs: + - priv_key: "{{ remote_tmp_dir }}/private-1.pem" + cert: "{{ remote_tmp_dir }}/public-1.pem" + csr: "{{ remote_tmp_dir }}/csr-1.csr" + domain: elb-classic.{{ tiny_prefix }}.ansible.test + name: "{{ resource_prefix }}_{{ resource_prefix }}_1" + - priv_key: "{{ remote_tmp_dir }}/private-2.pem" + cert: "{{ remote_tmp_dir }}/public-2.pem" + csr: "{{ remote_tmp_dir }}/csr-2.csr" + domain: elb-classic.{{ tiny_prefix }}.ansible.test + name: "{{ resource_prefix }}_{{ resource_prefix }}_2" diff --git a/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/meta/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/meta/main.yml new file mode 100644 index 000000000..bef04ab7f --- /dev/null +++ b/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/meta/main.yml @@ -0,0 +1,4 @@ +--- +dependencies: + - setup_ec2_facts + - setup_remote_tmp_dir diff --git a/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/alb_with_multiple_listener_certs.yml b/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/alb_with_multiple_listener_certs.yml new file mode 100644 index 000000000..af55c29bf --- /dev/null +++ b/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/alb_with_multiple_listener_certs.yml @@ -0,0 +1,127 @@ +- name: Run tests + block: + - name: Generate private key for local certs + community.crypto.openssl_privatekey: + path: "{{ item.priv_key }}" + type: RSA + size: 2048 + with_items: "{{ local_certs }}" + + - name: Generate an OpenSSL Certificate Signing Request for own certs + community.crypto.openssl_csr: + path: "{{ item.csr }}" + privatekey_path: "{{ item.priv_key }}" + common_name: "{{ item.domain }}" + with_items: "{{ local_certs }}" + + - name: Generate a Self Signed OpenSSL certificate for own certs + community.crypto.x509_certificate: + provider: selfsigned + path: "{{ item.cert }}" + csr_path: "{{ item.csr }}" + privatekey_path: "{{ item.priv_key }}" + selfsigned_digest: sha256 + register: cert_create_result + with_items: "{{ local_certs }}" + + - name: upload certificates + community.aws.acm_certificate: + name_tag: "{{ item.name }}" + certificate: "{{ lookup('file', item.cert ) }}" + private_key: "{{ lookup('file', item.priv_key ) }}" + state: present + tags: + Application: search + Environment: development + purge_tags: false + register: upload + with_items: "{{ local_certs }}" + until: upload is succeeded + retries: 5 + delay: 10 + + - ansible.builtin.set_fact: + cert_1_arn: "{{ upload.results[0].certificate.arn }}" + cert_2_arn: "{{ upload.results[1].certificate.arn }}" + + - name: Create a target group for testing + community.aws.elb_target_group: + name: "{{ tg_name }}" + protocol: http + port: 80 + vpc_id: "{{ vpc_id }}" + state: present + + - name: Create an ALB with listener having multiple certificates + amazon.aws.elb_application_lb: + name: "{{ alb_name_multiple_listener_test }}" + subnets: "{{ public_subnets }}" + security_groups: "{{ sec_group.group_id }}" + state: present + purge_listeners: False + listeners: + - Protocol: HTTPS + Port: 446 + SslPolicy: ELBSecurityPolicy-TLS13-1-2-2021-06 + Certificates: # The ARN of the certificate + - CertificateArn: "{{ cert_1_arn }}" + - CertificateArn: "{{ cert_2_arn }}" + DefaultActions: + - Type: forward + TargetGroupName: "{{ tg_name }}" + register: alb + + - name: Gather information about a particular ALB given its ARN #returns only default cert + amazon.aws.elb_application_lb_info: + load_balancer_arns: + - "{{ alb.load_balancer_arn }}" + register: alb_info + + - name: obtain information about a certificate 1 + community.aws.acm_certificate_info: + certificate_arn: "{{ cert_1_arn }}" + register: cert_1_info + + - name: obtain information about a certificate 2 + community.aws.acm_certificate_info: + certificate_arn: "{{ cert_2_arn }}" + register: cert_2_info + + - name: Assert that both certificiates are in use by test load balancer + ansible.builtin.assert: + that: + - cert_1_info.certificates[0].in_use_by[0] == alb_info.load_balancers[0].load_balancer_arn + - cert_2_info.certificates[0].in_use_by[0] == alb_info.load_balancers[0].load_balancer_arn + + always: + - name: Delete test ALB + amazon.aws.elb_application_lb: + name: "{{ alb_name_multiple_listener_test }}" + subnets: "{{ public_subnets }}" + security_groups: "{{ sec_group.group_id }}" + state: absent + purge_listeners: False + listeners: + - Protocol: HTTPS + Port: 446 + SslPolicy: ELBSecurityPolicy-TLS13-1-2-2021-06 + Certificates: # The ARN of the certificate + - CertificateArn: "{{ cert_1_arn }}" + - CertificateArn: "{{ cert_2_arn }}" + DefaultActions: + - Type: forward + TargetGroupName: "{{ tg_name }}" + ignore_errors: true + + - name: delete a certificate with a particular ARN + community.aws.acm_certificate: + certificate_arn: "{{ item }}" + state: absent + register: delete_acm + with_items: + - "{{ cert_1_arn }}" + - "{{ cert_2_arn }}" + retries: 5 + delay: 5 + until: delete_acm is not failed + ignore_errors: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/main.yml index 6edc6416d..28d4bdbdd 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/elb_application_lb/tasks/main.yml @@ -133,6 +133,10 @@ encryption: aws:kms policy: "{{ lookup('template', 'policy.json') }}" + + - name: Run tests for creating ALB with listener having multiple certificates + ansible.builtin.import_tasks: alb_with_multiple_listener_certs.yml + - name: Create an ALB (invalid - SslPolicy is required when Protocol == HTTPS) amazon.aws.elb_application_lb: name: "{{ alb_name }}" diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_group/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_group/tasks/main.yml index 54015a446..269cd51ec 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_group/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_group/tasks/main.yml @@ -15,7 +15,7 @@ state: present - name: Create Safe IAM Managed Policy - community.aws.iam_managed_policy: + amazon.aws.iam_managed_policy: state: present policy_name: "{{ custom_policy_name }}" policy_description: A safe (deny-all) managed policy @@ -54,7 +54,7 @@ state: absent - name: Remove Safe IAM Managed Policy - community.aws.iam_managed_policy: + amazon.aws.iam_managed_policy: state: absent policy_name: "{{ custom_policy_name }}" diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_instance_profile/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_instance_profile/tasks/main.yml index 794b7a4ae..cbebc966a 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_instance_profile/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_instance_profile/tasks/main.yml @@ -17,7 +17,7 @@ # Prepare - name: Prepare IAM Roles - community.aws.iam_role: + amazon.aws.iam_role: state: present name: "{{ item }}" path: "{{ test_path }}" @@ -504,7 +504,7 @@ - "{{ test_role }}-2" - name: Remove IAM Roles - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ item }}" path: "{{ test_path }}" diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/defaults/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/defaults/main.yml index 51ece2c3a..4257634b7 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/defaults/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/defaults/main.yml @@ -2,3 +2,6 @@ policy_name: "{{ resource_prefix }}-policy" policy_path: "/ansible-test-{{ tiny_prefix }}/" policy_description: "An example Managed Policy description" +test_role: "{{ resource_prefix }}-mp-role" +test_user: "{{ resource_prefix }}-mp-user" +test_group: "{{ resource_prefix }}-mp-group" diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/files/deny-assume.json b/ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/files/deny-assume.json new file mode 100644 index 000000000..73e877158 --- /dev/null +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/files/deny-assume.json @@ -0,0 +1,10 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Action": "sts:AssumeRole", + "Principal": { "Service": "ec2.amazonaws.com" }, + "Effect": "Deny" + } + ] +} diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/tasks/main.yml index c6ab19a74..ec4238b85 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_managed_policy/tasks/main.yml @@ -9,6 +9,21 @@ collections: - amazon.aws block: + - name: Create IAM group + amazon.aws.iam_group: + name: "{{ test_group }}" + state: present + - name: Create IAM user + amazon.aws.iam_user: + name: "{{ test_user }}" + state: present + - name: Create IAM role + amazon.aws.iam_role: + name: "{{ test_role }}" + assume_role_policy_document: '{{ lookup("file", "deny-assume.json") }}' + create_instance_profile: false + state: present + ## Test policy creation - name: Create IAM managed policy - check mode amazon.aws.iam_managed_policy: @@ -448,14 +463,60 @@ - result.policy.tags["Tag C"] == "Value C" - result.policy.tags["tag d"] == "value d" + - name: Attach managed policy to group + amazon.aws.iam_group: + name: "{{ test_group }}" + state: present + managed_policies: + - "{{ policy_name }}" + - name: Attach managed policy to user + amazon.aws.iam_user: + name: "{{ test_user }}" + state: present + managed_policies: + - "{{ policy_name }}" + - name: Attach managed policy to role + amazon.aws.iam_role: + name: "{{ test_role }}" + state: present + assume_role_policy_document: '{{ lookup("file", "deny-assume.json") }}' + managed_policies: + - "{{ policy_name }}" + - name: Delete IAM managed policy amazon.aws.iam_managed_policy: policy_name: "{{ policy_name }}" state: absent + - name: Delete IAM group + amazon.aws.iam_group: + name: "{{ test_group }}" + state: absent + - name: Delete IAM user + amazon.aws.iam_user: + name: "{{ test_user }}" + state: absent + - name: Delete IAM role + amazon.aws.iam_role: + name: "{{ test_role }}" + state: absent + always: - name: Delete IAM managed policy amazon.aws.iam_managed_policy: policy_name: "{{ policy_name }}" state: absent ignore_errors: true # noqa: ignore-errors + + - name: Delete IAM group + amazon.aws.iam_group: + name: "{{ test_group }}" + state: absent + - name: Delete IAM user + amazon.aws.iam_user: + name: "{{ test_user }}" + state: absent + - name: Delete IAM role + amazon.aws.iam_role: + name: "{{ test_role }}" + state: absent diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_password_policy/tasks/main.yaml b/ansible_collections/amazon/aws/tests/integration/targets/iam_password_policy/tasks/main.yaml index 9b4fa7167..8d497813a 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_password_policy/tasks/main.yaml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_password_policy/tasks/main.yaml @@ -9,7 +9,7 @@ - amazon.aws block: - name: set iam password policy - community.aws.iam_password_policy: + amazon.aws.iam_password_policy: state: present min_pw_length: 8 require_symbols: false @@ -28,7 +28,7 @@ - result.changed - name: verify iam password policy has been created - community.aws.iam_password_policy: + amazon.aws.iam_password_policy: state: present min_pw_length: 8 require_symbols: false @@ -47,7 +47,7 @@ - not result.changed - name: update iam password policy with different settings - community.aws.iam_password_policy: + amazon.aws.iam_password_policy: state: present min_pw_length: 15 require_symbols: true @@ -67,7 +67,7 @@ # Test for regression of #59102 - name: update iam password policy without expiry - community.aws.iam_password_policy: + amazon.aws.iam_password_policy: state: present min_pw_length: 15 require_symbols: true @@ -83,7 +83,7 @@ - result.changed - name: remove iam password policy - community.aws.iam_password_policy: + amazon.aws.iam_password_policy: state: absent register: result @@ -93,7 +93,7 @@ - result.changed - name: verify password policy has been removed - community.aws.iam_password_policy: + amazon.aws.iam_password_policy: state: absent register: result @@ -103,6 +103,6 @@ - not result.changed always: - name: remove iam password policy - community.aws.iam_password_policy: + amazon.aws.iam_password_policy: state: absent register: result diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_policy/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_policy/tasks/main.yml index 9ed065036..afae59a0e 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_policy/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_policy/tasks/main.yml @@ -19,7 +19,7 @@ - result is changed - name: Create role for tests - community.aws.iam_role: + amazon.aws.iam_role: state: present name: "{{ iam_name }}" assume_role_policy_document: "{{ lookup('file','no_trust.json') }}" @@ -30,7 +30,7 @@ - result is changed - name: Create group for tests - community.aws.iam_group: + amazon.aws.iam_group: state: present name: "{{ iam_name }}" register: result @@ -60,12 +60,12 @@ name: "{{ iam_name }}" ignore_errors: true - name: Remove role - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ iam_name }}" ignore_errors: true - name: Remove group - community.aws.iam_group: + amazon.aws.iam_group: state: absent name: "{{ iam_name }}" ignore_errors: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/defaults/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/defaults/main.yml index 8d7bdfb1d..57a4b9e2b 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/defaults/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/defaults/main.yml @@ -1,6 +1,7 @@ --- test_role: "{{ resource_prefix }}-role" -test_path: /{{ resource_prefix }}/ +test_path: "/{{ resource_prefix }}/" +bad_test_path: "{{ resource_prefix }}" safe_managed_policy: AWSDenyAll custom_policy_name: "{{ resource_prefix }}-denyall" -boundary_policy: arn:aws:iam::aws:policy/AWSDenyAll +boundary_policy: "arn:aws:iam::aws:policy/AWSDenyAll" diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/boundary_policy.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/boundary_policy.yml index 706853c67..f24731f08 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/boundary_policy.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/boundary_policy.yml @@ -1,6 +1,6 @@ --- - name: Create minimal role with no boundary policy - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false register: iam_role @@ -10,7 +10,7 @@ - iam_role.iam_role.role_name == test_role - name: Configure Boundary Policy (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false boundary: "{{ boundary_policy }}" @@ -21,7 +21,7 @@ - iam_role is changed - name: Configure Boundary Policy - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false boundary: "{{ boundary_policy }}" @@ -32,7 +32,7 @@ - iam_role.iam_role.role_name == test_role - name: Configure Boundary Policy (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false boundary: "{{ boundary_policy }}" @@ -43,7 +43,7 @@ - iam_role is not changed - name: Configure Boundary Policy (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false boundary: "{{ boundary_policy }}" @@ -54,7 +54,7 @@ - iam_role.iam_role.role_name == test_role - name: iam_role_info after adding boundary policy - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -77,7 +77,7 @@ - role_info.iam_roles[0].role_name == test_role - name: Remove IAM Role - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" delete_instance_profile: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/complex_role_creation.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/complex_role_creation.yml index 7195c5887..e0a33d7ca 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/complex_role_creation.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/complex_role_creation.yml @@ -1,6 +1,6 @@ --- - name: Complex IAM Role (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" assume_role_policy_document: '{{ lookup("file", "deny-assume.json") }}' boundary: "{{ boundary_policy }}" @@ -20,7 +20,7 @@ - iam_role is changed - name: iam_role_info after Complex Role creation in check_mode - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -29,7 +29,7 @@ - role_info.iam_roles | length == 0 - name: Complex IAM Role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" assume_role_policy_document: '{{ lookup("file", "deny-assume.json") }}' boundary: "{{ boundary_policy }}" @@ -59,7 +59,7 @@ - '"role_id" in iam_role.iam_role' - name: Complex IAM role (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" assume_role_policy_document: '{{ lookup("file", "deny-assume.json") }}' boundary: "{{ boundary_policy }}" @@ -79,7 +79,7 @@ - iam_role is not changed - name: Complex IAM role (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" assume_role_policy_document: '{{ lookup("file", "deny-assume.json") }}' boundary: "{{ boundary_policy }}" @@ -99,7 +99,7 @@ - iam_role.iam_role.role_name == test_role - name: iam_role_info after Role creation - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/creation_deletion.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/creation_deletion.yml index 9c81019c8..694c4d16b 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/creation_deletion.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/creation_deletion.yml @@ -2,12 +2,12 @@ - name: Try running some rapid fire create/delete tests block: - name: Minimal IAM Role without instance profile (rapid) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false register: iam_role - name: Minimal IAM Role without instance profile (rapid) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false register: iam_role_again @@ -17,12 +17,12 @@ - iam_role_again is not changed - name: Remove IAM Role (rapid) - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" register: iam_role - name: Remove IAM Role (rapid) - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" register: iam_role_again @@ -32,12 +32,12 @@ - iam_role_again is not changed - name: Minimal IAM Role without instance profile (rapid) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false register: iam_role - name: Remove IAM Role (rapid) - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" register: iam_role_again @@ -50,14 +50,14 @@ # Role Creation # (without Instance profile) - name: iam_role_info before Role creation (no args) - community.aws.iam_role_info: + amazon.aws.iam_role_info: register: role_info - ansible.builtin.assert: that: - role_info is succeeded - name: iam_role_info before Role creation (search for test role) - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -66,7 +66,7 @@ - role_info.iam_roles | length == 0 - name: Minimal IAM Role (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false register: iam_role @@ -76,7 +76,7 @@ - iam_role is changed - name: iam_role_info after Role creation in check_mode - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -85,7 +85,7 @@ - role_info.iam_roles | length == 0 - name: Minimal IAM Role without instance profile - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false register: iam_role @@ -106,7 +106,7 @@ - '"role_id" in iam_role.iam_role' - name: Minimal IAM Role without instance profile (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false register: iam_role @@ -116,7 +116,7 @@ - iam_role is not changed - name: Minimal IAM Role without instance profile (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: false register: iam_role @@ -126,7 +126,7 @@ - iam_role.iam_role.role_name == test_role - name: iam_role_info after Role creation - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -151,7 +151,7 @@ - role_info.iam_roles[0].tags | length == 0 - name: Remove IAM Role - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" delete_instance_profile: true @@ -161,7 +161,7 @@ - iam_role is changed - name: iam_role_info after Role deletion - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -173,7 +173,7 @@ # (with path) - name: Minimal IAM Role with path (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" path: "{{ test_path }}" register: iam_role @@ -183,7 +183,7 @@ - iam_role is changed - name: Minimal IAM Role with path - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" path: "{{ test_path }}" register: iam_role @@ -203,7 +203,7 @@ - '"role_id" in iam_role.iam_role' - name: Minimal IAM Role with path (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" path: "{{ test_path }}" register: iam_role @@ -213,7 +213,7 @@ - iam_role is not changed - name: Minimal IAM Role with path (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" path: "{{ test_path }}" register: iam_role @@ -223,7 +223,7 @@ - iam_role.iam_role.role_name == test_role - name: Minimal IAM Role with updated path (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" path: "{{ test_path }}subpath/" register: iam_role @@ -234,7 +234,7 @@ - iam_role.iam_role.role_name == test_role - name: iam_role_info after Role creation - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -260,7 +260,7 @@ - role_info.iam_roles[0].tags | length == 0 - name: iam_role_info after Role creation (searching a path) - community.aws.iam_role_info: + amazon.aws.iam_role_info: path_prefix: "{{ test_path }}" register: role_info - ansible.builtin.assert: @@ -285,8 +285,34 @@ - role_info.iam_roles[0].role_name == test_role - role_info.iam_roles[0].tags | length == 0 +- name: iam_role_info after Role creation (searching a path without / prefix and suffix) + amazon.aws.iam_role_info: + path_prefix: "{{ bad_test_path }}" + register: role_info +- ansible.builtin.assert: + that: + - role_info is succeeded + - role_info.iam_roles | length == 1 + - role_info.iam_roles[0].arn.startswith("arn") + - role_info.iam_roles[0].arn.endswith("role" + test_path + test_role ) + - '"assume_role_policy_document" in role_info.iam_roles[0]' + - '"create_date" in role_info.iam_roles[0]' + - '"description" not in role_info.iam_roles[0]' + - role_info.iam_roles[0].inline_policies | length == 0 + - role_info.iam_roles[0].instance_profiles | length == 1 + - role_info.iam_roles[0].instance_profiles[0].instance_profile_name == test_role + - role_info.iam_roles[0].instance_profiles[0].arn.startswith("arn") + - role_info.iam_roles[0].instance_profiles[0].arn.endswith("instance-profile" + test_path + test_role) + - role_info.iam_roles[0].managed_policies | length == 0 + - role_info.iam_roles[0].max_session_duration == 3600 + - '"permissions_boundary" not in role_info.iam_roles[0]' + - role_info.iam_roles[0].path == test_path + - role_info.iam_roles[0].role_id == iam_role.iam_role.role_id + - role_info.iam_roles[0].role_name == test_role + - role_info.iam_roles[0].tags | length == 0 + - name: Remove IAM Role - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" path: "{{ test_path }}" @@ -297,7 +323,7 @@ - iam_role is changed - name: iam_role_info after Role deletion - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -309,7 +335,7 @@ # (with Instance profile) - name: Minimal IAM Role with instance profile - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: true register: iam_role @@ -319,7 +345,7 @@ - iam_role is changed - name: Minimal IAM Role with instance profile - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: true register: iam_role @@ -339,7 +365,7 @@ - '"role_id" in iam_role.iam_role' - name: Minimal IAM Role wth instance profile (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: true register: iam_role @@ -349,7 +375,7 @@ - iam_role is not changed - name: Minimal IAM Role wth instance profile (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" create_instance_profile: true register: iam_role @@ -359,7 +385,7 @@ - iam_role.iam_role.role_name == test_role - name: iam_role_info after Role creation - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/description_update.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/description_update.yml index 0cb9a46af..edb88f7dd 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/description_update.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/description_update.yml @@ -1,6 +1,6 @@ --- - name: Add Description (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" description: Ansible Test Role {{ resource_prefix }} check_mode: true @@ -10,7 +10,7 @@ - iam_role is changed - name: Add Description - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" description: Ansible Test Role {{ resource_prefix }} register: iam_role @@ -21,7 +21,7 @@ - iam_role.iam_role.description == "Ansible Test Role "+resource_prefix - name: Add Description (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" description: Ansible Test Role {{ resource_prefix }} register: iam_role @@ -31,7 +31,7 @@ - iam_role is not changed - name: Add Description (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" description: Ansible Test Role {{ resource_prefix }} register: iam_role @@ -42,7 +42,7 @@ - iam_role.iam_role.description == "Ansible Test Role "+resource_prefix - name: iam_role_info after adding Description - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -70,7 +70,7 @@ # ------------------------------------------------------------------------------------------ - name: Update Description (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" description: Ansible Test Role (updated) {{ resource_prefix }} check_mode: true @@ -80,7 +80,7 @@ - iam_role is changed - name: Update Description - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" description: Ansible Test Role (updated) {{ resource_prefix }} register: iam_role @@ -91,7 +91,7 @@ - iam_role.iam_role.description == 'Ansible Test Role (updated) '+resource_prefix - name: Update Description (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" description: Ansible Test Role (updated) {{ resource_prefix }} register: iam_role @@ -101,7 +101,7 @@ - iam_role is not changed - name: Update Description (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" description: Ansible Test Role (updated) {{ resource_prefix }} register: iam_role @@ -112,7 +112,7 @@ - iam_role.iam_role.description == 'Ansible Test Role (updated) '+resource_prefix - name: iam_role_info after updating Description - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/inline_policy_update.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/inline_policy_update.yml index 0091045e8..5b3e42458 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/inline_policy_update.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/inline_policy_update.yml @@ -14,7 +14,7 @@ policy_name: inline-policy-b policy_json: '{{ lookup("file", "deny-all-b.json") }}' - name: iam_role_info after attaching inline policies (using iam_policy) - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/main.yml index b7a62db9f..21e25d9e3 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/main.yml @@ -34,7 +34,7 @@ assume_deny_policy: '{{ lookup("file", "deny-assume.json") | from_json }}' - ansible.builtin.include_tasks: parameter_checks.yml - name: Create Safe IAM Managed Policy - community.aws.iam_managed_policy: + amazon.aws.iam_managed_policy: state: present policy_name: "{{ custom_policy_name }}" policy_description: A safe (deny-all) managed policy @@ -60,23 +60,23 @@ # Cleanup - name: Remove IAM Role - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" delete_instance_profile: true ignore_errors: true - name: Remove IAM Role (with path) - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" path: "{{ test_path }}" delete_instance_profile: true ignore_errors: true - name: iam_role_info after Role deletion - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" ignore_errors: true - name: Remove test managed policy - community.aws.iam_managed_policy: + amazon.aws.iam_managed_policy: state: absent policy_name: "{{ custom_policy_name }}" diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/max_session_update.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/max_session_update.yml index fe43bcfc8..576e6b24c 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/max_session_update.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/max_session_update.yml @@ -1,6 +1,6 @@ --- - name: Update Max Session Duration (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" max_session_duration: 43200 check_mode: true @@ -10,7 +10,7 @@ - iam_role is changed - name: Update Max Session Duration - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" max_session_duration: 43200 register: iam_role @@ -21,7 +21,7 @@ - iam_role.iam_role.max_session_duration == 43200 - name: Update Max Session Duration (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" max_session_duration: 43200 register: iam_role @@ -30,7 +30,7 @@ - iam_role is not changed - name: Update Max Session Duration (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" max_session_duration: 43200 register: iam_role @@ -40,7 +40,7 @@ - iam_role is not changed - name: iam_role_info after updating Max Session Duration - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/parameter_checks.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/parameter_checks.yml index 2cf46eebf..545072674 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/parameter_checks.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/parameter_checks.yml @@ -1,7 +1,7 @@ --- # Parameter Checks - name: Friendly message when creating an instance profile and adding a boundary profile - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" boundary: "{{ boundary_policy }}" register: iam_role @@ -14,7 +14,7 @@ - '"false" in iam_role.msg' - name: Friendly message when boundary profile is not an ARN - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" boundary: AWSDenyAll create_instance_profile: false @@ -28,7 +28,7 @@ - name: Friendly message when "present" without assume_role_policy_document module_defaults: { amazon.aws.iam_role: {}} - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" register: iam_role ignore_errors: true @@ -39,7 +39,7 @@ - '"assume_role_policy_document" in iam_role.msg' - name: Maximum Session Duration needs to be between 1 and 12 hours - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" max_session_duration: 3599 register: iam_role @@ -50,7 +50,7 @@ - '"max_session_duration must be between" in iam_role.msg' - name: Maximum Session Duration needs to be between 1 and 12 hours - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" max_session_duration: 43201 register: iam_role @@ -61,7 +61,7 @@ - '"max_session_duration must be between" in iam_role.msg' - name: Role Paths must start with / - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" path: test/ register: iam_role @@ -72,7 +72,7 @@ - '"path must begin and end with /" in iam_role.msg' - name: Role Paths must end with / - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" path: /test register: iam_role diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/policy_update.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/policy_update.yml index 4fa5cd6d2..27b911ae7 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/policy_update.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/policy_update.yml @@ -1,6 +1,6 @@ --- - name: Add Managed Policy (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_policies: false managed_policy: @@ -12,7 +12,7 @@ - iam_role is changed - name: Add Managed Policy - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_policies: false managed_policy: @@ -24,7 +24,7 @@ - iam_role.iam_role.role_name == test_role - name: Add Managed Policy (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_policies: false managed_policy: @@ -36,7 +36,7 @@ - iam_role is not changed - name: Add Managed Policy (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_policies: false managed_policy: @@ -48,7 +48,7 @@ - iam_role.iam_role.role_name == test_role - name: iam_role_info after adding Managed Policy - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -80,7 +80,7 @@ # ------------------------------------------------------------------------------------------ - name: Update Managed Policy without purge (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_policies: false managed_policy: @@ -92,7 +92,7 @@ - iam_role is changed - name: Update Managed Policy without purge - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_policies: false managed_policy: @@ -104,7 +104,7 @@ - iam_role.iam_role.role_name == test_role - name: Update Managed Policy without purge (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_policies: false managed_policy: @@ -116,7 +116,7 @@ - iam_role is not changed - name: Update Managed Policy without purge (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_policies: false managed_policy: @@ -128,7 +128,7 @@ - iam_role.iam_role.role_name == test_role - name: iam_role_info after updating Managed Policy without purge - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -161,7 +161,7 @@ # Managed Policies are purged by default - name: Update Managed Policy with purge (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" managed_policy: - "{{ custom_policy_name }}" @@ -172,7 +172,7 @@ - iam_role is changed - name: Update Managed Policy with purge - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" managed_policy: - "{{ custom_policy_name }}" @@ -183,7 +183,7 @@ - iam_role.iam_role.role_name == test_role - name: Update Managed Policy with purge (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" managed_policy: - "{{ custom_policy_name }}" @@ -194,7 +194,7 @@ - iam_role is not changed - name: Update Managed Policy with purge (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" managed_policy: - "{{ custom_policy_name }}" @@ -205,7 +205,7 @@ - iam_role.iam_role.role_name == test_role - name: iam_role_info after updating Managed Policy with purge - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/role_removal.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/role_removal.yml index 8761bda73..f4e79252a 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/role_removal.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/role_removal.yml @@ -1,6 +1,6 @@ --- - name: Remove IAM Role (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" delete_instance_profile: true @@ -11,7 +11,7 @@ - iam_role is changed - name: iam_role_info after deleting role in check mode - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -20,7 +20,7 @@ - role_info.iam_roles | length == 1 - name: Remove IAM Role - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" delete_instance_profile: true @@ -30,7 +30,7 @@ - iam_role is changed - name: iam_role_info after deleting role - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -39,7 +39,7 @@ - role_info.iam_roles | length == 0 - name: Remove IAM Role (should be gone already) - check mode - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" delete_instance_profile: true @@ -50,7 +50,7 @@ - iam_role is not changed - name: Remove IAM Role (should be gone already) - community.aws.iam_role: + amazon.aws.iam_role: state: absent name: "{{ test_role }}" delete_instance_profile: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/tags_update.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/tags_update.yml index e74820d77..45d703cc1 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/tags_update.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_role/tasks/tags_update.yml @@ -1,6 +1,6 @@ --- - name: Add Tag (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" tags: TagA: ValueA @@ -11,7 +11,7 @@ - iam_role is changed - name: Add Tag - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" tags: TagA: ValueA @@ -25,7 +25,7 @@ - iam_role.iam_role.tags.TagA == "ValueA" - name: Add Tag (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" tags: TagA: ValueA @@ -36,7 +36,7 @@ - iam_role is not changed - name: Add Tag (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" tags: TagA: ValueA @@ -49,7 +49,7 @@ - iam_role.iam_role.tags.TagA == "ValueA" - name: iam_role_info after adding Tags - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -79,7 +79,7 @@ # ------------------------------------------------------------------------------------------ - name: Update Tag (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" tags: TagA: AValue @@ -90,7 +90,7 @@ - iam_role is changed - name: Update Tag - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" tags: TagA: AValue @@ -103,7 +103,7 @@ - iam_role.iam_role.tags.TagA == "AValue" - name: Update Tag (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" tags: TagA: AValue @@ -114,7 +114,7 @@ - iam_role is not changed - name: Update Tag (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" tags: TagA: AValue @@ -127,7 +127,7 @@ - iam_role.iam_role.tags.TagA == "AValue" - name: iam_role_info after updating Tag - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -157,7 +157,7 @@ # ------------------------------------------------------------------------------------------ - name: Add second Tag without purge (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_tags: false tags: @@ -169,7 +169,7 @@ - iam_role is changed - name: Add second Tag without purge - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_tags: false tags: @@ -183,7 +183,7 @@ - iam_role.iam_role.tags.TagB == "ValueB" - name: Add second Tag without purge (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_tags: false tags: @@ -195,7 +195,7 @@ - iam_role is not changed - name: Add second Tag without purge (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_tags: false tags: @@ -209,7 +209,7 @@ - iam_role.iam_role.tags.TagB == "ValueB" - name: iam_role_info after adding second Tag without purge - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: @@ -241,7 +241,7 @@ # ------------------------------------------------------------------------------------------ - name: Purge first tag (CHECK MODE) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_tags: true tags: @@ -253,7 +253,7 @@ - iam_role is changed - name: Purge first tag - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_tags: true tags: @@ -267,7 +267,7 @@ - iam_role.iam_role.tags.TagB == "ValueB" - name: Purge first tag (no change) - check mode - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_tags: true tags: @@ -278,7 +278,7 @@ - iam_role is not changed - name: Purge first tag (no change) - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ test_role }}" purge_tags: true tags: @@ -292,7 +292,7 @@ - iam_role.iam_role.tags.TagB == "ValueB" - name: iam_role_info after purging first Tag - community.aws.iam_role_info: + amazon.aws.iam_role_info: name: "{{ test_role }}" register: role_info - ansible.builtin.assert: diff --git a/ansible_collections/amazon/aws/tests/integration/targets/iam_user/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/iam_user/tasks/main.yml index 675b9a5b1..870dd4931 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/iam_user/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/iam_user/tasks/main.yml @@ -160,7 +160,7 @@ ansible.builtin.include_tasks: deletion.yml always: - name: Remove group - community.aws.iam_group: + amazon.aws.iam_group: name: "{{ test_group }}" state: absent ignore_errors: true # noqa: ignore-errors diff --git a/ansible_collections/amazon/aws/tests/integration/targets/inventory_aws_ec2/playbooks/test_inventory_ssm.yml b/ansible_collections/amazon/aws/tests/integration/targets/inventory_aws_ec2/playbooks/test_inventory_ssm.yml index c8e820aad..161fdc6e6 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/inventory_aws_ec2/playbooks/test_inventory_ssm.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/inventory_aws_ec2/playbooks/test_inventory_ssm.yml @@ -31,7 +31,7 @@ # Create VPC, subnet, security group, and find image_id to create instance - ansible.builtin.include_tasks: tasks/setup.yml - name: Ensure IAM instance role exists - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ iam_role_name }}" assume_role_policy_document: "{{ lookup('file', 'files/ec2-trust-policy.json') }}" state: present @@ -117,7 +117,7 @@ always: - name: Delete IAM role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ iam_role_name }}" state: absent wait: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/kms_key/roles/kms_key/tasks/test_grants.yml b/ansible_collections/amazon/aws/tests/integration/targets/kms_key/roles/kms_key/tasks/test_grants.yml index ff97a1a09..d9ad140e9 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/kms_key/roles/kms_key/tasks/test_grants.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/kms_key/roles/kms_key/tasks/test_grants.yml @@ -10,7 +10,7 @@ amazon.aws.aws_caller_info: register: aws_caller_info - name: Create an IAM role that can do nothing - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ kms_key_alias }}" state: present assume_role_policy_document: @@ -353,7 +353,7 @@ pending_window: 7 ignore_errors: true # noqa: ignore-errors - name: Remove the IAM role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ kms_key_alias }}" state: absent ignore_errors: true # noqa: ignore-errors diff --git a/ansible_collections/amazon/aws/tests/integration/targets/kms_key/roles/kms_key/tasks/test_modify.yml b/ansible_collections/amazon/aws/tests/integration/targets/kms_key/roles/kms_key/tasks/test_modify.yml index 1adb65094..8a0390615 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/kms_key/roles/kms_key/tasks/test_modify.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/kms_key/roles/kms_key/tasks/test_modify.yml @@ -10,7 +10,7 @@ amazon.aws.aws_caller_info: register: aws_caller_info - name: Create an IAM role that can do nothing - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ kms_key_alias }}" state: present assume_role_policy_document: @@ -286,7 +286,7 @@ pending_window: 7 ignore_errors: true # noqa: ignore-errors - name: Remove the IAM role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ kms_key_alias }}" state: absent ignore_errors: true # noqa: ignore-errors diff --git a/ansible_collections/amazon/aws/tests/integration/targets/lambda/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/lambda/tasks/main.yml index dd8392d20..3720b4d79 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/lambda/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/lambda/tasks/main.yml @@ -16,7 +16,7 @@ when: (lookup('env', 'HOME')) # Preparation - name: create minimal lambda role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ lambda_role_name }}" assume_role_policy_document: '{{ lookup("file", "minimal_trust_policy.json") }}' create_instance_profile: false @@ -807,7 +807,7 @@ - "{{ lambda_function_name }}_4" - name: ensure role has been removed at end of test - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ lambda_role_name }}" state: absent ignore_errors: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/lambda_alias/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/lambda_alias/tasks/main.yml index d6b8e0d6e..e96aa8269 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/lambda_alias/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/lambda_alias/tasks/main.yml @@ -12,7 +12,7 @@ # ============================================================== # Preparation - name: create minimal lambda role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ lambda_role_name }}" assume_role_policy_document: '{{ lookup("file", "minimal_trust_policy.json") }}' create_instance_profile: false @@ -616,7 +616,7 @@ state: absent ignore_errors: true - name: ensure role has been removed at end of test - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ lambda_role_name }}" state: absent delete_instance_profile: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/main.yml index f06482a62..1e49d1373 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/main.yml @@ -6,11 +6,10 @@ secret_key: "{{ aws_secret_key }}" session_token: "{{ security_token | default(omit) }}" region: "{{ aws_region }}" - collections: - - community.general block: - name: Create test resources setup ansible.builtin.import_tasks: setup.yml + - name: Create DynamoDB stream event mapping (trigger) - check_mode amazon.aws.lambda_event: state: present diff --git a/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/setup.yml b/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/setup.yml index fa2668fd5..1f77a5e40 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/setup.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/setup.yml @@ -33,7 +33,7 @@ when: (lookup('env', 'HOME')) - name: create minimal lambda role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ lambda_role_name }}" assume_role_policy_document: '{{ lookup("file", "minimal_trust_policy.json")}}' create_instance_profile: false diff --git a/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/teardown.yml b/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/teardown.yml index 476465a6e..2f13e1de4 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/teardown.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/lambda_event/tasks/teardown.yml @@ -26,7 +26,7 @@ state: absent - name: Delete the role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ lambda_role_name }}" assume_role_policy_document: '{{ lookup("file", "minimal_trust_policy.json")}}' state: absent diff --git a/ansible_collections/amazon/aws/tests/integration/targets/lambda_policy/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/lambda_policy/tasks/main.yml index c3c73aaf2..e222f9fa6 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/lambda_policy/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/lambda_policy/tasks/main.yml @@ -12,7 +12,7 @@ - community.aws block: - name: create minimal lambda role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ lambda_role_name }}" assume_role_policy_document: '{{ lookup("file", "minimal_trust_policy.json") }}' create_instance_profile: false @@ -50,7 +50,7 @@ path: "{{ output_dir }}/mini_http_lambda.py" dest: "{{ output_dir }}/mini_http_lambda.zip" - name: create minimal lambda role - community.aws.iam_role: + amazon.aws.iam_role: name: ansible_lambda_role assume_role_policy_document: "{{ lookup('file', 'minimal_trust_policy.json', convert_data=False) }}" create_instance_profile: false @@ -143,7 +143,7 @@ register: destroy_result ignore_errors: true - name: Clean up test role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ lambda_role_name }}" state: absent ignore_errors: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/aliases b/ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/aliases new file mode 100644 index 000000000..e26025382 --- /dev/null +++ b/ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/aliases @@ -0,0 +1,3 @@ +cloud/aws +rds_cluster_param_group_info +rds_engine_versions_info diff --git a/ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/defaults/main.yaml b/ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/defaults/main.yaml new file mode 100644 index 000000000..8758e70cf --- /dev/null +++ b/ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/defaults/main.yaml @@ -0,0 +1,7 @@ +--- +rds_cluster_param_group_name: "{{ resource_prefix }}-cluster-param-group" +rds_engine: postgres +resource_tags: + resource_prefix: "{{ resource_prefix }}" + some: tag + another: tag diff --git a/ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/tasks/main.yaml b/ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/tasks/main.yaml new file mode 100644 index 000000000..3eb85f617 --- /dev/null +++ b/ansible_collections/amazon/aws/tests/integration/targets/rds_cluster_param_group/tasks/main.yaml @@ -0,0 +1,328 @@ +--- +- module_defaults: + group/aws: + region: "{{ aws_region }}" + access_key: "{{ aws_access_key }}" + secret_key: "{{ aws_secret_key }}" + session_token: "{{ security_token | default(omit) }}" + + block: + - name: Gather information about RDS engine version + amazon.aws.rds_engine_versions_info: + engine: "{{ rds_engine }}" + default_only: true + register: engine_versions + + - name: Set variable for RDS param group family + ansible.builtin.set_fact: + dbparam_group_family: "{{ engine_versions.db_engine_versions.0.db_parameter_group_family }}" + + # Test create using check_mode=true + - name: Create RDS cluster parameter group (check_mode=true) + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + check_mode: true + register: create_checkmode + + - name: Describe RDS parameter group + amazon.aws.rds_cluster_param_group_info: + name: "{{ rds_cluster_param_group_name }}" + register: cluster_params + + - name: Assert that the RDS cluster parameter was not created (using check_mode=true) + ansible.builtin.assert: + that: + - create_checkmode is changed + - cluster_params.db_cluster_parameter_groups | length == 0 + + # Test create RDS cluster parameter group + - name: Create RDS cluster parameter group + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + register: create_group + + - name: Describe RDS parameter group + amazon.aws.rds_cluster_param_group_info: + name: "{{ rds_cluster_param_group_name }}" + register: cluster_params + + - name: Assert that the RDS cluster parameter was created + ansible.builtin.assert: + that: + - create_group is changed + - create_group.db_cluster_parameter_group.db_cluster_parameter_group_arn + - create_group.db_cluster_parameter_group.db_cluster_parameter_group_name == rds_cluster_param_group_name + - create_group.db_cluster_parameter_group.db_parameter_group_family == dbparam_group_family + - cluster_params.db_cluster_parameter_groups | length == 1 + + # Test create RDS cluster parameter group (idempotency) + - name: Create RDS cluster parameter group (idempotency) + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + register: create_idempotency + + - name: Validate that module did not report change + ansible.builtin.assert: + that: + - create_idempotency is not changed + + # Test adding tag to existing RDS cluster parameter group (check_mode=true) + - name: Update existing RDS cluster parameter group with tags (check_mode=true) + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + tags: "{{ resource_tags }}" + register: create_tag + check_mode: true + + - name: Describe RDS parameter group + amazon.aws.rds_cluster_param_group_info: + name: "{{ rds_cluster_param_group_name }}" + register: cluster_params + + - name: Validate that the resource has not been updated with tags (check_mode) + ansible.builtin.assert: + that: + - create_tag is changed + - cluster_params.db_cluster_parameter_groups.0.tags == {} + + # Test adding tag to existing RDS cluster parameter group + - name: Update existing RDS cluster parameter group with tags + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + tags: "{{ resource_tags }}" + register: create_tag + + - name: Describe RDS parameter group + amazon.aws.rds_cluster_param_group_info: + name: "{{ rds_cluster_param_group_name }}" + register: cluster_params + + - name: Validate that the resource has been updated with tags + ansible.builtin.assert: + that: + - create_tag is changed + - cluster_params.db_cluster_parameter_groups.0.tags == resource_tags + + # Test adding tag to existing RDS cluster parameter group (idempotency) + - name: Update existing RDS cluster parameter group with tags (idempotency) + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + tags: "{{ resource_tags }}" + register: create_tag_idempotency + + - name: Describe RDS parameter group + amazon.aws.rds_cluster_param_group_info: + name: "{{ rds_cluster_param_group_name }}" + register: cluster_params + + - name: Validate that the module did not report change and the resource tag remain unchanged + ansible.builtin.assert: + that: + - create_tag_idempotency is not changed + - cluster_params.db_cluster_parameter_groups.0.tags == resource_tags + + # Test adding not modifiable parameter + - name: Update RDS cluster param group with not modifiable parameter + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + parameters: + - parameter_name: archive_library + parameter_value: test + apply_method: immediate + register: not_modifiable + ignore_errors: true + + - name: Ensure module failed to update not modifiable parameter + ansible.builtin.assert: + that: + - not_modifiable is failed + - '"The parameter archive_library cannot be modified" in not_modifiable.msg' + + # Test adding invalid parameter + - name: Update RDS cluster param group with invalid parameter + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + parameters: + - parameter_name: invalid_fake + parameter_value: test + apply_method: immediate + register: invalid_param + ignore_errors: true + + - name: Ensure module failed to update invalid parameter + ansible.builtin.assert: + that: + - invalid_param is failed + - '"Could not find parameter with name: invalid_fake" in invalid_param.msg' + + # Test Modify parameters + - name: Modify RDS cluster parameter group with new parameters (check_mode) + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + parameters: + - parameter_name: array_nulls + parameter_value: "0" + apply_method: immediate + - parameter_name: authentication_timeout + parameter_value: "50" + apply_method: immediate + register: update_param_check_mode + check_mode: true + + - name: Describe RDS parameter group + amazon.aws.rds_cluster_param_group_info: + name: "{{ rds_cluster_param_group_name }}" + include_parameters: all + register: initial_params + no_log: true # very spammy + + - name: Assert that the task executed in check_mode reported change, while the parameters remain unchanged + ansible.builtin.assert: + that: + - update_param_check_mode is changed + - "'parameter_value' not in array_nulls_param" + - "'parameter_value' not in auth_timeout_param" + vars: + array_nulls_param: "{{ initial_params.db_cluster_parameter_groups.0.db_parameters | selectattr('parameter_name', 'equalto', 'array_nulls') | first }}" + auth_timeout_param: "{{ initial_params.db_cluster_parameter_groups.0.db_parameters | selectattr('parameter_name', 'equalto', 'authentication_timeout') | first }}" + + - name: Modify RDS cluster parameter group with new parameters + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + parameters: + - parameter_name: array_nulls + parameter_value: "0" + apply_method: immediate + - parameter_name: authentication_timeout + parameter_value: "50" + apply_method: immediate + register: update_parameters + + - name: Describe RDS parameter group + amazon.aws.rds_cluster_param_group_info: + name: "{{ rds_cluster_param_group_name }}" + include_parameters: user + register: cluster_params + + - name: Assert that the parameters are updated correctly + ansible.builtin.assert: + that: + - update_parameters is changed + - cluster_params.db_cluster_parameter_groups.0.db_parameters | selectattr('parameter_name', 'equalto', 'array_nulls') | first | community.general.json_query('parameter_value') == "0" + - cluster_params.db_cluster_parameter_groups.0.db_parameters | selectattr('parameter_name', 'equalto', 'authentication_timeout') | first | community.general.json_query('parameter_value') == "50" + + # Test Modify parameters (idempotency) + - name: Modify RDS cluster parameter group with new parameters (idempotency with check_mode) + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + parameters: + - parameter_name: array_nulls + parameter_value: "0" + apply_method: immediate + - parameter_name: authentication_timeout + parameter_value: "50" + apply_method: immediate + register: update_idempotency_check_mode + + - name: Ensure task executed using check_mode did not reported change + ansible.builtin.assert: + that: + - update_idempotency_check_mode is not changed + + - name: Modify RDS cluster parameter group with new parameters (idempotency) + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + db_parameter_group_family: "{{ dbparam_group_family }}" + description: "RDS cluster param group for Engine {{ engine_versions.db_engine_versions.0.engine_version }}" + parameters: + - parameter_name: array_nulls + parameter_value: "0" + apply_method: immediate + - parameter_name: authentication_timeout + parameter_value: "50" + apply_method: immediate + register: update_idempotency + + - name: Ensure module did not report change + ansible.builtin.assert: + that: + - update_idempotency is not changed + + # Test delete RDS cluster parameter group (check_mode=true) + - name: Delete existing RDS cluster parameter group (check_mode=true) + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + state: absent + register: delete_cluster_param_checkmode + check_mode: true + + - name: Describe RDS parameter group + amazon.aws.rds_cluster_param_group_info: + name: "{{ rds_cluster_param_group_name }}" + register: cluster_params + + - name: Validate that module execution reported change but the RDS cluster param group was not deleted + assert: + that: + - delete_cluster_param_checkmode is changed + - cluster_params.db_cluster_parameter_groups | length == 1 + + # Test delete RDS cluster parameter group + - name: Delete existing RDS cluster parameter group + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + state: absent + register: delete_cluster_param + + - name: Describe RDS parameter group + amazon.aws.rds_cluster_param_group_info: + name: "{{ rds_cluster_param_group_name }}" + register: cluster_params + + - name: Validate that module execution reported change and the RDS cluster param group is deleted + ansible.builtin.assert: + that: + - delete_cluster_param is changed + - cluster_params.db_cluster_parameter_groups | length == 0 + + # Test delete RDS cluster parameter group (idempotency) + - name: Delete existing RDS cluster parameter group + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + state: absent + register: delete_cluster_param + + - name: Ensure module did not report change + ansible.builtin.assert: + that: + - delete_cluster_param is not changed + + always: + - name: Delete existing RDS cluster parameter group + amazon.aws.rds_cluster_param_group: + name: "{{ rds_cluster_param_group_name }}" + state: absent + register: delete_cluster_param + ignore_errors: true diff --git a/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_complex/defaults/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_complex/defaults/main.yml index f2b794609..c7b6d0de9 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_complex/defaults/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_complex/defaults/main.yml @@ -14,4 +14,4 @@ storage_type: io1 iops: 1000 # For mariadb tests -mariadb_engine_version: 10.6.10 +mariadb_engine_version: 10.11.7 diff --git a/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_complex/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_complex/tasks/main.yml index e4d9daa60..51ff777ea 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_complex/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_complex/tasks/main.yml @@ -23,7 +23,7 @@ ignore_errors: true - name: Create an enhanced monitoring role - community.aws.iam_role: + amazon.aws.iam_role: assume_role_policy_document: "{{ lookup('file','files/enhanced_monitoring_assume_policy.json') }}" name: "{{ instance_id }}-role" state: present @@ -91,7 +91,7 @@ preferred_maintenance_window: "{{ preferred_maintenance_window }}" auto_minor_version_upgrade: false monitoring_interval: "{{ monitoring_interval }}" - monitoring_role_arn: "{{ enhanced_monitoring_role.arn }}" + monitoring_role_arn: "{{ enhanced_monitoring_role.iam_role.arn }}" iops: "{{ iops }}" port: 1150 max_allocated_storage: 150 @@ -115,7 +115,7 @@ preferred_maintenance_window: "{{ preferred_maintenance_window }}" auto_minor_version_upgrade: false monitoring_interval: "{{ monitoring_interval }}" - monitoring_role_arn: "{{ enhanced_monitoring_role.arn }}" + monitoring_role_arn: "{{ enhanced_monitoring_role.iam_role.arn }}" iops: "{{ iops }}" port: 1150 max_allocated_storage: 150 @@ -143,7 +143,7 @@ preferred_maintenance_window: "{{ preferred_maintenance_window }}" auto_minor_version_upgrade: false monitoring_interval: "{{ monitoring_interval }}" - monitoring_role_arn: "{{ enhanced_monitoring_role.arn }}" + monitoring_role_arn: "{{ enhanced_monitoring_role.iam_role.arn }}" iops: "{{ iops }}" port: 1150 max_allocated_storage: 150 @@ -166,7 +166,7 @@ preferred_maintenance_window: "{{ preferred_maintenance_window }}" auto_minor_version_upgrade: false monitoring_interval: "{{ monitoring_interval }}" - monitoring_role_arn: "{{ enhanced_monitoring_role.arn }}" + monitoring_role_arn: "{{ enhanced_monitoring_role.iam_role.arn }}" iops: "{{ iops }}" port: 1150 max_allocated_storage: 150 @@ -190,7 +190,7 @@ ignore_errors: true - name: Remove enhanced monitoring role - community.aws.iam_role: + amazon.aws.iam_role: assume_role_policy_document: "{{ lookup('file','files/enhanced_monitoring_assume_policy.json') }}" name: "{{ instance_id }}-role" state: absent diff --git a/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_modify/defaults/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_modify/defaults/main.yml index 0384232d5..0e09b9c4c 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_modify/defaults/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_modify/defaults/main.yml @@ -7,4 +7,4 @@ db_instance_class: db.t3.micro allocated_storage: 20 # For mariadb tests -mariadb_engine_version: 10.6.10 +mariadb_engine_version: 10.11.7 diff --git a/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_modify/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_modify/tasks/main.yml index 4e33789f3..e440bbc42 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_modify/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_modify/tasks/main.yml @@ -82,7 +82,7 @@ - '"is not valid for adding IAM roles" in result.msg' # TODO: test modifying db_subnet_group_name, db_security_groups, db_parameter_group_name, option_group_name, - # monitoring_role_arn, monitoring_interval, domain, domain_iam_role_name, cloudwatch_logs_export_configuration + # monitoring_role_arn, monitoring_interval, domain, domain_iam_role_name # ------------------------------------------------------------------------------------------ - name: Modify the storage type without immediate application - check_mode @@ -306,6 +306,193 @@ - db_info.instances[0].ca_certificate_identifier == "rds-ca-ecc384-g1" # Test modifying CA certificate identifier Complete------------------------------------------- + # Test modifying cloudwatch log exports ------------------------------------------- + - name: Enable all cloudwatch log exports - check_mode + amazon.aws.rds_instance: + state: present + db_instance_identifier: "{{ modified_instance_id }}" + enable_cloudwatch_logs_exports: ["audit", "error", "general", "slowquery"] + register: result + check_mode: true + vars: + ansible_python_interpreter: "{{ botocore_virtualenv_interpreter }}" + + - name: Get current cloudwatch log exports + amazon.aws.rds_instance_info: + db_instance_identifier: "{{ modified_instance_id }}" + register: db_info + - name: Assert that cloudwatch log exports has been modified - check_mode + ansible.builtin.assert: + that: + - result is changed + - result is not failed + - db_info.instances[0].enabled_cloudwatch_logs_exports is not defined + + - name: Enable all cloudwatch log exports + amazon.aws.rds_instance: + state: present + db_instance_identifier: "{{ modified_instance_id }}" + enable_cloudwatch_logs_exports: ["audit", "error", "general", "slowquery"] + register: result + vars: + ansible_python_interpreter: "{{ botocore_virtualenv_interpreter }}" + + - name: Get current cloudwatch log exports + amazon.aws.rds_instance_info: + db_instance_identifier: "{{ modified_instance_id }}" + register: db_info + # It applies immediately but takes a couple seconds + until: + - db_info.instances[0].db_instance_status == 'available' + - not db_info.instances[0].pending_modified_values + retries: 10 + delay: 20 + + - name: Assert that cloudwatch log exports has been modified + ansible.builtin.assert: + that: + - result is changed + - result is not failed + - db_info.instances[0].enabled_cloudwatch_logs_exports | length == 4 + + - name: Enable all cloudwatch log exports - idempotent + amazon.aws.rds_instance: + state: present + db_instance_identifier: "{{ modified_instance_id }}" + enable_cloudwatch_logs_exports: ["audit", "error", "general", "slowquery"] + register: result + vars: + ansible_python_interpreter: "{{ botocore_virtualenv_interpreter }}" + + - name: Get current cloudwatch log exports + amazon.aws.rds_instance_info: + db_instance_identifier: "{{ modified_instance_id }}" + register: db_info + - name: Assert that cloudwatch log exports has not been modified + ansible.builtin.assert: + that: + - result is not changed + - result is not failed + - not result.pending_modified_values + - db_info.instances[0].enabled_cloudwatch_logs_exports | length == 4 + + - name: Disable some cloudwatch log exports - check_mode + amazon.aws.rds_instance: + state: present + db_instance_identifier: "{{ modified_instance_id }}" + enable_cloudwatch_logs_exports: ["audit", "error"] + register: result + check_mode: true + vars: + ansible_python_interpreter: "{{ botocore_virtualenv_interpreter }}" + + - name: Get current cloudwatch log exports + amazon.aws.rds_instance_info: + db_instance_identifier: "{{ modified_instance_id }}" + register: db_info + - name: Assert that cloudwatch log exports has been modified - check_mode + ansible.builtin.assert: + that: + - result is changed + - result is not failed + - db_info.instances[0].enabled_cloudwatch_logs_exports | length == 4 + + - name: Disable some cloudwatch log exports + amazon.aws.rds_instance: + state: present + db_instance_identifier: "{{ modified_instance_id }}" + enable_cloudwatch_logs_exports: ["audit", "error"] + register: result + vars: + ansible_python_interpreter: "{{ botocore_virtualenv_interpreter }}" + + - name: Get current cloudwatch log exports + amazon.aws.rds_instance_info: + db_instance_identifier: "{{ modified_instance_id }}" + register: db_info + until: + - db_info.instances[0].db_instance_status == 'available' + - not db_info.instances[0].pending_modified_values + retries: 10 + delay: 20 + + - name: Assert that cloudwatch log exports has been modified + ansible.builtin.assert: + that: + - result is changed + - result is not failed + - db_info.instances[0].enabled_cloudwatch_logs_exports | length == 2 + + - name: Disable all cloudwatch log exports - no purge + amazon.aws.rds_instance: + state: present + db_instance_identifier: "{{ modified_instance_id }}" + enable_cloudwatch_logs_exports: [] + purge_cloudwatch_logs_exports: false + register: result + vars: + ansible_python_interpreter: "{{ botocore_virtualenv_interpreter }}" + + - name: Get current cloudwatch log exports + amazon.aws.rds_instance_info: + db_instance_identifier: "{{ modified_instance_id }}" + register: db_info + - name: Assert that cloudwatch log exports has not been modified + ansible.builtin.assert: + that: + - result is not changed + - result is not failed + - not result.pending_modified_values + - db_info.instances[0].enabled_cloudwatch_logs_exports | length == 2 + + - name: Disable all cloudwatch log exports - check_mode + amazon.aws.rds_instance: + state: present + db_instance_identifier: "{{ modified_instance_id }}" + enable_cloudwatch_logs_exports: [] + register: result + check_mode: true + vars: + ansible_python_interpreter: "{{ botocore_virtualenv_interpreter }}" + + - name: Get current cloudwatch log exports + amazon.aws.rds_instance_info: + db_instance_identifier: "{{ modified_instance_id }}" + register: db_info + - name: Assert that cloudwatch log exports has been modified - check_mode + ansible.builtin.assert: + that: + - result is changed + - result is not failed + - db_info.instances[0].enabled_cloudwatch_logs_exports | length == 2 + + - name: Disable all cloudwatch log exports + amazon.aws.rds_instance: + state: present + db_instance_identifier: "{{ modified_instance_id }}" + enable_cloudwatch_logs_exports: [] + register: result + vars: + ansible_python_interpreter: "{{ botocore_virtualenv_interpreter }}" + + - name: Get current cloudwatch log exports + amazon.aws.rds_instance_info: + db_instance_identifier: "{{ modified_instance_id }}" + register: db_info + until: + - db_info.instances[0].db_instance_status == 'available' + - not db_info.instances[0].pending_modified_values + retries: 10 + delay: 20 + + - name: Assert that cloudwatch log exports has been modified + ansible.builtin.assert: + that: + - result is changed + - result is not failed + - db_info.instances[0].enabled_cloudwatch_logs_exports is not defined + # Test modifying cloudwatch log exports Complete------------------------------------------- + always: - name: Delete the instance amazon.aws.rds_instance: diff --git a/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_snapshot/defaults/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_snapshot/defaults/main.yml index d193876e7..e82f395a8 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_snapshot/defaults/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/rds_instance_snapshot/defaults/main.yml @@ -8,7 +8,7 @@ password: "{{ lookup('password', '/dev/null') }}" db_instance_class: db.t3.micro allocated_storage: 10 engine: mariadb -mariadb_engine_version: 10.6.10 +mariadb_engine_version: 10.11.7 # Create snapshot snapshot_id: "{{ instance_id }}-snapshot" diff --git a/ansible_collections/amazon/aws/tests/integration/targets/rds_option_group/defaults/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/rds_option_group/defaults/main.yml index e0f04005f..70a5946bf 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/rds_option_group/defaults/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/rds_option_group/defaults/main.yml @@ -1,7 +1,7 @@ --- option_group_name: "{{ resource_prefix }}rds-option-group" engine_name: mysql -major_engine_version: 5.6 +major_engine_version: 8.0 option_group_description: "{{ resource_prefix }}rds-option-group test" instance_id: "{{ resource_prefix }}" username: test diff --git a/ansible_collections/amazon/aws/tests/integration/targets/rds_param_group/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/rds_param_group/tasks/main.yml index 663ee68df..4751e56e8 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/rds_param_group/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/rds_param_group/tasks/main.yml @@ -22,7 +22,7 @@ block: # ============================================================ - name: test empty parameter group - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -36,7 +36,7 @@ - result.changed - name: test empty parameter group - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -54,7 +54,7 @@ # ============================================================ - name: test empty parameter group with no arguments changes nothing - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -68,7 +68,7 @@ - not result.changed - name: test empty parameter group with no arguments changes nothing - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -82,7 +82,7 @@ # ============================================================ - name: test adding numeric tag - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -98,7 +98,7 @@ that: - result.changed - name: test adding numeric tag - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -123,7 +123,7 @@ # ============================================================ - name: test modifying rds parameter group engine/family (warning displayed) - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine_to_modify_to }}" description: "{{ rds_param_group.description }}" @@ -143,7 +143,7 @@ # ============================================================ - name: test tagging existing group - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -160,7 +160,7 @@ that: - result.changed - name: test tagging existing group - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -186,7 +186,7 @@ # ============================================================ - name: test repeating tagging existing group - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -212,7 +212,7 @@ - result.tags["NewTag"] == 'hello' - name: test repeating tagging existing group - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -238,7 +238,7 @@ # ============================================================ - name: test deleting tags from existing group - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -254,7 +254,7 @@ that: - result.changed - name: test deleting tags from existing group - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -277,7 +277,7 @@ # ============================================================ - name: test state=absent with engine defined (expect changed=true) - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" state: absent @@ -290,7 +290,7 @@ - result.changed - name: test state=absent with engine defined (expect changed=true) - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" state: absent @@ -303,7 +303,7 @@ # ============================================================ - name: test creating group with parameters - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -325,7 +325,7 @@ - result.changed - name: test creating group with parameters - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -355,7 +355,7 @@ # ============================================================ - name: test repeating group with parameters - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -377,7 +377,7 @@ - not result.changed - name: test repeating group with parameters - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -407,7 +407,7 @@ # ============================================================ - name: test state=absent with engine defined (expect changed=true) - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" state: absent @@ -419,7 +419,7 @@ that: - result.changed - name: test state=absent with engine defined (expect changed=true) - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" state: absent @@ -432,7 +432,7 @@ # ============================================================ - name: test repeating state=absent (expect changed=false) - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" state: absent @@ -445,7 +445,7 @@ that: - not result.changed - name: test repeating state=absent (expect changed=false) - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" state: absent @@ -459,7 +459,7 @@ # ============================================================ - name: test creating group with more than 20 parameters - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -473,7 +473,7 @@ that: - result.changed - name: test creating group with more than 20 parameters - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -488,7 +488,7 @@ # ============================================================ - name: test creating group with more than 20 parameters - CHECK_MODE - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -502,7 +502,7 @@ that: - not result.changed - name: test creating group with more than 20 parameters - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" engine: "{{ rds_param_group.engine }}" description: "{{ rds_param_group.description }}" @@ -518,7 +518,7 @@ always: # ============================================================ - name: test state=absent (expect changed=false) - amazon.aws.rds_param_group: + amazon.aws.rds_instance_param_group: name: "{{ rds_param_group.name }}" state: absent register: result diff --git a/ansible_collections/amazon/aws/tests/integration/targets/s3_bucket_info/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/s3_bucket_info/tasks/main.yml index f532c13a1..1b5c3172e 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/s3_bucket_info/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/s3_bucket_info/tasks/main.yml @@ -1,5 +1,5 @@ --- -- name: Test community.aws.aws_s3_bucket_info +- name: Test s3_bucket_info module_defaults: group/aws: access_key: "{{ aws_access_key }}" diff --git a/ansible_collections/amazon/aws/tests/integration/targets/s3_object/library/test_s3_upload_multipart.py b/ansible_collections/amazon/aws/tests/integration/targets/s3_object/library/test_s3_upload_multipart.py new file mode 100644 index 000000000..a95275865 --- /dev/null +++ b/ansible_collections/amazon/aws/tests/integration/targets/s3_object/library/test_s3_upload_multipart.py @@ -0,0 +1,137 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright: Contributors to the Ansible project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: test_s3_upload_multipart +short_description: Create object using multipart upload +description: + - This module is used to create object into S3 bucket using multipart upload. + - Multipart upload allows to upload a single object as a set of parts. + - This module is exclusively used to test collection `amazon.aws`. +options: + bucket: + description: + - Bucket name. + required: true + type: str + object: + description: + - Key name of the object. + type: str + required: true + part_size: + description: + - Part size in MB. + type: int + default: 10 + parts: + description: + - Number of parts. + type: int + default: 6 +author: + - "Aubin Bikouo (@abikouo)" +extends_documentation_fragment: + - amazon.aws.common.modules + - amazon.aws.region.modules + - amazon.aws.tags + - amazon.aws.boto3 +""" + + +try: + import boto3 + import botocore +except ImportError: + pass # Handled by AnsibleAWSModule + +import random +import string + +from ansible.module_utils.common.dict_transformations import snake_dict_to_camel_dict + +from ansible_collections.amazon.aws.plugins.module_utils.modules import AnsibleAWSModule +from ansible_collections.amazon.aws.plugins.module_utils.retries import AWSRetry +from ansible_collections.amazon.aws.plugins.module_utils.s3 import s3_extra_params + + +def generate_content(length): + return "".join([random.choice(string.ascii_letters + string.digits) for i in range(length)]) + + +def updload_parts(s3, parts, part_size, **kwargs): + multiparts = [] + for part_id in range(1, parts + 1): + response = s3.upload_part( + Body=str.encode(generate_content(part_size * 1024 * 1024)), PartNumber=part_id, **kwargs + ) + + multiparts.append( + { + "PartNumber": part_id, + "ETag": response.get("ETag"), + } + ) + return multiparts + + +def main(): + argument_spec = dict( + bucket=dict(required=True), + object=dict(required=True), + parts=dict(type="int", default=6), + part_size=dict(type="int", default=10), + ) + + module = AnsibleAWSModule( + argument_spec=argument_spec, + supports_check_mode=True, + ) + + bucket = module.params.get("bucket") + object = module.params.get("object") + part_size = module.params.get("part_size") + parts = module.params.get("parts") + + extra_params = s3_extra_params(module.params) + retry_decorator = AWSRetry.jittered_backoff() + try: + s3 = module.client("s3", retry_decorator=retry_decorator, **extra_params) + except ( + botocore.exceptions.ClientError, + botocore.exceptions.BotoCoreError, + boto3.exceptions.Boto3Error, + ) as e: + module.fail_json_aws(e, msg="Failed to connect to AWS") + + # create multipart upload + response = s3.create_multipart_upload(Bucket=bucket, Key=object) + upload_id = response.get("UploadId") + + # upload parts + upload_params = { + "Bucket": bucket, + "Key": object, + "UploadId": upload_id, + } + + multiparts = updload_parts(s3, parts, part_size, **upload_params) + + # complete the upload + response = s3.complete_multipart_upload( + Bucket=bucket, + Key=object, + MultipartUpload={"Parts": multiparts}, + UploadId=upload_id, + ) + + response.pop("ResponseMetadata", None) + module.exit_json(changed=True, s3_object=snake_dict_to_camel_dict(response)) + + +if __name__ == "__main__": + main() diff --git a/ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_multipart_upload.yml b/ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_multipart_upload.yml new file mode 100644 index 000000000..edab77b6e --- /dev/null +++ b/ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_multipart_upload.yml @@ -0,0 +1,185 @@ +- name: Test copying object create using multipart upload + vars: + test_bucket: "{{ resource_prefix }}-multipart" + test_versioned_bucket: "{{ resource_prefix }}-multipart-versioned" + obj_metadata: + some: meta_info + test: ci + block: + # Create Sample bucket + - name: Create bucket with name '{{ test_bucket }}' + amazon.aws.s3_bucket: + name: "{{ test_bucket }}" + state: present + + - name: Create object into bucket using multipart upload + test_s3_upload_multipart: + access_key: "{{ aws_access_key }}" + secret_key: "{{ aws_secret_key }}" + session_token: "{{ security_token | default(omit) }}" + region: "{{ aws_region }}" + bucket: "{{ test_bucket }}" + object: multipart_1 + + # Test copying multipart-uploaded object + - name: Copy object + amazon.aws.s3_object: + bucket: "{{ test_bucket }}" + mode: copy + object: multipart_1_copy + copy_src: + bucket: "{{ test_bucket }}" + object: multipart_1 + register: _copy + + - name: Ensure module reported change + ansible.builtin.assert: + that: + - _copy is changed + + - name: Retrieve object info + amazon.aws.s3_object_info: + bucket_name: "{{ test_bucket }}" + object_name: multipart_1_copy + register: obj_info + + - name: Ensure object has been created + ansible.builtin.assert: + that: + - obj_info.object_info | length == 1 + + - name: Copy object once again (idempotency) + amazon.aws.s3_object: + bucket: "{{ test_bucket }}" + mode: copy + object: multipart_1_copy + copy_src: + bucket: "{{ test_bucket }}" + object: multipart_1 + register: copy_idempotency + + - name: Ensure module did not reported change + ansible.builtin.assert: + that: + - copy_idempotency is not changed + + # Update object with metadata + - name: Copy object with metadata + amazon.aws.s3_object: + bucket: "{{ test_bucket }}" + mode: copy + object: multipart_1_copy + copy_src: + bucket: "{{ test_bucket }}" + object: multipart_1 + metadata: "{{ obj_metadata }}" + register: _copymetadata + + - name: Ensure module reported change + ansible.builtin.assert: + that: + - _copymetadata is changed + + - name: Retrieve object info + amazon.aws.s3_object_info: + bucket_name: "{{ test_bucket }}" + object_name: multipart_1_copy + register: obj_info + + - name: Ensure object has been created + ansible.builtin.assert: + that: + - obj_info.object_info | length == 1 + - obj_info.object_info.0.object_data.metadata == obj_metadata + + # Test copy with metadata (idempotency) + - name: Copy object with metadata once again (idempotency) + amazon.aws.s3_object: + bucket: "{{ test_bucket }}" + mode: copy + object: multipart_1_copy + copy_src: + bucket: "{{ test_bucket }}" + object: multipart_1 + metadata: "{{ obj_metadata }}" + register: copy_idempotency + + - name: Ensure module did not reported change + ansible.builtin.assert: + that: + - copy_idempotency is not changed + + - name: Retrieve object info + amazon.aws.s3_object_info: + bucket_name: "{{ test_bucket }}" + object_name: multipart_1_copy + register: obj_info + + - name: Ensure object has been created + ansible.builtin.assert: + that: + - obj_info.object_info | length == 1 + - obj_info.object_info.0.object_data.metadata == obj_metadata + + # Test copying multipart-uploaded object into bucket with versioning activated + # Create bucket with versioning activated + - name: Create bucket with name '{{ test_versioned_bucket }}' + amazon.aws.s3_bucket: + name: "{{ test_versioned_bucket }}" + versioning: true + state: present + + - name: Copy object into bucket with versioning activated + amazon.aws.s3_object: + bucket: "{{ test_versioned_bucket }}" + mode: copy + object: multipart_2 + copy_src: + bucket: "{{ test_bucket }}" + object: multipart_1 + register: _copy + + - name: Get objects info from bucket with versioning activated + amazon.aws.s3_object_info: + bucket_name: "{{ test_versioned_bucket }}" + object_name: multipart_2 + register: obj_info_1 + + - name: Ensure object was copied and object info contain versioning information + ansible.builtin.assert: + that: + - _copy is changed + - obj_info_1.object_info.0.object_data.version_id + + # test copy idempotency with versioned bucket + - name: Copy object into bucket with versioning activated (once again) + amazon.aws.s3_object: + bucket: "{{ test_versioned_bucket }}" + mode: copy + object: multipart_2 + copy_src: + bucket: "{{ test_bucket }}" + object: multipart_1 + register: _copy_idempotency + + - name: Get objects info from bucket with versioning activated + amazon.aws.s3_object_info: + bucket_name: "{{ test_versioned_bucket }}" + object_name: multipart_2 + register: obj_info_2 + + - name: Validate that module did not reported change and object versioned remains unchanged + ansible.builtin.assert: + that: + - _copy_idempotency is not changed + - obj_info_1.object_info.0.object_data.version_id == obj_info_2.object_info.0.object_data.version_id + + always: + - name: Delete buckets + amazon.aws.s3_bucket: + name: "{{ item }}" + state: absent + force: true + with_items: + - "{{ test_versioned_bucket }}" + - "{{ test_bucket }}" diff --git a/ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_object.yml b/ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_object.yml index 994733d81..cfb5e13f6 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_object.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/copy_object.yml @@ -6,6 +6,9 @@ metacopy_data: name: metacopy version: "1.0.3" + another_metadata: + another: meta + mode: copy block: - name: define bucket name used for tests ansible.builtin.set_fact: @@ -211,6 +214,54 @@ - obj_info.results | selectattr('item', 'equalto', 'metacopy') | map(attribute='object_info.0.object_data.metadata') | first == metacopy_data - obj_info.results | selectattr('item', 'equalto', 'copywithmeta') | map(attribute='object_info.0.object_data.metadata') | first == withmeta_data + # Validate copy idempotency with metadata + - name: Copy same object including metadata (check_mode=true) + amazon.aws.s3_object: + bucket: "{{ bucket_name }}" + mode: copy + object: copywithmeta + copy_src: + bucket: "{{ bucket_name }}" + object: withmeta + metadata: "{{ another_metadata }}" + register: copy_with_metadata_checkmode + check_mode: true + + - name: Get objects info + amazon.aws.s3_object_info: + bucket_name: "{{ bucket_name }}" + object_name: copywithmeta + register: obj_info + + - name: Validate that objects module reported change but metadata was not updated + ansible.builtin.assert: + that: + - copy_with_metadata_checkmode is changed + - obj_info.object_info.0.object_data.metadata == withmeta_data + + - name: Copy same object including metadata + amazon.aws.s3_object: + bucket: "{{ bucket_name }}" + mode: copy + object: copywithmeta + copy_src: + bucket: "{{ bucket_name }}" + object: withmeta + metadata: "{{ another_metadata }}" + register: copy_with_metadata + + - name: Get objects info + amazon.aws.s3_object_info: + bucket_name: "{{ bucket_name }}" + object_name: copywithmeta + register: obj_info + + - name: Validate that objects module reported change and metadata was updated + ansible.builtin.assert: + that: + - copy_with_metadata is changed + - obj_info.object_info.0.object_data.metadata == another_metadata + always: - ansible.builtin.include_tasks: delete_bucket.yml with_items: diff --git a/ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/main.yml index 7a8a585de..70041d36a 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/s3_object/tasks/main.yml @@ -1071,9 +1071,10 @@ - "'tags' in result" - (result.tags | length) == 0 - - ansible.builtin.include_tasks: copy_recursively.yml - - ansible.builtin.include_tasks: copy_object.yml - - ansible.builtin.include_tasks: copy_object_acl_disabled_bucket.yml + - ansible.builtin.include_tasks: copy_recursively.yml + - ansible.builtin.include_tasks: copy_object.yml + - ansible.builtin.include_tasks: copy_object_acl_disabled_bucket.yml + - ansible.builtin.include_tasks: copy_multipart_upload.yml always: - name: delete temporary files file: diff --git a/ansible_collections/amazon/aws/tests/integration/targets/sts_assume_role/tasks/main.yml b/ansible_collections/amazon/aws/tests/integration/targets/sts_assume_role/tasks/main.yml index 807a422c9..7fdeb71e5 100644 --- a/ansible_collections/amazon/aws/tests/integration/targets/sts_assume_role/tasks/main.yml +++ b/ansible_collections/amazon/aws/tests/integration/targets/sts_assume_role/tasks/main.yml @@ -22,7 +22,7 @@ # ============================================================ - name: create test iam role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ iam_role_name }}" assume_role_policy_document: "{{ lookup('template','policy.json.j2') }}" create_instance_profile: false @@ -247,7 +247,7 @@ # ============================================================ - name: test that assumed credentials have IAM read-only access - community.aws.iam_role: + amazon.aws.iam_role: access_key: "{{ assumed_role.sts_creds.access_key }}" secret_key: "{{ assumed_role.sts_creds.secret_key }}" session_token: "{{ assumed_role.sts_creds.session_token }}" @@ -266,7 +266,7 @@ # ============================================================ - name: test assumed role with unprivileged action - community.aws.iam_role: + amazon.aws.iam_role: access_key: "{{ assumed_role.sts_creds.access_key }}" secret_key: "{{ assumed_role.sts_creds.secret_key }}" session_token: "{{ assumed_role.sts_creds.session_token }}" @@ -295,7 +295,7 @@ # ============================================================ always: - name: delete test iam role - community.aws.iam_role: + amazon.aws.iam_role: name: "{{ iam_role_name }}" assume_role_policy_document: "{{ lookup('template','policy.json.j2') }}" delete_instance_profile: true diff --git a/ansible_collections/amazon/aws/tests/sanity/ignore-2.18.txt b/ansible_collections/amazon/aws/tests/sanity/ignore-2.18.txt new file mode 100644 index 000000000..09a7e9cbb --- /dev/null +++ b/ansible_collections/amazon/aws/tests/sanity/ignore-2.18.txt @@ -0,0 +1 @@ +plugins/modules/route53.py validate-modules:parameter-state-invalid-choice # route53_info needs improvements before we can deprecate this diff --git a/ansible_collections/amazon/aws/tests/unit/module_utils/botocore/test_is_boto3_error_code.py b/ansible_collections/amazon/aws/tests/unit/module_utils/botocore/test_is_boto3_error_code.py index 9f3e4194b..a5ce452fc 100644 --- a/ansible_collections/amazon/aws/tests/unit/module_utils/botocore/test_is_boto3_error_code.py +++ b/ansible_collections/amazon/aws/tests/unit/module_utils/botocore/test_is_boto3_error_code.py @@ -209,3 +209,71 @@ class TestIsBoto3ErrorCode: assert not issubclass(returned_exception, botocore.exceptions.BotoCoreError) assert issubclass(returned_exception, Exception) assert returned_exception.__name__ == "NeverEverRaisedException" + + def test_is_boto3_error_code_tuple__pass__client(self): + passed_exception = self._make_denied_exception() + returned_exception = is_boto3_error_code(("NotAccessDenied", "AccessDenied"), e=passed_exception) + assert isinstance(passed_exception, returned_exception) + assert issubclass(returned_exception, botocore.exceptions.ClientError) + assert not issubclass(returned_exception, botocore.exceptions.BotoCoreError) + assert issubclass(returned_exception, Exception) + assert returned_exception.__name__ != "NeverEverRaisedException" + + returned_exception = is_boto3_error_code(("AccessDenied", "NotAccessDenied"), e=passed_exception) + assert isinstance(passed_exception, returned_exception) + assert issubclass(returned_exception, botocore.exceptions.ClientError) + assert not issubclass(returned_exception, botocore.exceptions.BotoCoreError) + assert issubclass(returned_exception, Exception) + assert returned_exception.__name__ != "NeverEverRaisedException" + + def test_is_boto3_error_code_tuple__pass__unexpected(self): + passed_exception = self._make_unexpected_exception() + returned_exception = is_boto3_error_code(("NotAccessDenied", "AccessDenied"), e=passed_exception) + assert not isinstance(passed_exception, returned_exception) + assert not issubclass(returned_exception, botocore.exceptions.ClientError) + assert not issubclass(returned_exception, botocore.exceptions.BotoCoreError) + assert issubclass(returned_exception, Exception) + assert returned_exception.__name__ == "NeverEverRaisedException" + + def test_is_boto3_error_code_tuple__pass__botocore(self): + passed_exception = self._make_botocore_exception() + returned_exception = is_boto3_error_code(("NotAccessDenied", "AccessDenied"), e=passed_exception) + assert not isinstance(passed_exception, returned_exception) + assert not issubclass(returned_exception, botocore.exceptions.ClientError) + assert not issubclass(returned_exception, botocore.exceptions.BotoCoreError) + assert issubclass(returned_exception, Exception) + assert returned_exception.__name__ == "NeverEverRaisedException" + + def test_is_boto3_error_code_set__pass__client(self): + passed_exception = self._make_denied_exception() + returned_exception = is_boto3_error_code({"NotAccessDenied", "AccessDenied"}, e=passed_exception) + assert isinstance(passed_exception, returned_exception) + assert issubclass(returned_exception, botocore.exceptions.ClientError) + assert not issubclass(returned_exception, botocore.exceptions.BotoCoreError) + assert issubclass(returned_exception, Exception) + assert returned_exception.__name__ != "NeverEverRaisedException" + + returned_exception = is_boto3_error_code({"AccessDenied", "NotAccessDenied"}, e=passed_exception) + assert isinstance(passed_exception, returned_exception) + assert issubclass(returned_exception, botocore.exceptions.ClientError) + assert not issubclass(returned_exception, botocore.exceptions.BotoCoreError) + assert issubclass(returned_exception, Exception) + assert returned_exception.__name__ != "NeverEverRaisedException" + + def test_is_boto3_error_code_set__pass__unexpected(self): + passed_exception = self._make_unexpected_exception() + returned_exception = is_boto3_error_code({"NotAccessDenied", "AccessDenied"}, e=passed_exception) + assert not isinstance(passed_exception, returned_exception) + assert not issubclass(returned_exception, botocore.exceptions.ClientError) + assert not issubclass(returned_exception, botocore.exceptions.BotoCoreError) + assert issubclass(returned_exception, Exception) + assert returned_exception.__name__ == "NeverEverRaisedException" + + def test_is_boto3_error_code_set__pass__botocore(self): + passed_exception = self._make_botocore_exception() + returned_exception = is_boto3_error_code({"NotAccessDenied", "AccessDenied"}, e=passed_exception) + assert not isinstance(passed_exception, returned_exception) + assert not issubclass(returned_exception, botocore.exceptions.ClientError) + assert not issubclass(returned_exception, botocore.exceptions.BotoCoreError) + assert issubclass(returned_exception, Exception) + assert returned_exception.__name__ == "NeverEverRaisedException" diff --git a/ansible_collections/amazon/aws/tests/unit/module_utils/iam/test_iam_resource_transforms.py b/ansible_collections/amazon/aws/tests/unit/module_utils/iam/test_iam_resource_transforms.py index 28090f993..0a6830311 100644 --- a/ansible_collections/amazon/aws/tests/unit/module_utils/iam/test_iam_resource_transforms.py +++ b/ansible_collections/amazon/aws/tests/unit/module_utils/iam/test_iam_resource_transforms.py @@ -451,10 +451,10 @@ class TestIamResourceToAnsibleDict: OUTPUT = { "arn": "arn:aws:iam::123456789012:role/ansible-test-76640355", "assume_role_policy_document": { - "statement": [ - {"action": "sts:AssumeRole", "effect": "Deny", "principal": {"service": "ec2.amazonaws.com"}} + "Statement": [ + {"Action": "sts:AssumeRole", "Effect": "Deny", "Principal": {"Service": "ec2.amazonaws.com"}} ], - "version": "2012-10-17", + "Version": "2012-10-17", }, "assume_role_policy_document_raw": { "Statement": [ diff --git a/ansible_collections/amazon/aws/tests/unit/module_utils/modules/ansible_aws_module/test_passthrough.py b/ansible_collections/amazon/aws/tests/unit/module_utils/modules/ansible_aws_module/test_passthrough.py index c61de1391..688514f59 100644 --- a/ansible_collections/amazon/aws/tests/unit/module_utils/modules/ansible_aws_module/test_passthrough.py +++ b/ansible_collections/amazon/aws/tests/unit/module_utils/modules/ansible_aws_module/test_passthrough.py @@ -70,7 +70,7 @@ def test_region(monkeypatch, stdin): aws_module = utils_module.AnsibleAWSModule(argument_spec=dict()) assert aws_module.region is sentinel.RETURNED_REGION - assert get_aws_region.call_args == call(aws_module, True) + assert get_aws_region.call_args == call(aws_module) @pytest.mark.parametrize("stdin", [{}], indirect=["stdin"]) @@ -129,7 +129,7 @@ def test_client_no_wrapper(monkeypatch, stdin): aws_module = utils_module.AnsibleAWSModule(argument_spec=dict()) assert aws_module.client(sentinel.PARAM_SERVICE) is sentinel.BOTO3_CONN - assert get_aws_connection_info.call_args == call(aws_module, boto3=True) + assert get_aws_connection_info.call_args == call(aws_module) assert boto3_conn.call_args == call( aws_module, conn_type="client", @@ -153,7 +153,7 @@ def test_client_wrapper(monkeypatch, stdin): wrapped_conn = aws_module.client(sentinel.PARAM_SERVICE, sentinel.PARAM_WRAPPER) assert wrapped_conn.client is sentinel.BOTO3_CONN assert wrapped_conn.retry is sentinel.PARAM_WRAPPER - assert get_aws_connection_info.call_args == call(aws_module, boto3=True) + assert get_aws_connection_info.call_args == call(aws_module) assert boto3_conn.call_args == call( aws_module, conn_type="client", @@ -166,7 +166,7 @@ def test_client_wrapper(monkeypatch, stdin): wrapped_conn = aws_module.client(sentinel.PARAM_SERVICE, sentinel.PARAM_WRAPPER, region=sentinel.PARAM_REGION) assert wrapped_conn.client is sentinel.BOTO3_CONN assert wrapped_conn.retry is sentinel.PARAM_WRAPPER - assert get_aws_connection_info.call_args == call(aws_module, boto3=True) + assert get_aws_connection_info.call_args == call(aws_module) assert boto3_conn.call_args == call( aws_module, conn_type="client", @@ -188,7 +188,7 @@ def test_resource(monkeypatch, stdin): aws_module = utils_module.AnsibleAWSModule(argument_spec=dict()) assert aws_module.resource(sentinel.PARAM_SERVICE) is sentinel.BOTO3_CONN - assert get_aws_connection_info.call_args == call(aws_module, boto3=True) + assert get_aws_connection_info.call_args == call(aws_module) assert boto3_conn.call_args == call( aws_module, conn_type="resource", @@ -199,7 +199,7 @@ def test_resource(monkeypatch, stdin): # Check that we can override parameters assert aws_module.resource(sentinel.PARAM_SERVICE, region=sentinel.PARAM_REGION) is sentinel.BOTO3_CONN - assert get_aws_connection_info.call_args == call(aws_module, boto3=True) + assert get_aws_connection_info.call_args == call(aws_module) assert boto3_conn.call_args == call( aws_module, conn_type="resource", diff --git a/ansible_collections/amazon/aws/tests/unit/module_utils/policy/test_sort_json_policy_dict.py b/ansible_collections/amazon/aws/tests/unit/module_utils/policy/test_sort_json_policy_dict.py deleted file mode 100644 index 8829f332c..000000000 --- a/ansible_collections/amazon/aws/tests/unit/module_utils/policy/test_sort_json_policy_dict.py +++ /dev/null @@ -1,61 +0,0 @@ -# (c) 2022 Red Hat Inc. -# -# This file is part of Ansible -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from ansible_collections.amazon.aws.plugins.module_utils.policy import sort_json_policy_dict - - -def test_nothing_to_sort(): - simple_dict = {"key1": "a"} - nested_dict = {"key1": {"key2": "a"}} - very_nested_dict = {"key1": {"key2": {"key3": "a"}}} - assert sort_json_policy_dict(simple_dict) == simple_dict - assert sort_json_policy_dict(nested_dict) == nested_dict - assert sort_json_policy_dict(very_nested_dict) == very_nested_dict - - -def test_basic_sort(): - simple_dict = {"key1": [1, 2, 3, 4], "key2": [9, 8, 7, 6]} - sorted_dict = {"key1": [1, 2, 3, 4], "key2": [6, 7, 8, 9]} - assert sort_json_policy_dict(simple_dict) == sorted_dict - assert sort_json_policy_dict(sorted_dict) == sorted_dict - simple_dict = {"key1": ["a", "b", "c", "d"], "key2": ["z", "y", "x", "w"]} - sorted_dict = {"key1": ["a", "b", "c", "d"], "key2": ["w", "x", "y", "z"]} - assert sort_json_policy_dict(sorted_dict) == sorted_dict - - -def test_nested_list_sort(): - nested_dict = {"key1": {"key2": [9, 8, 7, 6]}} - sorted_dict = {"key1": {"key2": [6, 7, 8, 9]}} - assert sort_json_policy_dict(nested_dict) == sorted_dict - assert sort_json_policy_dict(sorted_dict) == sorted_dict - nested_dict = {"key1": {"key2": ["z", "y", "x", "w"]}} - sorted_dict = {"key1": {"key2": ["w", "x", "y", "z"]}} - assert sort_json_policy_dict(nested_dict) == sorted_dict - assert sort_json_policy_dict(sorted_dict) == sorted_dict - - -def test_nested_dict_list_sort(): - nested_dict = {"key1": {"key2": {"key3": [9, 8, 7, 6]}}} - sorted_dict = {"key1": {"key2": {"key3": [6, 7, 8, 9]}}} - assert sort_json_policy_dict(nested_dict) == sorted_dict - assert sort_json_policy_dict(sorted_dict) == sorted_dict - nested_dict = {"key1": {"key2": {"key3": ["z", "y", "x", "w"]}}} - sorted_dict = {"key1": {"key2": {"key3": ["w", "x", "y", "z"]}}} - assert sort_json_policy_dict(nested_dict) == sorted_dict - assert sort_json_policy_dict(sorted_dict) == sorted_dict - - -def test_list_of_dict_sort(): - nested_dict = {"key1": [{"key2": [4, 3, 2, 1]}, {"key3": [9, 8, 7, 6]}]} - sorted_dict = {"key1": [{"key2": [1, 2, 3, 4]}, {"key3": [6, 7, 8, 9]}]} - assert sort_json_policy_dict(nested_dict) == sorted_dict - assert sort_json_policy_dict(sorted_dict) == sorted_dict - - -def test_list_of_list_sort(): - nested_dict = {"key1": [[4, 3, 2, 1], [9, 8, 7, 6]]} - sorted_dict = {"key1": [[1, 2, 3, 4], [6, 7, 8, 9]]} - assert sort_json_policy_dict(nested_dict) == sorted_dict - assert sort_json_policy_dict(sorted_dict) == sorted_dict diff --git a/ansible_collections/amazon/aws/tests/unit/module_utils/test_elbv2.py b/ansible_collections/amazon/aws/tests/unit/module_utils/test_elbv2.py index d7293f0ce..0d2f3c153 100644 --- a/ansible_collections/amazon/aws/tests/unit/module_utils/test_elbv2.py +++ b/ansible_collections/amazon/aws/tests/unit/module_utils/test_elbv2.py @@ -6,6 +6,8 @@ from unittest.mock import MagicMock +import pytest + from ansible_collections.amazon.aws.plugins.module_utils import elbv2 one_action = [ @@ -159,3 +161,138 @@ class TestElBV2Utils: actual_elb_attributes = self.elbv2obj.get_elb_attributes() # Assert we got the expected result assert actual_elb_attributes == expected_elb_attributes + + +class TestELBListeners: + DEFAULT_PORT = 80 + DEFAULT_PROTOCOL = "TCP" + + def createListener(self, **kwargs): + result = {"Port": self.DEFAULT_PORT, "Protocol": self.DEFAULT_PROTOCOL} + if kwargs.get("port"): + result["Port"] = kwargs.get("port") + if kwargs.get("protocol"): + result["Protocol"] = kwargs.get("protocol") + if kwargs.get("certificate_arn") and kwargs.get("protocol") in ("TLS", "HTTPS"): + result["Certificates"] = [{"CertificateArn": kwargs.get("certificate_arn")}] + if kwargs.get("sslPolicy") and kwargs.get("protocol") in ("TLS", "HTTPS"): + result["SslPolicy"] = kwargs.get("sslPolicy") + if kwargs.get("alpnPolicy") and kwargs.get("protocol") == "TLS": + result["AlpnPolicy"] = kwargs.get("alpnPolicy") + return result + + @pytest.mark.parametrize("current_protocol", ["TCP", "TLS", "UDP"]) + @pytest.mark.parametrize( + "current_alpn,new_alpn", + [ + (None, "None"), + (None, "HTTP1Only"), + ("HTTP1Only", "HTTP2Only"), + ("HTTP1Only", "HTTP1Only"), + ], + ) + def test__compare_listener_alpn_policy(self, current_protocol, current_alpn, new_alpn): + current_listener = self.createListener(protocol=current_protocol, alpnPolicy=[current_alpn]) + new_listener = self.createListener(protocol="TLS", alpnPolicy=[new_alpn]) + result = None + if current_protocol != "TLS": + result = {"Protocol": "TLS"} + if new_alpn and any((current_protocol != "TLS", not current_alpn, current_alpn and current_alpn != new_alpn)): + result = result or {} + result["AlpnPolicy"] = [new_alpn] + + assert result == elbv2.ELBListeners._compare_listener(current_listener, new_listener) + + @pytest.mark.parametrize( + "current_protocol,new_protocol", + [ + ("TCP", "TCP"), + ("TLS", "HTTPS"), + ("HTTPS", "HTTPS"), + ("TLS", "TLS"), + ("HTTPS", "TLS"), + ("HTTPS", "TCP"), + ("TLS", "TCP"), + ], + ) + @pytest.mark.parametrize( + "current_ssl,new_ssl", + [ + (None, "ELBSecurityPolicy-TLS-1-0-2015-04"), + ("ELBSecurityPolicy-TLS13-1-2-Ext2-2021-06", "ELBSecurityPolicy-TLS-1-0-2015-04"), + ("ELBSecurityPolicy-TLS-1-0-2015-04", None), + ("ELBSecurityPolicy-TLS-1-0-2015-04", "ELBSecurityPolicy-TLS-1-0-2015-04"), + ], + ) + def test__compare_listener_sslpolicy(self, current_protocol, new_protocol, current_ssl, new_ssl): + current_listener = self.createListener(protocol=current_protocol, sslPolicy=current_ssl) + + new_listener = self.createListener(protocol=new_protocol, sslPolicy=new_ssl) + + expected = None + if new_protocol != current_protocol: + expected = {"Protocol": new_protocol} + if new_protocol in ("HTTPS", "TLS") and new_ssl and new_ssl != current_ssl: + expected = expected or {} + expected["SslPolicy"] = new_ssl + assert expected == elbv2.ELBListeners._compare_listener(current_listener, new_listener) + + @pytest.mark.parametrize( + "current_protocol,new_protocol", + [ + ("TCP", "TCP"), + ("TLS", "HTTPS"), + ("HTTPS", "HTTPS"), + ("TLS", "TLS"), + ("HTTPS", "TLS"), + ("HTTPS", "TCP"), + ("TLS", "TCP"), + ], + ) + @pytest.mark.parametrize( + "current_certificate,new_certificate", + [ + (None, "arn:aws:iam::012345678901:server-certificate/ansible-test-1"), + ( + "arn:aws:iam::012345678901:server-certificate/ansible-test-1", + "arn:aws:iam::012345678901:server-certificate/ansible-test-2", + ), + ("arn:aws:iam::012345678901:server-certificate/ansible-test-1", None), + ( + "arn:aws:iam::012345678901:server-certificate/ansible-test-1", + "arn:aws:iam::012345678901:server-certificate/ansible-test-1", + ), + ], + ) + def test__compare_listener_certificates(self, current_protocol, new_protocol, current_certificate, new_certificate): + current_listener = self.createListener(protocol=current_protocol, certificate_arn=current_certificate) + + new_listener = self.createListener(protocol=new_protocol, certificate_arn=new_certificate) + + expected = None + if new_protocol != current_protocol: + expected = {"Protocol": new_protocol} + if new_protocol in ("HTTPS", "TLS") and new_certificate and new_certificate != current_certificate: + expected = expected or {} + expected["Certificates"] = [{"CertificateArn": new_certificate}] + assert expected == elbv2.ELBListeners._compare_listener(current_listener, new_listener) + + @pytest.mark.parametrize( + "are_equals", + [True, False], + ) + def test__compare_listener_port(self, are_equals): + current_listener = self.createListener() + new_port = MagicMock() if not are_equals else None + new_listener = self.createListener(port=new_port) + + result = elbv2.ELBListeners._compare_listener(current_listener, new_listener) + expected = None + if not are_equals: + expected = {"Port": new_port} + assert result == expected + + def test_ensure_listeners_alpn_policy(self): + listeners = [{"Port": self.DEFAULT_PORT, "AlpnPolicy": "HTTP2Optional"}] + expected = [{"Port": self.DEFAULT_PORT, "AlpnPolicy": ["HTTP2Optional"]}] + assert expected == elbv2.ELBListeners._ensure_listeners_alpn_policy(listeners) diff --git a/ansible_collections/amazon/aws/tests/unit/plugins/modules/test_lambda_event.py b/ansible_collections/amazon/aws/tests/unit/plugins/modules/test_lambda_event.py new file mode 100644 index 000000000..c292329b4 --- /dev/null +++ b/ansible_collections/amazon/aws/tests/unit/plugins/modules/test_lambda_event.py @@ -0,0 +1,544 @@ +# +# (c) 2024 Red Hat Inc. +# +# This file is part of Ansible +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from contextlib import nullcontext as does_not_raise +from copy import deepcopy +from unittest.mock import MagicMock +from unittest.mock import patch + +import pytest + +from ansible_collections.amazon.aws.plugins.modules.lambda_event import get_qualifier +from ansible_collections.amazon.aws.plugins.modules.lambda_event import lambda_event_stream +from ansible_collections.amazon.aws.plugins.modules.lambda_event import set_default_values +from ansible_collections.amazon.aws.plugins.modules.lambda_event import validate_params + +mock_get_qualifier = "ansible_collections.amazon.aws.plugins.modules.lambda_event.get_qualifier" +mock_camel_dict_to_snake_dict = "ansible_collections.amazon.aws.plugins.modules.lambda_event.camel_dict_to_snake_dict" + + +@pytest.fixture +def ansible_aws_module(): + module = MagicMock() + module.check_mode = False + module.params = { + "state": "present", + "lambda_function_arn": None, + "event_source": "sqs", + "source_params": { + "source_arn": "arn:aws:sqs:us-east-2:123456789012:ansible-test-sqs", + "batch_size": 200, + "starting_position": "LATEST", + }, + "alias": None, + "version": 0, + } + module.exit_json = MagicMock() + module.exit_json.side_effect = SystemExit(1) + module.fail_json_aws = MagicMock() + module.fail_json_aws.side_effect = SystemExit(2) + module.fail_json = MagicMock() + module.fail_json.side_effect = SystemExit(2) + module.client = MagicMock() + module.client.return_value = MagicMock() + module.boolean = MagicMock() + module.boolean.side_effect = lambda x: x.lower() in ["true", "1", "t", "y", "yes"] + return module + + +@pytest.mark.parametrize( + "module_params,expected", + [ + ({"version": 1}, "1"), + ({"alias": "ansible-test"}, "ansible-test"), + ({"version": 1, "alias": "ansible-test"}, "1"), + ({}, None), + ], +) +def test_get_qualifier(ansible_aws_module, module_params, expected): + ansible_aws_module.params.update(module_params) + assert get_qualifier(ansible_aws_module) == expected + + +@pytest.mark.parametrize( + "function_name,error_msg", + [ + ( + "invalid+function+name", + "Function name invalid+function+name is invalid. Names must contain only alphanumeric characters and hyphens.", + ), + ( + "this_invalid_function_name_has_more_than_64_character_limit_this_is_not_allowed_by_the_module", + 'Function name "this_invalid_function_name_has_more_than_64_character_limit_this_is_not_allowed_by_the_module" exceeds 64 character limit', + ), + ( + "arn:aws:lambda:us-east-2:123456789012:function:ansible-test-ansible-test-ansible-test-sqs-lambda-function:" + "ansible-test-ansible-test-ansible-test-sqs-lambda-function-alias", + 'ARN "arn:aws:lambda:us-east-2:123456789012:function:ansible-test-ansible-test-ansible-test-sqs-lambda-function:' + 'ansible-test-ansible-test-ansible-test-sqs-lambda-function-alias" exceeds 140 character limit', + ), + ], +) +def test_validate_params_function_name_errors(ansible_aws_module, function_name, error_msg): + ansible_aws_module.params.update({"lambda_function_arn": function_name}) + client = MagicMock() + client.get_function = MagicMock() + client.get_function.return_value = {} + with pytest.raises(SystemExit): + validate_params(ansible_aws_module, client) + + ansible_aws_module.fail_json.assert_called_once_with(msg=error_msg) + + +@pytest.mark.parametrize( + "qualifier", + [None, "ansible-test"], +) +@patch(mock_get_qualifier) +def test_validate_params_with_function_arn(m_get_qualifier, ansible_aws_module, qualifier): + function_name = "arn:aws:lambda:us-east-2:123456789012:function:sqs_consumer" + ansible_aws_module.params.update({"lambda_function_arn": function_name}) + m_get_qualifier.return_value = qualifier + + client = MagicMock() + client.get_function = MagicMock() + client.get_function.return_value = {} + + params = deepcopy(ansible_aws_module.params) + params["lambda_function_arn"] = f"{function_name}:{qualifier}" if qualifier else function_name + + validate_params(ansible_aws_module, client) + assert params == ansible_aws_module.params + m_get_qualifier.assert_called_once() + + +@pytest.mark.parametrize( + "qualifier", + [None, "ansible-test"], +) +@patch(mock_get_qualifier) +def test_validate_params_with_function_name(m_get_qualifier, ansible_aws_module, qualifier): + function_arn = "arn:aws:lambda:us-east-2:123456789012:function:sqs_consumer" + function_name = "sqs_consumer" + ansible_aws_module.params.update({"lambda_function_arn": function_name}) + m_get_qualifier.return_value = qualifier + + client = MagicMock() + client.get_function = MagicMock() + client.get_function.return_value = { + "Configuration": {"FunctionArn": function_arn}, + } + + params = deepcopy(ansible_aws_module.params) + params["lambda_function_arn"] = function_arn + + validate_params(ansible_aws_module, client) + + assert params == ansible_aws_module.params + m_get_qualifier.assert_called_once() + api_params = {"FunctionName": function_name} + if qualifier: + api_params.update({"Qualifier": qualifier}) + client.get_function.assert_called_once_with(**api_params) + + +EventSourceMappings = [ + { + "BatchSize": 10, + "EventSourceArn": "arn:aws:sqs:us-east-2:123456789012:sqs_consumer", + "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:sqs_consumer", + "LastModified": "2024-02-08T15:24:57.014000+01:00", + "MaximumBatchingWindowInSeconds": 0, + "State": "Enabled", + "StateTransitionReason": "USER_INITIATED", + "UUID": "3ab96d4c-b0c4-4885-87d0-f58cb9c0a4cc", + } +] + + +@pytest.mark.parametrize( + "check_mode", + [True, False], +) +@pytest.mark.parametrize( + "existing_event_source", + [True, False], +) +@patch(mock_camel_dict_to_snake_dict) +def test_lambda_event_stream_with_state_absent( + mock_camel_dict_to_snake_dict, ansible_aws_module, check_mode, existing_event_source +): + function_name = "sqs_consumer" + ansible_aws_module.params.update({"lambda_function_arn": function_name, "state": "absent"}) + ansible_aws_module.check_mode = check_mode + + client = MagicMock() + client.list_event_source_mappings = MagicMock() + + client.list_event_source_mappings.return_value = { + "EventSourceMappings": EventSourceMappings if existing_event_source else [] + } + client.delete_event_source_mapping = MagicMock() + event_source_deleted = {"msg": "event source successfully deleted."} + client.delete_event_source_mapping.return_value = event_source_deleted + mock_camel_dict_to_snake_dict.side_effect = lambda x: x + + events = [] + changed = False + result = lambda_event_stream(ansible_aws_module, client) + changed = existing_event_source + if existing_event_source: + events = EventSourceMappings + if not check_mode: + events = event_source_deleted + client.delete_event_source_mapping.assert_called_once_with(UUID=EventSourceMappings[0]["UUID"]) + else: + client.delete_event_source_mapping.assert_not_called() + assert dict(changed=changed, events=events) == result + + +def test_lambda_event_stream_create_event_missing_starting_position(ansible_aws_module): + ansible_aws_module.params = { + "state": "present", + "lambda_function_arn": "sqs_consumer", + "event_source": "stream", + "source_params": { + "source_arn": "arn:aws:sqs:us-east-2:123456789012:ansible-test-sqs", + "maximum_batching_window_in_seconds": 1, + "batch_size": 200, + }, + "alias": None, + "version": 0, + } + + client = MagicMock() + client.list_event_source_mappings = MagicMock() + client.list_event_source_mappings.return_value = {"EventSourceMappings": []} + + error_message = "Source parameter 'starting_position' is required for stream event notification." + with pytest.raises(SystemExit): + lambda_event_stream(ansible_aws_module, client) + ansible_aws_module.fail_json.assert_called_once_with(msg=error_message) + + +@pytest.mark.parametrize( + "check_mode", + [True, False], +) +@pytest.mark.parametrize( + "module_params,api_params", + [ + ( + { + "state": "present", + "lambda_function_arn": "sqs_consumer", + "event_source": "stream", + "source_params": { + "source_arn": "arn:aws:sqs:us-east-2:123456789012:ansible-test-sqs", + "maximum_batching_window_in_seconds": 1, + "batch_size": 250, + "starting_position": "END", + "function_response_types": ["ReportBatchItemFailures"], + }, + "alias": None, + "version": 0, + }, + { + "FunctionName": "sqs_consumer", + "EventSourceArn": "arn:aws:sqs:us-east-2:123456789012:ansible-test-sqs", + "StartingPosition": "END", + "Enabled": True, + "MaximumBatchingWindowInSeconds": 1, + "BatchSize": 250, + "FunctionResponseTypes": ["ReportBatchItemFailures"], + }, + ), + ( + { + "state": "present", + "lambda_function_arn": "sqs_consumer", + "event_source": "stream", + "source_params": { + "source_arn": "arn:aws:sqs:us-east-2:123456789012:ansible-test-sqs", + "maximum_batching_window_in_seconds": 1, + "batch_size": 250, + "starting_position": "END", + "function_response_types": ["ReportBatchItemFailures"], + "enabled": "no", + }, + "alias": None, + "version": 0, + }, + { + "FunctionName": "sqs_consumer", + "EventSourceArn": "arn:aws:sqs:us-east-2:123456789012:ansible-test-sqs", + "StartingPosition": "END", + "Enabled": False, + "MaximumBatchingWindowInSeconds": 1, + "BatchSize": 250, + "FunctionResponseTypes": ["ReportBatchItemFailures"], + }, + ), + ( + { + "state": "present", + "lambda_function_arn": "sqs_consumer", + "event_source": "sqs", + "source_params": { + "source_arn": "arn:aws:sqs:us-east-2:123456789012:ansible-test-sqs", + "maximum_batching_window_in_seconds": 1, + "batch_size": 101, + }, + "alias": None, + "version": 0, + }, + { + "FunctionName": "sqs_consumer", + "EventSourceArn": "arn:aws:sqs:us-east-2:123456789012:ansible-test-sqs", + "Enabled": True, + "MaximumBatchingWindowInSeconds": 1, + "BatchSize": 101, + }, + ), + ], +) +@patch(mock_camel_dict_to_snake_dict) +def test_lambda_event_stream_create_event( + mock_camel_dict_to_snake_dict, ansible_aws_module, check_mode, module_params, api_params +): + ansible_aws_module.params = module_params + ansible_aws_module.check_mode = check_mode + + client = MagicMock() + client.list_event_source_mappings = MagicMock() + client.list_event_source_mappings.return_value = {"EventSourceMappings": []} + + client.create_event_source_mapping = MagicMock() + event_source_created = {"msg": "event source successfully created."} + client.create_event_source_mapping.return_value = event_source_created + mock_camel_dict_to_snake_dict.side_effect = lambda x: x + + result = lambda_event_stream(ansible_aws_module, client) + + events = [] + + if not check_mode: + events = event_source_created + client.create_event_source_mapping.assert_called_once_with(**api_params) + else: + client.create_event_source_mapping.assert_not_called() + + assert dict(changed=True, events=events) == result + + +@pytest.mark.parametrize( + "check_mode", + [True, False], +) +@pytest.mark.parametrize( + "module_source_params,current_mapping,api_params", + [ + ( + {"batch_size": 100, "enabled": "false"}, + {"BatchSize": 120, "State": "Enabled"}, + {"BatchSize": 100, "Enabled": False}, + ), + ( + {"batch_size": 100, "enabled": "true"}, + {"BatchSize": 100, "State": "Enabled"}, + {}, + ), + ], +) +@patch(mock_camel_dict_to_snake_dict) +def test_lambda_event_stream_update_event( + mock_camel_dict_to_snake_dict, ansible_aws_module, check_mode, module_source_params, current_mapping, api_params +): + function_name = "ansible-test-update-event-function" + ansible_aws_module.params.update({"lambda_function_arn": function_name}) + ansible_aws_module.params["source_params"].update(module_source_params) + ansible_aws_module.check_mode = check_mode + + client = MagicMock() + client.list_event_source_mappings = MagicMock() + existing_event_source = deepcopy(EventSourceMappings) + existing_event_source[0].update(current_mapping) + client.list_event_source_mappings.return_value = {"EventSourceMappings": existing_event_source} + + client.update_event_source_mapping = MagicMock() + event_source_updated = {"msg": "event source successfully updated."} + client.update_event_source_mapping.return_value = event_source_updated + mock_camel_dict_to_snake_dict.side_effect = lambda x: x + + result = lambda_event_stream(ansible_aws_module, client) + if not api_params: + assert dict(changed=False, events=existing_event_source) == result + client.update_event_source_mapping.assert_not_called() + elif check_mode: + assert dict(changed=True, events=existing_event_source) == result + client.update_event_source_mapping.assert_not_called() + else: + api_params.update({"FunctionName": function_name, "UUID": existing_event_source[0]["UUID"]}) + assert dict(changed=True, events=event_source_updated) == result + client.update_event_source_mapping.assert_called_once_with(**api_params) + + +@pytest.mark.parametrize( + "params, expected, exception, message, source_type", + [ + ( + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052.fifo", + "enabled": True, + "batch_size": 100, + "starting_position": None, + "function_response_types": None, + "maximum_batching_window_in_seconds": None, + }, + None, + pytest.raises(SystemExit), + "For FIFO queues the maximum batch_size is 10.", + "sqs", + ), + ( + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052.fifo", + "enabled": True, + "batch_size": 10, + "starting_position": None, + "function_response_types": None, + "maximum_batching_window_in_seconds": 1, + }, + None, + pytest.raises(SystemExit), + "maximum_batching_window_in_seconds is not supported by Amazon SQS FIFO event sources.", + "sqs", + ), + ( + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052.fifo", + "enabled": True, + "batch_size": 10, + "starting_position": None, + "function_response_types": None, + "maximum_batching_window_in_seconds": None, + }, + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052.fifo", + "enabled": True, + "batch_size": 10, + "starting_position": None, + "function_response_types": None, + "maximum_batching_window_in_seconds": None, + }, + does_not_raise(), + None, + "sqs", + ), + ( + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052", + "enabled": True, + "batch_size": 11000, + "starting_position": None, + "function_response_types": None, + "maximum_batching_window_in_seconds": None, + }, + None, + pytest.raises(SystemExit), + "For standard queue batch_size must be lower than 10000.", + "sqs", + ), + ( + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052", + "enabled": True, + "batch_size": 100, + "starting_position": None, + "function_response_types": None, + "maximum_batching_window_in_seconds": None, + }, + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052", + "enabled": True, + "batch_size": 100, + "starting_position": None, + "function_response_types": None, + "maximum_batching_window_in_seconds": 1, + }, + does_not_raise(), + None, + "sqs", + ), + ( + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052", + "enabled": True, + "starting_position": None, + "function_response_types": None, + "maximum_batching_window_in_seconds": None, + }, + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052", + "enabled": True, + "batch_size": 100, + "starting_position": None, + "function_response_types": None, + "maximum_batching_window_in_seconds": 1, + }, + does_not_raise(), + None, + "stream", + ), + ( + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052", + "enabled": True, + "starting_position": None, + "function_response_types": None, + }, + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052", + "enabled": True, + "batch_size": 10, + "starting_position": None, + "function_response_types": None, + }, + does_not_raise(), + None, + "sqs", + ), + ( + { + "source_arn": "arn:aws:sqs:us-east-1:123456789012:ansible-test-28277052", + "enabled": True, + "batch_size": 10, + "starting_position": None, + "function_response_types": None, + "maximum_batching_window_in_seconds": None, + }, + None, + pytest.raises(SystemExit), + "batch_size for streams must be between 100 and 10000", + "stream", + ), + ], +) +def test__set_default_values(params, expected, exception, message, source_type): + result = None + module = MagicMock() + module.check_mode = False + module.params = { + "event_source": source_type, + "source_params": params, + } + module.fail_json = MagicMock() + module.fail_json.side_effect = SystemExit(message) + with exception as e: + result = set_default_values(module, params) + assert message is None or message in str(e) + if expected is not None: + assert result == expected diff --git a/ansible_collections/amazon/aws/tox.ini b/ansible_collections/amazon/aws/tox.ini index 179ed761c..ef66e76ea 100644 --- a/ansible_collections/amazon/aws/tox.ini +++ b/ansible_collections/amazon/aws/tox.ini @@ -74,6 +74,16 @@ deps = commands = flake8 {posargs} {[common]format_dirs} +[testenv:pylint-lint] +# Additional pylint tests that ansible-test currently ignores +deps = + pylint +commands = + pylint \ + --disable R,C,W,E \ + --enable consider-using-dict-items,assignment-from-no-return,no-else-continue,no-else-break,simplifiable-if-statement,pointless-string-statement,redefined-outer-name,redefined-builtin \ + {toxinidir}/plugins + [testenv:flynt] deps = flynt @@ -84,7 +94,7 @@ commands = deps = flynt commands = - flynt --dry-run {[common]format_dirs} + flynt --dry-run --fail-on-change {[common]format_dirs} [testenv:linters] deps = diff --git a/ansible_collections/ansible/netcommon/.ansible-lint b/ansible_collections/ansible/netcommon/.ansible-lint index c97d3bfc0..7062cb6dc 100644 --- a/ansible_collections/ansible/netcommon/.ansible-lint +++ b/ansible_collections/ansible/netcommon/.ansible-lint @@ -2,6 +2,7 @@ profile: production exclude_paths: - changelogs/changelog.yaml + - tests/unit/plugins/action/network/test_network.py skip_list: # ansible-lint does not like the `import-3.11` ignore in tests/sanity/ignore-*.txt - sanity[cannot-ignore] diff --git a/ansible_collections/ansible/netcommon/.flake8 b/ansible_collections/ansible/netcommon/.flake8 index ed9e1b403..0cf5d7554 100644 --- a/ansible_collections/ansible/netcommon/.flake8 +++ b/ansible_collections/ansible/netcommon/.flake8 @@ -7,39 +7,63 @@ count = true # Don't even try to analyze these: extend-exclude = - # vendored files - compat + # No need to traverse egg info dir + *.egg-info, + # tool cache dirs + *_cache # project env vars .env, # GitHub configs .github, - .mypy_cache + # Cache files of MyPy + .mypy_cache, # Cache files of pytest .pytest_cache, - tests/output/ - .tox - # Occasional virtualenv dirs + # Temp dir of pytest-testmon + .tmontmp, + # Occasional virtualenv dir .venv - venv # VS Code .vscode, + # Temporary build dir + build, + # This contains sdists and wheels of ansible-navigator that we don't want to check + dist, + # Metadata of `pip wheel` cmd is autogenerated + pip-wheel-metadata, + # adjacent venv + venv + # ansible won't let me + __init__.py # IMPORTANT: avoid using ignore option, always use extend-ignore instead # Completely and unconditionally ignore the following errors: extend-ignore = - # E123, E125 skipped as they are invalid PEP-8. - E123, - E125, - # annoy black by allowing white space before : https://github.com/psf/black/issues/315 - E203, - # ansible requires import after doc strings - E402, - # given the ansible_collections this is nearly impossible + F841, + # line-length E501, - W503, + # module level import not at top of file + E402, + # white space before : + E203, # Accessibility/large fonts and PEP8 unfriendly: -max-line-length = 100 +max-line-length = 120 + +# Allow certain violations in certain files: +# Please keep both sections of this list sorted, as it will be easier for others to find and add entries in the future +per-file-ignores = + # The following ignores have been researched and should be considered permanent + # each should be preceeded with an explanation of each of the error codes + # If other ignores are added for a specific file in the section following this, + # these will need to be added to that line as well. + + + # S101: Allow the use of assert within the tests directory, since tests require it. + tests/**.py: S101 + + # The following were present during the initial implementation. + # They are expected to be fixed and unignored over time. # Count the number of occurrences of each error/warning code and print a report: statistics = true diff --git a/ansible_collections/ansible/netcommon/.github/workflows/ack.yml b/ansible_collections/ansible/netcommon/.github/workflows/ack.yml deleted file mode 100644 index fda595dc5..000000000 --- a/ansible_collections/ansible/netcommon/.github/workflows/ack.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml -name: ack - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - pull_request_target: - types: [opened, labeled, unlabeled, synchronize] - -jobs: - ack: - uses: ansible/devtools/.github/workflows/ack.yml@main diff --git a/ansible_collections/ansible/netcommon/.github/workflows/check_label.yml b/ansible_collections/ansible/netcommon/.github/workflows/check_label.yml new file mode 100644 index 000000000..b120bfa32 --- /dev/null +++ b/ansible_collections/ansible/netcommon/.github/workflows/check_label.yml @@ -0,0 +1,11 @@ +--- +name: "Check label" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + pull_request_target: + types: [opened, labeled, unlabeled, synchronize] +jobs: + check_label: + uses: ansible/ansible-content-actions/.github/workflows/check_label.yaml@main diff --git a/ansible_collections/ansible/netcommon/.github/workflows/codecoverage.yml b/ansible_collections/ansible/netcommon/.github/workflows/codecoverage.yml index 6cc005fd2..2ac57db02 100644 --- a/ansible_collections/ansible/netcommon/.github/workflows/codecoverage.yml +++ b/ansible_collections/ansible/netcommon/.github/workflows/codecoverage.yml @@ -3,6 +3,7 @@ name: code_coverage on: # yamllint disable-line rule:truthy push: + branches: [ main ] pull_request: branches: [ main ] diff --git a/ansible_collections/ansible/netcommon/.github/workflows/draft_release.yml b/ansible_collections/ansible/netcommon/.github/workflows/draft_release.yml new file mode 100644 index 000000000..cb1a77f1c --- /dev/null +++ b/ansible_collections/ansible/netcommon/.github/workflows/draft_release.yml @@ -0,0 +1,18 @@ +--- +name: "Draft release" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + workflow_dispatch: +env: + NAMESPACE: ${{ github.repository_owner }} + COLLECTION_NAME: netcommon + ANSIBLE_COLLECTIONS_PATHS: ./ +jobs: + update_release_draft: + uses: ansible/ansible-content-actions/.github/workflows/draft_release.yaml@main + with: + repo: ${{ github.event.pull_request.head.repo.full_name }} + secrets: + BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/ansible/netcommon/.github/workflows/lint.yml b/ansible_collections/ansible/netcommon/.github/workflows/lint.yml deleted file mode 100644 index 6890c6a8d..000000000 --- a/ansible_collections/ansible/netcommon/.github/workflows/lint.yml +++ /dev/null @@ -1,12 +0,0 @@ ---- -name: ansible-lint -on: # yamllint disable-line rule:truthy - pull_request: - branches: ["main"] -jobs: - build: - name: Ansible Lint # Naming the build is important to use it as a status check - runs-on: ubuntu-latest - steps: - - name: Run ansible-lint - uses: ansible/ansible-lint@main # or version tag instead of 'main' diff --git a/ansible_collections/ansible/netcommon/.github/workflows/push.yml b/ansible_collections/ansible/netcommon/.github/workflows/push.yml deleted file mode 100644 index bed724d98..000000000 --- a/ansible_collections/ansible/netcommon/.github/workflows/push.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -# push workflow is shared and expected to perform actions after a merge happens -# on a maintenance branch (default or release). For example updating the -# draft release-notes. -# based on great work from -# https://github.com/T-Systems-MMS/ansible-collection-icinga-director -name: push - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - workflow_dispatch: - -env: - NAMESPACE: ansible - COLLECTION_NAME: netcommon - ANSIBLE_COLLECTIONS_PATHS: ./ - -jobs: - update_release_draft: - uses: ansible/devtools/.github/workflows/push_network.yml@main - with: - repo: ansible-collections/ansible.netcommon - secrets: - BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/ansible/netcommon/.github/workflows/release.yml b/ansible_collections/ansible/netcommon/.github/workflows/release.yml index eb04259d1..6dbb1aa39 100644 --- a/ansible_collections/ansible/netcommon/.github/workflows/release.yml +++ b/ansible_collections/ansible/netcommon/.github/workflows/release.yml @@ -1,12 +1,12 @@ --- -name: release +name: "Release collection" on: # yamllint disable-line rule:truthy release: types: [published] jobs: release: - uses: ansible/devtools/.github/workflows/release_collection.yml@main + uses: ansible/ansible-content-actions/.github/workflows/release.yaml@main with: environment: release secrets: diff --git a/ansible_collections/ansible/netcommon/.github/workflows/tests.yml b/ansible_collections/ansible/netcommon/.github/workflows/tests.yml index 6cd6ec7b6..b8d06999b 100644 --- a/ansible_collections/ansible/netcommon/.github/workflows/tests.yml +++ b/ansible_collections/ansible/netcommon/.github/workflows/tests.yml @@ -1,22 +1,29 @@ --- -name: test_collection +name: "CI" concurrency: - group: ${{ github.head_ref }} + group: ${{ github.head_ref || github.run_id }} cancel-in-progress: true on: # yamllint disable-line rule:truthy pull_request: branches: [main] workflow_dispatch: + schedule: + - cron: '0 0 * * *' jobs: changelog: - uses: ansible-network/github_actions/.github/workflows/changelog.yml@main + uses: ansible/ansible-content-actions/.github/workflows/changelog.yaml@main + if: github.event_name == 'pull_request' + build-import: + uses: ansible/ansible-content-actions/.github/workflows/build_import.yaml@main + ansible-lint: + uses: ansible/ansible-content-actions/.github/workflows/ansible_lint.yaml@main sanity: - uses: ansible-network/github_actions/.github/workflows/sanity.yml@main + uses: ansible/ansible-content-actions/.github/workflows/sanity.yaml@main unit-galaxy: - uses: ansible-network/github_actions/.github/workflows/unit_galaxy.yml@main + uses: ansible/ansible-content-actions/.github/workflows/unit.yaml@main unit-source: uses: ansible-network/github_actions/.github/workflows/unit_source.yml@main with: @@ -27,6 +34,7 @@ jobs: needs: - changelog - sanity + - ansible-lint - unit-galaxy - unit-source runs-on: ubuntu-latest @@ -37,5 +45,6 @@ jobs: '${{ needs.changelog.result }}', '${{ needs.sanity.result }}', '${{ needs.unit-galaxy.result }}', - '${{ needs.unit-source.result }}' + '${{ needs.unit-source.result }}', + '${{ needs.ansible-lint.result }}' ])" diff --git a/ansible_collections/ansible/netcommon/.github/workflows/token_refresh.yml b/ansible_collections/ansible/netcommon/.github/workflows/token_refresh.yml index 3fd76b1c2..ca93cb817 100644 --- a/ansible_collections/ansible/netcommon/.github/workflows/token_refresh.yml +++ b/ansible_collections/ansible/netcommon/.github/workflows/token_refresh.yml @@ -7,7 +7,7 @@ on: # yamllint disable-line rule:truthy jobs: refresh: - uses: ansible/devtools/.github/workflows/ah_token_refresh.yml@main + uses: ansible/ansible-content-actions/.github/workflows/refresh_ah_token.yaml@main with: environment: release secrets: diff --git a/ansible_collections/ansible/netcommon/.pre-commit-config.yaml b/ansible_collections/ansible/netcommon/.pre-commit-config.yaml index 1470d21ef..291c14265 100644 --- a/ansible_collections/ansible/netcommon/.pre-commit-config.yaml +++ b/ansible_collections/ansible/netcommon/.pre-commit-config.yaml @@ -6,7 +6,7 @@ repos: - id: update-docs - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v4.6.0 hooks: - id: check-merge-conflict - id: debug-statements @@ -15,7 +15,7 @@ repos: - id: trailing-whitespace - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.0.3" + rev: "v4.0.0-alpha.8" hooks: - id: prettier additional_dependencies: @@ -23,12 +23,17 @@ repos: - prettier-plugin-toml - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort args: ["--filter-files"] - repo: https://github.com/psf/black - rev: 23.7.0 + rev: 24.4.2 hooks: - id: black + + - repo: https://github.com/pycqa/flake8 + rev: 7.0.0 + hooks: + - id: flake8 diff --git a/ansible_collections/ansible/netcommon/CHANGELOG.rst b/ansible_collections/ansible/netcommon/CHANGELOG.rst index bbb0e5beb..b1bb37ecd 100644 --- a/ansible_collections/ansible/netcommon/CHANGELOG.rst +++ b/ansible_collections/ansible/netcommon/CHANGELOG.rst @@ -5,6 +5,55 @@ Ansible Netcommon Collection Release Notes .. contents:: Topics +v6.1.2 +====== + +Documentation Changes +--------------------- + +- Fixed module name and log consistency in parse_cli_textfsm filter doc. + +v6.1.1 +====== + +Bugfixes +-------- + +- Added guidance for users to open an issue for the respective platform if plugin support is needed. +- Improved module execution to gracefully handle cases where plugin support is required, providing a clear error message to the user. + +v6.1.0 +====== + +Minor Changes +------------- + +- Add new module cli_restore that exclusively handles restoring of backup configuration to target applaince. + +Bugfixes +-------- + +- libssh connection plugin - stop using deprecated ``PlayContext.verbosity`` property that is no longer present in ansible-core 2.18 (https://github.com/ansible-collections/ansible.netcommon/pull/626). +- network_cli - removed deprecated play_context.verbosity property. + +New Modules +----------- + +- cli_restore - Restore device configuration to network devices over network_cli + +v6.0.0 +====== + +Release Summary +--------------- + +Starting from this release, the minimum `ansible-core` version this collection requires is `2.14.0`. That last known version compatible with ansible-core<2.14 is `v5.3.0`. + +Major Changes +------------- + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. + v5.3.0 ====== diff --git a/ansible_collections/ansible/netcommon/FILES.json b/ansible_collections/ansible/netcommon/FILES.json index 4f21b1b7c..33f826157 100644 --- a/ansible_collections/ansible/netcommon/FILES.json +++ b/ansible_collections/ansible/netcommon/FILES.json @@ -7,11 +7,25 @@ "chksum_sha256": null, "format": 1 }, + { + "name": ".flake8", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1481c7d3af888765479ec8c66e606abb43271b58c32c9f9d1d3ac74ab6523f0c", + "format": 1 + }, + { + "name": "README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "57923246e36a3e8936eeff87a5d480eb60e302472bab5a2ee0b92148f33d561d", + "format": 1 + }, { "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7ea658cb22298c4b1e9a06e7c0f53b1a356808a4197cb821cec9053b378296af", + "chksum_sha256": "b40e19a7d49799a39ac5792db41fcd718da6a6a464ac019c1392440715ebe696", "format": 1 }, { @@ -22,94 +36,94 @@ "format": 1 }, { - "name": "docs/ansible.netcommon.grpc_connection.rst", + "name": "docs/ansible.netcommon.httpapi_connection.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "214da8572bccb96126741d4545eec467cf502d75810f6b0d957814c8b4cebb60", + "chksum_sha256": "11062a9bf605eb1581dd095eb0d06cc5eb9c769ab2ba2d91d9a66c013a350832", "format": 1 }, { - "name": "docs/ansible.netcommon.netconf_connection.rst", + "name": "docs/ansible.netcommon.grpc_get_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b1f7cf1d9f54e5a2821398cfdc5c731f265c3b653c9546dc99b92fd713c4ddfb", + "chksum_sha256": "03f346c20e371825edbc33ea56d62b792f7b5ae62f1c901487e779f8256616f9", "format": 1 }, { - "name": "docs/ansible.netcommon.network_cli_connection.rst", + "name": "docs/ansible.netcommon.persistent_connection.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "66ad2e69273c1f31b8a0705b44b3d3bf1a397641c38e00866514463e7814277d", + "chksum_sha256": "8cc16cbadad74f2ff57c9da4af2326fcbc313ebb5e999850179e7096c999a38e", "format": 1 }, { - "name": "docs/ansible.netcommon.vlan_expander_filter.rst", + "name": "docs/ansible.netcommon.grpc_connection.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11c2031e24c740975c682ba42257ee4f732b0d6931e31ed872021a1ae87e5ee9", + "chksum_sha256": "214da8572bccb96126741d4545eec467cf502d75810f6b0d957814c8b4cebb60", "format": 1 }, { - "name": "docs/ansible.netcommon.net_put_module.rst", + "name": "docs/ansible.netcommon.cli_backup_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "51cb81fc87bc4e92c6442a15d218fa9425bf8b19cb47f33e3e7a7c9b6c1cc560", + "chksum_sha256": "86c8907e90eaf0d18043c78567a70501bf6257ec50bb20753966bd3fb8ed0428", "format": 1 }, { - "name": "docs/ansible.netcommon.net_ping_module.rst", + "name": "docs/ansible.netcommon.netconf_config_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac33d21c4f133625feb63e1edc99621fa9a37db0b5dae6728dbc54911fee12cf", + "chksum_sha256": "988384818ac3f45f51ec7e97ee6fb19614665b293c90c45426286d250badebac", "format": 1 }, { - "name": "docs/ansible.netcommon.network_resource_module.rst", + "name": "docs/ansible.netcommon.telnet_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a2be201e2815cdbb047d05e98d735e8130fe47f99b9ce9ea3a3c971f78f2824", + "chksum_sha256": "e75f5a0914a102ce7fdc0ffb83933a5afad1228f04c72b4855da9154f5403cf7", "format": 1 }, { - "name": "docs/ansible.netcommon.default_netconf.rst", + "name": "docs/ansible.netcommon.restconf_httpapi.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "60610f9b4e18905f854afbdd8a6cd0549acf58c99fb212b46d8de1d9e46e6ff6", + "chksum_sha256": "9dfac86340b98f8cefbb7046415e72d1a6dd3b33ec40b3111888a01e6650ec43", "format": 1 }, { - "name": "docs/ansible.netcommon.hash_salt_filter.rst", + "name": "docs/ansible.netcommon.comp_type5_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "078b178b001e71ed8a6c01a24a88d2ccbdfcb043e5baf31def2c917b3361b571", + "chksum_sha256": "6ce772bc89d40db72dfb2a875e2403133a45465852852a8341c99acd8392123a", "format": 1 }, { - "name": "docs/ansible.netcommon.restconf_config_module.rst", + "name": "docs/ansible.netcommon.net_ping_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8202fa525ea6fe95d25f578c612b7aab8cc75d97c0f59b233420cfb342de807c", + "chksum_sha256": "ac33d21c4f133625feb63e1edc99621fa9a37db0b5dae6728dbc54911fee12cf", "format": 1 }, { - "name": "docs/ansible.netcommon.libssh_connection.rst", + "name": "docs/ansible.netcommon.net_get_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "517ece9818759f8b39a9d71635837ec4058cdd998d99636bb184b8c100badb4d", + "chksum_sha256": "53a379e03e2889b6cfa119cf9f9d8c8d9dfacad3fad45596c5f90ab6ce2a34af", "format": 1 }, { - "name": "docs/ansible.netcommon.comp_type5_filter.rst", + "name": "docs/ansible.netcommon.type5_pw_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ce772bc89d40db72dfb2a875e2403133a45465852852a8341c99acd8392123a", + "chksum_sha256": "da8e21777db0a599d5ecbb7aa4d9f5840b808062973d134c11905e43b89427db", "format": 1 }, { - "name": "docs/ansible.netcommon.restconf_get_module.rst", + "name": "docs/ansible.netcommon.cli_config_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ec64e2c0ec91b10bc1df3cdb3ce58076615f7f258b3ffc1032e8efe9237fd7a", + "chksum_sha256": "3e8bffadf1b8626eff08ba9643a1699aa3cb555665b0b86858b0845b153050dd", "format": 1 }, { @@ -120,227 +134,241 @@ "format": 1 }, { - "name": "docs/ansible.netcommon.cli_command_module.rst", + "name": "docs/ansible.netcommon.libssh_connection.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e75f91ee9d6ce2799aa9076e8ba8897e5752cd21fec1ca7493fcfec33718da8", + "chksum_sha256": "517ece9818759f8b39a9d71635837ec4058cdd998d99636bb184b8c100badb4d", "format": 1 }, { - "name": "docs/ansible.netcommon.netconf_config_module.rst", + "name": "docs/ansible.netcommon.default_cliconf.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3abf821342d2126c668376ff89177309699981949c5837dad40e52c7ba0bc14f", + "chksum_sha256": "b5602111676d608c1af8e72bd589572838fba44ec2cf3104ef19f9546dc57993", "format": 1 }, { - "name": "docs/ansible.netcommon.cli_backup_module.rst", + "name": "docs/ansible.netcommon.vlan_parser_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86c8907e90eaf0d18043c78567a70501bf6257ec50bb20753966bd3fb8ed0428", + "chksum_sha256": "227c999acc24c259a7eda976e8fc100a8655a7bfacb92a419324c2d843791bcf", "format": 1 }, { - "name": "docs/ansible.netcommon.httpapi_connection.rst", + "name": "docs/ansible.netcommon.parse_xml_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11062a9bf605eb1581dd095eb0d06cc5eb9c769ab2ba2d91d9a66c013a350832", + "chksum_sha256": "c4178550ef1b870e7f941866aeb44743775076ed6adec2479c3d301228c054a3", "format": 1 }, { - "name": "docs/ansible.netcommon.telnet_module.rst", + "name": "docs/ansible.netcommon.network_cli_connection.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b19d9e3961e91fef5b74bfcfd1336149f4562765cbe818c7e9fe86730ee4c64", + "chksum_sha256": "66ad2e69273c1f31b8a0705b44b3d3bf1a397641c38e00866514463e7814277d", "format": 1 }, { - "name": "docs/ansible.netcommon.cli_config_module.rst", + "name": "docs/ansible.netcommon.netconf_get_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f87eca68465a740a887d79d515ff17ab4ab5650f52635181d352937ed37b6340", + "chksum_sha256": "3eb34b2cbf47fa8a03e76979673865d1b351604394a03e2232a234d0961405db", "format": 1 }, { - "name": "docs/ansible.netcommon.restconf_httpapi.rst", + "name": "docs/ansible.netcommon.pop_ace_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9dfac86340b98f8cefbb7046415e72d1a6dd3b33ec40b3111888a01e6650ec43", + "chksum_sha256": "a21318e04f271de018ab19b084078ef0ce9292396f839f4d1f10d9d96d245aad", "format": 1 }, { - "name": "docs/ansible.netcommon.type5_pw_filter.rst", + "name": "docs/ansible.netcommon.default_netconf.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da8e21777db0a599d5ecbb7aa4d9f5840b808062973d134c11905e43b89427db", + "chksum_sha256": "60610f9b4e18905f854afbdd8a6cd0549acf58c99fb212b46d8de1d9e46e6ff6", "format": 1 }, { - "name": "docs/ansible.netcommon.netconf_rpc_module.rst", + "name": "docs/ansible.netcommon.hash_salt_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8ed5ab30aa2c64bd979e916534335039b3ecacdea98cf0ad031ca63e7d51148", + "chksum_sha256": "078b178b001e71ed8a6c01a24a88d2ccbdfcb043e5baf31def2c917b3361b571", "format": 1 }, { - "name": "docs/ansible.netcommon.persistent_connection.rst", + "name": "docs/ansible.netcommon.cli_restore_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8cc16cbadad74f2ff57c9da4af2326fcbc313ebb5e999850179e7096c999a38e", + "chksum_sha256": "ce4f913d4d9d928cdeb39067a3804a2a88b940022f7f856b779b885868bf0390", "format": 1 }, { - "name": "docs/ansible.netcommon.netconf_get_module.rst", + "name": "docs/ansible.netcommon.netconf_rpc_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b61aa32fea37af5e9548cff349771cf9cff58029423a6649280ffb6ba2502d2d", + "chksum_sha256": "b8ed5ab30aa2c64bd979e916534335039b3ecacdea98cf0ad031ca63e7d51148", "format": 1 }, { - "name": "docs/ansible.netcommon.grpc_get_module.rst", + "name": "docs/ansible.netcommon.enable_become.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6017d33b7dbd04fe4729bb3f80dfa3c532e8101eb741538818a176e9e0ef2988", + "chksum_sha256": "b56103797876c3da488319d7ce0f9e9bc0386c05989f3e7b0af949692a6054bc", "format": 1 }, { - "name": "docs/ansible.netcommon.pop_ace_filter.rst", + "name": "docs/ansible.netcommon.parse_cli_textfsm_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5dbfa3d73934841ca703e3f903ba750dce3ba3dca31bb8fd8406af85be5c58a1", + "chksum_sha256": "0838075ecfd7b6bad21c1cc23ba8a27ca34b74ef33311e1fd063de82d1b32684", "format": 1 }, { - "name": "docs/ansible.netcommon.enable_become.rst", + "name": "docs/ansible.netcommon.restconf_get_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b56103797876c3da488319d7ce0f9e9bc0386c05989f3e7b0af949692a6054bc", + "chksum_sha256": "6ec64e2c0ec91b10bc1df3cdb3ce58076615f7f258b3ffc1032e8efe9237fd7a", "format": 1 }, { - "name": "docs/ansible.netcommon.vlan_parser_filter.rst", + "name": "docs/ansible.netcommon.netconf_connection.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "227c999acc24c259a7eda976e8fc100a8655a7bfacb92a419324c2d843791bcf", + "chksum_sha256": "b1f7cf1d9f54e5a2821398cfdc5c731f265c3b653c9546dc99b92fd713c4ddfb", "format": 1 }, { "name": "docs/ansible.netcommon.grpc_config_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2a9a8545eee94a44ace4918d94c5b16550e61956a7630da578661eb292f22a4", + "chksum_sha256": "cdfd7cd10a332cd9477427ecb8eb1123671455404cbbe1ea62d6da0ee88ccb84", "format": 1 }, { - "name": "docs/ansible.netcommon.parse_xml_filter.rst", + "name": "docs/ansible.netcommon.network_resource_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c4178550ef1b870e7f941866aeb44743775076ed6adec2479c3d301228c054a3", + "chksum_sha256": "5a2be201e2815cdbb047d05e98d735e8130fe47f99b9ce9ea3a3c971f78f2824", "format": 1 }, { - "name": "docs/ansible.netcommon.default_cliconf.rst", + "name": "docs/ansible.netcommon.net_put_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5602111676d608c1af8e72bd589572838fba44ec2cf3104ef19f9546dc57993", + "chksum_sha256": "51cb81fc87bc4e92c6442a15d218fa9425bf8b19cb47f33e3e7a7c9b6c1cc560", "format": 1 }, { - "name": "docs/ansible.netcommon.parse_cli_textfsm_filter.rst", + "name": "docs/ansible.netcommon.vlan_expander_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "50e01691d07212104fc070f63b70f43f55d55a9fe801a6249a73706661d565ae", + "chksum_sha256": "11c2031e24c740975c682ba42257ee4f732b0d6931e31ed872021a1ae87e5ee9", "format": 1 }, { - "name": "docs/ansible.netcommon.net_get_module.rst", + "name": "docs/ansible.netcommon.restconf_config_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53a379e03e2889b6cfa119cf9f9d8c8d9dfacad3fad45596c5f90ab6ce2a34af", + "chksum_sha256": "8202fa525ea6fe95d25f578c612b7aab8cc75d97c0f59b233420cfb342de807c", "format": 1 }, { - "name": "meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/ansible.netcommon.cli_command_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1ecd9233008970791caa20ab031e89254efa8ae3958f4b82cd2004f77b3ed78a", "format": 1 }, { - "name": "meta/runtime.yml", + "name": ".isort.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff56dfb23a37013eadd63a57ef1e6345e793950e457fe952ec2e93150a7f1da1", + "chksum_sha256": "1e2efdac7205264ed7e9a36db8b351479eaad807ae3acdb2c2d4abe606328765", "format": 1 }, { - "name": ".isort.cfg", + "name": ".gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e2efdac7205264ed7e9a36db8b351479eaad807ae3acdb2c2d4abe606328765", + "chksum_sha256": "ff53015667831bfc9f6933b3ce958e5c5cf9d7125b121e415320dddc956fe291", "format": 1 }, { - "name": ".prettierignore", + "name": "changelogs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "changelogs/CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e696270d185b0a5b2b3a6087a748f805e2b7dbaf00d3dc99bc935e4bfa380397", + "chksum_sha256": "0ccda3a775ac79df07a7a7f0cff6c9f157793d95e60f5fe4a2326592b346819e", "format": 1 }, { - "name": "pyproject.toml", + "name": "changelogs/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ff9699724c6eb8760860135965bbc4284f1ae2d13bc9649a94f0713dee0b4d5", + "chksum_sha256": "5fc940cdae49577df5bc9b35b1f0bbbe531e9dd75569c60c636c39ea8b608aa4", "format": 1 }, { - "name": "README.md", + "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f2580ed2f9795008800e95ef09e2488e292629078ac02fc0e0acf0cb54fbf72", + "chksum_sha256": "09c82c169ea9a27fe2017f4cebeb33b9d0c725e84c1b522bf26b11a8aece541d", "format": 1 }, { - "name": ".ansible-lint", + "name": "changelogs/fragments", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "changelogs/fragments/.keep", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "590df540e028a9de6be6a175b6600f7fbdf335e78a173419856a2c5211a20bed", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "bindep.txt", + "name": "LICENSE", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "48ff33d9cce83a548c37cd02771dc9eff02834a93b58e1cde10735b7f65bda98", + "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", "format": 1 }, { - "name": ".pre-commit-config.yaml", + "name": "codecov.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d66935b3e1031f1f823377d3078b640c2476af457ad9f63a863e1ff7b250404", + "chksum_sha256": "4de622ff222475baea8a263ec15f8f40a62d77caa0ef6537bf4f638d4a834ec1", "format": 1 }, { - "name": "requirements.txt", + "name": "pyproject.toml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be1d32c772e4fc0a8a5da8e408ff93c681f749c15b393162dad6643da794e5d0", + "chksum_sha256": "3ff9699724c6eb8760860135965bbc4284f1ae2d13bc9649a94f0713dee0b4d5", "format": 1 }, { - "name": "tox.ini", + "name": "tox-ansible.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8bab7b483e32f4b1e68ece66140512c0bed5b82f39193a9f647a3b14d66ba2f5", + "chksum_sha256": "fd009473385d7a79691dba3f6326b5dce9ded1705cc672917cf80e03317bf38b", "format": 1 }, { - "name": "codecov.yml", + "name": ".prettierignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4de622ff222475baea8a263ec15f8f40a62d77caa0ef6537bf4f638d4a834ec1", + "chksum_sha256": "e696270d185b0a5b2b3a6087a748f805e2b7dbaf00d3dc99bc935e4bfa380397", "format": 1 }, { @@ -351,38 +379,38 @@ "format": 1 }, { - "name": "LICENSES/BSD-2-Clause.txt", + "name": "LICENSES/PSF-2.0.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6036f79d054f42e11f2dd52458b4d2282e901d197955e598bf1a23600280cf0", + "chksum_sha256": "bb27f2829b315447199ab930b6d0e0ae6716754ebfa4ccf81f6eb7738b0f963a", "format": 1 }, { - "name": "LICENSES/PSF-2.0.txt", + "name": "LICENSES/GPL-3.0-or-later.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb27f2829b315447199ab930b6d0e0ae6716754ebfa4ccf81f6eb7738b0f963a", + "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", "format": 1 }, { - "name": "LICENSES/GPL-3.0-or-later.txt", + "name": "LICENSES/BSD-2-Clause.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "chksum_sha256": "f6036f79d054f42e11f2dd52458b4d2282e901d197955e598bf1a23600280cf0", "format": 1 }, { - "name": "LICENSE", + "name": ".pre-commit-config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "chksum_sha256": "09385d6c0bff6e608ebdf0b18e2351a9bbf5016f60c3ef3c0303322eaf57f627", "format": 1 }, { - "name": "test-requirements.txt", + "name": "bindep.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e5a5e3886dd43195a46cf2414e0f7fa876815f5220a7c2ade3d1ff35186d5927", + "chksum_sha256": "6054b98c4396f84a34e654f0ce364ffa76336078dff46aa4a7b8db66fa1b9872", "format": 1 }, { @@ -392,13 +420,6 @@ "chksum_sha256": null, "format": 1 }, - { - "name": ".github/release-drafter.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", - "format": 1 - }, { "name": ".github/workflows", "ftype": "dir", @@ -407,423 +428,430 @@ "format": 1 }, { - "name": ".github/workflows/token_refresh.yml", + "name": ".github/workflows/tests.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a05a918a6d5d850b2b2de22eb8dc72b97bddc3767afe717d05868fa8327a8fc", + "chksum_sha256": "676d335cce4854c3a5dfe41ad9d5152965693c43e611adf7d3d8ef37cfb9fbc9", "format": 1 }, { - "name": ".github/workflows/lint.yml", + "name": ".github/workflows/release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e41893bf70dd373ee11a41bd795e71d9b08207ad266a3ee2a9518188575b228", + "chksum_sha256": "2e3f90a3147d93b97347d8418352f23e201417e05539a466399dd258a65d699c", "format": 1 }, { - "name": ".github/workflows/tests.yml", + "name": ".github/workflows/token_refresh.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "79116a92fbe020ab08512a88ce6db50d7c9d1b29f8a847824c1fff1125899e99", + "chksum_sha256": "4d63aad839799b51710fa161454a20a16308e9c252493e5ba1f1598f809ccb7e", "format": 1 }, { - "name": ".github/workflows/release.yml", + "name": ".github/workflows/check_label.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1", + "chksum_sha256": "9eb6abad2038b10cd6ea70310aa88d163f10c374d1728df29bb553eff2acfaba", "format": 1 }, { - "name": ".github/workflows/push.yml", + "name": ".github/workflows/codecoverage.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a3cea4a34af70cd6c1013b5b915c8ffe20e94ecec6a212ab48849f648021a587", + "chksum_sha256": "a9523df4ad130c49cab0b559c761d2558ab3d245bd7918c2ccf9789e9dbd3d2e", "format": 1 }, { - "name": ".github/workflows/codecoverage.yml", + "name": ".github/workflows/draft_release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "12a75af7bae4b0b577044e08cca9806031ce690eb8e041539a50b4b698c61f6f", + "chksum_sha256": "7c39a205f2120c2663149f9ca088093dc72e7091e7c9cc0f4c460895ced48494", "format": 1 }, { - "name": ".github/workflows/ack.yml", + "name": ".github/release-drafter.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24c6fbafaa69e3e3ee696f2cefa5120794b62cef7e870553dddce8b8af0a127c", - "format": 1 - }, - { - "name": "plugins", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", "format": 1 }, { - "name": "plugins/connection", + "name": "meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/connection/network_cli.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6daa45df83be72bed76443a87e160b54446b773d8042df58aa18fdb50b349a33", - "format": 1 - }, - { - "name": "plugins/connection/netconf.py", + "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cec6828c85edc627a81ac2e92a22d347abf0a9a5fd7ae617d04d8c7ba938e613", + "chksum_sha256": "8bf37857747519ae421fbe81a6469007b336d031a85d358974229f7d3b57154e", "format": 1 }, { - "name": "plugins/connection/httpapi.py", + "name": ".ansible-lint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4682f1ba34282794e361298b3e8e4bee251f106c3edfc90893f97f6f95c79015", + "chksum_sha256": "2103818cc70cfef8dc953cb87582a8bfcd6a1d65df6fff0817ca12ce69467f79", "format": 1 }, { - "name": "plugins/connection/grpc.py", + "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e91e5595a2d4537340de6d14fd60c4a465948d533ad94d136359854c683d998", + "chksum_sha256": "be1d32c772e4fc0a8a5da8e408ff93c681f749c15b393162dad6643da794e5d0", "format": 1 }, { - "name": "plugins/connection/persistent.py", + "name": "test-requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70b3882fe3d2e0710a2159f25ed2080b33ca16b2684da2380e51dcfe3542f384", + "chksum_sha256": "6aa95e604ffdd7f1225b05634ae00674a144d8fece59d7913076fd860b247bf1", "format": 1 }, { - "name": "plugins/connection/libssh.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9a467bf3a06e9fa6a81b79be37b78c1fe6ae90c6923d36ddaaa0d66c5e8031ec", + "name": "plugins", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/cache", + "name": "plugins/plugin_utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/cache/memory.py", + "name": "plugins/plugin_utils/parse_cli_textfsm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "741033bfd18a35bc814b44e46fd213f5bc4b078b62dfa556baac1079211e3ea5", + "chksum_sha256": "7a8f132e5006ab3afc28cc649846e875e444098ee1956e7941133e5a3a59f505", "format": 1 }, { - "name": "plugins/become", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "plugins/become/enable.py", + "name": "plugins/plugin_utils/parse_xml.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0bbcfd4eac913f404d25ae35209d7f3ba62989009f6fa73be8a4d39de3b48ef4", + "chksum_sha256": "f5afec2a0dba75e52a06c3a864625f70c56fa623d5f2958f36f31ff41e30db5d", "format": 1 }, { - "name": "plugins/httpapi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/plugin_utils/connection_base.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8d332bd4dfd00daf050050d2d91b1d07e5f93b38166d862f752a4145569f9397", "format": 1 }, { - "name": "plugins/httpapi/restconf.py", + "name": "plugins/plugin_utils/vlan_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8191e84e02b82aa5c4aad0c52bb54c1bdbfdd9af15ad7b19abe90a152fa4aeb", + "chksum_sha256": "32e8e991937ab6bc643a307ba676ac997a975fb8a78ffccda88d1d751567b3bf", "format": 1 }, { - "name": "plugins/cliconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/plugin_utils/terminal_base.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dca6ac7e9fd4752538aa25ac4836a16264b7669afb513ee6acd7571be348f5d5", "format": 1 }, { - "name": "plugins/cliconf/default.py", + "name": "plugins/plugin_utils/vlan_expander.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05007d881eebc12579435d8ce26e5c981786e6d1966958d061eaeef3b29b5742", + "chksum_sha256": "cd627a4cdb9367c8baa9a55c0ad44fd6a77d863f0e2c11e737da74612ea8bdc2", "format": 1 }, { - "name": "plugins/doc_fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/plugin_utils/hash_salt.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0696153374e089369f61a6625ce81988e8e9d9cd09b5e90f1d65dba5cc651bf6", "format": 1 }, { - "name": "plugins/doc_fragments/connection_persistent.py", + "name": "plugins/plugin_utils/version.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5282e3baa0e06d00f59879b69ec959864189a27e6cb1f1020e13d4759f76d81c", + "chksum_sha256": "3f562bd90163cff9a7b0af4ac2fffa2cd8ce61b6e85d65ffe25b0562f0d8aa8e", "format": 1 }, { - "name": "plugins/doc_fragments/network_agnostic.py", + "name": "plugins/plugin_utils/httpapi_base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c296eab68967ae69f6ca50923781f1971e8e3ec1db26d51d5c9c84916c66dcb", + "chksum_sha256": "476a70a781bfac0e430733345bab55715ba638b1a6956c38add91745281f2d4f", "format": 1 }, { - "name": "plugins/sub_plugins", + "name": "plugins/plugin_utils/compat", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/sub_plugins/grpc", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/plugin_utils/compat/telnetlib.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4378620e3a3db29cd79d86ba04dd3b15c06b0bf00373f42c9990c7db28815ba9", "format": 1 }, { - "name": "plugins/sub_plugins/grpc/base.py", + "name": "plugins/plugin_utils/pop_ace.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "574c09c370cecbb87a829e3f2fa1c8aa4afc287ad2d06654e06aa220d9e3fa5f", + "chksum_sha256": "3fe9aaa356aadf16d948fa95e158f8c871f52f0a185a3d5f1efc73865f0f327b", "format": 1 }, { - "name": "plugins/sub_plugins/cli_parser", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/plugin_utils/comp_type5.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a181233e662f2bd8885e774e6231a9dff3ff05126a40cb6e6b9d79051ec6e401", "format": 1 }, { - "name": "plugins/sub_plugins/cli_parser/ntc_templates_parser.py", + "name": "plugins/plugin_utils/netconf_base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd7f6149a055b84ea2740eb780f965369cf57b9e87cd438ca2511f650923566e", + "chksum_sha256": "11e22a9e4e1de3d8416792330ed4e2bea8cecd5208d3591cfac396e0e1280108", "format": 1 }, { - "name": "plugins/sub_plugins/cli_parser/content_templates_parser.py", + "name": "plugins/plugin_utils/parse_cli.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93e626a57e3e6cfa74583e6219f5273a6359cb381c9278a1e74873cd2e3ccae9", + "chksum_sha256": "54e62f16cca8c6243bae5c7eac91b38ee5af0398d5eb5d9803e87192143102e4", "format": 1 }, { - "name": "plugins/sub_plugins/cli_parser/pyats_parser.py", + "name": "plugins/plugin_utils/type5_pw.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e17c6c56c2644c32ae60040d1011ee855c2b1ce48f6cae9df8625353e830e8d2", + "chksum_sha256": "21a038045bea2ef2919bd540dd7d308eb643cefa480d4eceb6686fee90532d48", "format": 1 }, { - "name": "plugins/sub_plugins/cli_parser/native_parser.py", + "name": "plugins/plugin_utils/cliconf_base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7eec487e1e86bb1771cc20a82d5e73f50c5e1c1cdc040d0cd5c7a811bbc065f", + "chksum_sha256": "65f525c5c2e1c913c0610131f3b2e410138a753a6ca74ffe133869745a8a7249", "format": 1 }, { - "name": "plugins/plugin_utils", + "name": "plugins/action", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/plugin_utils/cliconf_base.py", + "name": "plugins/action/cli_backup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "edb62c9a8ee9060bc50d1c902d9c4f03c83515500ed3838265fd7164b59e7c2e", + "chksum_sha256": "50af044056f3bd7e53e235da97d782556b65322c32dc38354212b8f83d08774b", "format": 1 }, { - "name": "plugins/plugin_utils/comp_type5.py", + "name": "plugins/action/netconf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a181233e662f2bd8885e774e6231a9dff3ff05126a40cb6e6b9d79051ec6e401", + "chksum_sha256": "6f9928c9aa7036ddf8e40c6dab2769957374cf8e1611bc64b93dd9a483216764", "format": 1 }, { - "name": "plugins/plugin_utils/type5_pw.py", + "name": "plugins/action/net_put.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21a038045bea2ef2919bd540dd7d308eb643cefa480d4eceb6686fee90532d48", + "chksum_sha256": "c3b3f7d7713cb8e178b2b38dbe114aaf2b4644bc10b3f2f3e3e80e03442baa34", "format": 1 }, { - "name": "plugins/plugin_utils/parse_xml.py", + "name": "plugins/action/telnet.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f5afec2a0dba75e52a06c3a864625f70c56fa623d5f2958f36f31ff41e30db5d", + "chksum_sha256": "59f1760ccd5ead64f4b09ded6d4351658000d3b00551cc436e2021ad8a21d5d3", "format": 1 }, { - "name": "plugins/plugin_utils/vlan_parser.py", + "name": "plugins/action/net_get.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "32e8e991937ab6bc643a307ba676ac997a975fb8a78ffccda88d1d751567b3bf", + "chksum_sha256": "465c08750ad23645e914f08b7e23809f018f36c7607f0f4f810ee3b67004e09f", "format": 1 }, { - "name": "plugins/plugin_utils/netconf_base.py", + "name": "plugins/action/cli_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11e22a9e4e1de3d8416792330ed4e2bea8cecd5208d3591cfac396e0e1280108", + "chksum_sha256": "fb4dc58e8b24d2167d5b2e439c9e685160ca577d43589c0aa211b9b61202c5a4", "format": 1 }, { - "name": "plugins/plugin_utils/parse_cli.py", + "name": "plugins/action/net_ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54e62f16cca8c6243bae5c7eac91b38ee5af0398d5eb5d9803e87192143102e4", + "chksum_sha256": "272e933618a9020df35d879662acf8c2c9f771496e64b2ce2a27a0b114092aa2", "format": 1 }, { - "name": "plugins/plugin_utils/compat", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/network_resource.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "803d2f14fcf591141a911bd4fe2347207214fdcf51b24d86d20e149e701da1ce", "format": 1 }, { - "name": "plugins/plugin_utils/compat/telnetlib.py", + "name": "plugins/action/network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a9b0ad1fa494a098d52db1df06c903c22825ca097a6df911fa965321d890205d", + "chksum_sha256": "29df4ed0309595ee6317961ba7f9f8600c53cd9e71808111406e0f1df1b65d42", "format": 1 }, { - "name": "plugins/plugin_utils/httpapi_base.py", + "name": "plugins/action/cli_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "476a70a781bfac0e430733345bab55715ba638b1a6956c38add91745281f2d4f", + "chksum_sha256": "6a944d8f77789b2d0dad27adbb438be747141fa4e415ee32784b934b3bf35eec", "format": 1 }, { - "name": "plugins/plugin_utils/connection_base.py", + "name": "plugins/action/grpc.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d332bd4dfd00daf050050d2d91b1d07e5f93b38166d862f752a4145569f9397", + "chksum_sha256": "2722eb0c61acd2fa06155215e99cb0f547690fb3fd5a5b4e656fad90ad091dea", "format": 1 }, { - "name": "plugins/plugin_utils/hash_salt.py", + "name": "plugins/connection", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/connection/netconf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0696153374e089369f61a6625ce81988e8e9d9cd09b5e90f1d65dba5cc651bf6", + "chksum_sha256": "cec6828c85edc627a81ac2e92a22d347abf0a9a5fd7ae617d04d8c7ba938e613", "format": 1 }, { - "name": "plugins/plugin_utils/vlan_expander.py", + "name": "plugins/connection/network_cli.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd627a4cdb9367c8baa9a55c0ad44fd6a77d863f0e2c11e737da74612ea8bdc2", + "chksum_sha256": "6047f99664fc83e431704a54418186dc3dd822516d20056d824fcf633379e979", "format": 1 }, { - "name": "plugins/plugin_utils/terminal_base.py", + "name": "plugins/connection/httpapi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dca6ac7e9fd4752538aa25ac4836a16264b7669afb513ee6acd7571be348f5d5", + "chksum_sha256": "4682f1ba34282794e361298b3e8e4bee251f106c3edfc90893f97f6f95c79015", "format": 1 }, { - "name": "plugins/plugin_utils/version.py", + "name": "plugins/connection/persistent.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3f562bd90163cff9a7b0af4ac2fffa2cd8ce61b6e85d65ffe25b0562f0d8aa8e", + "chksum_sha256": "70b3882fe3d2e0710a2159f25ed2080b33ca16b2684da2380e51dcfe3542f384", "format": 1 }, { - "name": "plugins/plugin_utils/parse_cli_textfsm.py", + "name": "plugins/connection/grpc.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a8f132e5006ab3afc28cc649846e875e444098ee1956e7941133e5a3a59f505", + "chksum_sha256": "9e91e5595a2d4537340de6d14fd60c4a465948d533ad94d136359854c683d998", "format": 1 }, { - "name": "plugins/plugin_utils/pop_ace.py", + "name": "plugins/connection/libssh.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "518b1b752a1f783f927859e6f76c9f2f23a551bbbcb83db87babbab64f330844", + "chksum_sha256": "cb71a76dbca8939cebf315b28139dd753dcbaf54541fc842e46d73a55cc2462b", "format": 1 }, { - "name": "plugins/module_utils", + "name": "plugins/netconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network", + "name": "plugins/netconf/default.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c96c6d9d3ec5e3c5248505e3f1f4e6728ceda00e38503b78cdc493d28bcca3b4", + "format": 1 + }, + { + "name": "plugins/module_utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/restconf", + "name": "plugins/module_utils/cli_parser", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/restconf/restconf.py", + "name": "plugins/module_utils/cli_parser/cli_parserbase.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "befb0fefc07679bcddf18d67e21d608e3ed9fe94cfa8a137ffe6e91a5d23c92e", + "chksum_sha256": "7744c2e8dc35994dc90085c20ecc3725c331502335426febbed4d740e6cbe741", "format": 1 }, { - "name": "plugins/module_utils/network/grpc", + "name": "plugins/module_utils/cli_parser/cli_parsertemplate.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "52b5158c8924c2aa32e8c9ed5cd3f74ab5cf69e8e158ac1670e3ba298d7d06ea", + "format": 1 + }, + { + "name": "plugins/module_utils/utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/grpc/grpc.py", + "name": "plugins/module_utils/utils/data.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d7efa4ee81ef34b9296c6d43e22772c2874088d770c8d0e0ecbcacd37c9964c", + "chksum_sha256": "c7007f9465ffc3bf435aa9df026e8c32be66ded154c408432335aea069cd51fb", "format": 1 }, { - "name": "plugins/module_utils/network/netconf", + "name": "plugins/module_utils/network", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/netconf/netconf.py", + "name": "plugins/module_utils/network/restconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/restconf/restconf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "789521735521699d79d8d81889a91317c92cb1740cce872cb5f79a418fa8ff95", + "chksum_sha256": "befb0fefc07679bcddf18d67e21d608e3ed9fe94cfa8a137ffe6e91a5d23c92e", "format": 1 }, { @@ -834,38 +862,31 @@ "format": 1 }, { - "name": "plugins/module_utils/network/common/facts", + "name": "plugins/module_utils/network/common/rm_base", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/common/facts/facts.py", + "name": "plugins/module_utils/network/common/rm_base/resource_module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cebeff7f9f126b57118f1617a70428d0c45780f53974d3db7b3fc699b6f668dc", - "format": 1 - }, - { - "name": "plugins/module_utils/network/common/cfg", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "dc597d0e0ca16d8a13eafe0746e91e2c3a1a1e99d85fd3955be1fd26d0763ca5", "format": 1 }, { - "name": "plugins/module_utils/network/common/cfg/base.py", + "name": "plugins/module_utils/network/common/rm_base/network_template.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1bcd73c6b06714fd0d42365bc4b9613e9353519747bf73628f4392b60f697a35", + "chksum_sha256": "74951f1acab2b66f875cf0103618718688d4d3b10c064353c1bbb7ea4c874495", "format": 1 }, { - "name": "plugins/module_utils/network/common/utils.py", + "name": "plugins/module_utils/network/common/rm_base/resource_module_base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d2362f9f323d8fcd35bafa1dd96dacc272a919e13096e3a8b820584b36e9b4d", + "chksum_sha256": "1f4a1af713cb0702623a786196097b8d7371d81ecc2a9d8b9b2a07590954e29f", "format": 1 }, { @@ -883,38 +904,45 @@ "format": 1 }, { - "name": "plugins/module_utils/network/common/rm_base", + "name": "plugins/module_utils/network/common/parsing.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "330f819b5a384f216cbb12d0d1c2e37c6b33e4a9d94c554b23ce33f3c55b03cd", + "format": 1 + }, + { + "name": "plugins/module_utils/network/common/cfg", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/common/rm_base/resource_module.py", + "name": "plugins/module_utils/network/common/cfg/base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "98a161ebcb97831b138c00d0dbb0e1e010028e5b8d9fe9abc5a0c842efe85586", + "chksum_sha256": "1bcd73c6b06714fd0d42365bc4b9613e9353519747bf73628f4392b60f697a35", "format": 1 }, { - "name": "plugins/module_utils/network/common/rm_base/network_template.py", + "name": "plugins/module_utils/network/common/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74951f1acab2b66f875cf0103618718688d4d3b10c064353c1bbb7ea4c874495", + "chksum_sha256": "d1acd62e9dc53888e191d8e61d7ac21d8433470b2c623945aa45237b48735062", "format": 1 }, { - "name": "plugins/module_utils/network/common/rm_base/resource_module_base.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1f4a1af713cb0702623a786196097b8d7371d81ecc2a9d8b9b2a07590954e29f", + "name": "plugins/module_utils/network/common/facts", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/common/parsing.py", + "name": "plugins/module_utils/network/common/facts/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "330f819b5a384f216cbb12d0d1c2e37c6b33e4a9d94c554b23ce33f3c55b03cd", + "chksum_sha256": "cebeff7f9f126b57118f1617a70428d0c45780f53974d3db7b3fc699b6f668dc", "format": 1 }, { @@ -925,325 +953,360 @@ "format": 1 }, { - "name": "plugins/module_utils/cli_parser", + "name": "plugins/module_utils/network/netconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/cli_parser/cli_parsertemplate.py", + "name": "plugins/module_utils/network/netconf/netconf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52b5158c8924c2aa32e8c9ed5cd3f74ab5cf69e8e158ac1670e3ba298d7d06ea", + "chksum_sha256": "789521735521699d79d8d81889a91317c92cb1740cce872cb5f79a418fa8ff95", "format": 1 }, { - "name": "plugins/module_utils/cli_parser/cli_parserbase.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7744c2e8dc35994dc90085c20ecc3725c331502335426febbed4d740e6cbe741", - "format": 1 - }, - { - "name": "plugins/module_utils/utils", + "name": "plugins/module_utils/network/grpc", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/utils/data.py", + "name": "plugins/module_utils/network/grpc/grpc.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7007f9465ffc3bf435aa9df026e8c32be66ded154c408432335aea069cd51fb", + "chksum_sha256": "4d7efa4ee81ef34b9296c6d43e22772c2874088d770c8d0e0ecbcacd37c9964c", "format": 1 }, { - "name": "plugins/netconf", + "name": "plugins/become", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/netconf/default.py", + "name": "plugins/become/enable.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c96c6d9d3ec5e3c5248505e3f1f4e6728ceda00e38503b78cdc493d28bcca3b4", + "chksum_sha256": "0bbcfd4eac913f404d25ae35209d7f3ba62989009f6fa73be8a4d39de3b48ef4", "format": 1 }, { - "name": "plugins/action", + "name": "plugins/modules", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/net_get.py", + "name": "plugins/modules/cli_backup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "465c08750ad23645e914f08b7e23809f018f36c7607f0f4f810ee3b67004e09f", + "chksum_sha256": "16e3cae6daa4a54560a367de150d2d5e01ff5808afbb6cb249cfaa19a839b326", "format": 1 }, { - "name": "plugins/action/net_put.py", + "name": "plugins/modules/grpc_get.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3b3f7d7713cb8e178b2b38dbe114aaf2b4644bc10b3f2f3e3e80e03442baa34", + "chksum_sha256": "910218ce8d1a19312401814078bc98196ea2105dd1955ff26f94c035459ab09b", "format": 1 }, { - "name": "plugins/action/netconf.py", + "name": "plugins/modules/net_put.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6f9928c9aa7036ddf8e40c6dab2769957374cf8e1611bc64b93dd9a483216764", + "chksum_sha256": "cb0fac80bee26d7417df12681dc714dc3cfba1862ce8468ec4d32c4ab2a81746", "format": 1 }, { - "name": "plugins/action/network_resource.py", + "name": "plugins/modules/telnet.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "803d2f14fcf591141a911bd4fe2347207214fdcf51b24d86d20e149e701da1ce", + "chksum_sha256": "4fd508b2faf1c6ab7042887e03197d90fc19a3832894db88462529ac4a729bf4", "format": 1 }, { - "name": "plugins/action/grpc.py", + "name": "plugins/modules/net_get.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2722eb0c61acd2fa06155215e99cb0f547690fb3fd5a5b4e656fad90ad091dea", + "chksum_sha256": "2648915107fab66fde9e6d90d698445ba675974b702a1847354eb7ad8bd3600e", "format": 1 }, { - "name": "plugins/action/network.py", + "name": "plugins/modules/netconf_rpc.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29df4ed0309595ee6317961ba7f9f8600c53cd9e71808111406e0f1df1b65d42", + "chksum_sha256": "1ac88505fa9ba51da7cd97381cba46448c615be2025031ea6cba45b05b440211", "format": 1 }, { - "name": "plugins/action/telnet.py", + "name": "plugins/modules/cli_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59f1760ccd5ead64f4b09ded6d4351658000d3b00551cc436e2021ad8a21d5d3", + "chksum_sha256": "f4f56b6785ed2605d24193040f85774791a5be891b5dd357e1c7835a98adcbef", "format": 1 }, { - "name": "plugins/action/cli_config.py", + "name": "plugins/modules/net_ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fb4dc58e8b24d2167d5b2e439c9e685160ca577d43589c0aa211b9b61202c5a4", + "chksum_sha256": "22089b045eb7c35003893cbffac47304e16e9bc4f3b4fc1ea17a4d8d34a41524", "format": 1 }, { - "name": "plugins/action/net_ping.py", + "name": "plugins/modules/restconf_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "272e933618a9020df35d879662acf8c2c9f771496e64b2ce2a27a0b114092aa2", + "chksum_sha256": "d72401fa8e8ab283c331ce10b1db90915cff9736bb6465843e424f97b28a5710", "format": 1 }, { - "name": "plugins/action/cli_command.py", + "name": "plugins/modules/netconf_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6a944d8f77789b2d0dad27adbb438be747141fa4e415ee32784b934b3bf35eec", + "chksum_sha256": "6efee4512b5737e3f13878757c3597973a9618f33fb4efbf2cf30c3d2ac04644", "format": 1 }, { - "name": "plugins/action/cli_backup.py", + "name": "plugins/modules/network_resource.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "50af044056f3bd7e53e235da97d782556b65322c32dc38354212b8f83d08774b", + "chksum_sha256": "cf30880d4a98ffffd07ad6dd6e5d129bc4d201655267e2da33a03212d0ba53e5", "format": 1 }, { - "name": "plugins/filter", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/netconf_get.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c19f333c998de03a052c033fb6e32342f800e77b82eed4930cd505b15b882388", "format": 1 }, { - "name": "plugins/filter/comp_type5.py", + "name": "plugins/modules/restconf_get.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d21521b720af7a1ab82ece23e48a7eae3648060ea287fa1265bb95af8b10f9", + "chksum_sha256": "4422cc95796e468190815c334a65127345e9543bb7d2a2edff28183892e0ddeb", "format": 1 }, { - "name": "plugins/filter/type5_pw.py", + "name": "plugins/modules/grpc_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c61265a99973814b46b45bd1cb803bfeae74e543c16be54e354af2eafc36019c", + "chksum_sha256": "4cbbd47b5b26f41c4b1047fd384144d32172a927e5cc0b7ed7386e8ddb78c332", "format": 1 }, { - "name": "plugins/filter/parse_xml.py", + "name": "plugins/modules/cli_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "026eb6ddb55446fba4bd0a55136bfadba032fa9096a808845429a78ed4307cb5", + "chksum_sha256": "540443f95fa400cbd96c1d5ba23237b1038fceebac038ad46950ae474db6bd1a", "format": 1 }, { - "name": "plugins/filter/vlan_parser.py", + "name": "plugins/modules/cli_restore.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "48d710e0758ae4be43e607b5d61c88109910e8ba00de1aba08280af8532831b1", + "chksum_sha256": "ec3154e78c5c65f770897cdc4092ef6f81aea84547685c9eae52273e988842e6", "format": 1 }, { - "name": "plugins/filter/parse_cli.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9d8dbc303de5ef03a3eddd852b05a699b68790f04baff05cb7b0341c8c1ea9e4", + "name": "plugins/cache", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/filter/hash_salt.py", + "name": "plugins/cache/memory.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "98d4c28d99d131c24f40757ee84ed051b58bbb0ba41efc4da70a6465f6762f8e", + "chksum_sha256": "741033bfd18a35bc814b44e46fd213f5bc4b078b62dfa556baac1079211e3ea5", "format": 1 }, { - "name": "plugins/filter/vlan_expander.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b557d97d3d0c9e0e46238e6e71c7160103f77eefb0edf394c76ba5bdd4d5cfbd", + "name": "plugins/filter", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { "name": "plugins/filter/parse_cli_textfsm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e5c994c3fd64b40dc12686699d8c2b6cd15e3a2af09372ecf7025b7621bc4bec", + "chksum_sha256": "68f241fb0ed8bf886ec253bb1dddd72e1dea13e1ed2528f4c98a0b4fe03ca003", "format": 1 }, { - "name": "plugins/filter/pop_ace.py", + "name": "plugins/filter/parse_xml.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7989a1755ff27d2adac10b533c8fd9378047394d94108274a55868dd8afac22e", + "chksum_sha256": "026eb6ddb55446fba4bd0a55136bfadba032fa9096a808845429a78ed4307cb5", "format": 1 }, { - "name": "plugins/modules", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/filter/vlan_parser.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "48d710e0758ae4be43e607b5d61c88109910e8ba00de1aba08280af8532831b1", "format": 1 }, { - "name": "plugins/modules/net_get.py", + "name": "plugins/filter/vlan_expander.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2648915107fab66fde9e6d90d698445ba675974b702a1847354eb7ad8bd3600e", + "chksum_sha256": "b557d97d3d0c9e0e46238e6e71c7160103f77eefb0edf394c76ba5bdd4d5cfbd", "format": 1 }, { - "name": "plugins/modules/net_put.py", + "name": "plugins/filter/hash_salt.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb0fac80bee26d7417df12681dc714dc3cfba1862ce8468ec4d32c4ab2a81746", + "chksum_sha256": "98d4c28d99d131c24f40757ee84ed051b58bbb0ba41efc4da70a6465f6762f8e", "format": 1 }, { - "name": "plugins/modules/netconf_rpc.py", + "name": "plugins/filter/pop_ace.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ac88505fa9ba51da7cd97381cba46448c615be2025031ea6cba45b05b440211", + "chksum_sha256": "f06bfc970ebe8b0e50834346e6e3c9022439ef73881b66469db47cb6e43bcc48", "format": 1 }, { - "name": "plugins/modules/network_resource.py", + "name": "plugins/filter/comp_type5.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cf30880d4a98ffffd07ad6dd6e5d129bc4d201655267e2da33a03212d0ba53e5", + "chksum_sha256": "84d21521b720af7a1ab82ece23e48a7eae3648060ea287fa1265bb95af8b10f9", "format": 1 }, { - "name": "plugins/modules/netconf_get.py", + "name": "plugins/filter/parse_cli.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd3e5797b042f3a9ff4799b8d301682536451f93cf7dffba7725a6fa4c4a872e", + "chksum_sha256": "9d8dbc303de5ef03a3eddd852b05a699b68790f04baff05cb7b0341c8c1ea9e4", "format": 1 }, { - "name": "plugins/modules/restconf_get.py", + "name": "plugins/filter/type5_pw.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4422cc95796e468190815c334a65127345e9543bb7d2a2edff28183892e0ddeb", + "chksum_sha256": "c61265a99973814b46b45bd1cb803bfeae74e543c16be54e354af2eafc36019c", "format": 1 }, { - "name": "plugins/modules/grpc_get.py", + "name": "plugins/sub_plugins", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/sub_plugins/cli_parser", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/sub_plugins/cli_parser/pyats_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7357483ebdc71acaa1f980a3ab3fc9e40990548f52b8aa76d2d7f6ec85ef3f27", + "chksum_sha256": "e17c6c56c2644c32ae60040d1011ee855c2b1ce48f6cae9df8625353e830e8d2", "format": 1 }, { - "name": "plugins/modules/netconf_config.py", + "name": "plugins/sub_plugins/cli_parser/content_templates_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fb6f8dc7bd0989be8e6b445d4380ce05ee83118922c53211622206037eb2441", + "chksum_sha256": "5cb7b8eacbaf5a6101d8d3b83661a661f317cc2858e00e6480add8e3d326aeb5", "format": 1 }, { - "name": "plugins/modules/restconf_config.py", + "name": "plugins/sub_plugins/cli_parser/ntc_templates_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d72401fa8e8ab283c331ce10b1db90915cff9736bb6465843e424f97b28a5710", + "chksum_sha256": "fd7f6149a055b84ea2740eb780f965369cf57b9e87cd438ca2511f650923566e", "format": 1 }, { - "name": "plugins/modules/telnet.py", + "name": "plugins/sub_plugins/cli_parser/native_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "877937eb7a9e97f97965360d7e53995f264be8655c9ea25c9bad5dcab46019c2", + "chksum_sha256": "c7eec487e1e86bb1771cc20a82d5e73f50c5e1c1cdc040d0cd5c7a811bbc065f", "format": 1 }, { - "name": "plugins/modules/grpc_config.py", + "name": "plugins/sub_plugins/grpc", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/sub_plugins/grpc/base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43328e8b3e2180bef549852318ed050081286c25cab190611b96aad431e14c1e", + "chksum_sha256": "574c09c370cecbb87a829e3f2fa1c8aa4afc287ad2d06654e06aa220d9e3fa5f", "format": 1 }, { - "name": "plugins/modules/cli_config.py", + "name": "plugins/cliconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/cliconf/default.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e886a698f1ee75a7fa6a7c59d2b237693cd1c46815ae630c344f663e147e746", + "chksum_sha256": "05007d881eebc12579435d8ce26e5c981786e6d1966958d061eaeef3b29b5742", "format": 1 }, { - "name": "plugins/modules/net_ping.py", + "name": "plugins/httpapi", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/httpapi/restconf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "22089b045eb7c35003893cbffac47304e16e9bc4f3b4fc1ea17a4d8d34a41524", + "chksum_sha256": "f8191e84e02b82aa5c4aad0c52bb54c1bdbfdd9af15ad7b19abe90a152fa4aeb", "format": 1 }, { - "name": "plugins/modules/cli_command.py", + "name": "plugins/doc_fragments", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/doc_fragments/network_agnostic.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d163ad595b9884e9e8d4152821ae13d054ed16a58464dc9a0dba57db2719b4a9", + "chksum_sha256": "7c296eab68967ae69f6ca50923781f1971e8e3ec1db26d51d5c9c84916c66dcb", "format": 1 }, { - "name": "plugins/modules/cli_backup.py", + "name": "plugins/doc_fragments/connection_persistent.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "16e3cae6daa4a54560a367de150d2d5e01ff5808afbb6cb249cfaa19a839b326", + "chksum_sha256": "5282e3baa0e06d00f59879b69ec959864189a27e6cb1f1020e13d4759f76d81c", "format": 1 }, { - "name": ".gitignore", + "name": ".yamllint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff53015667831bfc9f6933b3ce958e5c5cf9d7125b121e415320dddc956fe291", + "chksum_sha256": "386fa31449c09e5df093aa72eabcb7653011a90181dc30b539ac67dbe3b17bf4", "format": 1 }, { @@ -1253,6 +1316,13 @@ "chksum_sha256": null, "format": 1 }, + { + "name": "tests/config.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e", + "format": 1 + }, { "name": "tests/integration", "ftype": "dir", @@ -1260,6 +1330,13 @@ "chksum_sha256": null, "format": 1 }, + { + "name": "tests/integration/target-prefixes.network", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f44e56f8603c9ed8dbb4997dfadab9103c04098cb355329e2f3dee14254c7f85", + "format": 1 + }, { "name": "tests/integration/targets", "ftype": "dir", @@ -1268,1053 +1345,990 @@ "format": 1 }, { - "name": "tests/integration/targets/prepare_nxos_tests", + "name": "tests/integration/targets/prepare_sros_tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_nxos_tests/tasks", + "name": "tests/integration/targets/prepare_sros_tests/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_nxos_tests/tasks/main.yaml", + "name": "tests/integration/targets/prepare_sros_tests/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78bfd2a4e9e3170c5e4ebed70554b46d36a304358c68f34fba0c12fdecd78908", + "chksum_sha256": "74c2b8389f53e1e1ec47b03d9f22d443fcacc0c641f2d4146edbd20449bfbaaa", "format": 1 }, { - "name": "tests/integration/targets/restconf_get", + "name": "tests/integration/targets/prepare_iosxr_tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/restconf_get/meta", + "name": "tests/integration/targets/prepare_iosxr_tests/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/restconf_get/meta/main.yml", + "name": "tests/integration/targets/prepare_iosxr_tests/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f217b1000606ebe64f449135a62b62813f672461ce258e4168b48ef56fdf7b55", + "chksum_sha256": "09715b279e8c38a57245d73b87891e03bbb2a04d8d83f6d041b0a772109ee12c", "format": 1 }, { - "name": "tests/integration/targets/restconf_get/tasks", + "name": "tests/integration/targets/prepare_iosxr_tests/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/restconf_get/tasks/main.yaml", + "name": "tests/integration/targets/prepare_iosxr_tests/templates/config_grpc.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "344d9c0ea63d8d064ef8a6c738551c1f1b48e68e26e5ccb64add0de511dc58c1", + "chksum_sha256": "4ab4bbfb41335abe51b4f0d03087c1df2ccb9bac7d0097685a28659113d1b9fd", "format": 1 }, { - "name": "tests/integration/targets/restconf_get/tasks/restconf.yaml", + "name": "tests/integration/targets/prepare_iosxr_tests/templates/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8bfa6b3c0f514038aa61b510030d8399c36b0b4f4274474c9fe02f06eb0ab6f1", + "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b", "format": 1 }, { - "name": "tests/integration/targets/restconf_get/defaults", + "name": "tests/integration/targets/prepare_junos_tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/restconf_get/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/restconf_get/tests", + "name": "tests/integration/targets/prepare_junos_tests/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/restconf_get/tests/iosxe", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/restconf_get/tests/iosxe/basic.yaml", + "name": "tests/integration/targets/prepare_junos_tests/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24c621004d39e45adac857d00e2ea4f985439b277342a1c1ea888cbcef5d930e", + "chksum_sha256": "47056e43d318d03a0bdf1521b3cc82ea6b108ce752ae6ff889b0d309c1366bed", "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests", + "name": "tests/integration/targets/netconf_get", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests/templates", + "name": "tests/integration/targets/netconf_get/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests/templates/config.j2", + "name": "tests/integration/targets/netconf_get/tasks/sros.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b", + "chksum_sha256": "1218ad2b1b5b61e8713fc05cfee850bfdd370d6bc9742072b90331098f9375fe", "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests/templates/config_grpc.j2", + "name": "tests/integration/targets/netconf_get/tasks/iosxr.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ab4bbfb41335abe51b4f0d03087c1df2ccb9bac7d0097685a28659113d1b9fd", - "format": 1 - }, - { - "name": "tests/integration/targets/prepare_iosxr_tests/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "0caec58b8f1303315ebec8315c9a982e7d42b520de10f8fe2a897e325775e466", "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests/tasks/main.yml", + "name": "tests/integration/targets/netconf_get/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "09715b279e8c38a57245d73b87891e03bbb2a04d8d83f6d041b0a772109ee12c", + "chksum_sha256": "fdfc66f2c0b2f48a76a2d363913150396dc08903e0ea323d12407f1737137e32", "format": 1 }, { - "name": "tests/integration/targets/prepare_junos_tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/netconf_get/tasks/junos.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3145cb145338f26f1f684809c05ca97cb2fc8b88a36a27ae8afba636af7c845d", "format": 1 }, { - "name": "tests/integration/targets/prepare_junos_tests/tasks", + "name": "tests/integration/targets/netconf_get/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_junos_tests/tasks/main.yml", + "name": "tests/integration/targets/netconf_get/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "47056e43d318d03a0bdf1521b3cc82ea6b108ce752ae6ff889b0d309c1366bed", - "format": 1 - }, - { - "name": "tests/integration/targets/prepare_sros_tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/prepare_sros_tests/tasks", + "name": "tests/integration/targets/netconf_get/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_sros_tests/tasks/main.yml", + "name": "tests/integration/targets/netconf_get/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74c2b8389f53e1e1ec47b03d9f22d443fcacc0c641f2d4146edbd20449bfbaaa", + "chksum_sha256": "dd9eb0bcc7ddb59a2e64954bd6c9213d715705b3928aa12e7cd34ee1cebeaca6", "format": 1 }, { - "name": "tests/integration/targets/grpc_get", + "name": "tests/integration/targets/netconf_get/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_get/meta", + "name": "tests/integration/targets/netconf_get/tests/iosxr", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_get/meta/main.yml", + "name": "tests/integration/targets/netconf_get/tests/iosxr/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d25d95206718d482774753d23b1563530440c6c3c76e2b40afd18ad95595cddd", + "chksum_sha256": "054b9614669e5cb6cf0843782cac5df5dce7ffef6ddb16085663266700c8feb3", "format": 1 }, { - "name": "tests/integration/targets/grpc_get/tasks", + "name": "tests/integration/targets/netconf_get/tests/sros", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_get/tasks/iosxr.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9e79277116f2ec21962c6fb9c362521a619bc8e4e540571f8f2bb0e306fddc13", - "format": 1 - }, - { - "name": "tests/integration/targets/grpc_get/tasks/main.yaml", + "name": "tests/integration/targets/netconf_get/tests/sros/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14aa6f229d2851f12ba6d10cce5e4b985e9ac66bf758ee656f52a6b90c655f2b", + "chksum_sha256": "d85290ce180158ecbb9a86840c79ed9966d3d7e27591537f75b0715df902ec36", "format": 1 }, { - "name": "tests/integration/targets/grpc_get/defaults", + "name": "tests/integration/targets/netconf_get/tests/junos", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_get/defaults/main.yaml", + "name": "tests/integration/targets/netconf_get/tests/junos/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "bb5c5b379e5e0c8325f82929af0ac53e2b619d4ae86e692cf25d489cac031325", "format": 1 }, { - "name": "tests/integration/targets/grpc_get/tests", + "name": "tests/integration/targets/grpc_config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_get/tests/iosxr", + "name": "tests/integration/targets/grpc_config/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_get/tests/iosxr/basic.yaml", + "name": "tests/integration/targets/grpc_config/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b3796d7e1a25ee4aa3fd7850e67da8c8fb8a6c0477d1fb494672ed261ad51c81", - "format": 1 - }, - { - "name": "tests/integration/targets/netconf_rpc", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "a50f43b84486b9cff7f927e79c55df0b65ebd7e8caa47259cf997d14bbbca600", "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/meta", + "name": "tests/integration/targets/grpc_config/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/meta/main.yml", + "name": "tests/integration/targets/grpc_config/tasks/nxos.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "46e396f49311101eff0f58b4da2d90d75b0c228cbf950bcb899cf063bec95178", + "chksum_sha256": "f41fe3d56ddcf4242b8fa0decd62a9a129855bdbfdf8815cf01dac831bc94d35", "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/grpc_config/tasks/iosxr.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9e79277116f2ec21962c6fb9c362521a619bc8e4e540571f8f2bb0e306fddc13", "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/tasks/iosxr.yaml", + "name": "tests/integration/targets/grpc_config/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0caec58b8f1303315ebec8315c9a982e7d42b520de10f8fe2a897e325775e466", + "chksum_sha256": "8490b1578816963939834794088f0d3b3d9fb394957ce490908d51365610aefe", "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/tasks/junos.yaml", + "name": "tests/integration/targets/grpc_config/tasks/junos.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3145cb145338f26f1f684809c05ca97cb2fc8b88a36a27ae8afba636af7c845d", + "chksum_sha256": "72ed3963ce3362399cc4464329f53c4841519baed0490dda545fa46daeb9c821", "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4365fa9da3f9e124dee50e8ebe4f78e9f3383cd459cb72a389b202548ad9d13f", + "name": "tests/integration/targets/grpc_config/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/tasks/sros.yaml", + "name": "tests/integration/targets/grpc_config/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1218ad2b1b5b61e8713fc05cfee850bfdd370d6bc9742072b90331098f9375fe", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/defaults", + "name": "tests/integration/targets/grpc_config/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/defaults/main.yaml", + "name": "tests/integration/targets/grpc_config/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "d25d95206718d482774753d23b1563530440c6c3c76e2b40afd18ad95595cddd", "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/tests", + "name": "tests/integration/targets/grpc_config/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/tests/sros", + "name": "tests/integration/targets/grpc_config/tests/iosxr", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/tests/sros/basic.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b6331e1e7c98fd776bb8199cda76eb0c3ab009fe9bf4d3bbfea41aa936393664", - "format": 1 - }, - { - "name": "tests/integration/targets/netconf_rpc/tests/iosxr", + "name": "tests/integration/targets/grpc_config/tests/iosxr/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/tests/iosxr/basic.yaml", + "name": "tests/integration/targets/grpc_config/tests/iosxr/fixtures/bgp_start.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "57f49d0b2c38a17997be86a240f7e97850c55345904aac6d03c4a65aab2514a9", - "format": 1 - }, - { - "name": "tests/integration/targets/netconf_rpc/tests/junos", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "688fa378b5dbe6c30e1063e4466ff407d07d60cf7c5f9c55e3d501d3b2d16751", "format": 1 }, { - "name": "tests/integration/targets/netconf_rpc/tests/junos/basic.yaml", + "name": "tests/integration/targets/grpc_config/tests/iosxr/fixtures/bgp_delete.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "47502bae6b7bf9e00f3d69c55d9dfa3b780978d2116fe27992884b041eafab8e", + "chksum_sha256": "e3ba3ba7b0dab60faee2bd21b4ce7401cf416901ec983ffa28a3956f4575a050", "format": 1 }, { - "name": "tests/integration/targets/grpc_config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/grpc_config/tests/iosxr/basic.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3bfddd10067d86820889a3a997bc723ccb39276da62da91b4c6fb4b98e7fcf99", "format": 1 }, { - "name": "tests/integration/targets/grpc_config/meta", + "name": "tests/integration/targets/netconf_config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_config/meta/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d25d95206718d482774753d23b1563530440c6c3c76e2b40afd18ad95595cddd", - "format": 1 - }, - { - "name": "tests/integration/targets/grpc_config/tasks", + "name": "tests/integration/targets/netconf_config/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_config/tasks/nxos.yaml", + "name": "tests/integration/targets/netconf_config/tasks/nxos.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f41fe3d56ddcf4242b8fa0decd62a9a129855bdbfdf8815cf01dac831bc94d35", + "chksum_sha256": "fabed4f0fdf2b4f0d12c542e0a99da9c4ce894c4607d1d1dc38b37103d20e767", "format": 1 }, { - "name": "tests/integration/targets/grpc_config/tasks/iosxr.yaml", + "name": "tests/integration/targets/netconf_config/tasks/iosxr.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e79277116f2ec21962c6fb9c362521a619bc8e4e540571f8f2bb0e306fddc13", + "chksum_sha256": "0caec58b8f1303315ebec8315c9a982e7d42b520de10f8fe2a897e325775e466", "format": 1 }, { - "name": "tests/integration/targets/grpc_config/tasks/junos.yaml", + "name": "tests/integration/targets/netconf_config/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "72ed3963ce3362399cc4464329f53c4841519baed0490dda545fa46daeb9c821", + "chksum_sha256": "a0c882d71c283e7a2bbcf07fe588b5c6fa2e4c7a7953de637a0ad6e7bfa9333c", "format": 1 }, { - "name": "tests/integration/targets/grpc_config/tasks/main.yaml", + "name": "tests/integration/targets/netconf_config/tasks/junos.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8490b1578816963939834794088f0d3b3d9fb394957ce490908d51365610aefe", + "chksum_sha256": "3145cb145338f26f1f684809c05ca97cb2fc8b88a36a27ae8afba636af7c845d", "format": 1 }, { - "name": "tests/integration/targets/grpc_config/vars", + "name": "tests/integration/targets/netconf_config/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_config/vars/main.yaml", + "name": "tests/integration/targets/netconf_config/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a50f43b84486b9cff7f927e79c55df0b65ebd7e8caa47259cf997d14bbbca600", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/grpc_config/defaults", + "name": "tests/integration/targets/netconf_config/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_config/defaults/main.yaml", + "name": "tests/integration/targets/netconf_config/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "9c4272cfbe5d7763f5d851cfa97e4bb480feb11df45c34a21616776c14c3f9ee", "format": 1 }, { - "name": "tests/integration/targets/grpc_config/tests", + "name": "tests/integration/targets/netconf_config/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_config/tests/iosxr", + "name": "tests/integration/targets/netconf_config/tests/iosxr", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_config/tests/iosxr/fixtures", + "name": "tests/integration/targets/netconf_config/tests/iosxr/basic.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dfc308fc2743595a553c7fb998a9f46d94f64e6b3477a910e2d54d59438cb53b", + "format": 1 + }, + { + "name": "tests/integration/targets/netconf_config/tests/nxos", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_config/tests/iosxr/fixtures/bgp_start.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "688fa378b5dbe6c30e1063e4466ff407d07d60cf7c5f9c55e3d501d3b2d16751", + "name": "tests/integration/targets/netconf_config/tests/nxos/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/grpc_config/tests/iosxr/fixtures/bgp_delete.yml", + "name": "tests/integration/targets/netconf_config/tests/nxos/fixtures/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3ba3ba7b0dab60faee2bd21b4ce7401cf416901ec983ffa28a3956f4575a050", + "chksum_sha256": "f9ba47cabeb67066eefc95614931221e4679c2bce0209c8ebc392098eb76ac7f", "format": 1 }, { - "name": "tests/integration/targets/grpc_config/tests/iosxr/basic.yaml", + "name": "tests/integration/targets/netconf_config/tests/nxos/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3bfddd10067d86820889a3a997bc723ccb39276da62da91b4c6fb4b98e7fcf99", + "chksum_sha256": "3d5e05ea2718e82441fba21c106a2c105aba6c7a0549808b8b112fe33de6ebbe", "format": 1 }, { - "name": "tests/integration/targets/netconf_get", + "name": "tests/integration/targets/netconf_config/tests/junos", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_get/meta", + "name": "tests/integration/targets/netconf_config/tests/junos/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_get/meta/main.yml", + "name": "tests/integration/targets/netconf_config/tests/junos/fixtures/config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd9eb0bcc7ddb59a2e64954bd6c9213d715705b3928aa12e7cd34ee1cebeaca6", + "chksum_sha256": "582b6608893619dc4e1dc1293a06f3828808b2ee7fd0675e13dad5e43e3e5d54", "format": 1 }, { - "name": "tests/integration/targets/netconf_get/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/netconf_get/tasks/iosxr.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0caec58b8f1303315ebec8315c9a982e7d42b520de10f8fe2a897e325775e466", - "format": 1 - }, - { - "name": "tests/integration/targets/netconf_get/tasks/junos.yaml", + "name": "tests/integration/targets/netconf_config/tests/junos/fixtures/invalid_config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3145cb145338f26f1f684809c05ca97cb2fc8b88a36a27ae8afba636af7c845d", + "chksum_sha256": "c1cfceeda701f71c8ee2b6ff01b3ec22ffe72d981a5f82e31b278a4554937261", "format": 1 }, { - "name": "tests/integration/targets/netconf_get/tasks/main.yaml", + "name": "tests/integration/targets/netconf_config/tests/junos/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fdfc66f2c0b2f48a76a2d363913150396dc08903e0ea323d12407f1737137e32", + "chksum_sha256": "1ea03d6c833790e420cba36674bd809bdf7155fdd3f8854507f7ec9f73d64fe4", "format": 1 }, { - "name": "tests/integration/targets/netconf_get/tasks/sros.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1218ad2b1b5b61e8713fc05cfee850bfdd370d6bc9742072b90331098f9375fe", + "name": "tests/integration/targets/netconf_rpc", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_get/defaults", + "name": "tests/integration/targets/netconf_rpc/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_get/defaults/main.yaml", + "name": "tests/integration/targets/netconf_rpc/tasks/sros.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "1218ad2b1b5b61e8713fc05cfee850bfdd370d6bc9742072b90331098f9375fe", "format": 1 }, { - "name": "tests/integration/targets/netconf_get/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/netconf_rpc/tasks/iosxr.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0caec58b8f1303315ebec8315c9a982e7d42b520de10f8fe2a897e325775e466", "format": 1 }, { - "name": "tests/integration/targets/netconf_get/tests/sros", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/netconf_rpc/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4365fa9da3f9e124dee50e8ebe4f78e9f3383cd459cb72a389b202548ad9d13f", "format": 1 }, { - "name": "tests/integration/targets/netconf_get/tests/sros/basic.yaml", + "name": "tests/integration/targets/netconf_rpc/tasks/junos.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d85290ce180158ecbb9a86840c79ed9966d3d7e27591537f75b0715df902ec36", + "chksum_sha256": "3145cb145338f26f1f684809c05ca97cb2fc8b88a36a27ae8afba636af7c845d", "format": 1 }, { - "name": "tests/integration/targets/netconf_get/tests/iosxr", + "name": "tests/integration/targets/netconf_rpc/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_get/tests/iosxr/basic.yaml", + "name": "tests/integration/targets/netconf_rpc/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "054b9614669e5cb6cf0843782cac5df5dce7ffef6ddb16085663266700c8feb3", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/netconf_get/tests/junos", + "name": "tests/integration/targets/netconf_rpc/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_get/tests/junos/basic.yaml", + "name": "tests/integration/targets/netconf_rpc/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb5c5b379e5e0c8325f82929af0ac53e2b619d4ae86e692cf25d489cac031325", + "chksum_sha256": "46e396f49311101eff0f58b4da2d90d75b0c228cbf950bcb899cf063bec95178", "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxe_tests", + "name": "tests/integration/targets/netconf_rpc/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxe_tests/tasks", + "name": "tests/integration/targets/netconf_rpc/tests/iosxr", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxe_tests/tasks/main.yml", + "name": "tests/integration/targets/netconf_rpc/tests/iosxr/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73ff1b38335fe80af4ef727cc8c1bc35bb4b370ee38f1fb794971f42c6413138", + "chksum_sha256": "57f49d0b2c38a17997be86a240f7e97850c55345904aac6d03c4a65aab2514a9", "format": 1 }, { - "name": "tests/integration/targets/restconf_config", + "name": "tests/integration/targets/netconf_rpc/tests/sros", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/restconf_config/meta", + "name": "tests/integration/targets/netconf_rpc/tests/sros/basic.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b6331e1e7c98fd776bb8199cda76eb0c3ab009fe9bf4d3bbfea41aa936393664", + "format": 1 + }, + { + "name": "tests/integration/targets/netconf_rpc/tests/junos", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/restconf_config/meta/main.yml", + "name": "tests/integration/targets/netconf_rpc/tests/junos/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f217b1000606ebe64f449135a62b62813f672461ce258e4168b48ef56fdf7b55", + "chksum_sha256": "47502bae6b7bf9e00f3d69c55d9dfa3b780978d2116fe27992884b041eafab8e", "format": 1 }, { - "name": "tests/integration/targets/restconf_config/tasks", + "name": "tests/integration/targets/grpc_get", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/restconf_config/tasks/main.yaml", + "name": "tests/integration/targets/grpc_get/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/grpc_get/tasks/iosxr.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83d68cb2489c764efacfccd9c7c3983f7fdb9727a74e216c12e445299ae5b915", + "chksum_sha256": "9e79277116f2ec21962c6fb9c362521a619bc8e4e540571f8f2bb0e306fddc13", "format": 1 }, { - "name": "tests/integration/targets/restconf_config/tasks/restconf.yaml", + "name": "tests/integration/targets/grpc_get/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8bfa6b3c0f514038aa61b510030d8399c36b0b4f4274474c9fe02f06eb0ab6f1", + "chksum_sha256": "14aa6f229d2851f12ba6d10cce5e4b985e9ac66bf758ee656f52a6b90c655f2b", "format": 1 }, { - "name": "tests/integration/targets/restconf_config/defaults", + "name": "tests/integration/targets/grpc_get/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/restconf_config/defaults/main.yaml", + "name": "tests/integration/targets/grpc_get/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/restconf_config/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/restconf_config/tests/iosxe", + "name": "tests/integration/targets/grpc_get/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/restconf_config/tests/iosxe/basic.yaml", + "name": "tests/integration/targets/grpc_get/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff4b6188157975c3ba7b396443e415b264965d11029b6a7972e6927688458172", + "chksum_sha256": "d25d95206718d482774753d23b1563530440c6c3c76e2b40afd18ad95595cddd", "format": 1 }, { - "name": "tests/integration/targets/cli_parse", + "name": "tests/integration/targets/grpc_get/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/cli_parse/templates", + "name": "tests/integration/targets/grpc_get/tests/iosxr", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/cli_parse/templates/nxos_show_version.textfsm", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dfd59adde11de6285a62179e45db7b4e20e9ca61f276f6567c86c8455f796887", - "format": 1 - }, - { - "name": "tests/integration/targets/cli_parse/templates/centos_touch_test_output.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", - "format": 1 - }, - { - "name": "tests/integration/targets/cli_parse/templates/fedora_ps_-ef.yaml", + "name": "tests/integration/targets/grpc_get/tests/iosxr/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "839e6e4d259258b34851d64fd27a692c54c16062c104fb1caef0355c8e6cd258", + "chksum_sha256": "b3796d7e1a25ee4aa3fd7850e67da8c8fb8a6c0477d1fb494672ed261ad51c81", "format": 1 }, { - "name": "tests/integration/targets/cli_parse/templates/fedora_iptables_--list.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "41f749e88e4d6a959350d34a9e887112d76e3f14a5bc15f2ce0485c2b17c7410", + "name": "tests/integration/targets/restconf_config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/cli_parse/templates/centos_ps_-ef.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "839e6e4d259258b34851d64fd27a692c54c16062c104fb1caef0355c8e6cd258", + "name": "tests/integration/targets/restconf_config/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/cli_parse/templates/nxos_show_interface.yaml", + "name": "tests/integration/targets/restconf_config/tasks/restconf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bcebc3ef1d3e94fd156e655704999ee16837a1c95b90c6d8bbd567e47e4ce272", + "chksum_sha256": "8bfa6b3c0f514038aa61b510030d8399c36b0b4f4274474c9fe02f06eb0ab6f1", "format": 1 }, { - "name": "tests/integration/targets/cli_parse/templates/nxos_show_interface.ttp", + "name": "tests/integration/targets/restconf_config/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b54c727fb9ab5731dbef7b5c271a41276278b15b7408bd24e25eda28e5c1a09", + "chksum_sha256": "83d68cb2489c764efacfccd9c7c3983f7fdb9727a74e216c12e445299ae5b915", "format": 1 }, { - "name": "tests/integration/targets/cli_parse/tasks", + "name": "tests/integration/targets/restconf_config/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/cli_parse/tasks/nxos_pyats.yaml", + "name": "tests/integration/targets/restconf_config/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d3dbab19620dc96a3c99e11f7c6284f6e40c5e8899ff2c01ab06682678e5bac", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/cli_parse/tasks/nxos_native.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7336cd006b8234f06e4602c67e629073a9ac02433fcbb8419c23d6afc453e6c4", + "name": "tests/integration/targets/restconf_config/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/cli_parse/tasks/centos_native.yaml", + "name": "tests/integration/targets/restconf_config/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e19f86cbdac31e9bbfaa474777fd34746b0116e54beedf0e354c058649f279b7", + "chksum_sha256": "f217b1000606ebe64f449135a62b62813f672461ce258e4168b48ef56fdf7b55", "format": 1 }, { - "name": "tests/integration/targets/cli_parse/tasks/nxos_ntc_templates.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c047b023876182c495f77393433c100ffa36efa44e4d341e1321c1225ac56879", + "name": "tests/integration/targets/restconf_config/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/cli_parse/tasks/fedora_native.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "095d4826ffe18c592c5bd1a346a8d82c4fa555b20c3b28ca4da49193dac53e19", + "name": "tests/integration/targets/restconf_config/tests/iosxe", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/cli_parse/tasks/main.yaml", + "name": "tests/integration/targets/restconf_config/tests/iosxe/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7986761fa4f1fa1fe2eace0ed13a4842d34aae39547b1856ffae5af399e6f8d3", + "chksum_sha256": "ff4b6188157975c3ba7b396443e415b264965d11029b6a7972e6927688458172", "format": 1 }, { - "name": "tests/integration/targets/netconf_config", + "name": "tests/integration/targets/prepare_nxos_tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_config/meta", + "name": "tests/integration/targets/prepare_nxos_tests/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_config/meta/main.yml", + "name": "tests/integration/targets/prepare_nxos_tests/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c4272cfbe5d7763f5d851cfa97e4bb480feb11df45c34a21616776c14c3f9ee", + "chksum_sha256": "78bfd2a4e9e3170c5e4ebed70554b46d36a304358c68f34fba0c12fdecd78908", "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tasks", + "name": "tests/integration/targets/restconf_get", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tasks/nxos.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fabed4f0fdf2b4f0d12c542e0a99da9c4ce894c4607d1d1dc38b37103d20e767", + "name": "tests/integration/targets/restconf_get/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tasks/iosxr.yaml", + "name": "tests/integration/targets/restconf_get/tasks/restconf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0caec58b8f1303315ebec8315c9a982e7d42b520de10f8fe2a897e325775e466", + "chksum_sha256": "8bfa6b3c0f514038aa61b510030d8399c36b0b4f4274474c9fe02f06eb0ab6f1", "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tasks/junos.yaml", + "name": "tests/integration/targets/restconf_get/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3145cb145338f26f1f684809c05ca97cb2fc8b88a36a27ae8afba636af7c845d", + "chksum_sha256": "344d9c0ea63d8d064ef8a6c738551c1f1b48e68e26e5ccb64add0de511dc58c1", "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tasks/main.yaml", + "name": "tests/integration/targets/restconf_get/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/restconf_get/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a0c882d71c283e7a2bbcf07fe588b5c6fa2e4c7a7953de637a0ad6e7bfa9333c", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/netconf_config/defaults", + "name": "tests/integration/targets/restconf_get/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_config/defaults/main.yaml", + "name": "tests/integration/targets/restconf_get/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "f217b1000606ebe64f449135a62b62813f672461ce258e4168b48ef56fdf7b55", "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tests", + "name": "tests/integration/targets/restconf_get/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tests/iosxr", + "name": "tests/integration/targets/restconf_get/tests/iosxe", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tests/iosxr/basic.yaml", + "name": "tests/integration/targets/restconf_get/tests/iosxe/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dfc308fc2743595a553c7fb998a9f46d94f64e6b3477a910e2d54d59438cb53b", + "chksum_sha256": "24c621004d39e45adac857d00e2ea4f985439b277342a1c1ea888cbcef5d930e", "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tests/nxos", + "name": "tests/integration/targets/prepare_iosxe_tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tests/nxos/fixtures", + "name": "tests/integration/targets/prepare_iosxe_tests/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tests/nxos/fixtures/config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f9ba47cabeb67066eefc95614931221e4679c2bce0209c8ebc392098eb76ac7f", - "format": 1 - }, - { - "name": "tests/integration/targets/netconf_config/tests/nxos/basic.yaml", + "name": "tests/integration/targets/prepare_iosxe_tests/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d5e05ea2718e82441fba21c106a2c105aba6c7a0549808b8b112fe33de6ebbe", + "chksum_sha256": "73ff1b38335fe80af4ef727cc8c1bc35bb4b370ee38f1fb794971f42c6413138", "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tests/junos", + "name": "tests/integration/targets/cli_parse", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tests/junos/fixtures", + "name": "tests/integration/targets/cli_parse/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tests/junos/fixtures/config.yml", + "name": "tests/integration/targets/cli_parse/tasks/nxos_native.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "582b6608893619dc4e1dc1293a06f3828808b2ee7fd0675e13dad5e43e3e5d54", + "chksum_sha256": "7336cd006b8234f06e4602c67e629073a9ac02433fcbb8419c23d6afc453e6c4", "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tests/junos/fixtures/invalid_config.yml", + "name": "tests/integration/targets/cli_parse/tasks/centos_native.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1cfceeda701f71c8ee2b6ff01b3ec22ffe72d981a5f82e31b278a4554937261", + "chksum_sha256": "e19f86cbdac31e9bbfaa474777fd34746b0116e54beedf0e354c058649f279b7", "format": 1 }, { - "name": "tests/integration/targets/netconf_config/tests/junos/basic.yaml", + "name": "tests/integration/targets/cli_parse/tasks/nxos_pyats.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ea03d6c833790e420cba36674bd809bdf7155fdd3f8854507f7ec9f73d64fe4", + "chksum_sha256": "6d3dbab19620dc96a3c99e11f7c6284f6e40c5e8899ff2c01ab06682678e5bac", "format": 1 }, { - "name": "tests/integration/target-prefixes.network", + "name": "tests/integration/targets/cli_parse/tasks/nxos_ntc_templates.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f44e56f8603c9ed8dbb4997dfadab9103c04098cb355329e2f3dee14254c7f85", + "chksum_sha256": "c047b023876182c495f77393433c100ffa36efa44e4d341e1321c1225ac56879", "format": 1 }, { - "name": "tests/sanity", + "name": "tests/integration/targets/cli_parse/tasks/fedora_native.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "095d4826ffe18c592c5bd1a346a8d82c4fa555b20c3b28ca4da49193dac53e19", + "format": 1 + }, + { + "name": "tests/integration/targets/cli_parse/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7986761fa4f1fa1fe2eace0ed13a4842d34aae39547b1856ffae5af399e6f8d3", + "format": 1 + }, + { + "name": "tests/integration/targets/cli_parse/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.17.txt", + "name": "tests/integration/targets/cli_parse/templates/fedora_iptables_--list.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183", + "chksum_sha256": "41f749e88e4d6a959350d34a9e887112d76e3f14a5bc15f2ce0485c2b17c7410", "format": 1 }, { - "name": "tests/sanity/ignore-2.9.txt", + "name": "tests/integration/targets/cli_parse/templates/fedora_ps_-ef.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6494d0769650d35ac96f17c6c3035a15474f73b76f9bcc9d65aa674b45c7a10f", + "chksum_sha256": "839e6e4d259258b34851d64fd27a692c54c16062c104fb1caef0355c8e6cd258", "format": 1 }, { - "name": "tests/sanity/ignore-2.15.txt", + "name": "tests/integration/targets/cli_parse/templates/nxos_show_interface.ttp", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183", + "chksum_sha256": "7b54c727fb9ab5731dbef7b5c271a41276278b15b7408bd24e25eda28e5c1a09", "format": 1 }, { - "name": "tests/sanity/ignore-2.14.txt", + "name": "tests/integration/targets/cli_parse/templates/nxos_show_version.textfsm", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183", + "chksum_sha256": "dfd59adde11de6285a62179e45db7b4e20e9ca61f276f6567c86c8455f796887", "format": 1 }, { - "name": "tests/sanity/ignore-2.16.txt", + "name": "tests/integration/targets/cli_parse/templates/centos_touch_test_output.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183", + "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", "format": 1 }, { - "name": "tests/sanity/ignore-2.13.txt", + "name": "tests/integration/targets/cli_parse/templates/nxos_show_interface.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183", + "chksum_sha256": "bcebc3ef1d3e94fd156e655704999ee16837a1c95b90c6d8bbd567e47e4ce272", "format": 1 }, { - "name": "tests/sanity/ignore-2.12.txt", + "name": "tests/integration/targets/cli_parse/templates/centos_ps_-ef.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183", + "chksum_sha256": "839e6e4d259258b34851d64fd27a692c54c16062c104fb1caef0355c8e6cd258", "format": 1 }, { @@ -2332,10 +2346,10 @@ "format": 1 }, { - "name": "tests/unit/requirements.txt", + "name": "tests/unit/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91401b9f07eb48ca9c342fae731b446a52c24eb6977aff975ee8757b1ffdaa8d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { @@ -2346,47 +2360,19 @@ "format": 1 }, { - "name": "tests/unit/module_utils/network", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/module_utils/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/module_utils/network/common", + "name": "tests/unit/module_utils/network", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, - { - "name": "tests/unit/module_utils/network/common/test_parsing.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f91ddfb8d29088cdbbca4290b4b7f68c8b8d84ebe52e64e430ee1478812bcf74", - "format": 1 - }, - { - "name": "tests/unit/module_utils/network/common/test_config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "47e508ce3db5f9dc98a587eee6a6cd79ad7a1f11bbe64d12ab561fe7a9b557ef", - "format": 1 - }, - { - "name": "tests/unit/module_utils/network/common/test_utils.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d400a77ce4f49dd40d06f13970468e09583f0dda6f8e4166ffea7e25ef2a97e4", - "format": 1 - }, - { - "name": "tests/unit/module_utils/network/common/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, { "name": "tests/unit/module_utils/network/__init__.py", "ftype": "file", @@ -2395,444 +2381,458 @@ "format": 1 }, { - "name": "tests/unit/module_utils/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/plugins", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/unit/plugins/connection", + "name": "tests/unit/module_utils/network/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/connection/test_netconf.py", + "name": "tests/unit/module_utils/network/common/test_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b77cfbdd44838320ba15b5571c0c283a70643fe94d8812465032490e48c95892", + "chksum_sha256": "47e508ce3db5f9dc98a587eee6a6cd79ad7a1f11bbe64d12ab561fe7a9b557ef", "format": 1 }, { - "name": "tests/unit/plugins/connection/test_network_cli.py", + "name": "tests/unit/module_utils/network/common/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d937945c16d327422b4db319dab8e4b2b87994026acce32b93c6cf056d1728b", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/plugins/connection/test_libssh.py", + "name": "tests/unit/module_utils/network/common/test_parsing.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d55a657cfc186face72f66269210671f2351a838239d3066befbeaa0af05af44", + "chksum_sha256": "e0c6e12f7d3207990c54fc6cafde27a57ace7e25050e9f9571757bd8b0593b0d", "format": 1 }, { - "name": "tests/unit/plugins/connection/__init__.py", + "name": "tests/unit/module_utils/network/common/test_utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d400a77ce4f49dd40d06f13970468e09583f0dda6f8e4166ffea7e25ef2a97e4", "format": 1 }, { - "name": "tests/unit/plugins/cli_parsers", + "name": "tests/unit/modules", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cli_parsers/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/plugins/cli_parsers/fixtures/nxos_show_version.cfg", + "name": "tests/unit/modules/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "280b9a49752bd9ebddf26798b7df94115c3f3402877d350e60b3236a33fb3f68", + "chksum_sha256": "e76d6b7820ee52594fb2e6bed416d9038bd67d0f54678765244bbb5d7c4e1733", "format": 1 }, { - "name": "tests/unit/plugins/cli_parsers/fixtures/ios_show_ip_interface_brief.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cf7860ac3fe8175f2a062881ecc52f977f14fdcf92ae1a60df68edda493f645a", + "name": "tests/unit/modules/network", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cli_parsers/test_pyats_parser.py", + "name": "tests/unit/modules/network/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "319bc81ce04b280f024b9fafff902ff9e9436cc729ce61d4b0265a662fa5a4fc", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/plugins/cliconf", + "name": "tests/unit/modules/network/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cliconf/test_default.py", + "name": "tests/unit/modules/network/cli/cli_module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8fc4158d1269179c0c5eb1055d790f287583cf2b6e451087e2572c3b4c10bde8", + "chksum_sha256": "71adedc22e395cc0d3028043739c5a5b55cf9116e5b9661a14b6011849492921", "format": 1 }, { - "name": "tests/unit/plugins/plugin_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/cli/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/plugins/plugin_utils/test_version.py", + "name": "tests/unit/modules/network/cli/test_cli_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2bd3627d999c0ee500821e176a323e3094e0f3f1dab4c1891b45ce170f6a0fe0", + "chksum_sha256": "e1fe40d6fb4ecef4a8b1af542c0254c5f37c80cfce65ea9f8404c72fd229c7de", "format": 1 }, { - "name": "tests/unit/plugins/action", + "name": "tests/unit/mock", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/action/network", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/mock/vault_helper.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41", "format": 1 }, { - "name": "tests/unit/plugins/action/network/test_network.py", + "name": "tests/unit/mock/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10b5f3f2e0327e89bfb9e0563585b2d86037d361ff8f2f87ee54ef3c0d2e5484", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/plugins/filter", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/mock/path.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5561a16a302e55ea79227591afefc3a93f33001fc80155dd29b068b90502a446", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_type5_pw.py", + "name": "tests/unit/mock/procenv.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74ad71f113f4a6e6befa4b954ac8985044331a2ec4075679535b3506aa539f25", + "chksum_sha256": "e8f699f9697899526eda627e967fd0f1fbd72ada1c6cda698323bb39906d1edf", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_pop_ace.py", + "name": "tests/unit/mock/yaml_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fb2503fc6dc28187530d8ce344adca7617d1aa82441239a11c1519a6bf77a657", + "chksum_sha256": "5a7b891104628e0883dca322c59f5e933144b8682330853b6d49c20e80b72a89", "format": 1 }, { - "name": "tests/unit/plugins/filter/comp_type5.py", + "name": "tests/unit/mock/loader.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39f4225d65b491a8383fb004300ce486289bc4ed582007c875753f0e1eb6d736", + "chksum_sha256": "62b34770bc51c9af0cee87370b448c8c8afb033ce2e704d6d2288743db916714", "format": 1 }, { - "name": "tests/unit/plugins/filter/fixtures", + "name": "tests/unit/requirements.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "91401b9f07eb48ca9c342fae731b446a52c24eb6977aff975ee8757b1ffdaa8d", + "format": 1 + }, + { + "name": "tests/unit/plugins", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/fixtures/network", + "name": "tests/unit/plugins/plugin_utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_with_condition_spec.yml", + "name": "tests/unit/plugins/plugin_utils/test_version.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6485e4874c8c58d4ce1bd7fc4e055a8de0c169392494971976dfee8a4fb4ded", + "chksum_sha256": "2bd3627d999c0ee500821e176a323e3094e0f3f1dab4c1891b45ce170f6a0fe0", "format": 1 }, { - "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_single_value_spec.yml", + "name": "tests/unit/plugins/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "806a7c949715a66e5337e7b9755395d9534a348646412bdc22fc0544587e33bf", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_spec.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "155ed3b225b5bb5312d3b4551e6cd46f8c00171b45a1102f95b97b9312d5f647", + "name": "tests/unit/plugins/action", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_output.txt", + "name": "tests/unit/plugins/action/network", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/plugins/action/network/test_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7ed33a3859e92f8bd04a8e07f3c782200b68e07aaa0e4ec3321bf8ef13a01dc", + "chksum_sha256": "10b5f3f2e0327e89bfb9e0563585b2d86037d361ff8f2f87ee54ef3c0d2e5484", "format": 1 }, { - "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_with_key_spec.yml", + "name": "tests/unit/plugins/connection", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/plugins/connection/test_network_cli.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "62102cf4c0ae9f7e57bca7999c52257bfe6aff62d1e24153e5f4da9efac8dab3", + "chksum_sha256": "7d937945c16d327422b4db319dab8e4b2b87994026acce32b93c6cf056d1728b", "format": 1 }, { - "name": "tests/unit/plugins/filter/fixtures/network/__init__.py", + "name": "tests/unit/plugins/connection/test_netconf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b77cfbdd44838320ba15b5571c0c283a70643fe94d8812465032490e48c95892", "format": 1 }, { - "name": "tests/unit/plugins/filter/fixtures/__init__.py", + "name": "tests/unit/plugins/connection/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_vlan_parser.py", + "name": "tests/unit/plugins/connection/test_libssh.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7fa75e676aee2068b18468314a0c6cdcd4cb848565597844f0a822c1a027ea8", + "chksum_sha256": "d55a657cfc186face72f66269210671f2351a838239d3066befbeaa0af05af44", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_network.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3c7166b4606f40f93e81cc15a4d254cb341a91b3dcd6c4ac4cb06a813cf4efb1", + "name": "tests/unit/plugins/cli_parsers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/test_vlan_extender.py", + "name": "tests/unit/plugins/cli_parsers/test_pyats_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4460c2cb0872fb03d96c07d112bef10875957be1a76c501af931e74a4f2757c", + "chksum_sha256": "66c0077b7da4543148c25aaf74db1ead7c5754f3eda3d84e2a2720a5b964f982", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_hash_salt.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "320924be942e229b45d8a5629734971011d7706845cc00f996e09c7fd09523c5", + "name": "tests/unit/plugins/cli_parsers/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/__init__.py", + "name": "tests/unit/plugins/cli_parsers/fixtures/ios_show_ip_interface_brief.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cf7860ac3fe8175f2a062881ecc52f977f14fdcf92ae1a60df68edda493f645a", "format": 1 }, { - "name": "tests/unit/plugins/__init__.py", + "name": "tests/unit/plugins/cli_parsers/fixtures/nxos_show_version.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "280b9a49752bd9ebddf26798b7df94115c3f3402877d350e60b3236a33fb3f68", "format": 1 }, { - "name": "tests/unit/mock", + "name": "tests/unit/plugins/filter", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/mock/vault_helper.py", + "name": "tests/unit/plugins/filter/test_type5_pw.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41", + "chksum_sha256": "162603351e0a35153c49e8165652efa9751601515eab8b88a96bbc6937023da9", "format": 1 }, { - "name": "tests/unit/mock/procenv.py", + "name": "tests/unit/plugins/filter/test_vlan_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fae8515e6eb44dd87ca9a7b88eb572058b48f0b05d8be0483aab3960d6841a9b", + "chksum_sha256": "b2cb55e3d54aa330e0bc95300b7a57dc7604a41c3f36ed45c02b903addd8fa62", "format": 1 }, { - "name": "tests/unit/mock/yaml_helper.py", + "name": "tests/unit/plugins/filter/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a7b891104628e0883dca322c59f5e933144b8682330853b6d49c20e80b72a89", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/mock/path.py", + "name": "tests/unit/plugins/filter/test_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5561a16a302e55ea79227591afefc3a93f33001fc80155dd29b068b90502a446", + "chksum_sha256": "c2a3b4c2aa5b4a65d37e75ee0c6d3a4b377bc42bfec0ce260fa39a61feefbc86", "format": 1 }, { - "name": "tests/unit/mock/loader.py", + "name": "tests/unit/plugins/filter/test_hash_salt.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "62b34770bc51c9af0cee87370b448c8c8afb033ce2e704d6d2288743db916714", + "chksum_sha256": "9c84086f1b1b50ebaf20664da76646f1d8fa69ad5bbd490562fcbf5063329c82", "format": 1 }, { - "name": "tests/unit/mock/__init__.py", + "name": "tests/unit/plugins/filter/test_pop_ace.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5a556c22b982c1901ac1c28ad6a76acaf380688c424dbb0bd739d70534993bf3", "format": 1 }, { - "name": "tests/unit/modules", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/filter/comp_type5.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ed7903c21be70c7ec62b336c51add40c414744e3efc326a57d09d1af00212211", "format": 1 }, { - "name": "tests/unit/modules/network", + "name": "tests/unit/plugins/filter/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/cli", + "name": "tests/unit/plugins/filter/fixtures/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "tests/unit/plugins/filter/fixtures/network", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/cli/cli_module.py", + "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_with_key_spec.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "71adedc22e395cc0d3028043739c5a5b55cf9116e5b9661a14b6011849492921", + "chksum_sha256": "62102cf4c0ae9f7e57bca7999c52257bfe6aff62d1e24153e5f4da9efac8dab3", "format": 1 }, { - "name": "tests/unit/modules/network/cli/__init__.py", + "name": "tests/unit/plugins/filter/fixtures/network/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/cli/test_cli_config.py", + "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_spec.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1fe40d6fb4ecef4a8b1af542c0254c5f37c80cfce65ea9f8404c72fd229c7de", + "chksum_sha256": "155ed3b225b5bb5312d3b4551e6cd46f8c00171b45a1102f95b97b9312d5f647", "format": 1 }, { - "name": "tests/unit/modules/network/__init__.py", + "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_with_condition_spec.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d6485e4874c8c58d4ce1bd7fc4e055a8de0c169392494971976dfee8a4fb4ded", "format": 1 }, { - "name": "tests/unit/modules/utils.py", + "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_output.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "097a12749e93b776d949ef7ea3d53ea484e3b309d2f199abbdb9c622c05d6578", + "chksum_sha256": "c7ed33a3859e92f8bd04a8e07f3c782200b68e07aaa0e4ec3321bf8ef13a01dc", "format": 1 }, { - "name": "tests/unit/modules/__init__.py", + "name": "tests/unit/plugins/filter/fixtures/network/show_vlans_xml_single_value_spec.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "806a7c949715a66e5337e7b9755395d9534a348646412bdc22fc0544587e33bf", "format": 1 }, { - "name": "tests/unit/__init__.py", + "name": "tests/unit/plugins/filter/test_vlan_extender.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5fc4056a9cb8b01b70738e5f7ab3f821340184bb9331ded5318047e6aeac3b68", "format": 1 }, { - "name": "changelogs", + "name": "tests/unit/plugins/cliconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "changelogs/CHANGELOG.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0ccda3a775ac79df07a7a7f0cff6c9f157793d95e60f5fe4a2326592b346819e", - "format": 1 - }, - { - "name": "changelogs/config.yaml", + "name": "tests/unit/plugins/cliconf/test_default.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5fc940cdae49577df5bc9b35b1f0bbbe531e9dd75569c60c636c39ea8b608aa4", + "chksum_sha256": "8fc4158d1269179c0c5eb1055d790f287583cf2b6e451087e2572c3b4c10bde8", "format": 1 }, { - "name": "changelogs/fragments", + "name": "tests/sanity", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "changelogs/fragments/.keep", + "name": "tests/sanity/ignore-2.16.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183", "format": 1 }, { - "name": "changelogs/changelog.yaml", + "name": "tests/sanity/ignore-2.18.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1dbc4e1081371f1774cb90a894b7fbc1260e1c6372278c3f788f121d1237e2c3", + "chksum_sha256": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183", "format": 1 }, { - "name": ".yamllint", + "name": "tests/sanity/ignore-2.15.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "386fa31449c09e5df093aa72eabcb7653011a90181dc30b539ac67dbe3b17bf4", + "chksum_sha256": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183", "format": 1 }, { - "name": ".flake8", + "name": "tests/sanity/ignore-2.14.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e053c08fd20ac8c8004c6b67837862b4ba3f2a36fd039ec44936cab4495c124", + "chksum_sha256": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183", + "format": 1 + }, + { + "name": "tests/sanity/ignore-2.17.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7a76e6b5a6a1b75c786e571fe854f37b69f1bf44883efae7b9efa0578ca98183", "format": 1 } ], diff --git a/ansible_collections/ansible/netcommon/MANIFEST.json b/ansible_collections/ansible/netcommon/MANIFEST.json index 8696eb404..5979fa82b 100644 --- a/ansible_collections/ansible/netcommon/MANIFEST.json +++ b/ansible_collections/ansible/netcommon/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "ansible", "name": "netcommon", - "version": "5.3.0", + "version": "6.1.2", "authors": [ "Ansible Network Community (ansible-network)" ], @@ -20,7 +20,7 @@ "license": [], "license_file": "LICENSE", "dependencies": { - "ansible.utils": ">=2.7.0" + "ansible.utils": ">=3.0.0" }, "repository": "https://github.com/ansible-collections/ansible.netcommon", "documentation": null, @@ -31,7 +31,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "556127437b957f30d28a0db7b13195dbe19dbc2963d81487149e033feef498f4", + "chksum_sha256": "9a263caca7585b5e1422aeebea188ed2351581e7bfabdea302f518e4ebe26755", "format": 1 }, "format": 1 diff --git a/ansible_collections/ansible/netcommon/README.md b/ansible_collections/ansible/netcommon/README.md index e3213e478..16486c3c5 100644 --- a/ansible_collections/ansible/netcommon/README.md +++ b/ansible_collections/ansible/netcommon/README.md @@ -2,14 +2,16 @@ # Ansible Network Collection for Common Code (netcommon) [![CI](https://zuul-ci.org/gated.svg)](https://ansible.softwarefactory-project.io/zuul/builds?project=ansible-collections%2Fansible.netcommon) +[![Codecov](https://codecov.io/gh/ansible-collections/ansible.netcommon/branch/main/graph/badge.svg)](https://codecov.io/gh/ansible-collections/ansible.netcommon) +[![CI](https://github.com/ansible-collections/ansible.netcommon/actions/workflows/tests.yml/badge.svg?branch=main&event=schedule)](https://github.com/ansible-collections/ansible.netcommon/actions/workflows/tests.yml) The Ansible ``ansible.netcommon`` collection includes common content to help automate the management of network, security, and cloud devices. -This includes connection plugins, such as ``network_cli``, ``httpapi``, and ``netconf``. +This includes connection plugins, such as ``network_cli``, ``httpapi``, and ``netconf``. ## Ansible version compatibility -This collection has been tested against following Ansible versions: **>=2.9.10**. +This collection has been tested against following Ansible versions: **>=2.14.0**. For collections that support Ansible 2.9, please ensure you update your `network_os` to use the fully qualified collection name (for example, `cisco.ios.ios`). @@ -70,6 +72,7 @@ Name | Description [ansible.netcommon.cli_backup](https://github.com/ansible-collections/ansible.netcommon/blob/main/docs/ansible.netcommon.cli_backup_module.rst)|Back up device configuration from network devices over network_cli [ansible.netcommon.cli_command](https://github.com/ansible-collections/ansible.netcommon/blob/main/docs/ansible.netcommon.cli_command_module.rst)|Run a cli command on cli-based network devices [ansible.netcommon.cli_config](https://github.com/ansible-collections/ansible.netcommon/blob/main/docs/ansible.netcommon.cli_config_module.rst)|Push text based configuration to network devices over network_cli +[ansible.netcommon.cli_restore](https://github.com/ansible-collections/ansible.netcommon/blob/main/docs/ansible.netcommon.cli_restore_module.rst)|Restore device configuration to network devices over network_cli [ansible.netcommon.grpc_config](https://github.com/ansible-collections/ansible.netcommon/blob/main/docs/ansible.netcommon.grpc_config_module.rst)|Fetch configuration/state data from gRPC enabled target hosts. [ansible.netcommon.grpc_get](https://github.com/ansible-collections/ansible.netcommon/blob/main/docs/ansible.netcommon.grpc_get_module.rst)|Fetch configuration/state data from gRPC enabled target hosts. [ansible.netcommon.net_get](https://github.com/ansible-collections/ansible.netcommon/blob/main/docs/ansible.netcommon.net_get_module.rst)|Copy a file from a network device to Ansible Controller @@ -103,10 +106,7 @@ collections: The most common use case for this collection is to include it as a dependency in a network device-specific collection. Use the Fully Qualified Collection Name (FQCN) when referring to content in this collection (for example, `ansible.netcommon.network_cli`). -See the [Vyos collection](https://github.com/ansible-collections/vyos) for an example of this. - - -**NOTE**: For Ansible 2.9, you may not see deprecation warnings when you run your playbooks with this collection. Use this documentation to track when a module is deprecated. +See the [Vyos collection](https://github.com/ansible-collections/vyos.vyos) for an example of this. ### See Also: diff --git a/ansible_collections/ansible/netcommon/bindep.txt b/ansible_collections/ansible/netcommon/bindep.txt index 5e5275acb..31812743c 100644 --- a/ansible_collections/ansible/netcommon/bindep.txt +++ b/ansible_collections/ansible/netcommon/bindep.txt @@ -4,8 +4,6 @@ gcc-c++ [doc test platform:rpm] libyaml-devel [test platform:rpm] libyaml-dev [test platform:dpkg] -python3-devel [test platform:rpm] -python3 [test platform:rpm] # ansible-pylibssh gcc [compile platform:rpm] @@ -26,8 +24,6 @@ python39-lxml [platform:centos-8 platform:rhel-8] findutils [compile platform:centos-8 platform:rhel-8] gcc [compile platform:centos-8 platform:rhel-8] make [compile platform:centos-8 platform:rhel-8] -python3-devel [compile platform:centos-9 platform:rhel-9] -python39-devel [compile platform:centos-8 platform:rhel-8] python3-cffi [platform:centos-9 platform:rhel-9] python39-cffi [platform:centos-8 platform:rhel-8] python3-cryptography [platform:centos-9 platform:rhel-9] diff --git a/ansible_collections/ansible/netcommon/changelogs/changelog.yaml b/ansible_collections/ansible/netcommon/changelogs/changelog.yaml index 7948f12b4..a72e63459 100644 --- a/ansible_collections/ansible/netcommon/changelogs/changelog.yaml +++ b/ansible_collections/ansible/netcommon/changelogs/changelog.yaml @@ -719,3 +719,50 @@ releases: - sanity_ignores.yaml - trivial_lint.yaml release_date: "2023-10-17" + 6.0.0: + changes: + major_changes: + - Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions + are EoL now. + release_summary: + Starting from this release, the minimum `ansible-core` version + this collection requires is `2.14.0`. That last known version compatible with + ansible-core<2.14 is `v5.3.0`. + fragments: + - major_600.yml + release_date: "2023-11-30" + 6.1.0: + changes: + bugfixes: + - libssh connection plugin - stop using deprecated ``PlayContext.verbosity`` + property that is no longer present in ansible-core 2.18 (https://github.com/ansible-collections/ansible.netcommon/pull/626). + - network_cli - removed deprecated play_context.verbosity property. + minor_changes: + - Add new module cli_restore that exclusively handles restoring of backup configuration + to target applaince. + fragments: + - 626-verbosity.yml + - add_cli_restore.yaml + - verbosity.yml + modules: + - description: Restore device configuration to network devices over network_cli + name: cli_restore + namespace: "" + release_date: "2024-04-11" + 6.1.1: + changes: + bugfixes: + - Added guidance for users to open an issue for the respective platform if plugin + support is needed. + - Improved module execution to gracefully handle cases where plugin support + is required, providing a clear error message to the user. + fragments: + - update_not_supported_exception.yaml + release_date: "2024-04-19" + 6.1.2: + changes: + doc_changes: + - Fixed module name and log consistency in parse_cli_textfsm filter doc. + fragments: + - 614-fix-parse_cli_textfsm-doc.yaml + release_date: "2024-05-22" diff --git a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_command_module.rst b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_command_module.rst index 8e69a80f9..11bd0eb82 100644 --- a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_command_module.rst +++ b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_command_module.rst @@ -167,7 +167,7 @@ Examples ansible.netcommon.cli_command: command: commit replace prompt: This commit will replace or remove the entire running configuration - answer: yes + answer: "yes" - name: run command expecting user confirmation ansible.netcommon.cli_command: @@ -178,27 +178,27 @@ Examples - name: run config mode command and handle prompt/answer ansible.netcommon.cli_command: - command: '{{ item }}' + command: "{{ item }}" prompt: - - Exit with uncommitted changes + - Exit with uncommitted changes answer: y loop: - - configure - - set system syslog file test any any - - exit + - configure + - set system syslog file test any any + - exit - name: multiple prompt, multiple answer (mandatory check for all prompts) ansible.netcommon.cli_command: command: copy sftp sftp://user@host//user/test.img check_all: true prompt: - - Confirm download operation - - Password - - Do you want to change that to the standby image + - Confirm download operation + - Password + - Do you want to change that to the standby image answer: - - y - - - - y + - y + - + - y diff --git a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_config_module.rst b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_config_module.rst index 60048550e..1af9b2010 100644 --- a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_config_module.rst +++ b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_config_module.rst @@ -302,7 +302,7 @@ Examples - name: configure device with config with defaults enabled ansible.netcommon.cli_config: config: "{{ lookup('template', 'basic/config.j2') }}" - defaults: yes + defaults: "yes" - name: Use diff_match ansible.netcommon.cli_config: @@ -325,7 +325,7 @@ Examples - name: configurable backup path ansible.netcommon.cli_config: config: "{{ lookup('template', 'basic/config.j2') }}" - backup: yes + backup: "yes" backup_options: filename: backup.cfg dir_path: /home/user diff --git a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_restore_module.rst b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_restore_module.rst new file mode 100644 index 000000000..d13d87efb --- /dev/null +++ b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.cli_restore_module.rst @@ -0,0 +1,128 @@ +.. _ansible.netcommon.cli_restore_module: + + +***************************** +ansible.netcommon.cli_restore +***************************** + +**Restore device configuration to network devices over network_cli** + + +Version added: 6.1.0 + +.. contents:: + :local: + :depth: 1 + + +Synopsis +-------- +- This module provides platform agnostic way of restore text based configuration to network devices over network_cli connection plugin. +- The module uses the platforms `config replace` commands to restore backup configuration that is already copied over to the appliance. + + + + +Parameters +---------- + +.. raw:: html + + + + + + + + + + + + + + + + + +
ParameterChoices/DefaultsComments
+
+ filename + +
+ string +
+
+ +
Filename of the backup file, present in the appliance where the restore operation is to be performed. Check appliance for the configuration backup file name.
+
+
+ path + +
+ string +
+
+ +
The location in the target appliance where the file containing the backup exists. The path and the filename together create the input to the config replace command,
+
For an IOSXE appliance the path pattern is flash://<filename>
+
+
+ + +Notes +----- + +.. note:: + - This module is supported on ``ansible_network_os`` network platforms. See the :ref:`Network Platform Options ` for details. + + + +Examples +-------- + +.. code-block:: yaml + + - name: Restore IOS-XE configuration + ansible.netcommon.cli_restore: + filename: backupDday.cfg + path: flash:// + + # Command fired + # ------------- + # config replace flash://backupDday.cfg force + + # Task Output + # ----------- + # + # ok: [BATMON] => changed=false + # __restore__: |- + # The rollback configlet from the last pass is listed below: + # ******** + # !List of Rollback Commands: + # Building configuration... + # Current configuration : 3781 bytes + # end + # ******** + # + # + # Rollback aborted after 5 passes + # The following commands are failed to apply to the IOS image. + # ******** + # Building configuration... + # Current configuration : 3781 bytes + # ******** + # invocation: + # module_args: + # filename: backupDday.cfg + + + + +Status +------ + + +Authors +~~~~~~~ + +- Sagar Paul (@KB-perByte) diff --git a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.grpc_config_module.rst b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.grpc_config_module.rst index 5e418250d..9e751804b 100644 --- a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.grpc_config_module.rst +++ b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.grpc_config_module.rst @@ -159,38 +159,37 @@ Examples .. code-block:: yaml - name: Merge static route config - ansible.netcommon.grpc_config: - config: - Cisco-IOS-XR-ip-static-cfg:router-static: - default-vrf: - address-family: - vrfipv4: - vrf-unicast: - vrf-prefixes: - vrf-prefix: - - prefix: "1.2.3.6" - prefix-length: 32 - vrf-route: - vrf-next-hop-table: - vrf-next-hop-next-hop-address: - - next-hop-address: "10.0.2.2" - - state: merged - - - name: Merge bgp config - ansible.netcommon.grpc_config: - config: "{{ lookup('file', 'bgp.json') }}" - state: merged - - - name: Find diff - diff: True - ansible.netcommon.grpc_config: - config: "{{ lookup('file', 'bgp_start.yml') }}" - state: merged - - - name: Backup running config - ansible.netcommon.grpc_config: - backup: yes + ansible.netcommon.grpc_config: + config: + Cisco-IOS-XR-ip-static-cfg:router-static: + default-vrf: + address-family: + vrfipv4: + vrf-unicast: + vrf-prefixes: + vrf-prefix: + - prefix: "1.2.3.6" + prefix-length: 32 + vrf-route: + vrf-next-hop-table: + vrf-next-hop-next-hop-address: + - next-hop-address: "10.0.2.2" + state: merged + + - name: Merge bgp config + ansible.netcommon.grpc_config: + config: "{{ lookup('file', 'bgp.json') }}" + state: merged + + - name: Find diff + diff: true + ansible.netcommon.grpc_config: + config: "{{ lookup('file', 'bgp_start.yml') }}" + state: merged + + - name: Backup running config + ansible.netcommon.grpc_config: + backup: true diff --git a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.grpc_get_module.rst b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.grpc_get_module.rst index 607cdf186..480b5db11 100644 --- a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.grpc_get_module.rst +++ b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.grpc_get_module.rst @@ -123,14 +123,14 @@ Examples .. code-block:: yaml - name: Get bgp configuration data - grpc_get: - section: - Cisco-IOS-XR-ip-static-cfg:router-static: - - null - - name: run cli command - grpc_get: - command: 'show version' - display: text + grpc_get: + section: + Cisco-IOS-XR-ip-static-cfg:router-static: + - null + - name: run cli command + grpc_get: + command: "show version" + display: text diff --git a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.netconf_config_module.rst b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.netconf_config_module.rst index 53b1dfebb..f2c836686 100644 --- a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.netconf_config_module.rst +++ b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.netconf_config_module.rst @@ -431,14 +431,14 @@ Examples - name: configure interface while providing different private key file path (for connection=netconf) ansible.netcommon.netconf_config: - backup: yes + backup: true register: backup_junos_location vars: ansible_private_key_file: /home/admin/.ssh/newprivatekeyfile - name: configurable backup path ansible.netcommon.netconf_config: - backup: yes + backup: true backup_options: filename: backup.cfg dir_path: /home/user @@ -446,49 +446,54 @@ Examples - name: "configure using direct native format configuration (cisco iosxr)" ansible.netcommon.netconf_config: format: json - content: { - "config": { - "interface-configurations": { - "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": { - "active": "act", - "description": "test for ansible Loopback999", - "interface-name": "Loopback999" - } - } - } - } - get_filter: { - "interface-configurations": { - "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": null - } - } + content: + { + "config": + { + "interface-configurations": + { + "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", + "interface-configuration": + { + "active": "act", + "description": "test for ansible Loopback999", + "interface-name": "Loopback999", + }, + }, + }, + } + get_filter: + { + "interface-configurations": + { + "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", + "interface-configuration": null, + }, + } - name: "configure using json string format configuration (cisco iosxr)" ansible.netcommon.netconf_config: format: json content: | - { - "config": { - "interface-configurations": { - "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": { - "active": "act", - "description": "test for ansible Loopback999", - "interface-name": "Loopback999" - } - } - } - } - get_filter: | - { - "interface-configurations": { - "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": null + { + "config": { + "interface-configurations": { + "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", + "interface-configuration": { + "active": "act", + "description": "test for ansible Loopback999", + "interface-name": "Loopback999" } } - + } + } + get_filter: | + { + "interface-configurations": { + "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", + "interface-configuration": null + } + } # Make a round-trip interface description change, diff the before and after # this demonstrates the use of the native display format and several utilities @@ -512,8 +517,8 @@ Examples - name: Update the description ansible.utils.update_fact: updates: - - path: pre.output.data.interfaces.interface.config.description - value: "Configured by ansible {{ 100 | random }}" + - path: pre.output.data.interfaces.interface.config.description + value: "Configured by ansible {{ 100 | random }}" register: updated - name: Apply the new configuration @@ -533,7 +538,6 @@ Examples ansible.utils.fact_diff: before: "{{ pre.output.data|ansible.utils.to_paths }}" after: "{{ post.output.data|ansible.utils.to_paths }}" - # TASK [Show the differences between the pre and post configurations] ******** # --- before # +++ after diff --git a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.netconf_get_module.rst b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.netconf_get_module.rst index a0581c681..69edcec5d 100644 --- a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.netconf_get_module.rst +++ b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.netconf_get_module.rst @@ -188,12 +188,12 @@ Examples - name: "get configuration with json filter string and native output (using xmltodict)" netconf_get: filter: | - { - "interface-configurations": { - "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": null - } - } + { + "interface-configurations": { + "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", + "interface-configuration": null + } + } display: native - name: Define the Cisco IOSXR interface filter @@ -211,16 +211,17 @@ Examples - name: "get configuration with direct native filter type" ansible.netcommon.netconf_get: - filter: { - "interface-configurations": { + filter: + { + "interface-configurations": + { "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": null + "interface-configuration": null, + }, } - } display: native register: result - # Make a round-trip interface description change, diff the before and after # this demonstrates the use of the native display format and several utilities # from the ansible.utils collection @@ -243,8 +244,8 @@ Examples - name: Update the description ansible.utils.update_fact: updates: - - path: pre.output.data.interfaces.interface.config.description - value: "Configured by ansible {{ 100 | random }}" + - path: pre.output.data.interfaces.interface.config.description + value: "Configured by ansible {{ 100 | random }}" register: updated - name: Apply the new configuration @@ -264,7 +265,6 @@ Examples ansible.utils.fact_diff: before: "{{ pre.output.data|ansible.utils.to_paths }}" after: "{{ post.output.data|ansible.utils.to_paths }}" - # TASK [Show the differences between the pre and post configurations] ******** # --- before # +++ after diff --git a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.parse_cli_textfsm_filter.rst b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.parse_cli_textfsm_filter.rst index 9f2283f5d..56a07e315 100644 --- a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.parse_cli_textfsm_filter.rst +++ b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.parse_cli_textfsm_filter.rst @@ -101,14 +101,14 @@ Examples device_neighbors: "{{ lldp_output.stdout[0] | parse_cli_textfsm('~/ntc-templates/templates/cisco_ios_show_lldp_neighbors.textfsm') }}" - name: "Debug" - ansible.builtindebug: + ansible.builtin.debug: msg: "{{ device_neighbors }}" # Task Output # ----------- # # TASK [Fetch command output] - # ok: [rtr-2] + # ok: [rtr-1] # TASK [Invoke parse_cli_textfsm] # ok: [rtr-1] diff --git a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.pop_ace_filter.rst b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.pop_ace_filter.rst index 721ae9a74..a8dfe8452 100644 --- a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.pop_ace_filter.rst +++ b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.pop_ace_filter.rst @@ -303,7 +303,7 @@ Examples .. code-block:: yaml - ##Playbook with filter plugin example + ## Playbook with filter plugin example vars: filter_options: match_all: true @@ -438,7 +438,7 @@ Examples ansible.builtin.debug: msg: "{{ acls_data | ansible.netcommon.pop_ace(filter_options=filter_options, match_criteria=match_criteria) }}" - ##Output + ## Output # PLAY [Filter plugin example pop_ace] ****************************************************************************************************************** # TASK [Remove ace entries from a provided data] *********************************************************************************************************** @@ -572,8 +572,8 @@ Examples # afi: ipv6 - ##Playbook with workflow example - tasks: + ## Playbook with workflow example + _tasks: - name: Gather ACLs config from device existing ACLs config cisco.ios.ios_acls: state: gathered @@ -598,8 +598,7 @@ Examples state: overridden config: "{{ clean_acls['clean_acls']['acls'] | from_yaml }}" - - ##Output + ## Output # PLAYBOOK: pop_ace_example.yml *********************************************** diff --git a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.telnet_module.rst b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.telnet_module.rst index e28190bdc..18a9769db 100644 --- a/ansible_collections/ansible/netcommon/docs/ansible.netcommon.telnet_module.rst +++ b/ansible_collections/ansible/netcommon/docs/ansible.netcommon.telnet_module.rst @@ -255,24 +255,24 @@ Examples ansible.netcommon.telnet: user: cisco password: cisco - login_prompt: 'Username: ' + login_prompt: "Username: " prompts: - - '[>#]' + - "[>#]" command: - - terminal length 0 - - configure terminal - - hostname ios01 + - terminal length 0 + - configure terminal + - hostname ios01 - name: run show commands ansible.netcommon.telnet: user: cisco password: cisco - login_prompt: 'Username: ' + login_prompt: "Username: " prompts: - - '[>#]' + - "[>#]" command: - - terminal length 0 - - show version + - terminal length 0 + - show version diff --git a/ansible_collections/ansible/netcommon/meta/runtime.yml b/ansible_collections/ansible/netcommon/meta/runtime.yml index 757189034..337da6910 100644 --- a/ansible_collections/ansible/netcommon/meta/runtime.yml +++ b/ansible_collections/ansible/netcommon/meta/runtime.yml @@ -1,5 +1,5 @@ --- -requires_ansible: ">=2.9.10" +requires_ansible: ">=2.14.0" plugin_routing: action: grpc_config: diff --git a/ansible_collections/ansible/netcommon/plugins/connection/libssh.py b/ansible_collections/ansible/netcommon/plugins/connection/libssh.py index cd10a3a58..50dec0288 100644 --- a/ansible_collections/ansible/netcommon/plugins/connection/libssh.py +++ b/ansible_collections/ansible/netcommon/plugins/connection/libssh.py @@ -375,7 +375,7 @@ class Connection(ConnectionBase): self.ssh = Session() - if self._play_context.verbosity > 3: + if display.verbosity > 3: self.ssh.set_log_level(logging.INFO) self.keyfile = os.path.expanduser("~/.ssh/known_hosts") diff --git a/ansible_collections/ansible/netcommon/plugins/connection/network_cli.py b/ansible_collections/ansible/netcommon/plugins/connection/network_cli.py index 5063b43e0..071f9cc91 100644 --- a/ansible_collections/ansible/netcommon/plugins/connection/network_cli.py +++ b/ansible_collections/ansible/netcommon/plugins/connection/network_cli.py @@ -318,6 +318,7 @@ from ansible.module_utils.six import PY3 from ansible.module_utils.six.moves import cPickle from ansible.playbook.play_context import PlayContext from ansible.plugins.loader import cache_loader, cliconf_loader, connection_loader, terminal_loader +from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.connection.libssh import HAS_PYLIBSSH from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list @@ -332,6 +333,7 @@ try: HAS_SCP = True except ImportError: HAS_SCP = False +display = Display() def ensure_connect(func): @@ -597,7 +599,7 @@ class Connection(NetworkConnectionBase): """ Connects to the remote device and starts the terminal """ - if self._play_context.verbosity > 3: + if display.verbosity > 3: logging.getLogger(self.ssh_type).setLevel(logging.DEBUG) self.queue_message("vvvv", "invoked shell using ssh_type: %s" % self.ssh_type) diff --git a/ansible_collections/ansible/netcommon/plugins/filter/parse_cli_textfsm.py b/ansible_collections/ansible/netcommon/plugins/filter/parse_cli_textfsm.py index 8b7a9612f..1319c0c8a 100644 --- a/ansible_collections/ansible/netcommon/plugins/filter/parse_cli_textfsm.py +++ b/ansible_collections/ansible/netcommon/plugins/filter/parse_cli_textfsm.py @@ -52,14 +52,14 @@ EXAMPLES = r""" device_neighbors: "{{ lldp_output.stdout[0] | parse_cli_textfsm('~/ntc-templates/templates/cisco_ios_show_lldp_neighbors.textfsm') }}" - name: "Debug" - ansible.builtindebug: + ansible.builtin.debug: msg: "{{ device_neighbors }}" # Task Output # ----------- # # TASK [Fetch command output] -# ok: [rtr-2] +# ok: [rtr-1] # TASK [Invoke parse_cli_textfsm] # ok: [rtr-1] diff --git a/ansible_collections/ansible/netcommon/plugins/filter/pop_ace.py b/ansible_collections/ansible/netcommon/plugins/filter/pop_ace.py index 27d4d8469..eefe07ca6 100644 --- a/ansible_collections/ansible/netcommon/plugins/filter/pop_ace.py +++ b/ansible_collections/ansible/netcommon/plugins/filter/pop_ace.py @@ -84,7 +84,7 @@ options: """ EXAMPLES = r""" -##Playbook with filter plugin example +## Playbook with filter plugin example vars: filter_options: match_all: true @@ -219,7 +219,7 @@ tasks: ansible.builtin.debug: msg: "{{ acls_data | ansible.netcommon.pop_ace(filter_options=filter_options, match_criteria=match_criteria) }}" -##Output +## Output # PLAY [Filter plugin example pop_ace] ****************************************************************************************************************** # TASK [Remove ace entries from a provided data] *********************************************************************************************************** @@ -353,8 +353,8 @@ tasks: # afi: ipv6 -##Playbook with workflow example -tasks: +## Playbook with workflow example +_tasks: - name: Gather ACLs config from device existing ACLs config cisco.ios.ios_acls: state: gathered @@ -379,8 +379,7 @@ tasks: state: overridden config: "{{ clean_acls['clean_acls']['acls'] | from_yaml }}" - -##Output +## Output # PLAYBOOK: pop_ace_example.yml *********************************************** @@ -989,7 +988,6 @@ tasks: # - ip access-list extended 110 # - no 10 deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 traceroute dscp ef ttl eq 10 # - no ip access-list extended test - """ from ansible.errors import AnsibleFilterError diff --git a/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/rm_base/resource_module.py b/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/rm_base/resource_module.py index e3002572b..1bbefd515 100644 --- a/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/rm_base/resource_module.py +++ b/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/rm_base/resource_module.py @@ -145,9 +145,9 @@ class ResourceModule(RmEngineBase): # pylint: disable=R0902 else: self.addcmd(have, parser, True) - def run_commands(self): + def run_commands(self, err_responses=None): """Send commands to the device""" if self.commands and self.state in self.ACTION_STATES: if not self._module.check_mode: - self._connection.edit_config(self.commands) + self._connection.edit_config(candidate=self.commands, err_responses=err_responses) self.changed = True diff --git a/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/utils.py b/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/utils.py index 6f7a50b5d..5576e7edf 100644 --- a/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/utils.py +++ b/ansible_collections/ansible/netcommon/plugins/module_utils/network/common/utils.py @@ -24,6 +24,7 @@ import socket from copy import deepcopy from functools import reduce # forward compatibility for Python 3 +from io import StringIO from itertools import chain from ansible.module_utils import basic @@ -719,7 +720,7 @@ def extract_argspec(doc_obj, argpsec): # TODO: Support extends_documentation_fragment def convert_doc_to_ansible_module_kwargs(doc): - doc_obj = yaml.load(str(doc), SafeLoader) + doc_obj = yaml.load(StringIO(doc), SafeLoader) argspec = {} spec = {} extract_argspec(doc_obj, argspec) diff --git a/ansible_collections/ansible/netcommon/plugins/modules/cli_command.py b/ansible_collections/ansible/netcommon/plugins/modules/cli_command.py index e8505226b..7ad7bad91 100644 --- a/ansible_collections/ansible/netcommon/plugins/modules/cli_command.py +++ b/ansible_collections/ansible/netcommon/plugins/modules/cli_command.py @@ -79,7 +79,7 @@ EXAMPLES = """ ansible.netcommon.cli_command: command: commit replace prompt: This commit will replace or remove the entire running configuration - answer: yes + answer: "yes" - name: run command expecting user confirmation ansible.netcommon.cli_command: @@ -90,27 +90,27 @@ EXAMPLES = """ - name: run config mode command and handle prompt/answer ansible.netcommon.cli_command: - command: '{{ item }}' + command: "{{ item }}" prompt: - - Exit with uncommitted changes + - Exit with uncommitted changes answer: y loop: - - configure - - set system syslog file test any any - - exit + - configure + - set system syslog file test any any + - exit - name: multiple prompt, multiple answer (mandatory check for all prompts) ansible.netcommon.cli_command: command: copy sftp sftp://user@host//user/test.img check_all: true prompt: - - Confirm download operation - - Password - - Do you want to change that to the standby image + - Confirm download operation + - Password + - Do you want to change that to the standby image answer: - - y - - - - y + - y + - + - y """ RETURN = """ diff --git a/ansible_collections/ansible/netcommon/plugins/modules/cli_config.py b/ansible_collections/ansible/netcommon/plugins/modules/cli_config.py index 97190f539..abc5f84e4 100644 --- a/ansible_collections/ansible/netcommon/plugins/modules/cli_config.py +++ b/ansible_collections/ansible/netcommon/plugins/modules/cli_config.py @@ -167,7 +167,7 @@ EXAMPLES = """ - name: configure device with config with defaults enabled ansible.netcommon.cli_config: config: "{{ lookup('template', 'basic/config.j2') }}" - defaults: yes + defaults: "yes" - name: Use diff_match ansible.netcommon.cli_config: @@ -190,7 +190,7 @@ EXAMPLES = """ - name: configurable backup path ansible.netcommon.cli_config: config: "{{ lookup('template', 'basic/config.j2') }}" - backup: yes + backup: "yes" backup_options: filename: backup.cfg dir_path: /home/user diff --git a/ansible_collections/ansible/netcommon/plugins/modules/cli_restore.py b/ansible_collections/ansible/netcommon/plugins/modules/cli_restore.py new file mode 100644 index 000000000..c5ed62d64 --- /dev/null +++ b/ansible_collections/ansible/netcommon/plugins/modules/cli_restore.py @@ -0,0 +1,128 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# (c) 2024, Ansible by Red Hat, inc +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later + +from __future__ import absolute_import, division, print_function + + +__metaclass__ = type + + +DOCUMENTATION = """ +module: cli_restore +author: Sagar Paul (@KB-perByte) +short_description: Restore device configuration to network devices over network_cli +description: +- This module provides platform agnostic way of restore text based configuration to + network devices over network_cli connection plugin. +- The module uses the platforms `config replace` commands to restore + backup configuration that is already copied over to the appliance. +version_added: 6.1.0 +extends_documentation_fragment: +- ansible.netcommon.network_agnostic +options: + filename: + description: + - Filename of the backup file, present in the appliance where the restore operation + is to be performed. Check appliance for the configuration backup file name. + type: str + path: + description: + - The location in the target appliance where the file containing the backup exists. + The path and the filename together create the input to the config replace command, + - For an IOSXE appliance the path pattern is flash:// + type: str +""" + +EXAMPLES = """ +- name: Restore IOS-XE configuration + ansible.netcommon.cli_restore: + filename: backupDday.cfg + path: flash:// + +# Command fired +# ------------- +# config replace flash://backupDday.cfg force + +# Task Output +# ----------- +# +# ok: [BATMON] => changed=false +# __restore__: |- +# The rollback configlet from the last pass is listed below: +# ******** +# !List of Rollback Commands: +# Building configuration... +# Current configuration : 3781 bytes +# end +# ******** +# +# +# Rollback aborted after 5 passes +# The following commands are failed to apply to the IOS image. +# ******** +# Building configuration... +# Current configuration : 3781 bytes +# ******** +# invocation: +# module_args: +# filename: backupDday.cfg +""" + +RETURN = """ +""" + +from ansible.module_utils._text import to_text +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.connection import Connection, ConnectionError + + +def validate_args(module, device_operations): + """validate param if it is supported on the platform""" + feature_list = [] + + for feature in feature_list: + if module.params[feature]: + supports_feature = device_operations.get(f"supports_{feature}") + if supports_feature is None: + module.fail_json( + msg=f"This platform does not specify whether {feature} is supported or not. " + "Please report an issue against this platform's cliconf plugin." + ) + elif not supports_feature: + module.fail_json(msg=f"Option {feature} is not supported on this platform") + + +def main(): + """main entry point for execution""" + argument_spec = dict( + filename=dict(type="str"), + path=dict(type="str"), + ) + + module = AnsibleModule( + argument_spec=argument_spec, + ) + + result = {"changed": False} + connection = Connection(module._socket_path) + try: + running = connection.restore( + filename=module.params["filename"], + path=module.params["path"], + ) + except ConnectionError as exc: + if exc.code == -32601: # Method not found + msg = "This platform is not supported with cli_restore. Please report an issue against this platform's cliconf plugin." + module.fail_json(msg, code=exc.code) + else: + module.fail_json(msg=to_text(exc, errors="surrogate_then_replace").strip()) + result["__restore__"] = running + module.exit_json(**result) + + +if __name__ == "__main__": + main() diff --git a/ansible_collections/ansible/netcommon/plugins/modules/grpc_config.py b/ansible_collections/ansible/netcommon/plugins/modules/grpc_config.py index fbaa4deff..b289db981 100644 --- a/ansible_collections/ansible/netcommon/plugins/modules/grpc_config.py +++ b/ansible_collections/ansible/netcommon/plugins/modules/grpc_config.py @@ -78,39 +78,38 @@ notes: """ EXAMPLES = """ - - name: Merge static route config - ansible.netcommon.grpc_config: - config: - Cisco-IOS-XR-ip-static-cfg:router-static: - default-vrf: - address-family: - vrfipv4: - vrf-unicast: - vrf-prefixes: - vrf-prefix: - - prefix: "1.2.3.6" - prefix-length: 32 - vrf-route: - vrf-next-hop-table: - vrf-next-hop-next-hop-address: - - next-hop-address: "10.0.2.2" - - state: merged - - - name: Merge bgp config - ansible.netcommon.grpc_config: - config: "{{ lookup('file', 'bgp.json') }}" - state: merged - - - name: Find diff - diff: True - ansible.netcommon.grpc_config: - config: "{{ lookup('file', 'bgp_start.yml') }}" - state: merged - - - name: Backup running config - ansible.netcommon.grpc_config: - backup: yes +- name: Merge static route config + ansible.netcommon.grpc_config: + config: + Cisco-IOS-XR-ip-static-cfg:router-static: + default-vrf: + address-family: + vrfipv4: + vrf-unicast: + vrf-prefixes: + vrf-prefix: + - prefix: "1.2.3.6" + prefix-length: 32 + vrf-route: + vrf-next-hop-table: + vrf-next-hop-next-hop-address: + - next-hop-address: "10.0.2.2" + state: merged + +- name: Merge bgp config + ansible.netcommon.grpc_config: + config: "{{ lookup('file', 'bgp.json') }}" + state: merged + +- name: Find diff + diff: true + ansible.netcommon.grpc_config: + config: "{{ lookup('file', 'bgp_start.yml') }}" + state: merged + +- name: Backup running config + ansible.netcommon.grpc_config: + backup: true """ RETURN = """ diff --git a/ansible_collections/ansible/netcommon/plugins/modules/grpc_get.py b/ansible_collections/ansible/netcommon/plugins/modules/grpc_get.py index 09547b6b0..528d0ce6a 100644 --- a/ansible_collections/ansible/netcommon/plugins/modules/grpc_get.py +++ b/ansible_collections/ansible/netcommon/plugins/modules/grpc_get.py @@ -63,15 +63,15 @@ notes: """ EXAMPLES = """ - - name: Get bgp configuration data - grpc_get: - section: - Cisco-IOS-XR-ip-static-cfg:router-static: - - null - - name: run cli command - grpc_get: - command: 'show version' - display: text +- name: Get bgp configuration data + grpc_get: + section: + Cisco-IOS-XR-ip-static-cfg:router-static: + - null +- name: run cli command + grpc_get: + command: "show version" + display: text """ RETURN = """ diff --git a/ansible_collections/ansible/netcommon/plugins/modules/netconf_config.py b/ansible_collections/ansible/netcommon/plugins/modules/netconf_config.py index 23fe32b00..87c1c9c01 100644 --- a/ansible_collections/ansible/netcommon/plugins/modules/netconf_config.py +++ b/ansible_collections/ansible/netcommon/plugins/modules/netconf_config.py @@ -13,203 +13,204 @@ __metaclass__ = type DOCUMENTATION = """ module: netconf_config author: -- Leandro Lisboa Penz (@lpenz) -- Ganesh Nalawade (@ganeshrn) + - Leandro Lisboa Penz (@lpenz) + - Ganesh Nalawade (@ganeshrn) short_description: netconf device configuration description: -- Netconf is a network management protocol developed and standardized by the IETF. - It is documented in RFC 6241. -- This module allows the user to send a configuration XML file to a netconf device, - and detects if there was a configuration change. + - Netconf is a network management protocol developed and standardized by the IETF. + It is documented in RFC 6241. + - This module allows the user to send a configuration XML file to a netconf device, + and detects if there was a configuration change. version_added: 1.0.0 extends_documentation_fragment: -- ansible.netcommon.network_agnostic + - ansible.netcommon.network_agnostic options: content: description: - - The configuration data as defined by the device's data models, the value can - be either in xml string format or text format or python dictionary representation of JSON format. - - In case of json string format it will be converted to the corresponding xml string using - xmltodict library before pushing onto the remote host. - - In case the value of this option isn I(text) format the format should be supported by remote Netconf server. - - If the value of C(content) option is in I(xml) format in that case the xml value should - have I(config) as root tag. + - The configuration data as defined by the device's data models, the value can + be either in xml string format or text format or python dictionary representation of JSON format. + - In case of json string format it will be converted to the corresponding xml string using + xmltodict library before pushing onto the remote host. + - In case the value of this option isn I(text) format the format should be supported by remote Netconf server. + - If the value of C(content) option is in I(xml) format in that case the xml value should + have I(config) as root tag. type: raw aliases: - - xml + - xml target: - description: Name of the configuration datastore to be edited. - auto, uses candidate + description: + Name of the configuration datastore to be edited. - auto, uses candidate and fallback to running - candidate, edit datastore and then commit - running, edit datastore directly default: auto type: str choices: - - auto - - candidate - - running + - auto + - candidate + - running aliases: - - datastore + - datastore source_datastore: description: - - Name of the configuration datastore to use as the source to copy the configuration - to the datastore mentioned by C(target) option. The values can be either I(running), - I(candidate), I(startup) or a remote URL + - Name of the configuration datastore to use as the source to copy the configuration + to the datastore mentioned by C(target) option. The values can be either I(running), + I(candidate), I(startup) or a remote URL type: str aliases: - - source + - source format: description: - - The format of the configuration provided as value of C(content). - - In case of json string format it will be converted to the corresponding xml string using - xmltodict library before pushing onto the remote host. - - In case of I(text) format of the configuration should be supported by remote Netconf server. - - If the value of C(format) options is not given it tries to guess the data format of - C(content) option as one of I(xml) or I(json) or I(text). - - If the data format is not identified it is set to I(xml) by default. + - The format of the configuration provided as value of C(content). + - In case of json string format it will be converted to the corresponding xml string using + xmltodict library before pushing onto the remote host. + - In case of I(text) format of the configuration should be supported by remote Netconf server. + - If the value of C(format) options is not given it tries to guess the data format of + C(content) option as one of I(xml) or I(json) or I(text). + - If the data format is not identified it is set to I(xml) by default. type: str choices: - - xml - - text - - json + - xml + - text + - json lock: description: - - Instructs the module to explicitly lock the datastore specified as C(target). - By setting the option value I(always) is will explicitly lock the datastore - mentioned in C(target) option. It the value is I(never) it will not lock the - C(target) datastore. The value I(if-supported) lock the C(target) datastore - only if it is supported by the remote Netconf server. + - Instructs the module to explicitly lock the datastore specified as C(target). + By setting the option value I(always) is will explicitly lock the datastore + mentioned in C(target) option. It the value is I(never) it will not lock the + C(target) datastore. The value I(if-supported) lock the C(target) datastore + only if it is supported by the remote Netconf server. type: str default: always choices: - - never - - always - - if-supported + - never + - always + - if-supported default_operation: description: - - The default operation for rpc, valid values are I(merge), I(replace) - and I(none). If the default value is merge, the configuration data in the C(content) - option is merged at the corresponding level in the C(target) datastore. If the - value is replace the data in the C(content) option completely replaces the configuration - in the C(target) datastore. If the value is none the C(target) datastore is - unaffected by the configuration in the config option, unless and until the incoming - configuration data uses the C(operation) operation to request a different operation. + - The default operation for rpc, valid values are I(merge), I(replace) + and I(none). If the default value is merge, the configuration data in the C(content) + option is merged at the corresponding level in the C(target) datastore. If the + value is replace the data in the C(content) option completely replaces the configuration + in the C(target) datastore. If the value is none the C(target) datastore is + unaffected by the configuration in the config option, unless and until the incoming + configuration data uses the C(operation) operation to request a different operation. type: str choices: - - merge - - replace - - none + - merge + - replace + - none confirm: description: - - This argument will configure a timeout value for the commit to be confirmed - before it is automatically rolled back. If the C(confirm_commit) argument is - set to False, this argument is silently ignored. If the value of this argument - is set to 0, the commit is confirmed immediately. The remote host MUST support - :candidate and :confirmed-commit capability for this option to . + - This argument will configure a timeout value for the commit to be confirmed + before it is automatically rolled back. If the C(confirm_commit) argument is + set to False, this argument is silently ignored. If the value of this argument + is set to 0, the commit is confirmed immediately. The remote host MUST support + :candidate and :confirmed-commit capability for this option to . type: int default: 0 confirm_commit: description: - - This argument will execute commit operation on remote device. It can be used - to confirm a previous commit. + - This argument will execute commit operation on remote device. It can be used + to confirm a previous commit. type: bool default: no error_option: description: - - This option controls the netconf server action after an error occurs while editing - the configuration. - - If I(error_option=stop-on-error), abort the config edit on first error. - - If I(error_option=continue-on-error), continue to process configuration data - on error. The error is recorded and negative response is generated if any errors - occur. - - If I(error_option=rollback-on-error), rollback to the original configuration - if any error occurs. This requires the remote Netconf server to support the - I(error_option=rollback-on-error) capability. + - This option controls the netconf server action after an error occurs while editing + the configuration. + - If I(error_option=stop-on-error), abort the config edit on first error. + - If I(error_option=continue-on-error), continue to process configuration data + on error. The error is recorded and negative response is generated if any errors + occur. + - If I(error_option=rollback-on-error), rollback to the original configuration + if any error occurs. This requires the remote Netconf server to support the + I(error_option=rollback-on-error) capability. default: stop-on-error type: str choices: - - stop-on-error - - continue-on-error - - rollback-on-error + - stop-on-error + - continue-on-error + - rollback-on-error save: description: - - The C(save) argument instructs the module to save the configuration in C(target) - datastore to the startup-config if changed and if :startup capability is supported - by Netconf server. + - The C(save) argument instructs the module to save the configuration in C(target) + datastore to the startup-config if changed and if :startup capability is supported + by Netconf server. default: false type: bool backup: description: - - This argument will cause the module to create a full backup of the current C(running-config) - from the remote device before any changes are made. If the C(backup_options) - value is not given, the backup file is written to the C(backup) folder in the - playbook root directory or role root directory, if playbook is part of an ansible - role. If the directory does not exist, it is created. + - This argument will cause the module to create a full backup of the current C(running-config) + from the remote device before any changes are made. If the C(backup_options) + value is not given, the backup file is written to the C(backup) folder in the + playbook root directory or role root directory, if playbook is part of an ansible + role. If the directory does not exist, it is created. type: bool default: no delete: description: - - It instructs the module to delete the configuration from value mentioned in - C(target) datastore. + - It instructs the module to delete the configuration from value mentioned in + C(target) datastore. type: bool default: no commit: description: - - This boolean flag controls if the configuration changes should be committed - or not after editing the candidate datastore. This option is supported only - if remote Netconf server supports :candidate capability. If the value is set - to I(False) commit won't be issued after edit-config operation and user needs - to handle commit or discard-changes explicitly. + - This boolean flag controls if the configuration changes should be committed + or not after editing the candidate datastore. This option is supported only + if remote Netconf server supports :candidate capability. If the value is set + to I(False) commit won't be issued after edit-config operation and user needs + to handle commit or discard-changes explicitly. type: bool default: true validate: description: - - This boolean flag if set validates the content of datastore given in C(target) - option. For this option to work remote Netconf server should support :validate - capability. + - This boolean flag if set validates the content of datastore given in C(target) + option. For this option to work remote Netconf server should support :validate + capability. type: bool default: false backup_options: description: - - This is a dict object containing configurable options related to backup file - path. The value of this option is read only when C(backup) is set to I(yes), - if C(backup) is set to I(no) this option will be silently ignored. + - This is a dict object containing configurable options related to backup file + path. The value of this option is read only when C(backup) is set to I(yes), + if C(backup) is set to I(no) this option will be silently ignored. suboptions: filename: description: - - The filename to be used to store the backup configuration. If the filename - is not given it will be generated based on the hostname, current time and - date in format defined by _config.@ + - The filename to be used to store the backup configuration. If the filename + is not given it will be generated based on the hostname, current time and + date in format defined by _config.@ type: str dir_path: description: - - This option provides the path ending with directory name in which the backup - configuration file will be stored. If the directory does not exist it will - be first created and the filename is either the value of C(filename) or - default filename as described in C(filename) options description. If the - path value is not given in that case a I(backup) directory will be created - in the current working directory and backup configuration will be copied - in C(filename) within I(backup) directory. + - This option provides the path ending with directory name in which the backup + configuration file will be stored. If the directory does not exist it will + be first created and the filename is either the value of C(filename) or + default filename as described in C(filename) options description. If the + path value is not given in that case a I(backup) directory will be created + in the current working directory and backup configuration will be copied + in C(filename) within I(backup) directory. type: path type: dict get_filter: description: - - This argument specifies the XML string which acts as a filter to restrict the - portions of the data retrieved from the remote device when comparing the before - and after state of the device following calls to edit_config. When not specified, - the entire configuration or state data is returned for comparison depending - on the value of C(source) option. The C(get_filter) value can be either XML - string or XPath or JSON string or native python dictionary, if the filter is - in XPath format the NETCONF server running on remote host should support xpath - capability else it will result in an error. + - This argument specifies the XML string which acts as a filter to restrict the + portions of the data retrieved from the remote device when comparing the before + and after state of the device following calls to edit_config. When not specified, + the entire configuration or state data is returned for comparison depending + on the value of C(source) option. The C(get_filter) value can be either XML + string or XPath or JSON string or native python dictionary, if the filter is + in XPath format the NETCONF server running on remote host should support xpath + capability else it will result in an error. type: raw requirements: -- ncclient + - ncclient notes: -- This module requires the netconf system service be enabled on the remote device - being managed. -- This module supports devices with and without the candidate and confirmed-commit - capabilities. It will always use the safer feature. -- This module supports the use of connection=netconf + - This module requires the netconf system service be enabled on the remote device + being managed. + - This module supports devices with and without the candidate and confirmed-commit + capabilities. It will always use the safer feature. + - This module supports the use of connection=netconf """ EXAMPLES = """ @@ -248,14 +249,14 @@ EXAMPLES = """ - name: configure interface while providing different private key file path (for connection=netconf) ansible.netcommon.netconf_config: - backup: yes + backup: true register: backup_junos_location vars: ansible_private_key_file: /home/admin/.ssh/newprivatekeyfile - name: configurable backup path ansible.netcommon.netconf_config: - backup: yes + backup: true backup_options: filename: backup.cfg dir_path: /home/user @@ -263,49 +264,54 @@ EXAMPLES = """ - name: "configure using direct native format configuration (cisco iosxr)" ansible.netcommon.netconf_config: format: json - content: { - "config": { - "interface-configurations": { - "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": { - "active": "act", - "description": "test for ansible Loopback999", - "interface-name": "Loopback999" - } - } - } - } - get_filter: { - "interface-configurations": { - "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": null - } - } + content: + { + "config": + { + "interface-configurations": + { + "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", + "interface-configuration": + { + "active": "act", + "description": "test for ansible Loopback999", + "interface-name": "Loopback999", + }, + }, + }, + } + get_filter: + { + "interface-configurations": + { + "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", + "interface-configuration": null, + }, + } - name: "configure using json string format configuration (cisco iosxr)" ansible.netcommon.netconf_config: format: json content: | - { - "config": { - "interface-configurations": { - "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": { - "active": "act", - "description": "test for ansible Loopback999", - "interface-name": "Loopback999" - } - } - } - } - get_filter: | - { - "interface-configurations": { - "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": null + { + "config": { + "interface-configurations": { + "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", + "interface-configuration": { + "active": "act", + "description": "test for ansible Loopback999", + "interface-name": "Loopback999" } } - + } + } + get_filter: | + { + "interface-configurations": { + "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", + "interface-configuration": null + } + } # Make a round-trip interface description change, diff the before and after # this demonstrates the use of the native display format and several utilities @@ -329,8 +335,8 @@ EXAMPLES = """ - name: Update the description ansible.utils.update_fact: updates: - - path: pre.output.data.interfaces.interface.config.description - value: "Configured by ansible {{ 100 | random }}" + - path: pre.output.data.interfaces.interface.config.description + value: "Configured by ansible {{ 100 | random }}" register: updated - name: Apply the new configuration @@ -350,7 +356,6 @@ EXAMPLES = """ ansible.utils.fact_diff: before: "{{ pre.output.data|ansible.utils.to_paths }}" after: "{{ post.output.data|ansible.utils.to_paths }}" - # TASK [Show the differences between the pre and post configurations] ******** # --- before # +++ after @@ -368,28 +373,34 @@ EXAMPLES = """ # "interfaces.interface.config.enabled": "true", # "interfaces.interface.config.mtu": "0", # "interfaces.interface.config.name": "Ethernet2", - """ RETURN = """ server_capabilities: - description: list of capabilities of the server - returned: success - type: list - sample: ['urn:ietf:params:netconf:base:1.1','urn:ietf:params:netconf:capability:confirmed-commit:1.0','urn:ietf:params:netconf:capability:candidate:1.0'] + description: list of capabilities of the server + returned: success + type: list + sample: + [ + "urn:ietf:params:netconf:base:1.1", + "urn:ietf:params:netconf:capability:confirmed-commit:1.0", + "urn:ietf:params:netconf:capability:candidate:1.0", + ] backup_path: description: The full path to the backup file returned: when backup is yes type: str sample: /playbooks/ansible/backup/config.2016-07-16@22:28:34 diff: - description: If --diff option in enabled while running, the before and after configuration change are - returned as part of before and after key. + description: + If --diff option in enabled while running, the before and after configuration change are + returned as part of before and after key. returned: when diff is enabled type: dict sample: "after": "\n\n\n17.3R1.10...<--snip-->" "before": "\n\n\n 17.3R1.10...<--snip-->" + """ from ansible.module_utils._text import to_text diff --git a/ansible_collections/ansible/netcommon/plugins/modules/netconf_get.py b/ansible_collections/ansible/netcommon/plugins/modules/netconf_get.py index 590cc7a9a..1795bf54e 100644 --- a/ansible_collections/ansible/netcommon/plugins/modules/netconf_get.py +++ b/ansible_collections/ansible/netcommon/plugins/modules/netconf_get.py @@ -14,77 +14,77 @@ __metaclass__ = type DOCUMENTATION = """ module: netconf_get author: -- Ganesh Nalawade (@ganeshrn) -- Sven Wisotzky (@wisotzky) + - Ganesh Nalawade (@ganeshrn) + - Sven Wisotzky (@wisotzky) short_description: Fetch configuration/state data from NETCONF enabled network devices. description: -- NETCONF is a network management protocol developed and standardized by the IETF. - It is documented in RFC 6241. -- This module allows the user to fetch configuration and state data from NETCONF enabled - network devices. + - NETCONF is a network management protocol developed and standardized by the IETF. + It is documented in RFC 6241. + - This module allows the user to fetch configuration and state data from NETCONF enabled + network devices. version_added: 1.0.0 extends_documentation_fragment: -- ansible.netcommon.network_agnostic + - ansible.netcommon.network_agnostic options: source: description: - - This argument specifies the datastore from which configuration data should be - fetched. Valid values are I(running), I(candidate) and I(startup). If the C(source) - value is not set both configuration and state information are returned in response - from running datastore. + - This argument specifies the datastore from which configuration data should be + fetched. Valid values are I(running), I(candidate) and I(startup). If the C(source) + value is not set both configuration and state information are returned in response + from running datastore. type: str choices: - - running - - candidate - - startup + - running + - candidate + - startup filter: description: - - This argument specifies the string which acts as a filter to restrict the - portions of the data to be are retrieved from the remote device. If this option - is not specified entire configuration or state data is returned in result depending - on the value of C(source) option. The C(filter) value can be either XML string - or XPath or JSON string or native python dictionary, if the filter is in XPath - format the NETCONF server running on remote host should support xpath capability - else it will result in an error. If the filter is in JSON format the xmltodict library - should be installed on the control node for JSON to XML conversion. + - This argument specifies the string which acts as a filter to restrict the + portions of the data to be are retrieved from the remote device. If this option + is not specified entire configuration or state data is returned in result depending + on the value of C(source) option. The C(filter) value can be either XML string + or XPath or JSON string or native python dictionary, if the filter is in XPath + format the NETCONF server running on remote host should support xpath capability + else it will result in an error. If the filter is in JSON format the xmltodict library + should be installed on the control node for JSON to XML conversion. type: raw display: description: - - Encoding scheme to use when serializing output from the device. The option I(json) - will serialize the output as JSON data. If the option value is I(json) it requires - jxmlease to be installed on control node. The option I(pretty) is similar to - received XML response but is using human readable format (spaces, new lines). - The option value I(xml) is similar to received XML response but removes all - XML namespaces. + - Encoding scheme to use when serializing output from the device. The option I(json) + will serialize the output as JSON data. If the option value is I(json) it requires + jxmlease to be installed on control node. The option I(pretty) is similar to + received XML response but is using human readable format (spaces, new lines). + The option value I(xml) is similar to received XML response but removes all + XML namespaces. type: str choices: - - json - - pretty - - xml - - native + - json + - pretty + - xml + - native lock: description: - - Instructs the module to explicitly lock the datastore specified as C(source). - If no I(source) is defined, the I(running) datastore will be locked. By setting - the option value I(always) is will explicitly lock the datastore mentioned in - C(source) option. By setting the option value I(never) it will not lock the - C(source) datastore. The value I(if-supported) allows better interworking with - NETCONF servers, which do not support the (un)lock operation for all supported - datastores. + - Instructs the module to explicitly lock the datastore specified as C(source). + If no I(source) is defined, the I(running) datastore will be locked. By setting + the option value I(always) is will explicitly lock the datastore mentioned in + C(source) option. By setting the option value I(never) it will not lock the + C(source) datastore. The value I(if-supported) allows better interworking with + NETCONF servers, which do not support the (un)lock operation for all supported + datastores. type: str default: never choices: - - never - - always - - if-supported + - never + - always + - if-supported requirements: -- ncclient (>=v0.5.2) -- jxmlease (for display=json) -- xmltodict (for display=native) + - ncclient (>=v0.5.2) + - jxmlease (for display=json) + - xmltodict (for display=native) notes: -- This module requires the NETCONF system service be enabled on the remote device - being managed. -- This module supports the use of connection=netconf + - This module requires the NETCONF system service be enabled on the remote device + being managed. + - This module supports the use of connection=netconf """ EXAMPLES = """ @@ -139,12 +139,12 @@ EXAMPLES = """ - name: "get configuration with json filter string and native output (using xmltodict)" netconf_get: filter: | - { - "interface-configurations": { - "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": null - } - } + { + "interface-configurations": { + "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", + "interface-configuration": null + } + } display: native - name: Define the Cisco IOSXR interface filter @@ -162,16 +162,17 @@ EXAMPLES = """ - name: "get configuration with direct native filter type" ansible.netcommon.netconf_get: - filter: { - "interface-configurations": { + filter: + { + "interface-configurations": + { "@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg", - "interface-configuration": null + "interface-configuration": null, + }, } - } display: native register: result - # Make a round-trip interface description change, diff the before and after # this demonstrates the use of the native display format and several utilities # from the ansible.utils collection @@ -194,8 +195,8 @@ EXAMPLES = """ - name: Update the description ansible.utils.update_fact: updates: - - path: pre.output.data.interfaces.interface.config.description - value: "Configured by ansible {{ 100 | random }}" + - path: pre.output.data.interfaces.interface.config.description + value: "Configured by ansible {{ 100 | random }}" register: updated - name: Apply the new configuration @@ -215,7 +216,6 @@ EXAMPLES = """ ansible.utils.fact_diff: before: "{{ pre.output.data|ansible.utils.to_paths }}" after: "{{ post.output.data|ansible.utils.to_paths }}" - # TASK [Show the differences between the pre and post configurations] ******** # --- before # +++ after @@ -238,25 +238,27 @@ EXAMPLES = """ RETURN = """ stdout: description: The raw XML string containing configuration or state data - received from the underlying ncclient library. + received from the underlying ncclient library. returned: always apart from low-level errors (such as action plugin) type: str - sample: '...' + sample: "..." stdout_lines: description: The value of stdout split into a list returned: always apart from low-level errors (such as action plugin) type: list - sample: ['...', '...'] + sample: ["...", "..."] output: - description: Based on the value of display option will return either the set of - transformed XML to JSON format from the RPC response with type dict - or pretty XML string response (human-readable) or response with - namespace removed from XML string. - returned: If the display format is selected as I(json) it is returned as dict type - and the conversion is done using jxmlease python library. If the display - format is selected as I(native) it is returned as dict type and the conversion - is done using xmltodict python library. If the display format is xml or pretty - it is returned as a string apart from low-level errors (such as action plugin). + description: + Based on the value of display option will return either the set of + transformed XML to JSON format from the RPC response with type dict + or pretty XML string response (human-readable) or response with + namespace removed from XML string. + returned: + If the display format is selected as I(json) it is returned as dict type + and the conversion is done using jxmlease python library. If the display + format is selected as I(native) it is returned as dict type and the conversion + is done using xmltodict python library. If the display format is xml or pretty + it is returned as a string apart from low-level errors (such as action plugin). type: complex contains: formatted_output: diff --git a/ansible_collections/ansible/netcommon/plugins/modules/telnet.py b/ansible_collections/ansible/netcommon/plugins/modules/telnet.py index 65311eede..41abf23bb 100644 --- a/ansible_collections/ansible/netcommon/plugins/modules/telnet.py +++ b/ansible_collections/ansible/netcommon/plugins/modules/telnet.py @@ -13,87 +13,87 @@ DOCUMENTATION = """ module: telnet short_description: Executes a low-down and dirty telnet command description: -- Executes a low-down and dirty telnet command, not going through the module subsystem. -- This is mostly to be used for enabling ssh on devices that only have telnet enabled - by default. + - Executes a low-down and dirty telnet command, not going through the module subsystem. + - This is mostly to be used for enabling ssh on devices that only have telnet enabled + by default. version_added: 1.0.0 options: command: description: - - List of commands to be executed in the telnet session. + - List of commands to be executed in the telnet session. required: true type: list elements: str aliases: - - commands + - commands host: description: - - The host/target on which to execute the command + - The host/target on which to execute the command required: false type: str default: remote_addr user: description: - - The user for login + - The user for login required: false type: str default: remote_user password: description: - - The password for login + - The password for login type: str port: description: - - Remote port to use + - Remote port to use type: int default: 23 timeout: description: - - timeout for remote operations + - timeout for remote operations type: int default: 120 prompts: description: - - List of prompts expected before sending next command + - List of prompts expected before sending next command required: false type: list elements: str default: - - $ + - $ login_prompt: description: - - Login or username prompt to expect + - Login or username prompt to expect required: false type: str - default: 'login: ' + default: "login: " password_prompt: description: - - Login or username prompt to expect + - Login or username prompt to expect required: false type: str - default: 'Password: ' + default: "Password: " pause: description: - - Seconds to pause between each command issued + - Seconds to pause between each command issued required: false type: int default: 1 send_newline: description: - - Sends a newline character upon successful connection to start the terminal session. + - Sends a newline character upon successful connection to start the terminal session. required: false type: bool default: false crlf: description: - - Sends a CRLF (Carrage Return) instead of just a LF (Line Feed). + - Sends a CRLF (Carrage Return) instead of just a LF (Line Feed). required: false type: bool default: false notes: -- The C(environment) keyword does not work with this task + - The C(environment) keyword does not work with this task author: -- Ansible Core Team + - Ansible Core Team """ EXAMPLES = """ @@ -101,30 +101,30 @@ EXAMPLES = """ ansible.netcommon.telnet: user: cisco password: cisco - login_prompt: 'Username: ' + login_prompt: "Username: " prompts: - - '[>#]' + - "[>#]" command: - - terminal length 0 - - configure terminal - - hostname ios01 + - terminal length 0 + - configure terminal + - hostname ios01 - name: run show commands ansible.netcommon.telnet: user: cisco password: cisco - login_prompt: 'Username: ' + login_prompt: "Username: " prompts: - - '[>#]' + - "[>#]" command: - - terminal length 0 - - show version + - terminal length 0 + - show version """ RETURN = """ output: - description: output of each command is an element in this list - type: list - returned: always - sample: [ 'success', 'success', '', 'warning .. something' ] + description: output of each command is an element in this list + type: list + returned: always + sample: ["success", "success", "", "warning .. something"] """ diff --git a/ansible_collections/ansible/netcommon/plugins/plugin_utils/cliconf_base.py b/ansible_collections/ansible/netcommon/plugins/plugin_utils/cliconf_base.py index 30b4aa550..b3c1941df 100644 --- a/ansible_collections/ansible/netcommon/plugins/plugin_utils/cliconf_base.py +++ b/ansible_collections/ansible/netcommon/plugins/plugin_utils/cliconf_base.py @@ -215,6 +215,7 @@ class CliconfBase(CliconfBaseBase): replace=None, diff=False, comment=None, + err_responses=None, ): """Loads the candidate configuration into the network device @@ -230,10 +231,12 @@ class CliconfBase(CliconfBaseBase): configuration should be pushed in the running configuration or discarded. :param replace: If the value is True/False it indicates if running configuration should be completely - replace by candidate configuration. If can also take configuration file path as value, + replace by candidate configuration. It can also take configuration file path as value, the file in this case should be present on the remote host in the mentioned path as a prerequisite. - :param comment: Commit comment provided it is supported by remote host + :param comment: Commit comment provided it is supported by remote host. + :param err_responses: A list of error regexes that will be used to evaluate the responses received + from executing the candidate command(s). :return: Returns a json string with contains configuration applied on remote host, the returned response on executing configuration commands and platform relevant data. { diff --git a/ansible_collections/ansible/netcommon/plugins/plugin_utils/compat/telnetlib.py b/ansible_collections/ansible/netcommon/plugins/plugin_utils/compat/telnetlib.py index 766ddf018..f237b541b 100644 --- a/ansible_collections/ansible/netcommon/plugins/plugin_utils/compat/telnetlib.py +++ b/ansible_collections/ansible/netcommon/plugins/plugin_utils/compat/telnetlib.py @@ -34,7 +34,6 @@ To do: """ - # Imported modules import selectors import socket @@ -52,99 +51,98 @@ DEBUGLEVEL = 0 TELNET_PORT = 23 # Telnet protocol characters (don't change) -IAC = bytes([255]) # "Interpret As Command" +IAC = bytes([255]) # "Interpret As Command" DONT = bytes([254]) -DO = bytes([253]) +DO = bytes([253]) WONT = bytes([252]) WILL = bytes([251]) theNULL = bytes([0]) -SE = bytes([240]) # Subnegotiation End +SE = bytes([240]) # Subnegotiation End NOP = bytes([241]) # No Operation -DM = bytes([242]) # Data Mark +DM = bytes([242]) # Data Mark BRK = bytes([243]) # Break -IP = bytes([244]) # Interrupt process -AO = bytes([245]) # Abort output +IP = bytes([244]) # Interrupt process +AO = bytes([245]) # Abort output AYT = bytes([246]) # Are You There -EC = bytes([247]) # Erase Character -EL = bytes([248]) # Erase Line -GA = bytes([249]) # Go Ahead -SB = bytes([250]) # Subnegotiation Begin +EC = bytes([247]) # Erase Character +EL = bytes([248]) # Erase Line +GA = bytes([249]) # Go Ahead +SB = bytes([250]) # Subnegotiation Begin # Telnet protocol options code (don't change) # These ones all come from arpa/telnet.h -BINARY = bytes([0]) # 8-bit data path -ECHO = bytes([1]) # echo -RCP = bytes([2]) # prepare to reconnect -SGA = bytes([3]) # suppress go ahead -NAMS = bytes([4]) # approximate message size -STATUS = bytes([5]) # give status -TM = bytes([6]) # timing mark -RCTE = bytes([7]) # remote controlled transmission and echo -NAOL = bytes([8]) # negotiate about output line width -NAOP = bytes([9]) # negotiate about output page size -NAOCRD = bytes([10]) # negotiate about CR disposition -NAOHTS = bytes([11]) # negotiate about horizontal tabstops -NAOHTD = bytes([12]) # negotiate about horizontal tab disposition -NAOFFD = bytes([13]) # negotiate about formfeed disposition -NAOVTS = bytes([14]) # negotiate about vertical tab stops -NAOVTD = bytes([15]) # negotiate about vertical tab disposition -NAOLFD = bytes([16]) # negotiate about output LF disposition -XASCII = bytes([17]) # extended ascii character set -LOGOUT = bytes([18]) # force logout -BM = bytes([19]) # byte macro -DET = bytes([20]) # data entry terminal -SUPDUP = bytes([21]) # supdup protocol -SUPDUPOUTPUT = bytes([22]) # supdup output -SNDLOC = bytes([23]) # send location -TTYPE = bytes([24]) # terminal type -EOR = bytes([25]) # end or record -TUID = bytes([26]) # TACACS user identification -OUTMRK = bytes([27]) # output marking -TTYLOC = bytes([28]) # terminal location number -VT3270REGIME = bytes([29]) # 3270 regime -X3PAD = bytes([30]) # X.3 PAD -NAWS = bytes([31]) # window size -TSPEED = bytes([32]) # terminal speed -LFLOW = bytes([33]) # remote flow control -LINEMODE = bytes([34]) # Linemode option -XDISPLOC = bytes([35]) # X Display Location -OLD_ENVIRON = bytes([36]) # Old - Environment variables -AUTHENTICATION = bytes([37]) # Authenticate -ENCRYPT = bytes([38]) # Encryption option -NEW_ENVIRON = bytes([39]) # New - Environment variables +BINARY = bytes([0]) # 8-bit data path +ECHO = bytes([1]) # echo +RCP = bytes([2]) # prepare to reconnect +SGA = bytes([3]) # suppress go ahead +NAMS = bytes([4]) # approximate message size +STATUS = bytes([5]) # give status +TM = bytes([6]) # timing mark +RCTE = bytes([7]) # remote controlled transmission and echo +NAOL = bytes([8]) # negotiate about output line width +NAOP = bytes([9]) # negotiate about output page size +NAOCRD = bytes([10]) # negotiate about CR disposition +NAOHTS = bytes([11]) # negotiate about horizontal tabstops +NAOHTD = bytes([12]) # negotiate about horizontal tab disposition +NAOFFD = bytes([13]) # negotiate about formfeed disposition +NAOVTS = bytes([14]) # negotiate about vertical tab stops +NAOVTD = bytes([15]) # negotiate about vertical tab disposition +NAOLFD = bytes([16]) # negotiate about output LF disposition +XASCII = bytes([17]) # extended ascii character set +LOGOUT = bytes([18]) # force logout +BM = bytes([19]) # byte macro +DET = bytes([20]) # data entry terminal +SUPDUP = bytes([21]) # supdup protocol +SUPDUPOUTPUT = bytes([22]) # supdup output +SNDLOC = bytes([23]) # send location +TTYPE = bytes([24]) # terminal type +EOR = bytes([25]) # end or record +TUID = bytes([26]) # TACACS user identification +OUTMRK = bytes([27]) # output marking +TTYLOC = bytes([28]) # terminal location number +VT3270REGIME = bytes([29]) # 3270 regime +X3PAD = bytes([30]) # X.3 PAD +NAWS = bytes([31]) # window size +TSPEED = bytes([32]) # terminal speed +LFLOW = bytes([33]) # remote flow control +LINEMODE = bytes([34]) # Linemode option +XDISPLOC = bytes([35]) # X Display Location +OLD_ENVIRON = bytes([36]) # Old - Environment variables +AUTHENTICATION = bytes([37]) # Authenticate +ENCRYPT = bytes([38]) # Encryption option +NEW_ENVIRON = bytes([39]) # New - Environment variables # the following ones come from # http://www.iana.org/assignments/telnet-options # Unfortunately, that document does not assign identifiers # to all of them, so we are making them up -TN3270E = bytes([40]) # TN3270E -XAUTH = bytes([41]) # XAUTH -CHARSET = bytes([42]) # CHARSET -RSP = bytes([43]) # Telnet Remote Serial Port -COM_PORT_OPTION = bytes([44]) # Com Port Control Option -SUPPRESS_LOCAL_ECHO = bytes([45]) # Telnet Suppress Local Echo -TLS = bytes([46]) # Telnet Start TLS -KERMIT = bytes([47]) # KERMIT -SEND_URL = bytes([48]) # SEND-URL -FORWARD_X = bytes([49]) # FORWARD_X -PRAGMA_LOGON = bytes([138]) # TELOPT PRAGMA LOGON -SSPI_LOGON = bytes([139]) # TELOPT SSPI LOGON -PRAGMA_HEARTBEAT = bytes([140]) # TELOPT PRAGMA HEARTBEAT -EXOPL = bytes([255]) # Extended-Options-List +TN3270E = bytes([40]) # TN3270E +XAUTH = bytes([41]) # XAUTH +CHARSET = bytes([42]) # CHARSET +RSP = bytes([43]) # Telnet Remote Serial Port +COM_PORT_OPTION = bytes([44]) # Com Port Control Option +SUPPRESS_LOCAL_ECHO = bytes([45]) # Telnet Suppress Local Echo +TLS = bytes([46]) # Telnet Start TLS +KERMIT = bytes([47]) # KERMIT +SEND_URL = bytes([48]) # SEND-URL +FORWARD_X = bytes([49]) # FORWARD_X +PRAGMA_LOGON = bytes([138]) # TELOPT PRAGMA LOGON +SSPI_LOGON = bytes([139]) # TELOPT SSPI LOGON +PRAGMA_HEARTBEAT = bytes([140]) # TELOPT PRAGMA HEARTBEAT +EXOPL = bytes([255]) # Extended-Options-List NOOPT = bytes([0]) # poll/select have the advantage of not requiring any extra file descriptor, # contrarily to epoll/kqueue (also, they require a single syscall). -if hasattr(selectors, 'PollSelector'): +if hasattr(selectors, "PollSelector"): _TelnetSelector = selectors.PollSelector else: _TelnetSelector = selectors.SelectSelector class Telnet: - """Telnet interface class. An instance of this class represents a connection to a telnet @@ -198,8 +196,7 @@ class Telnet: """ - def __init__(self, host=None, port=0, - timeout=socket._GLOBAL_DEFAULT_TIMEOUT): + def __init__(self, host=None, port=0, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): """Constructor. When called without arguments, create an unconnected instance. @@ -211,13 +208,13 @@ class Telnet: self.port = port self.timeout = timeout self.sock = None - self.rawq = b'' + self.rawq = b"" self.irawq = 0 - self.cookedq = b'' + self.cookedq = b"" self.eof = 0 - self.iacseq = b'' # Buffer for IAC sequence. - self.sb = 0 # flag for SB and SE sequence. - self.sbdataq = b'' + self.iacseq = b"" # Buffer for IAC sequence. + self.sb = 0 # flag for SB and SE sequence. + self.sbdataq = b"" self.option_callback = None if host is not None: self.open(host, port, timeout) @@ -251,7 +248,7 @@ class Telnet: """ if self.debuglevel > 0: - print('Telnet(%s,%s):' % (self.host, self.port), end=' ') + print("Telnet(%s,%s):" % (self.host, self.port), end=" ") if args: print(msg % args) else: @@ -270,7 +267,7 @@ class Telnet: sock = self.sock self.sock = None self.eof = True - self.iacseq = b'' + self.iacseq = b"" self.sb = 0 if sock: sock.close() @@ -291,7 +288,7 @@ class Telnet: """ if IAC in buffer: - buffer = buffer.replace(IAC, IAC+IAC) + buffer = buffer.replace(IAC, IAC + IAC) sys.audit("telnetlib.Telnet.write", self, buffer) self.msg("send %r", buffer) self.sock.sendall(buffer) @@ -308,7 +305,7 @@ class Telnet: self.process_rawq() i = self.cookedq.find(match) if i >= 0: - i = i+n + i = i + n buf = self.cookedq[:i] self.cookedq = self.cookedq[i:] return buf @@ -318,12 +315,12 @@ class Telnet: selector.register(self, selectors.EVENT_READ) while not self.eof: if selector.select(timeout): - i = max(0, len(self.cookedq)-n) + i = max(0, len(self.cookedq) - n) self.fill_rawq() self.process_rawq() i = self.cookedq.find(match, i) if i >= 0: - i = i+n + i = i + n buf = self.cookedq[:i] self.cookedq = self.cookedq[i:] return buf @@ -340,7 +337,7 @@ class Telnet: self.fill_rawq() self.process_rawq() buf = self.cookedq - self.cookedq = b'' + self.cookedq = b"" return buf def read_some(self): @@ -355,7 +352,7 @@ class Telnet: self.fill_rawq() self.process_rawq() buf = self.cookedq - self.cookedq = b'' + self.cookedq = b"" return buf def read_very_eager(self): @@ -405,9 +402,9 @@ class Telnet: """ buf = self.cookedq - self.cookedq = b'' + self.cookedq = b"" if not buf and self.eof and not self.rawq: - raise EOFError('telnet connection closed') + raise EOFError("telnet connection closed") return buf def read_sb_data(self): @@ -419,7 +416,7 @@ class Telnet: """ buf = self.sbdataq - self.sbdataq = b'' + self.sbdataq = b"" return buf def set_option_negotiation_callback(self, callback): @@ -433,7 +430,7 @@ class Telnet: the midst of an IAC sequence. """ - buf = [b'', b''] + buf = [b"", b""] try: while self.rawq: c = self.rawq_getchar() @@ -453,17 +450,17 @@ class Telnet: self.iacseq += c continue - self.iacseq = b'' + self.iacseq = b"" if c == IAC: buf[self.sb] = buf[self.sb] + c else: - if c == SB: # SB ... SE start. + if c == SB: # SB ... SE start. self.sb = 1 - self.sbdataq = b'' + self.sbdataq = b"" elif c == SE: self.sb = 0 self.sbdataq = self.sbdataq + buf[1] - buf[1] = b'' + buf[1] = b"" if self.option_callback: # Callback is supposed to look into # the sbdataq @@ -472,27 +469,27 @@ class Telnet: # We can't offer automatic processing of # suboptions. Alas, we should not get any # unless we did a WILL/DO before. - self.msg('IAC %d not recognized' % ord(c)) + self.msg("IAC %d not recognized" % ord(c)) elif len(self.iacseq) == 2: cmd = self.iacseq[1:2] - self.iacseq = b'' + self.iacseq = b"" opt = c if cmd in (DO, DONT): - self.msg('IAC %s %d', - cmd == DO and 'DO' or 'DONT', ord(opt)) + self.msg("IAC %s %d", cmd == DO and "DO" or "DONT", ord(opt)) if self.option_callback: self.option_callback(self.sock, cmd, opt) else: self.sock.sendall(IAC + WONT + opt) elif cmd in (WILL, WONT): - self.msg('IAC %s %d', - cmd == WILL and 'WILL' or 'WONT', ord(opt)) + self.msg( + "IAC %s %d", cmd == WILL and "WILL" or "WONT", ord(opt) + ) if self.option_callback: self.option_callback(self.sock, cmd, opt) else: self.sock.sendall(IAC + DONT + opt) - except EOFError: # raised by self.rawq_getchar() - self.iacseq = b'' # Reset on EOF + except EOFError: # raised by self.rawq_getchar() + self.iacseq = b"" # Reset on EOF self.sb = 0 self.cookedq = self.cookedq + buf[0] self.sbdataq = self.sbdataq + buf[1] @@ -508,10 +505,10 @@ class Telnet: self.fill_rawq() if self.eof: raise EOFError - c = self.rawq[self.irawq:self.irawq+1] + c = self.rawq[self.irawq : self.irawq + 1] self.irawq = self.irawq + 1 if self.irawq >= len(self.rawq): - self.rawq = b'' + self.rawq = b"" self.irawq = 0 return c @@ -523,13 +520,13 @@ class Telnet: """ if self.irawq >= len(self.rawq): - self.rawq = b'' + self.rawq = b"" self.irawq = 0 # The buffer size should be fairly small so as to avoid quadratic # behavior in process_rawq() above buf = self.sock.recv(50) self.msg("recv %r", buf) - self.eof = (not buf) + self.eof = not buf self.rawq = self.rawq + buf def sock_avail(self): @@ -553,13 +550,13 @@ class Telnet: try: text = self.read_eager() except EOFError: - print('*** Connection closed by remote host ***') + print("*** Connection closed by remote host ***") return if text: - sys.stdout.write(text.decode('ascii')) + sys.stdout.write(text.decode("ascii")) sys.stdout.flush() elif key.fileobj is sys.stdin: - line = sys.stdin.readline().encode('ascii') + line = sys.stdin.readline().encode("ascii") if not line: return self.write(line) @@ -567,12 +564,13 @@ class Telnet: def mt_interact(self): """Multithreaded version of interact().""" import _thread + _thread.start_new_thread(self.listener, ()) while 1: line = sys.stdin.readline() if not line: break - self.write(line.encode('ascii')) + self.write(line.encode("ascii")) def listener(self): """Helper for mt_interact() -- this executes in the other thread.""" @@ -580,10 +578,10 @@ class Telnet: try: data = self.read_eager() except EOFError: - print('*** Connection closed by remote host ***') + print("*** Connection closed by remote host ***") return if data: - sys.stdout.write(data.decode('ascii')) + sys.stdout.write(data.decode("ascii")) else: sys.stdout.flush() @@ -614,7 +612,8 @@ class Telnet: indices = range(len(list)) for i in indices: if not hasattr(list[i], "search"): - if not re: import re + if not re: + import re list[i] = re.compile(list[i]) if timeout is not None: deadline = _time() + timeout @@ -659,10 +658,10 @@ def test(): """ debuglevel = 0 - while sys.argv[1:] and sys.argv[1] == '-d': - debuglevel = debuglevel+1 + while sys.argv[1:] and sys.argv[1] == "-d": + debuglevel = debuglevel + 1 del sys.argv[1] - host = 'localhost' + host = "localhost" if sys.argv[1:]: host = sys.argv[1] port = 0 @@ -671,11 +670,12 @@ def test(): try: port = int(portstr) except ValueError: - port = socket.getservbyname(portstr, 'tcp') + port = socket.getservbyname(portstr, "tcp") with Telnet() as tn: tn.set_debuglevel(debuglevel) tn.open(host, port, timeout=0.5) tn.interact() -if __name__ == '__main__': + +if __name__ == "__main__": test() diff --git a/ansible_collections/ansible/netcommon/plugins/plugin_utils/pop_ace.py b/ansible_collections/ansible/netcommon/plugins/plugin_utils/pop_ace.py index d15f30e72..e55a15387 100644 --- a/ansible_collections/ansible/netcommon/plugins/plugin_utils/pop_ace.py +++ b/ansible_collections/ansible/netcommon/plugins/plugin_utils/pop_ace.py @@ -36,29 +36,56 @@ def check_match(ace, match_criteria, match_all, name, afi): for k, v in match_criteria.items(): if v: if k not in ["source", "destination", "acl_name", "afi"]: - check_arr.append(True) if ace.get(k, "NA") == match_criteria.get( - k, - ) else check_arr.append(False) + ( + check_arr.append(True) + if ace.get(k, "NA") + == match_criteria.get( + k, + ) + else check_arr.append(False) + ) elif k == "acl_name": - check_arr.append(True) if name == match_criteria.get( - k, - ) else check_arr.append(False) + ( + check_arr.append(True) + if name + == match_criteria.get( + k, + ) + else check_arr.append(False) + ) elif k == "afi": - check_arr.append(True) if afi == match_criteria.get( - k, - ) else check_arr.append(False) + ( + check_arr.append(True) + if afi + == match_criteria.get( + k, + ) + else check_arr.append(False) + ) else: # for source and destination address _sub = "source" if "source" in k else "destination" _valid = [] - _valid.append(True) if ace.get(_sub, {}).get("address", "NA") == match_criteria.get( - k, - ) else _valid.append(False) - _valid.append(True) if ace.get(_sub, {}).get("host", "NA") == match_criteria.get( - k, - ) else _valid.append(False) - _valid.append(True) if ace.get(_sub, {}).get("any", "NA") == ( - match_criteria.get(k) == "any" - ) else _valid.append(False) + ( + _valid.append(True) + if ace.get(_sub, {}).get("address", "NA") + == match_criteria.get( + k, + ) + else _valid.append(False) + ) + ( + _valid.append(True) + if ace.get(_sub, {}).get("host", "NA") + == match_criteria.get( + k, + ) + else _valid.append(False) + ) + ( + _valid.append(True) + if ace.get(_sub, {}).get("any", "NA") == (match_criteria.get(k) == "any") + else _valid.append(False) + ) check_arr.append(any(_valid)) if match_all: # forces all criteria to match diff --git a/ansible_collections/ansible/netcommon/plugins/sub_plugins/cli_parser/content_templates_parser.py b/ansible_collections/ansible/netcommon/plugins/sub_plugins/cli_parser/content_templates_parser.py index 8bc47f781..6d837b9df 100644 --- a/ansible_collections/ansible/netcommon/plugins/sub_plugins/cli_parser/content_templates_parser.py +++ b/ansible_collections/ansible/netcommon/plugins/sub_plugins/cli_parser/content_templates_parser.py @@ -5,6 +5,7 @@ This is the content templates parser for use with the cli_parse module and actio The parser functionality used by the network resource modules is leveraged here. """ + from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/ansible/netcommon/test-requirements.txt b/ansible_collections/ansible/netcommon/test-requirements.txt index ec27173ee..518b54423 100644 --- a/ansible_collections/ansible/netcommon/test-requirements.txt +++ b/ansible_collections/ansible/netcommon/test-requirements.txt @@ -1,15 +1,19 @@ # For ansible-tox-linters -black==23.3.0 ; python_version > '3.7' +black==23.3.0 flake8 yamllint # Unit test runner -pytest-ansible ; python_version >= '3.7' -git+https://github.com/ansible-community/pytest-ansible-units.git ; python_version < '3.7' +pytest-ansible pytest-xdist +pytest-cov # The following are 3rd party libs for cli_parse ntc_templates -# 21.4 changed the output of an error message we check in tests +# 21.4 changed the output of an error message we checked in the tests pyats >= 21.4 ; python_version < '3.11' -genie >= 21.4 ; python_version < '3.11' +# fix genie version for python version less than 3.11 +genie == 24.3 ; python_version < '3.11' +# use the latest genie version for every Python version greater than 3.11 +genie +passlib diff --git a/ansible_collections/ansible/netcommon/tests/config.yml b/ansible_collections/ansible/netcommon/tests/config.yml new file mode 100644 index 000000000..c26ea5966 --- /dev/null +++ b/ansible_collections/ansible/netcommon/tests/config.yml @@ -0,0 +1,3 @@ +--- +modules: + python_requires: ">=3.9" diff --git a/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.12.txt b/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.12.txt deleted file mode 100644 index 3fd7253af..000000000 --- a/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.12.txt +++ /dev/null @@ -1,5 +0,0 @@ -plugins/action/netconf.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/action/network.py action-plugin-docs # base class for network action plugins -plugins/action/grpc.py action-plugin-docs # base class for grpc action plugins -plugins/plugin_utils/compat/telnetlib.py pep8!skip # vendored file -plugins/plugin_utils/compat/telnetlib.py pylint!skip # vendored file diff --git a/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.13.txt b/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.13.txt deleted file mode 100644 index 3fd7253af..000000000 --- a/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.13.txt +++ /dev/null @@ -1,5 +0,0 @@ -plugins/action/netconf.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/action/network.py action-plugin-docs # base class for network action plugins -plugins/action/grpc.py action-plugin-docs # base class for grpc action plugins -plugins/plugin_utils/compat/telnetlib.py pep8!skip # vendored file -plugins/plugin_utils/compat/telnetlib.py pylint!skip # vendored file diff --git a/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.18.txt b/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.18.txt new file mode 100644 index 000000000..3fd7253af --- /dev/null +++ b/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.18.txt @@ -0,0 +1,5 @@ +plugins/action/netconf.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` +plugins/action/network.py action-plugin-docs # base class for network action plugins +plugins/action/grpc.py action-plugin-docs # base class for grpc action plugins +plugins/plugin_utils/compat/telnetlib.py pep8!skip # vendored file +plugins/plugin_utils/compat/telnetlib.py pylint!skip # vendored file diff --git a/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.9.txt b/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.9.txt deleted file mode 100644 index 27c170503..000000000 --- a/ansible_collections/ansible/netcommon/tests/sanity/ignore-2.9.txt +++ /dev/null @@ -1,7 +0,0 @@ -plugins/action/netconf.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/action/network.py action-plugin-docs # base class for network action plugins -plugins/action/grpc.py action-plugin-docs # base class for grpc action plugins -plugins/plugin_utils/compat/telnetlib.py future-import-boilerplate!skip # vendored file -plugins/plugin_utils/compat/telnetlib.py metaclass-boilerplate!skip # vendored file -plugins/plugin_utils/compat/telnetlib.py pep8!skip # vendored file -plugins/plugin_utils/compat/telnetlib.py pylint!skip # vendored file diff --git a/ansible_collections/ansible/netcommon/tests/unit/mock/procenv.py b/ansible_collections/ansible/netcommon/tests/unit/mock/procenv.py index d6f69f4d6..f480dbd57 100644 --- a/ansible_collections/ansible/netcommon/tests/unit/mock/procenv.py +++ b/ansible_collections/ansible/netcommon/tests/unit/mock/procenv.py @@ -11,10 +11,10 @@ __metaclass__ = type import json import sys -import unittest from contextlib import contextmanager from io import BytesIO, StringIO +from unittest import TestCase from ansible.module_utils._text import to_bytes from ansible.module_utils.six import PY3 @@ -64,7 +64,7 @@ def swap_stdout(): sys.stdout = old_stdout -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self, module_args=None): if module_args is None: module_args = { diff --git a/ansible_collections/ansible/netcommon/tests/unit/module_utils/network/common/test_parsing.py b/ansible_collections/ansible/netcommon/tests/unit/module_utils/network/common/test_parsing.py index dac54188e..b5aafd443 100644 --- a/ansible_collections/ansible/netcommon/tests/unit/module_utils/network/common/test_parsing.py +++ b/ansible_collections/ansible/netcommon/tests/unit/module_utils/network/common/test_parsing.py @@ -9,7 +9,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.parsing import ( Conditional, @@ -22,7 +22,7 @@ c2 = Conditional("result[2] not == result_2") c3 = Conditional("result[0] neq not result_1") -class TestNotKeyword(unittest.TestCase): +class TestNotKeyword(TestCase): def test_negate_instance_variable_assignment(self): assert c1.negate is False and c2.negate is True diff --git a/ansible_collections/ansible/netcommon/tests/unit/modules/utils.py b/ansible_collections/ansible/netcommon/tests/unit/modules/utils.py index c524e2ab2..92639df70 100644 --- a/ansible_collections/ansible/netcommon/tests/unit/modules/utils.py +++ b/ansible_collections/ansible/netcommon/tests/unit/modules/utils.py @@ -3,8 +3,8 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import json -import unittest +from unittest import TestCase from unittest.mock import patch from ansible.module_utils import basic @@ -40,7 +40,7 @@ def fail_json(*args, **kwargs): raise AnsibleFailJson(kwargs) -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self): self.mock_module = patch.multiple( basic.AnsibleModule, exit_json=exit_json, fail_json=fail_json diff --git a/ansible_collections/ansible/netcommon/tests/unit/plugins/cli_parsers/test_pyats_parser.py b/ansible_collections/ansible/netcommon/tests/unit/plugins/cli_parsers/test_pyats_parser.py index d980f25d0..50bfd2574 100644 --- a/ansible_collections/ansible/netcommon/tests/unit/plugins/cli_parsers/test_pyats_parser.py +++ b/ansible_collections/ansible/netcommon/tests/unit/plugins/cli_parsers/test_pyats_parser.py @@ -8,7 +8,8 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import os -import unittest + +from unittest import TestCase import pytest @@ -20,7 +21,7 @@ from ansible_collections.ansible.netcommon.plugins.sub_plugins.cli_parser.pyats_ pyats = pytest.importorskip("pyats") -class TestPyatsParser(unittest.TestCase): +class TestPyatsParser(TestCase): _nxos_parsed_output = { "platform": { "hardware": { diff --git a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/comp_type5.py b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/comp_type5.py index 9bcc0ba35..0a71bfafa 100644 --- a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/comp_type5.py +++ b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/comp_type5.py @@ -8,12 +8,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.netcommon.plugins.plugin_utils.comp_type5 import comp_type5 -class TestComp_type5(unittest.TestCase): +class TestComp_type5(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_hash_salt.py b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_hash_salt.py index 54ffbfb19..b69a76e7f 100644 --- a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_hash_salt.py +++ b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_hash_salt.py @@ -8,12 +8,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.netcommon.plugins.plugin_utils.hash_salt import hash_salt -class Testhash_salt(unittest.TestCase): +class Testhash_salt(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_network.py b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_network.py index a3b50ef83..29d035c78 100644 --- a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_network.py +++ b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_network.py @@ -20,8 +20,8 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import os -import sys -import unittest + +from unittest import TestCase from ansible_collections.ansible.netcommon.plugins.plugin_utils.comp_type5 import comp_type5 from ansible_collections.ansible.netcommon.plugins.plugin_utils.hash_salt import hash_salt @@ -37,11 +37,7 @@ with open(os.path.join(fixture_path, "show_vlans_xml_output.txt")) as f: output_xml = f.read() -class TestNetworkParseFilter(unittest.TestCase): - @unittest.skipIf( - sys.version_info[:2] == (2, 6), - "XPath expression not supported in this version", - ) +class TestNetworkParseFilter(TestCase): def test_parse_xml_to_list_of_dict(self): spec_file_path = os.path.join(fixture_path, "show_vlans_xml_spec.yml") parsed = parse_xml(output_xml, spec_file_path) @@ -91,10 +87,6 @@ class TestNetworkParseFilter(unittest.TestCase): } self.assertEqual(parsed, expected) - @unittest.skipIf( - sys.version_info[:2] == (2, 6), - "XPath expression not supported in this version", - ) def test_parse_xml_to_dict(self): spec_file_path = os.path.join(fixture_path, "show_vlans_xml_with_key_spec.yml") parsed = parse_xml(output_xml, spec_file_path) @@ -144,10 +136,6 @@ class TestNetworkParseFilter(unittest.TestCase): } self.assertEqual(parsed, expected) - @unittest.skipIf( - sys.version_info[:2] == (2, 6), - "XPath expression not supported in this version", - ) def test_parse_xml_with_condition_spec(self): spec_file_path = os.path.join(fixture_path, "show_vlans_xml_with_condition_spec.yml") parsed = parse_xml(output_xml, spec_file_path) @@ -187,7 +175,7 @@ class TestNetworkParseFilter(unittest.TestCase): ) -class TestNetworkType5(unittest.TestCase): +class TestNetworkType5(TestCase): def test_defined_salt_success(self): password = "cisco" salt = "nTc1" @@ -247,7 +235,7 @@ class TestNetworkType5(unittest.TestCase): ) -class TestHashSalt(unittest.TestCase): +class TestHashSalt(TestCase): def test_retrieve_salt(self): password = "$1$nTc1$Z28sUTcWfXlvVe2x.3XAa." parsed = hash_salt(password) @@ -267,7 +255,7 @@ class TestHashSalt(unittest.TestCase): ) -class TestCompareType5(unittest.TestCase): +class TestCompareType5(TestCase): def test_compare_type5_boolean(self): unencrypted_password = "cisco" encrypted_password = "$1$nTc1$Z28sUTcWfXlvVe2x.3XAa." @@ -287,7 +275,7 @@ class TestCompareType5(unittest.TestCase): self.assertEqual(parsed, False) -class TestVlanExapander(unittest.TestCase): +class TestVlanExapander(TestCase): def test_single_range(self): raw_list = "1-3" expanded_list = [1, 2, 3] @@ -305,7 +293,7 @@ class TestVlanExapander(unittest.TestCase): self.assertEqual(vlan_expander(raw_list), expanded_list) -class TestVlanParser(unittest.TestCase): +class TestVlanParser(TestCase): def test_compression(self): raw_list = [1, 2, 3] parsed_list = ["1-3"] diff --git a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_pop_ace.py b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_pop_ace.py index adc747038..33dbc44b6 100644 --- a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_pop_ace.py +++ b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_pop_ace.py @@ -8,14 +8,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError from ansible_collections.ansible.netcommon.plugins.plugin_utils.pop_ace import pop_ace -class TestPopAce(unittest.TestCase): +class TestPopAce(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_type5_pw.py b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_type5_pw.py index a1ea8c905..4f12a9f68 100644 --- a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_type5_pw.py +++ b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_type5_pw.py @@ -8,12 +8,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.netcommon.plugins.plugin_utils.type5_pw import type5_pw -class TestType5_pw(unittest.TestCase): +class TestType5_pw(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_vlan_extender.py b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_vlan_extender.py index 4537e1eed..3f3d5f089 100644 --- a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_vlan_extender.py +++ b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_vlan_extender.py @@ -8,12 +8,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.netcommon.plugins.plugin_utils.vlan_expander import vlan_expander -class TestVlanExtender(unittest.TestCase): +class TestVlanExtender(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_vlan_parser.py b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_vlan_parser.py index 3765bdf28..a2d234e35 100644 --- a/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_vlan_parser.py +++ b/ansible_collections/ansible/netcommon/tests/unit/plugins/filter/test_vlan_parser.py @@ -8,14 +8,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError from ansible_collections.ansible.netcommon.plugins.plugin_utils.vlan_parser import vlan_parser -class TestVlanParser(unittest.TestCase): +class TestVlanParser(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/netcommon/tox-ansible.ini b/ansible_collections/ansible/netcommon/tox-ansible.ini new file mode 100644 index 000000000..fe560ad9d --- /dev/null +++ b/ansible_collections/ansible/netcommon/tox-ansible.ini @@ -0,0 +1,9 @@ +[ansible] +skip = + py3.7 + py3.8 + 2.9 + 2.10 + 2.11 + 2.12 + 2.13 diff --git a/ansible_collections/ansible/netcommon/tox.ini b/ansible_collections/ansible/netcommon/tox.ini deleted file mode 100644 index 14db05a79..000000000 --- a/ansible_collections/ansible/netcommon/tox.ini +++ /dev/null @@ -1,23 +0,0 @@ -[tox] -minversion = 1.4.2 -envlist = linters -skipsdist = True - -[testenv] -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -[testenv:black] -install_command = pip install {opts} {packages} -commands = - black --exclude '\.git|\.mypy_cache|\.tox|tests/output' {toxinidir} - -[testenv:linters] -install_command = pip install {opts} {packages} -commands = - black --exclude '\.git|\.mypy_cache|\.tox|tests/output' --check {toxinidir} - flake8 {posargs} - yamllint -s . - -[testenv:venv] -commands = {posargs} diff --git a/ansible_collections/ansible/utils/.ansible-lint b/ansible_collections/ansible/utils/.ansible-lint new file mode 100644 index 000000000..8d9bb70b8 --- /dev/null +++ b/ansible_collections/ansible/utils/.ansible-lint @@ -0,0 +1,5 @@ +--- +profile: production + +exclude_paths: + - changelogs/changelog.yaml diff --git a/ansible_collections/ansible/utils/.darglint b/ansible_collections/ansible/utils/.darglint deleted file mode 100644 index 8e68aa3ec..000000000 --- a/ansible_collections/ansible/utils/.darglint +++ /dev/null @@ -1,7 +0,0 @@ -[darglint] -# NOTE: All `darglint` styles except for `sphinx` hit ridiculously low -# NOTE: performance on some of the in-project Python modules. -# Refs: -# * https://github.com/terrencepreilly/darglint/issues/186 -docstring_style = sphinx -strictness = full diff --git a/ansible_collections/ansible/utils/.flake8 b/ansible_collections/ansible/utils/.flake8 index 4795515e8..a12c2cb13 100644 --- a/ansible_collections/ansible/utils/.flake8 +++ b/ansible_collections/ansible/utils/.flake8 @@ -39,16 +39,11 @@ extend-exclude = # IMPORTANT: avoid using ignore option, always use extend-ignore instead # Completely and unconditionally ignore the following errors: extend-ignore = - # Safeguard neutering of flake8-quotes : https://github.com/zheller/flake8-quotes/issues/105 - Q, - # annoy black by allowing white space before : https://github.com/psf/black/issues/315 - E203, - # duplicate of pylint W0611 (unused-import) - F401, - # duplicate of pylint E0602 (undefined-variable) - F821, - # duplicate of pylint W0612 (unused-variable) F841, + # line-length + E501, + # module level import not at top of file + E402 # Accessibility/large fonts and PEP8 unfriendly: max-line-length = 100 diff --git a/ansible_collections/ansible/utils/.github/workflows/ack.yml b/ansible_collections/ansible/utils/.github/workflows/ack.yml deleted file mode 100644 index fda595dc5..000000000 --- a/ansible_collections/ansible/utils/.github/workflows/ack.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml -name: ack - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - pull_request_target: - types: [opened, labeled, unlabeled, synchronize] - -jobs: - ack: - uses: ansible/devtools/.github/workflows/ack.yml@main diff --git a/ansible_collections/ansible/utils/.github/workflows/check_label.yml b/ansible_collections/ansible/utils/.github/workflows/check_label.yml new file mode 100644 index 000000000..b120bfa32 --- /dev/null +++ b/ansible_collections/ansible/utils/.github/workflows/check_label.yml @@ -0,0 +1,11 @@ +--- +name: "Check label" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + pull_request_target: + types: [opened, labeled, unlabeled, synchronize] +jobs: + check_label: + uses: ansible/ansible-content-actions/.github/workflows/check_label.yaml@main diff --git a/ansible_collections/ansible/utils/.github/workflows/codecoverage.yml b/ansible_collections/ansible/utils/.github/workflows/codecoverage.yml index c2a7ad60d..7ae6b6325 100644 --- a/ansible_collections/ansible/utils/.github/workflows/codecoverage.yml +++ b/ansible_collections/ansible/utils/.github/workflows/codecoverage.yml @@ -1,5 +1,5 @@ --- -name: code_coverage +name: "Code converage" on: # yamllint disable-line rule:truthy push: diff --git a/ansible_collections/ansible/utils/.github/workflows/draft_release.yml b/ansible_collections/ansible/utils/.github/workflows/draft_release.yml new file mode 100644 index 000000000..640bf2d14 --- /dev/null +++ b/ansible_collections/ansible/utils/.github/workflows/draft_release.yml @@ -0,0 +1,18 @@ +--- +name: "Draft release" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + workflow_dispatch: +env: + NAMESPACE: ${{ github.repository_owner }} + COLLECTION_NAME: utils + ANSIBLE_COLLECTIONS_PATHS: ./ +jobs: + update_release_draft: + uses: ansible/ansible-content-actions/.github/workflows/draft_release.yaml@main + with: + repo: ${{ github.event.pull_request.head.repo.full_name }} + secrets: + BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/ansible/utils/.github/workflows/push.yml b/ansible_collections/ansible/utils/.github/workflows/push.yml deleted file mode 100644 index de66d0537..000000000 --- a/ansible_collections/ansible/utils/.github/workflows/push.yml +++ /dev/null @@ -1,28 +0,0 @@ ---- -# push workflow is shared and expected to perform actions after a merge happens -# on a maintenance branch (default or release). For example updating the -# draft release-notes. -# based on great work from -# https://github.com/T-Systems-MMS/ansible-collection-icinga-director -name: push - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - - -on: - workflow_dispatch: - -env: - NAMESPACE: ansible - COLLECTION_NAME: utils - ANSIBLE_COLLECTIONS_PATHS: ./ - -jobs: - update_release_draft: - uses: ansible/devtools/.github/workflows/push_network.yml@main - with: - repo: ansible-collections/ansible.utils - secrets: - BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/ansible/utils/.github/workflows/release.yml b/ansible_collections/ansible/utils/.github/workflows/release.yml index eb04259d1..6dbb1aa39 100644 --- a/ansible_collections/ansible/utils/.github/workflows/release.yml +++ b/ansible_collections/ansible/utils/.github/workflows/release.yml @@ -1,12 +1,12 @@ --- -name: release +name: "Release collection" on: # yamllint disable-line rule:truthy release: types: [published] jobs: release: - uses: ansible/devtools/.github/workflows/release_collection.yml@main + uses: ansible/ansible-content-actions/.github/workflows/release.yaml@main with: environment: release secrets: diff --git a/ansible_collections/ansible/utils/.github/workflows/tests.yml b/ansible_collections/ansible/utils/.github/workflows/tests.yml index 081a2df00..6f075eb1a 100644 --- a/ansible_collections/ansible/utils/.github/workflows/tests.yml +++ b/ansible_collections/ansible/utils/.github/workflows/tests.yml @@ -1,5 +1,5 @@ --- -name: CI +name: "CI" concurrency: group: ${{ github.head_ref || github.run_id }} @@ -13,34 +13,33 @@ on: # yamllint disable-line rule:truthy - cron: '0 0 * * *' jobs: - ansible-lint: - uses: ansible-network/github_actions/.github/workflows/ansible-lint.yml@main changelog: - uses: ansible-network/github_actions/.github/workflows/changelog.yml@main + uses: ansible/ansible-content-actions/.github/workflows/changelog.yaml@main if: github.event_name == 'pull_request' - integration: - uses: ansible-network/github_actions/.github/workflows/integration_simple.yml@main + ansible-lint: + uses: ansible/ansible-content-actions/.github/workflows/ansible_lint.yaml@main sanity: - uses: ansible-network/github_actions/.github/workflows/sanity.yml@main + uses: ansible/ansible-content-actions/.github/workflows/sanity.yaml@main unit-galaxy: - uses: ansible-network/github_actions/.github/workflows/unit_galaxy.yml@main - + uses: ansible/ansible-content-actions/.github/workflows/unit.yaml@main + integration: + uses: ansible/ansible-content-actions/.github/workflows/integration.yaml@main all_green: if: ${{ always() }} needs: - - ansible-lint - changelog - - integration - sanity - unit-galaxy + - ansible-lint + - integration runs-on: ubuntu-latest steps: - run: >- python -c "assert 'failure' not in set([ - '${{ needs.ansible-lint.result }}', '${{ needs.changelog.result }}', '${{ needs.integration.result }}', '${{ needs.sanity.result }}', - '${{ needs.unit-galaxy.result }}' + '${{ needs.unit-galaxy.result }}', + '${{ needs.ansible-lint.result }}' ])" diff --git a/ansible_collections/ansible/utils/.github/workflows/token_refresh.yml b/ansible_collections/ansible/utils/.github/workflows/token_refresh.yml index 3fd76b1c2..d0a71c0f0 100644 --- a/ansible_collections/ansible/utils/.github/workflows/token_refresh.yml +++ b/ansible_collections/ansible/utils/.github/workflows/token_refresh.yml @@ -1,5 +1,5 @@ --- -name: refresh_automation_hub_token +name: "Refresh Automation Hub Token" on: # yamllint disable-line rule:truthy schedule: - cron: '0 0 * * *' @@ -7,7 +7,7 @@ on: # yamllint disable-line rule:truthy jobs: refresh: - uses: ansible/devtools/.github/workflows/ah_token_refresh.yml@main + uses: ansible/ansible-content-actions/.github/workflows/refresh_ah_token.yaml@main with: environment: release secrets: diff --git a/ansible_collections/ansible/utils/.pre-commit-config.yaml b/ansible_collections/ansible/utils/.pre-commit-config.yaml index ade10b11a..598f72b77 100644 --- a/ansible_collections/ansible/utils/.pre-commit-config.yaml +++ b/ansible_collections/ansible/utils/.pre-commit-config.yaml @@ -21,7 +21,7 @@ repos: - id: add-trailing-comma - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.1.0" + rev: "v4.0.0-alpha.8" hooks: - id: prettier additional_dependencies: @@ -29,13 +29,18 @@ repos: - prettier-plugin-toml - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort name: Sort import statements using isort args: ["--filter-files"] - repo: https://github.com/psf/black - rev: 23.11.0 + rev: 23.12.1 hooks: - id: black + + - repo: https://github.com/pycqa/flake8 + rev: 7.0.0 + hooks: + - id: flake8 diff --git a/ansible_collections/ansible/utils/CHANGELOG.rst b/ansible_collections/ansible/utils/CHANGELOG.rst index 6513ce40a..95f5b223c 100644 --- a/ansible_collections/ansible/utils/CHANGELOG.rst +++ b/ansible_collections/ansible/utils/CHANGELOG.rst @@ -4,6 +4,61 @@ Ansible Utils Collection Release Notes .. contents:: Topics +v4.1.0 +====== + +Release Summary +--------------- + +In the last release (`v4.0.0`), we bumped the minimum required `netaddr` version to be `>=0.10.1`. However, since `netaddr>=0.10.1` is not yet available in many sources other than PyPI, we have temporarily added a fallback method to support the `ipaddr` filter with older `netaddr` versions with this release. Once the latest `netaddr` is available in all major sources, we will deprecate this support and eventually remove it. + +v4.0.0 +====== + +Release Summary +--------------- + +Starting from this release, the minimum `netaddr` version this collection requires is `>=0.10.1`. + +Major Changes +------------- + +- Bumping `netaddr` to `>=0.10.1`, means that starting from this release, the minimum `netaddr` version this collection requires is `>=0.10.1`. +- This release mainly addresses the breaking changes in the `netaddr` library. +- With the new release of `netaddr` 1.0.0, the `IPAddress.is_private()` method has been removed and instead, the `IPAddress.is_global()` method has been extended to support the same functionality. This change has been reflected in the `ipaddr` filter plugin. + +v3.1.0 +====== + +Minor Changes +------------- + +- Add support in fact_diff filter plugin to show common lines.(https://github.com/ansible-collections/ansible.utils/issues/311) + +Bugfixes +-------- + +- Avoid unnecessary use of persistent connection in `cli_parse`, `fact_diff`, `update_fact` and `validate` as this action does not require a connection. + +Documentation Changes +--------------------- + +- ipv6form filter plugin - Fix to be displayed correctly. +- validate lookup plugin - Fix syntax in EXAMPLES. +- validate module - Fix syntax in EXAMPLES. + +v3.0.0 +====== + +Release Summary +--------------- + +Starting from this release, the minimum `ansible-core` version this collection requires is `2.14.0`. That last known version compatible with ansible-core<2.14 is `v2.12.0`. + +Major Changes +------------- + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. v2.12.0 ======= diff --git a/ansible_collections/ansible/utils/FILES.json b/ansible_collections/ansible/utils/FILES.json index e418d8954..acfc8daa0 100644 --- a/ansible_collections/ansible/utils/FILES.json +++ b/ansible_collections/ansible/utils/FILES.json @@ -8,80 +8,66 @@ "format": 1 }, { - "name": "codecov.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d7119b3a96ece7bcd2df6e851e7e19783049f280918a801344d502c6ada4e582", + "name": ".github", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "LICENSE", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "name": ".github/workflows", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": ".yamllint", + "name": ".github/workflows/codecoverage.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", + "chksum_sha256": "28c54e3df500125a471200a1bf1e69b3210a5afc41eb1f7b565ad3f1b57c81e0", "format": 1 }, { - "name": "requirements.txt", + "name": ".github/workflows/draft_release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7803ee5bd437e885d56393b7d624cec69092cf3188b96ea5b9c6a8438c350d7d", - "format": 1 - }, - { - "name": "meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "58fcbcfb57321441a102f21522b00acd8fa1346a465f5b46a6f02044962b2e9b", "format": 1 }, { - "name": "meta/runtime.yml", + "name": ".github/workflows/check_label.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5d9b146aa07048432c93824a93c4dba79f95dcb91effa4b205bdaa8fdb8e2fb", + "chksum_sha256": "9eb6abad2038b10cd6ea70310aa88d163f10c374d1728df29bb553eff2acfaba", "format": 1 }, { - "name": "mypy.ini", + "name": ".github/workflows/token_refresh.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "320b735f9c8018c53e0db9c691b20904284ff80801d30c816c0d33172ff95ff3", - "format": 1 - }, - { - "name": ".config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "c079a657080c6e31600f25fc7afcb46a843890ef86cb9f3a1a574c08446eeb35", "format": 1 }, { - "name": ".config/ansible-lint.yaml", + "name": ".github/workflows/tests.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8e320c3f66ceea4d43d9962ef7b136906a5ce378685067eb2febf36cc0bb34a", + "chksum_sha256": "7be05f3f2b23dc51a5c8069b6bd3f83e14e523a476f57d7b5f0ac48e4076c691", "format": 1 }, { - "name": ".config/dictionary.txt", + "name": ".github/workflows/release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f02d159a5040696bada5c52a53d96ccccfb6f65d5a7c795f7cb6e188288e8cd", + "chksum_sha256": "2e3f90a3147d93b97347d8418352f23e201417e05539a466399dd258a65d699c", "format": 1 }, { - "name": "README.md", + "name": ".github/release-drafter.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae85153b02250844c3e2d34067b93ee9cc4b5ff91f192ff2bb04d3a75c7a6c7d", + "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", "format": 1 }, { @@ -92,3230 +78,3195 @@ "format": 1 }, { - "name": "plugins/plugin_utils", + "name": "plugins/lookup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/plugin_utils/from_xml.py", + "name": "plugins/lookup/get_path.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ad392fe022d3c2ce88daf823e634e2060ca722cd370b1bfe8eccae04b2f9bffb", - "format": 1 - }, - { - "name": "plugins/plugin_utils/base", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "c9a165e7e5a08cf5296d7046d99fd6b5f8a3c34672cbdb5a9520407dc7539774", "format": 1 }, { - "name": "plugins/plugin_utils/base/ipaddress_utils.py", + "name": "plugins/lookup/index_of.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5239e0511f46858bd7169e8bbc2262dc1fc86b5ac7f37d96cfd49b5491e250e", + "chksum_sha256": "39c9caa6c9bea5d3b530586dd2828898ad3cf8eaa13b5627053f9d1937aae3e0", "format": 1 }, { - "name": "plugins/plugin_utils/base/validate.py", + "name": "plugins/lookup/to_paths.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e19d8da82d0af9891ad14977366193f3eb7caf51819f8b6fc6099eedc7c758e", + "chksum_sha256": "4e43dda639d91447bf7a2dc1da27b738430214aba8cde697fdbdf0afe353a963", "format": 1 }, { - "name": "plugins/plugin_utils/base/fact_diff.py", + "name": "plugins/lookup/validate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e7c19600d05863ca5986107de3b259ff0475e7ec163dab2d7d16bfa7ee55ee2", + "chksum_sha256": "aebc7fe0a05dd640321200d5e7fef2c86c99cf248b99836c965975688f16afd5", "format": 1 }, { - "name": "plugins/plugin_utils/base/ipaddr_utils.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3e86d4df13513f55934032aa3fc4b61d6dc2de90e0335c6d168cdd1417f4b3ed", + "name": "plugins/action", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/plugin_utils/base/cli_parser.py", + "name": "plugins/action/cli_parse.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1954b143c93cc8768ecc8f439f44738366ede93244ebcbe12ea4b9a96e028f4c", + "chksum_sha256": "fe865e94a39039777563b836c4447af4e591aa4c2f660116522cba37ccf2d039", "format": 1 }, { - "name": "plugins/plugin_utils/base/utils.py", + "name": "plugins/action/fact_diff.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ed1b297442abf5715528e12a9c68f3389d4743ef38d20400efc170737a1b088", + "chksum_sha256": "944530790166a43d1cc2ad6089d1d1d04b1420b5c3eeed54430a12277581ef99", "format": 1 }, { - "name": "plugins/plugin_utils/remove_keys.py", + "name": "plugins/action/update_fact.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "17d513c637f1347a49a25aa99b3232a753c94e9507ffdb96c8a79a2eeb4a6f78", + "chksum_sha256": "052ad392a5bce8feb8125133506a45b06603fff0001272fc28dcc30881b615cd", "format": 1 }, { - "name": "plugins/plugin_utils/connection_base.py", + "name": "plugins/action/validate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89d3ba294058d651f4a5292bfe1d93d507a7719d303d3e665e069c80f44a9fe0", + "chksum_sha256": "4418cdfad3126b62051c1c5066a177306a62dc1c88406ba3ef0f3de654113cf5", "format": 1 }, { - "name": "plugins/plugin_utils/to_xml.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "49becc6bfa713f37dbda89285fc0db94f10e7ee767eca674556568e91e0d586b", + "name": "plugins/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/plugin_utils/fact_diff.py", + "name": "plugins/modules/cli_parse.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1fb39d935eb83bcc9c93c35f3af81195b5c648683b1a6b41894504c5bfdf6b42", + "chksum_sha256": "1803b4dc8f525b423a5dacc7ee404c05913c8a7c800b7e6314352c2fcad34cb6", "format": 1 }, { - "name": "plugins/plugin_utils/index_of.py", + "name": "plugins/modules/fact_diff.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54b89a6c481475f213a2233f497b7bd6eec37f2b2b52765a5d8a1e48efb20f52", + "chksum_sha256": "fbb01903e17523b7dd8b9ee6a069a5910bc36dc8dda8c5771d4e514f2cefc594", "format": 1 }, { - "name": "plugins/plugin_utils/replace_keys.py", + "name": "plugins/modules/update_fact.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99f8242cb941634d3ab6a6c800c0e460344212dd1a9d8a99f700a2bf1c68bc0a", + "chksum_sha256": "d8029ea407b66f90c88cbd83676fe340a1232d6896320183457e5502eb514bc3", "format": 1 }, { - "name": "plugins/plugin_utils/keep_keys.py", + "name": "plugins/modules/validate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a9884ffa745d38e76ab1a5e5d4ccf06019dd21eb4004be7a1c73ba55117b216", + "chksum_sha256": "15ea93548cf0e748aee135b74cb08cf4046f968dd39a6b4f8046d4782b27c46e", "format": 1 }, { - "name": "plugins/plugin_utils/consolidate.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "96320d44fe7c45eb0bd2ae05c85882d57a27da46f8b0af135762bba61d22c8da", + "name": "plugins/module_utils", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules", + "name": "plugins/module_utils/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/validate.py", + "name": "plugins/module_utils/common/get_path.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "926c86654667da17959ee57da4ce78df1d86ded16592f7f2487e9343ad7ced37", + "chksum_sha256": "c4bc8fdf10776ac5f08e6292edcb7f55c4b8485b48616d0c598ba54df289aa77", "format": 1 }, { - "name": "plugins/modules/update_fact.py", + "name": "plugins/module_utils/common/to_paths.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d8029ea407b66f90c88cbd83676fe340a1232d6896320183457e5502eb514bc3", + "chksum_sha256": "e1ebc611982da989657275368f3e593496405bd13d4a5dcbd611c664cc784f8c", "format": 1 }, { - "name": "plugins/modules/fact_diff.py", + "name": "plugins/module_utils/common/argspec_validate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fbb01903e17523b7dd8b9ee6a069a5910bc36dc8dda8c5771d4e514f2cefc594", + "chksum_sha256": "39febfd9b1f02fde688c270b85a29693adffa8baa9f1d31128a6b32fd3f64d85", "format": 1 }, { - "name": "plugins/modules/cli_parse.py", + "name": "plugins/module_utils/common/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1803b4dc8f525b423a5dacc7ee404c05913c8a7c800b7e6314352c2fcad34cb6", - "format": 1 - }, - { - "name": "plugins/sub_plugins", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "31f365a6ff3ea383c64823f5ea04935b66f1bc7c7ad4372d3dc529cc86e684e2", "format": 1 }, { - "name": "plugins/sub_plugins/fact_diff", + "name": "plugins/test", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/sub_plugins/fact_diff/native.py", + "name": "plugins/test/supernet_of.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2479f9e5df195218a205fb173a285473865b0f8e62f7c6031689ede36dcab13", - "format": 1 - }, - { - "name": "plugins/sub_plugins/cli_parser", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "2a6b4c721807169bbc864ea4d15c8e039178accc0ec489b2fa849f93ccae2ed4", "format": 1 }, { - "name": "plugins/sub_plugins/cli_parser/ttp_parser.py", + "name": "plugins/test/ip_address.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25449badac48fb9e6d026238b01ba30484f020618a8afcf1edd6f22cd3dce174", + "chksum_sha256": "cea11319e9678be2f3a3d5a16b30f082f5dad257a8b664e4328d62d57f0c2b49", "format": 1 }, { - "name": "plugins/sub_plugins/cli_parser/json_parser.py", + "name": "plugins/test/multicast.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a9ea4a244a755604aac78aad2fd06b1446c6fa8613445d5f397c40db55c1ca6", + "chksum_sha256": "eccf99851826e32841328ccf4969d0f8e883165b43919d9e9c39f11a7de5b9bf", "format": 1 }, { - "name": "plugins/sub_plugins/cli_parser/textfsm_parser.py", + "name": "plugins/test/ipv6_address.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c0958e6bde7978e06dd4ece8b05748065983af858002fecf0086123609fc7bd", + "chksum_sha256": "f3a72d0f685d93b8e84b99baa5c3d1db05bfddf4cd985dd53043611c8a0fee9e", "format": 1 }, { - "name": "plugins/sub_plugins/cli_parser/xml_parser.py", + "name": "plugins/test/subnet_of.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7492d16f9edffd72d42e82e91ef611071bc6f9c20131e1b1b5829814787c6f0d", + "chksum_sha256": "4f7566252c1d60e649d1d6a14092cc3e01747c07c5b041c868428b58392cbc36", "format": 1 }, { - "name": "plugins/sub_plugins/validate", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/test/ipv4_address.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "98748990e716b6666fa9fc5476168f34c16506b35230aa8c1170ab600c5796b9", "format": 1 }, { - "name": "plugins/sub_plugins/validate/jsonschema.py", + "name": "plugins/test/unspecified.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0eb6c18e381fee9531223e593a5baee888933baad3c545ddf0d2c15ddd1160a2", + "chksum_sha256": "b38ebc5ddc9100db236807514fea370a363a2896375330ac57ff502e78899786", "format": 1 }, { - "name": "plugins/sub_plugins/validate/config.py", + "name": "plugins/test/ipv6_teredo.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a744f7543ec776412dab52857aca2b324bc14526d042f4572dfc8f055d9b8ce", + "chksum_sha256": "364e1b494bcbc6c2915d57631e89b0be09cb4537b0e593f7956f8e754c600083", "format": 1 }, { - "name": "plugins/lookup", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/test/in_any_network.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d77f655933ad85fbac201217d15d508f63b303606494afd0d46f5a202b06e847", "format": 1 }, { - "name": "plugins/lookup/validate.py", + "name": "plugins/test/ipv4_hostmask.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ffde6732c51259be8453a2feb375de383de85cdd0d720e5795ff4031a66c4f0a", + "chksum_sha256": "19001bc8626d77ac20306bc2a41f8e71a2f277caeb2b3c563c5fbed932fc6fa0", "format": 1 }, { - "name": "plugins/lookup/get_path.py", + "name": "plugins/test/ipv6_sixtofour.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9323f1a2a3c0270f1f753d0bd801494ca2cec8cc5a2fcc462884aab2bfd269e1", + "chksum_sha256": "afc48874147e2a79e7af67029cac6c28646f21126473d6819e4261f172bcc544", "format": 1 }, { - "name": "plugins/lookup/index_of.py", + "name": "plugins/test/ipv6.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "287e606a1a3667f5089e4d3c29de436da3b2ce1de821a51ad1e0093fbf7e0490", + "chksum_sha256": "85a3b8dcdb4d03b29c191533a0cb27108fb31fc767bebb1a8fbd691a38b5a137", "format": 1 }, { - "name": "plugins/lookup/to_paths.py", + "name": "plugins/test/ipv4_netmask.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "858cf146b61c8c860bcc3b87f5badc1493dfc20f6d3e48c8bad57b002f532a8c", + "chksum_sha256": "77112181a46287e3c24aeb39143c9d8e148abb741a5c5068b442df0ce27f2bb4", "format": 1 }, { - "name": "plugins/filter", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/test/mac.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "62299ae2f27faa59e12edb01e50747245f85a27b5bba995ab79a4c98eaf0b884", "format": 1 }, { - "name": "plugins/filter/from_xml.py", + "name": "plugins/test/resolvable.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5127b885570571c98046c6184c8366a42ec7b1c494e7e6c4c1046836ef184554", + "chksum_sha256": "5bd0e507b6cbac09693ad5acd6f4761fdcda8f884c142100276bd0b8eed6a015", "format": 1 }, { - "name": "plugins/filter/param_list_compare.py", + "name": "plugins/test/validate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f02eda7836771f03e5ed78f444a67d2cabaf45231a15998b6ebbc77f18227348", + "chksum_sha256": "5de8085727c146364a5cfdfd9989c3c72936b3f28aed5384aa3d98096d8499f9", "format": 1 }, { - "name": "plugins/filter/ipsubnet.py", + "name": "plugins/test/public.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab7f64ca7b708643f99bac87c642f80549c233d29b2b9433200a33df3bc58ae2", + "chksum_sha256": "dadcb1f62a3b8becba746215e97b37a784d0e7e5a856b8a226edbed3fea1d1ba", "format": 1 }, { - "name": "plugins/filter/remove_keys.py", + "name": "plugins/test/in_one_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c65716a34c4c6c2687e10317201de892858cfe97733ae423b111c5d318e38e86", + "chksum_sha256": "992f70b784ac66f64793ba11700b801a9d9b078f29b7cbea01dc101dfc174e34", "format": 1 }, { - "name": "plugins/filter/hwaddr.py", + "name": "plugins/test/private.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "537fa774d0c9e930f0bda854f715998a8128768421e9c416d54df187f236be66", + "chksum_sha256": "c9e72a11696482f5568dcaad79940dd7dd8d304a61ce3f942af4221a9ffd11c8", "format": 1 }, { - "name": "plugins/filter/ip4_hex.py", + "name": "plugins/test/ipv4.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "595a83cef32d8c49c02984cffe23f63eb93a3b7e27121ccf14f5ef52ba4b5909", + "chksum_sha256": "096eb84875c30d1c00f61f0e8a39ee216432ce8cc83ce8677c17c51039019333", "format": 1 }, { - "name": "plugins/filter/validate.py", + "name": "plugins/test/ip.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29141fcc4d8549d340e48f52b7f55da839a899b15f7d5f2c29c04d65646ab40a", + "chksum_sha256": "96f1d90050b18b606f076c12a1ce924fd5e1ea479569cab057134b8309ac408f", "format": 1 }, { - "name": "plugins/filter/network_in_network.py", + "name": "plugins/test/in_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "292e649c71a8981076624d907e2355fdcca5b77d34630a3ba1d94b10e949207f", + "chksum_sha256": "4c8fe55367ab444d628034575baa9cccb265fd7cdd86cfaf76a526eca9d09bfb", "format": 1 }, { - "name": "plugins/filter/next_nth_usable.py", + "name": "plugins/test/loopback.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ad84e47fcf69f1bab8d390003f0c6bf93df183d532ac68c57252ac8ef4e68fb1", + "chksum_sha256": "080dab36d15bf9d39b67a2f2e67450a2be46c6e9614fe7a49e7c1e70033efdf8", "format": 1 }, { - "name": "plugins/filter/ipaddr.py", + "name": "plugins/test/reserved.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "12e73edbd14f49ea629e53c8f17d4261f40f87e2c582f599073c69cbe66d0d27", + "chksum_sha256": "a141375f7758aea9daa18dcdb7d83fc9949dc1e9f5061b4fca3434f6b09c878b", "format": 1 }, { - "name": "plugins/filter/nthhost.py", + "name": "plugins/test/ipv6_ipv4_mapped.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "338ca4a46c62a49b94e4994593a23cc998e2de3284777cbed9367e8de7bf02f9", + "chksum_sha256": "f009b340f69e20836ac3f708691928485f65f69e96dc19f70db74c20bada8c05", "format": 1 }, { - "name": "plugins/filter/ipv6form.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d4ddfa7dc0dd44f5ff9e715708fc4da0ff590d09b10d3afab032046909ab2f56", + "name": "plugins/plugin_utils", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/filter/to_xml.py", + "name": "plugins/plugin_utils/fact_diff.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1200518068f615530e5e74fa4e1ee82657a5aee1af0e7a105b1b7ebeae3ce0d8", + "chksum_sha256": "3889ceb1d3d5616cecdea885d7137aff5dbc6451fc0679576b3c1cdbd5cb00e1", "format": 1 }, { - "name": "plugins/filter/reduce_on_network.py", + "name": "plugins/plugin_utils/keep_keys.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c55954c5d20e0243f2e3333d011c4021ae4294f29e1a7c4cbf369950dee0eab0", + "chksum_sha256": "5a9884ffa745d38e76ab1a5e5d4ccf06019dd21eb4004be7a1c73ba55117b216", "format": 1 }, { - "name": "plugins/filter/get_path.py", + "name": "plugins/plugin_utils/consolidate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ec4ffeb16940d5ad6cf7fcf3f6db1eb92eaf222dd30089a03994b072684b040", + "chksum_sha256": "96320d44fe7c45eb0bd2ae05c85882d57a27da46f8b0af135762bba61d22c8da", "format": 1 }, { - "name": "plugins/filter/fact_diff.py", + "name": "plugins/plugin_utils/remove_keys.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d321017a94cbb430f30c4abd13aa56f8813e2cfb33102e5824a85abbef167ec", + "chksum_sha256": "17d513c637f1347a49a25aa99b3232a753c94e9507ffdb96c8a79a2eeb4a6f78", "format": 1 }, { - "name": "plugins/filter/ipmath.py", + "name": "plugins/plugin_utils/index_of.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29f0b614d1ad648514eb619f02de360d479759924bbe79aca66a1ec775fdb4a8", + "chksum_sha256": "54b89a6c481475f213a2233f497b7bd6eec37f2b2b52765a5d8a1e48efb20f52", "format": 1 }, { - "name": "plugins/filter/ipv6.py", + "name": "plugins/plugin_utils/connection_base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8f517a01193ab2a7d9406971cb31a55488315ac0cde3b167bb6a7eae78caf93", + "chksum_sha256": "89d3ba294058d651f4a5292bfe1d93d507a7719d303d3e665e069c80f44a9fe0", "format": 1 }, { - "name": "plugins/filter/index_of.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b8f72b0978db5536a546d0652287f6d59111ef6a21c281873fc51bd9345a8ff4", + "name": "plugins/plugin_utils/base", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/filter/to_paths.py", + "name": "plugins/plugin_utils/base/fact_diff.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cfe1cb5a118b1d9547c2444d1ef9fd2dd8e0076587d58e724e756724768af228", + "chksum_sha256": "5e7c19600d05863ca5986107de3b259ff0475e7ec163dab2d7d16bfa7ee55ee2", "format": 1 }, { - "name": "plugins/filter/slaac.py", + "name": "plugins/plugin_utils/base/ipaddr_utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93c561c589dc6c5bbe732a4d136616c7d9b5e6b105cb9cec40b26e0ef8a172a4", + "chksum_sha256": "f84645e04c4fe91599ec661a394b692e6060b333a326df5eea281b517d68c7e8", "format": 1 }, { - "name": "plugins/filter/ipcut.py", + "name": "plugins/plugin_utils/base/validate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "68f81128b079b86a4f47a52991609d20405f1f21f17c428671971745aa872994", + "chksum_sha256": "9e19d8da82d0af9891ad14977366193f3eb7caf51819f8b6fc6099eedc7c758e", "format": 1 }, { - "name": "plugins/filter/macaddr.py", + "name": "plugins/plugin_utils/base/ipaddress_utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b702ad98dbbaef44c7d5ceaa8355a317bcb1f0deb5f0224da98f639f789c2b2f", + "chksum_sha256": "c5239e0511f46858bd7169e8bbc2262dc1fc86b5ac7f37d96cfd49b5491e250e", "format": 1 }, { - "name": "plugins/filter/usable_range.py", + "name": "plugins/plugin_utils/base/cli_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b38fdf0f93feba1be5898bfb0af62144bb591f4dab0f5cc291ce72d70b93b56e", + "chksum_sha256": "1954b143c93cc8768ecc8f439f44738366ede93244ebcbe12ea4b9a96e028f4c", "format": 1 }, { - "name": "plugins/filter/previous_nth_usable.py", + "name": "plugins/plugin_utils/base/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "60b550ba0f9e4afeb0db54e70e2c02fa7d12c14f3388d11fb24d3fefd2a51436", + "chksum_sha256": "6ed1b297442abf5715528e12a9c68f3389d4743ef38d20400efc170737a1b088", "format": 1 }, { - "name": "plugins/filter/ipv4.py", + "name": "plugins/plugin_utils/to_xml.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c6de45a25dd966988f545d0daf22af1aad6ff70dae439952b5dc9b04214f308", + "chksum_sha256": "49becc6bfa713f37dbda89285fc0db94f10e7ee767eca674556568e91e0d586b", "format": 1 }, { - "name": "plugins/filter/cidr_merge.py", + "name": "plugins/plugin_utils/replace_keys.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1696ddbc8006f734b96ca793b0d97b20fd916d5e79689927116b9502e6b39720", + "chksum_sha256": "99f8242cb941634d3ab6a6c800c0e460344212dd1a9d8a99f700a2bf1c68bc0a", "format": 1 }, { - "name": "plugins/filter/replace_keys.py", + "name": "plugins/plugin_utils/from_xml.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ed3f41aa165e732586a87a436b6b3a620aa4576d272d5dc24b570602d5cf9c3", + "chksum_sha256": "ad392fe022d3c2ce88daf823e634e2060ca722cd370b1bfe8eccae04b2f9bffb", "format": 1 }, { - "name": "plugins/filter/keep_keys.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b8ad427ca5be903162a49b9b73f437262b7ddc47eec1328c165d42b86b51755f", + "name": "plugins/sub_plugins", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/filter/network_in_usable.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "555d3639de75196fc6d6d4b15000794ede40565f6d87c7515ddc2d96888ecb92", + "name": "plugins/sub_plugins/validate", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/filter/ipwrap.py", + "name": "plugins/sub_plugins/validate/jsonschema.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c18c1eac1f64f96be33092541430edb3d5de0b8f47483db09cff2c101c80fc3", + "chksum_sha256": "0eb6c18e381fee9531223e593a5baee888933baad3c545ddf0d2c15ddd1160a2", "format": 1 }, { - "name": "plugins/filter/consolidate.py", + "name": "plugins/sub_plugins/validate/config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f1d5948e33206851f8e47c39b0447302d922121a6da921151d04e9e52e15c70a", + "chksum_sha256": "0a744f7543ec776412dab52857aca2b324bc14526d042f4572dfc8f055d9b8ce", "format": 1 }, { - "name": "plugins/test", + "name": "plugins/sub_plugins/cli_parser", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/test/ipv6_address.py", + "name": "plugins/sub_plugins/cli_parser/xml_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f3a72d0f685d93b8e84b99baa5c3d1db05bfddf4cd985dd53043611c8a0fee9e", + "chksum_sha256": "7492d16f9edffd72d42e82e91ef611071bc6f9c20131e1b1b5829814787c6f0d", "format": 1 }, { - "name": "plugins/test/unspecified.py", + "name": "plugins/sub_plugins/cli_parser/ttp_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b38ebc5ddc9100db236807514fea370a363a2896375330ac57ff502e78899786", + "chksum_sha256": "25449badac48fb9e6d026238b01ba30484f020618a8afcf1edd6f22cd3dce174", "format": 1 }, { - "name": "plugins/test/ipv4_address.py", + "name": "plugins/sub_plugins/cli_parser/json_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "98748990e716b6666fa9fc5476168f34c16506b35230aa8c1170ab600c5796b9", + "chksum_sha256": "7a9ea4a244a755604aac78aad2fd06b1446c6fa8613445d5f397c40db55c1ca6", "format": 1 }, { - "name": "plugins/test/public.py", + "name": "plugins/sub_plugins/cli_parser/textfsm_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dadcb1f62a3b8becba746215e97b37a784d0e7e5a856b8a226edbed3fea1d1ba", + "chksum_sha256": "3c0958e6bde7978e06dd4ece8b05748065983af858002fecf0086123609fc7bd", "format": 1 }, { - "name": "plugins/test/validate.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5de8085727c146364a5cfdfd9989c3c72936b3f28aed5384aa3d98096d8499f9", + "name": "plugins/sub_plugins/fact_diff", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/test/ipv6_sixtofour.py", + "name": "plugins/sub_plugins/fact_diff/native.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "afc48874147e2a79e7af67029cac6c28646f21126473d6819e4261f172bcc544", + "chksum_sha256": "a2479f9e5df195218a205fb173a285473865b0f8e62f7c6031689ede36dcab13", "format": 1 }, { - "name": "plugins/test/private.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c9e72a11696482f5568dcaad79940dd7dd8d304a61ce3f942af4221a9ffd11c8", + "name": "plugins/filter", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/test/resolvable.py", + "name": "plugins/filter/get_path.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5bd0e507b6cbac09693ad5acd6f4761fdcda8f884c142100276bd0b8eed6a015", + "chksum_sha256": "3ec4ffeb16940d5ad6cf7fcf3f6db1eb92eaf222dd30089a03994b072684b040", "format": 1 }, { - "name": "plugins/test/in_any_network.py", + "name": "plugins/filter/next_nth_usable.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d77f655933ad85fbac201217d15d508f63b303606494afd0d46f5a202b06e847", + "chksum_sha256": "ad84e47fcf69f1bab8d390003f0c6bf93df183d532ac68c57252ac8ef4e68fb1", "format": 1 }, { - "name": "plugins/test/reserved.py", + "name": "plugins/filter/usable_range.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a141375f7758aea9daa18dcdb7d83fc9949dc1e9f5061b4fca3434f6b09c878b", + "chksum_sha256": "b38fdf0f93feba1be5898bfb0af62144bb591f4dab0f5cc291ce72d70b93b56e", "format": 1 }, { - "name": "plugins/test/loopback.py", + "name": "plugins/filter/fact_diff.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "080dab36d15bf9d39b67a2f2e67450a2be46c6e9614fe7a49e7c1e70033efdf8", + "chksum_sha256": "dc0f8b28ff75dd863cbd5c6986f176204e204c745a979dc4b78cd89f22d952da", "format": 1 }, { - "name": "plugins/test/ipv6.py", + "name": "plugins/filter/keep_keys.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85a3b8dcdb4d03b29c191533a0cb27108fb31fc767bebb1a8fbd691a38b5a137", + "chksum_sha256": "b8ad427ca5be903162a49b9b73f437262b7ddc47eec1328c165d42b86b51755f", "format": 1 }, { - "name": "plugins/test/ipv4_hostmask.py", + "name": "plugins/filter/consolidate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19001bc8626d77ac20306bc2a41f8e71a2f277caeb2b3c563c5fbed932fc6fa0", + "chksum_sha256": "f1d5948e33206851f8e47c39b0447302d922121a6da921151d04e9e52e15c70a", "format": 1 }, { - "name": "plugins/test/ipv6_teredo.py", + "name": "plugins/filter/remove_keys.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "364e1b494bcbc6c2915d57631e89b0be09cb4537b0e593f7956f8e754c600083", + "chksum_sha256": "c65716a34c4c6c2687e10317201de892858cfe97733ae423b111c5d318e38e86", "format": 1 }, { - "name": "plugins/test/in_one_network.py", + "name": "plugins/filter/ipv6form.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "992f70b784ac66f64793ba11700b801a9d9b078f29b7cbea01dc101dfc174e34", + "chksum_sha256": "19971cd14e72dd73fb7426a81d406d17d96572ba912e2ae772395756a39259a1", "format": 1 }, { - "name": "plugins/test/ip.py", + "name": "plugins/filter/index_of.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96f1d90050b18b606f076c12a1ce924fd5e1ea479569cab057134b8309ac408f", + "chksum_sha256": "b8f72b0978db5536a546d0652287f6d59111ef6a21c281873fc51bd9345a8ff4", "format": 1 }, { - "name": "plugins/test/ipv4.py", + "name": "plugins/filter/previous_nth_usable.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "096eb84875c30d1c00f61f0e8a39ee216432ce8cc83ce8677c17c51039019333", + "chksum_sha256": "60b550ba0f9e4afeb0db54e70e2c02fa7d12c14f3388d11fb24d3fefd2a51436", "format": 1 }, { - "name": "plugins/test/ipv6_ipv4_mapped.py", + "name": "plugins/filter/ipmath.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f009b340f69e20836ac3f708691928485f65f69e96dc19f70db74c20bada8c05", + "chksum_sha256": "29f0b614d1ad648514eb619f02de360d479759924bbe79aca66a1ec775fdb4a8", "format": 1 }, { - "name": "plugins/test/supernet_of.py", + "name": "plugins/filter/ipcut.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a6b4c721807169bbc864ea4d15c8e039178accc0ec489b2fa849f93ccae2ed4", + "chksum_sha256": "68f81128b079b86a4f47a52991609d20405f1f21f17c428671971745aa872994", "format": 1 }, { - "name": "plugins/test/multicast.py", + "name": "plugins/filter/ip4_hex.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eccf99851826e32841328ccf4969d0f8e883165b43919d9e9c39f11a7de5b9bf", + "chksum_sha256": "595a83cef32d8c49c02984cffe23f63eb93a3b7e27121ccf14f5ef52ba4b5909", "format": 1 }, { - "name": "plugins/test/ipv4_netmask.py", + "name": "plugins/filter/slaac.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "77112181a46287e3c24aeb39143c9d8e148abb741a5c5068b442df0ce27f2bb4", + "chksum_sha256": "93c561c589dc6c5bbe732a4d136616c7d9b5e6b105cb9cec40b26e0ef8a172a4", "format": 1 }, { - "name": "plugins/test/ip_address.py", + "name": "plugins/filter/macaddr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cea11319e9678be2f3a3d5a16b30f082f5dad257a8b664e4328d62d57f0c2b49", + "chksum_sha256": "b702ad98dbbaef44c7d5ceaa8355a317bcb1f0deb5f0224da98f639f789c2b2f", "format": 1 }, { - "name": "plugins/test/subnet_of.py", + "name": "plugins/filter/ipsubnet.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4f7566252c1d60e649d1d6a14092cc3e01747c07c5b041c868428b58392cbc36", + "chksum_sha256": "ab7f64ca7b708643f99bac87c642f80549c233d29b2b9433200a33df3bc58ae2", "format": 1 }, { - "name": "plugins/test/in_network.py", + "name": "plugins/filter/to_paths.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c8fe55367ab444d628034575baa9cccb265fd7cdd86cfaf76a526eca9d09bfb", + "chksum_sha256": "cfe1cb5a118b1d9547c2444d1ef9fd2dd8e0076587d58e724e756724768af228", "format": 1 }, { - "name": "plugins/test/mac.py", + "name": "plugins/filter/to_xml.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "62299ae2f27faa59e12edb01e50747245f85a27b5bba995ab79a4c98eaf0b884", + "chksum_sha256": "1200518068f615530e5e74fa4e1ee82657a5aee1af0e7a105b1b7ebeae3ce0d8", "format": 1 }, { - "name": "plugins/module_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/filter/ipv6.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b8f517a01193ab2a7d9406971cb31a55488315ac0cde3b167bb6a7eae78caf93", "format": 1 }, { - "name": "plugins/module_utils/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/filter/nthhost.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "338ca4a46c62a49b94e4994593a23cc998e2de3284777cbed9367e8de7bf02f9", "format": 1 }, { - "name": "plugins/module_utils/common/get_path.py", + "name": "plugins/filter/network_in_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c4bc8fdf10776ac5f08e6292edcb7f55c4b8485b48616d0c598ba54df289aa77", + "chksum_sha256": "292e649c71a8981076624d907e2355fdcca5b77d34630a3ba1d94b10e949207f", "format": 1 }, { - "name": "plugins/module_utils/common/to_paths.py", + "name": "plugins/filter/param_list_compare.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1ebc611982da989657275368f3e593496405bd13d4a5dcbd611c664cc784f8c", + "chksum_sha256": "f02eda7836771f03e5ed78f444a67d2cabaf45231a15998b6ebbc77f18227348", "format": 1 }, { - "name": "plugins/module_utils/common/utils.py", + "name": "plugins/filter/network_in_usable.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31f365a6ff3ea383c64823f5ea04935b66f1bc7c7ad4372d3dc529cc86e684e2", + "chksum_sha256": "555d3639de75196fc6d6d4b15000794ede40565f6d87c7515ddc2d96888ecb92", "format": 1 }, { - "name": "plugins/module_utils/common/argspec_validate.py", + "name": "plugins/filter/validate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39febfd9b1f02fde688c270b85a29693adffa8baa9f1d31128a6b32fd3f64d85", + "chksum_sha256": "29141fcc4d8549d340e48f52b7f55da839a899b15f7d5f2c29c04d65646ab40a", "format": 1 }, { - "name": "plugins/action", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/filter/cidr_merge.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1696ddbc8006f734b96ca793b0d97b20fd916d5e79689927116b9502e6b39720", "format": 1 }, { - "name": "plugins/action/validate.py", + "name": "plugins/filter/ipwrap.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab5ad1fefc1bc3d55eb256922e16a5d411b7463a1ad8b86cea0ab183273a0ebc", + "chksum_sha256": "9c18c1eac1f64f96be33092541430edb3d5de0b8f47483db09cff2c101c80fc3", "format": 1 }, { - "name": "plugins/action/update_fact.py", + "name": "plugins/filter/replace_keys.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04a2b43f0b049c45a2fd7d409a40fd9c89a86f0f8ffd50a2bc81dad7d44f96b6", + "chksum_sha256": "3ed3f41aa165e732586a87a436b6b3a620aa4576d272d5dc24b570602d5cf9c3", "format": 1 }, { - "name": "plugins/action/fact_diff.py", + "name": "plugins/filter/ipv4.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac3e5d5461a0054e5e95ab0af8db7de102f0c541c69ff67efd18a3a88f319967", + "chksum_sha256": "3c6de45a25dd966988f545d0daf22af1aad6ff70dae439952b5dc9b04214f308", "format": 1 }, { - "name": "plugins/action/cli_parse.py", + "name": "plugins/filter/from_xml.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e06142628ca6ee2539f1e647daa7d65c3dd76fcb0c76ec67565a85c1454e5828", + "chksum_sha256": "5127b885570571c98046c6184c8366a42ec7b1c494e7e6c4c1046836ef184554", "format": 1 }, { - "name": "test-requirements.txt", + "name": "plugins/filter/reduce_on_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6689ecab772d38bee7669927a1bd3423ff94800130e50cf9b514c58c9a874b70", + "chksum_sha256": "c55954c5d20e0243f2e3333d011c4021ae4294f29e1a7c4cbf369950dee0eab0", "format": 1 }, { - "name": "tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/filter/hwaddr.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "537fa774d0c9e930f0bda854f715998a8128768421e9c416d54df187f236be66", "format": 1 }, { - "name": "tests/unit", + "name": "plugins/filter/ipaddr.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "12e73edbd14f49ea629e53c8f17d4261f40f87e2c582f599073c69cbe66d0d27", + "format": 1 + }, + { + "name": "meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/requirements.txt", + "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fcea5298285c0542897536b02f5c7753645c7fa83abdcac6b0f3e15ec3d27160", + "chksum_sha256": "211f3feb7161242e79e1eb543dff5881ec95b6153bd488b48fe7869239f153de", "format": 1 }, { - "name": "tests/unit/plugins", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".ansible-lint", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c", "format": 1 }, { - "name": "tests/unit/plugins/plugin_utils", + "name": ".config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/plugin_utils/test_index_of.py", + "name": ".config/dictionary.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89419052a50570440fb15a637a2b6ca8c620b9529435e8328b9c1898476b6456", + "chksum_sha256": "9f02d159a5040696bada5c52a53d96ccccfb6f65d5a7c795f7cb6e188288e8cd", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".config/ansible-lint.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e8e320c3f66ceea4d43d9962ef7b136906a5ce378685067eb2febf36cc0bb34a", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/validate", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".pre-commit-config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6b98b35c7cda8dc6b578e799cc48d83fc49e323a6113da66f46ff67aa7bbf566", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/validate/__init__.py", + "name": "pyproject.toml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "1aec538a80e3fbf00bfd922d2dcd4ffbc831018d75faffea7b4c3cd3a4f44730", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/validate/test_config.py", + "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7e1806206bbdc7d122851e64a5a8a2962a667e7fb1368891b039ea10d880da80", + "chksum_sha256": "0c3f32b1ee520bcb76eccc149100ab557dc9c85ee7ac76f653fe5a89fec56e3d", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers", + "name": "changelogs", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_textfsm_parser.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d6d72c7155b4455f426a9de4b1f252cad7fa5278a7fffdb84bb4db7bdba1f118", + "name": "changelogs/fragments", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers/__init__.py", + "name": "changelogs/fragments/.keep", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_xml_parser.py", + "name": "changelogs/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d9d3b46bfd8ecbe84c3243254d3812c876e22ada4a52930ea72d3e9044dd4fb7", + "chksum_sha256": "570abd82d0ec7ac5220615baee2491d67a7551d8483509a0949ffe0e4dd996c0", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_ttp_parser.py", + "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "22e97df559e5c6e071c5cc448a26ab2f1a25d2484a2f8724edc694846533e1a4", + "chksum_sha256": "90a9d15965542693dd12b57db25e965566d7eb7bb215b578303c4468b026fd2d", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".isort.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4ca0097b4a09ffae0f6cad7b280f8f7acf1b6cc0c4bfd28a79ddc81d3b840262", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/nxos_show_version_invalid.textfsm", + "name": ".yamllint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70efa127c6437e5a9428fb9701dad0e5bdf1425f0ad87c4d18ff3a4042154bc8", + "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/nxos_show_version.ttp", + "name": "test-requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19b19fa15a9d932cf92cb94ecdca1b5b3c64e7961cef2d6574264930e6dfe466", + "chksum_sha256": "222cbdd413170ef428c54a537e78255a2388333502fb66a108c42432d6732064", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/nxos_show_version.cfg", + "name": ".prettierignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "280b9a49752bd9ebddf26798b7df94115c3f3402877d350e60b3236a33fb3f68", + "chksum_sha256": "5f34b5c1df98658cfd45b86975b7f782b1e3486ea712f3372d6eba685a3a826c", "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/nxos_show_version.textfsm", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e0ad0e83aca80d858e8c7301094b1c67e260223cf650af013980461928429916", + "name": "tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/ios_show_ip_interface_brief.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cf7860ac3fe8175f2a062881ecc52f977f14fdcf92ae1a60df68edda493f645a", + "name": "tests/integration", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_json_parser.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "20013f2a16929892e2e9442d9a44d001b28d0b6f281e2db4c71995443e08ad86", + "name": "tests/integration/targets", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/lookup", + "name": "tests/integration/targets/utils_keep_keys", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/lookup/test_validate.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3b01bf969b7d6f0a86c322520cae5cddf9b828d43bf664097281ce89871e5323", + "name": "tests/integration/targets/utils_keep_keys/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/lookup/__init__.py", + "name": "tests/integration/targets/utils_keep_keys/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ef8940b0190398df13528e09eeeb4d70c7033b6dfbd55020d98cb65f87bd49e1", "format": 1 }, { - "name": "tests/unit/plugins/filter", + "name": "tests/integration/targets/utils_keep_keys/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/test_ipcut.py", + "name": "tests/integration/targets/utils_keep_keys/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7e6b03f5937341a36002c2255a16cee62fcb4dcf73ccc1fac596c71f6123a2b9", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_from_xml.py", + "name": "tests/integration/targets/utils_keep_keys/tasks/simple.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a6c4dbafc48c2c649ac3420cdc8cd02c3ed06f576f01110cbacc89315facbbd", + "chksum_sha256": "dde35ae44213bd57cf8d06af380a0ec047374e13f4b56a8af11c87da95cbd50e", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_cidr_merge.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e00bd19c3244b7fdbfcb8f2c99a000d0a1516732a4f38d001d8bdc9df2cc1a09", + "name": "tests/integration/targets/utils_index_of", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/test_ipwrap.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bd17ad7a4601700806fd5cf6697aeec4560518191d11010a7a8bdfe47e72d127", + "name": "tests/integration/targets/utils_index_of/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/test_reduce_on_network.py", + "name": "tests/integration/targets/utils_index_of/tasks/examples_lookup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "933a3b7185a7222f073bd2e509a9fdd3db38dcf6f20ad7037320c9cb419ca822", + "chksum_sha256": "3606cec6d01105e1e0116a63ffc6cb3293184abafcf1472a8e473d1a16711f9c", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_ip4_hex.py", + "name": "tests/integration/targets/utils_index_of/tasks/examples_filter.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "996e6a984667369003bf7b465d45ea6f181db074036618e46a4dd59befb020d7", + "chksum_sha256": "d430649f6347b6327300fa07b06751508823293284efcb2d85cb0121fba493c5", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_ipv6form.py", + "name": "tests/integration/targets/utils_index_of/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec8cea7146804cc025a2675da007f5656b6faa917cf2fba4bbe78b64a7d14eb6", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_ipaddr.py", + "name": "tests/integration/targets/utils_index_of/tasks/simple.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2fa1e8c3f72bc7d15a8050bc7614e881d70aa3819768e743146e33bca5cd0248", + "chksum_sha256": "1835e807efc8882163e2da83587baf64fa1c73611f649af1feba94b246c08a4a", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_keep_keys.py", + "name": "tests/integration/targets/utils_index_of/tasks/argspec.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c6e0bfb0202c7d441430b91e100b3c062ed67a44682fcd95f44c383aea13573", + "chksum_sha256": "98d3173c95800792d144508ea1cabdb032d318d1cc77b9f0416a21e6cb732d4a", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_validate.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "521af1b84fadf53d324b968ab9639c1ad95760f08bd3a72209f4c1e92cc1a356", + "name": "tests/integration/targets/utils_remove_keys", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/test_param_list_compare.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "25490e51429f7ff2fe9c968ec6a0be58f08f4f919f90c5dbd54234ee84264138", + "name": "tests/integration/targets/utils_remove_keys/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/test_nthhost.py", + "name": "tests/integration/targets/utils_remove_keys/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3eaa2b499b4ebb32ccc19a0d8cbaed7c36a3d7de187f68445f6bc94a6dcef7c6", + "chksum_sha256": "f64c5b12c89da7b8a953d4ee3d58e5ff102206f34cef5092be9aefa45c93d34b", "format": 1 }, { - "name": "tests/unit/plugins/filter/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration/targets/utils_remove_keys/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/test_macaddr.py", + "name": "tests/integration/targets/utils_remove_keys/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fdfe72d282d7427a22cddd1a5d26ae8e75c90cd44b4ab7a93c16764ceca8773c", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_next_nth_usable.py", + "name": "tests/integration/targets/utils_remove_keys/tasks/simple.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26ae6a24d9578db4500e83e81955d42e001a5f1090d1a97d1e1703e1702d902b", + "chksum_sha256": "ac949eae4a5560d8ab122ea6a6dc2266bca438562a17071bc2339fe2e775dd09", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_previous_nth_usable.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c5a95a4367d2ade526e7fa9d5c59a049820b2adeba66f6e845d28c7760725730", + "name": "tests/integration/targets/utils_ipaddr_filter", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/filter/test_usable_range.py", + "name": "tests/integration/targets/utils_ipaddr_filter/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/utils_ipaddr_filter/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "46819582bc63da415392abb987133ab91340b442c8b1c8767ab88f6d4c4792ff", + "chksum_sha256": "811f88ff83143ba7f25fa66defe9ecf378bb5076162ae102d8ae7478ac253416", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_fact_diff.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/previous_nth_usable.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eaecf60002d342f52d53c24e6ea6d7e2589cbd8d8731fe9bd1b120364a54c467", + "chksum_sha256": "dba3b3b6be41729598da9ae343316e666d219e6fcc7c60bec22b163a8a7fc2c0", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_network_in_network.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipmath.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19df09a5ffdbeb96dc65b094c4c89fb66bf217477097fb5841f57504d0e6f526", + "chksum_sha256": "e4f81b95ab97909d5700ff50ab0c20b93d8f5be9b581a343b880c415243e2e5c", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_ipsubnet.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipv6form.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6889529703c2c7335c210856f722b570e26fbf6a29e0b7a0c7b35ee322030511", + "chksum_sha256": "0484829f9afd48bac830f255435c598be0a6dacf9af7ef8244beeebcd9d357ca", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_remove_keys.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/network_in_usable.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f878033dbdb5c50fa74f75fe704f84cb58d1fafdb8a9d9ecefc4c3cb2f768bd9", + "chksum_sha256": "f7a4cc15d93654bfee1af885d8a9d49608219d0aefd42b3207742bcb8e913e3e", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_consolidate.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipcut.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24a71575f578c675386bce107af762d580000db6da44dbb2fe038c29e9dfb4f8", + "chksum_sha256": "11eca908bac30ceb6d2296a483d2d9ca137f427f34656b435474e7b9b838e1a4", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_ipv4.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/cidr_merge.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "497f2b8723716dd2f88c437ad61e77393fc2d1f1560bd86f323ef8376886a1e4", + "chksum_sha256": "7424055f53f023017fb31c9f657d4852ab6105645f23f70ecb9ef8d2b8e24594", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_hwaddr.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipv4.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87d0757f9fb9bbecece142e75b59f4a7fd4233e36d6787ed84ffac674ef3ae92", + "chksum_sha256": "a8383abffdac0845a506803744ff43aafb6a69c2b748835ea3a5c9e07d73f969", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_ipmath.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/macaddr.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3a624adc9eb72d71666661250763038fcedd57f7e0b8912c365b304506ab878c", + "chksum_sha256": "0d9c2c75fdd7dba56d6dad2678ea8189dd3f72fba079b9c64f7327de94a8464d", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_to_xml.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipwrap.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da7dcc11c5b563d09c952cdfdd4ec9965ae72e514535f6c67f23515ef4e7157f", + "chksum_sha256": "b340a4d9688caa6c62d57c83a61350ef476be72e956ddc2652be11f83bda9d82", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_slaac.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/hwaddr.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7611332ebc70b87122384832aa726f22b3554c566ad166719e93a6dd66ab9ff4", + "chksum_sha256": "d79ea40b43a1d173c26b0cbf3e86028476fc2ac535984110e9650fdb0cd5de85", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_network_in_usable.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/reduce_on_network.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84a52a604ccea96bea1328554808af2630c53674fc940f3dd82afb8fc66b4a2a", + "chksum_sha256": "ce3a3f10c18b53a0e0530002482b206fe94f919afd70c47e553869adf08341f2", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_ipv6.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f9814233600ff2a2fb09202c51c4b0baa58f72caa0572328fa22ab089eb19406", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/unit/plugins/filter/test_replace_keys.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/nthhost.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e4e037ed6fe34c11344f13a47c2ef1b9d489ea4318ea5f3ca8920e0b1ca838a8", + "chksum_sha256": "55b128379a8a764e2d12fb2d8ed54186572eecd15fce2ec9ca80391fdc56cea0", "format": 1 }, { - "name": "tests/unit/plugins/test", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/next_nth_usable.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6d78051f7821f65a7ec231f6bf4d668fb5547aaf71598fbd5442c36044ca3d25", "format": 1 }, { - "name": "tests/unit/plugins/test/test_in_one_network.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/network_in_network.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb289246618116f2e2d09bb6d43899449262a3ca9eb53701dad906de6c77ad5f", + "chksum_sha256": "e0b9961802edf76f585891f5b1128149be2c48718a337d7a26c3c15dbf0903e5", "format": 1 }, { - "name": "tests/unit/plugins/test/test_unspecified.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipaddr.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2120f97272e0256c656fe3a135b0410147a3997cc262abc4750b5eb214689ab", + "chksum_sha256": "6b8a511909c70c8f1b2f1e8c7a1a2f5d278d299f6b66ac14bce90c77446ddd9e", "format": 1 }, { - "name": "tests/unit/plugins/test/test_mac.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipv6.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5715bdb66e8e61366661f9d308f83aee53dc299184e8665e0519d99849dc94f5", + "chksum_sha256": "e9f05b478b7cad442c6fdc31f6abe887e32a8c205b0acc24c49712d87fccc18c", "format": 1 }, { - "name": "tests/unit/plugins/test/test_in_network.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipsubnet.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5dd5bdb61188b34b0fd0134aa20e9f94b11f8e188b82a95ef8aeca2a2879893", + "chksum_sha256": "d3cfcf47ee32f59441573a19ab73383b433cbbc0788a9b8ffc0bb925cdffdf64", "format": 1 }, { - "name": "tests/unit/plugins/test/test_subnet_of.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/slaac.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "06895d47f5b0f5bf5fa24ce99534957be882e7a76f9df245ab8d328cd2a7dbba", + "chksum_sha256": "104c76112b82ebbff3f9a8edc5d6e4f7403b813fc1ffdc1bed83fc6c1630bc0e", "format": 1 }, { - "name": "tests/unit/plugins/test/test_ipv4_address.py", + "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ip4_hex.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c881b8a384621755b114f8356b9142b46bec64fa90fc984831882c7dc4b7377", + "chksum_sha256": "245f6e53dd8b2f6bcdde2ee8d7d2037de96e3438c8702475a2907423e3a036b3", "format": 1 }, { - "name": "tests/unit/plugins/test/test_ip_address.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5ea2c4d0f5beae703798ee0e6d54744ae3b79fc7ca11bffaf8ae1a4275384dbb", + "name": "tests/integration/targets/utils_usable_range", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/test/test_supernet_of.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "689e4f486489731d298a2dddccd2eaaa4b9a0c66059fcf6dfeca5b92fdde7a40", + "name": "tests/integration/targets/utils_usable_range/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/test/test_ipv4_netmask.py", + "name": "tests/integration/targets/utils_usable_range/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a921af90905cd241e787292fa8338ba710510f6e2a5e7a4e4f641e5a72e116d", + "chksum_sha256": "cb30024867cbb7d7176c4459c7c6f1c798967e788af4b537789305cbf9659ba1", "format": 1 }, { - "name": "tests/unit/plugins/test/test_validate.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0da10d0aec55c3d00f67d193d73a7f53f9fcdf5c28a36c89edf30a31a698f835", + "name": "tests/integration/targets/utils_usable_range/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/test/test_ipv6_ipv4_mapped.py", + "name": "tests/integration/targets/utils_usable_range/tasks/argspec.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0cf6377c7e6fdab24f9ff780fead00cacd2c64cf33a2640254f225ba31380b41", + "chksum_sha256": "e7f5735cd4b1509e1d0b98d4857ede083995365ba6b5bf07639ac516e36e8c04", "format": 1 }, { - "name": "tests/unit/plugins/test/test_ipv4_hostmask.py", + "name": "tests/integration/targets/utils_usable_range/tasks/example_filter.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6171d28f9a84a707665c1c195bed9468620be868cc15ed2cba4a8e41e7ff40c6", + "chksum_sha256": "19a626c2c0fbe4235775b9bf9ae7b13e0c332faf940f6d733512b6f5ed3cb523", "format": 1 }, { - "name": "tests/unit/plugins/test/__init__.py", + "name": "tests/integration/targets/utils_usable_range/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/unit/plugins/test/test_ip.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1820bbbbf5c279edab27e4b4c8eb6dcbb0637e6ab7ad475740f3e28decb2ea3c", + "name": "tests/integration/targets/utils_cli_parse", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/test/test_ipv6_sixtofour.py", + "name": "tests/integration/targets/utils_cli_parse/files", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/utils_cli_parse/files/nxos_show_interface.xml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8fe23ce26dae270d1ff9927b67c3532bf7d19302270ac02cdcfae72f0ce9dcea", + "chksum_sha256": "363ab311f6ce9d7598f3ec3ce5546b33d634a8f079cd739ec478adc2a08fc9db", "format": 1 }, { - "name": "tests/unit/plugins/test/test_private.py", + "name": "tests/integration/targets/utils_cli_parse/files/nxos_show_version.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2c265247dd4e5e72b54e4c06a24e0bdaa3dd44d1d2c3f239836367815d3bd45", + "chksum_sha256": "7f264359b5e09e5093a59c73d9f844f55427b67177f0727ff3223f509d4fda83", "format": 1 }, { - "name": "tests/unit/plugins/test/test_ipv6_address.py", + "name": "tests/integration/targets/utils_cli_parse/files/nxos_show_interface.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef1da66dbfc60885ae203a9f928fc4d00871611d199ba0f9d72800dd9ad06784", + "chksum_sha256": "85baa8eed232e6d7dd7a470efb6b4f3efce552c847d1f73c80c651d1441000e5", "format": 1 }, { - "name": "tests/unit/plugins/test/test_ipv6_teredo.py", + "name": "tests/integration/targets/utils_cli_parse/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/utils_cli_parse/templates/nxos_show_version.textfsm", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6388005b806410f811c2563f391af8293c092a8bf2c1cc306924d841dc5c259", + "chksum_sha256": "dfd59adde11de6285a62179e45db7b4e20e9ca61f276f6567c86c8455f796887", "format": 1 }, { - "name": "tests/unit/plugins/test/test_reserved.py", + "name": "tests/integration/targets/utils_cli_parse/templates/ubuntu_ifconfig.textfsm", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4193331ebbfc489c367c6ccf0c82e0fa27b55223a63f0580c70c8f8517836abe", + "chksum_sha256": "c1f10f192897c123e3e7fd0823384db59036d0c36b178bad57229e204688c2ba", "format": 1 }, { - "name": "tests/unit/plugins/test/test_in_any_network.py", + "name": "tests/integration/targets/utils_cli_parse/templates/ubuntu_df_-h.ttp", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8cb82b265eb75d38d50b45899dee25ff3cdb4377dbdd8959d4ff8c60fd15080", + "chksum_sha256": "83912bee5ca45c074370bf195532ee3172a4b2e687055d5639e933d5522c33d2", "format": 1 }, { - "name": "tests/unit/plugins/test/test_loopback.py", + "name": "tests/integration/targets/utils_cli_parse/templates/fedora_df_-h.ttp", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "15f7773d729431790a34f6fe50bcd7e604a231010823fb342493f94e0fb63228", + "chksum_sha256": "83912bee5ca45c074370bf195532ee3172a4b2e687055d5639e933d5522c33d2", "format": 1 }, { - "name": "tests/unit/plugins/test/test_ipv4.py", + "name": "tests/integration/targets/utils_cli_parse/templates/nxos_show_interface.ttp", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "190f866df1ba29371b53cab0e43f624e1ac4494267f47138866fba128370d3a1", + "chksum_sha256": "7b54c727fb9ab5731dbef7b5c271a41276278b15b7408bd24e25eda28e5c1a09", "format": 1 }, { - "name": "tests/unit/plugins/test/test_public.py", + "name": "tests/integration/targets/utils_cli_parse/templates/centos_df_-h.ttp", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "33da01193555a9424667f52041af1630e14011300138a742a6cdc8d821950581", + "chksum_sha256": "83912bee5ca45c074370bf195532ee3172a4b2e687055d5639e933d5522c33d2", "format": 1 }, { - "name": "tests/unit/plugins/test/test_multicast.py", + "name": "tests/integration/targets/utils_cli_parse/templates/nxos_show_interface.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a8673d3d2935aab3e8f32bc214dbf994cbe0b2d5985230b6328211f59df9740", + "chksum_sha256": "bcebc3ef1d3e94fd156e655704999ee16837a1c95b90c6d8bbd567e47e4ce272", "format": 1 }, { - "name": "tests/unit/plugins/test/test_resolvable.py", + "name": "tests/integration/targets/utils_cli_parse/templates/fedora_ifconfig.textfsm", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb3113549b0ff4bd26df1dde96d26dc447a32de0454891f610f654417ea556ff", + "chksum_sha256": "c1f10f192897c123e3e7fd0823384db59036d0c36b178bad57229e204688c2ba", "format": 1 }, { - "name": "tests/unit/plugins/test/test_ipv6.py", + "name": "tests/integration/targets/utils_cli_parse/templates/centos_ifconfig.textfsm", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa1d692fc009c544c82869bf83da79c0f47809449a1b25d61a9fb519d841e3f8", + "chksum_sha256": "c1f10f192897c123e3e7fd0823384db59036d0c36b178bad57229e204688c2ba", "format": 1 }, { - "name": "tests/unit/plugins/action", + "name": "tests/integration/targets/utils_cli_parse/output", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/action/test_update_fact.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "654dac1e82b9d6cb329d1b056418dd24ac8cfc5e1c3b2812ca06b64f2f614304", - "format": 1 - }, - { - "name": "tests/unit/plugins/action/test_validate.py", + "name": "tests/integration/targets/utils_cli_parse/output/nxos_show_interface_ttp_parsed.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "66a45978bdd14da7f4e9125f4626344b926d7a3e25ccdee139f20591042aca5d", + "chksum_sha256": "1470ac4a29d08f6ef1dbf1ec6bc90fcd5cfaf200e8ad1dfee8389478ba522be7", "format": 1 }, { - "name": "tests/unit/plugins/action/__init__.py", + "name": "tests/integration/targets/utils_cli_parse/output/nxos_show_interface_json_text.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "6c28e733dc3473f0dd9a1cbe5c29b0f1be25906ddb0ecd9eb3c9cd5ec9cd4f83", "format": 1 }, { - "name": "tests/unit/plugins/action/test_fact_diff.py", + "name": "tests/integration/targets/utils_cli_parse/output/nxos_show_interface_xml_parsed.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e7cef6292dbd3f121b22aaa3de2c7b7e87ee92045dd8b0166d84a66b1fee30f", + "chksum_sha256": "278afc0fc6a54b10bec893de1cce2a912fe55ea37993627c9b869451ccfa8523", "format": 1 }, { - "name": "tests/unit/plugins/action/test_cli_parse.py", + "name": "tests/integration/targets/utils_cli_parse/output/nxos_show_version_textfsm_parsed.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c33ddd4975918d7493c954bf30824ff98d53cbd82f3c9006111ac4d3e1ce271c", + "chksum_sha256": "f397b4e90691b66a63829f2fa42874b5bea7e6558f712ce37582238e789746f7", "format": 1 }, { - "name": "tests/unit/plugins/action/fixtures", + "name": "tests/integration/targets/utils_cli_parse/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/action/fixtures/nxos_show_version.txt", + "name": "tests/integration/targets/utils_cli_parse/tasks/ubuntu_textfsm.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc4ab2b1c2a8c82c81cd1c61338d0d48737f751d4f859da0509168ea4c5d3dfd", + "chksum_sha256": "dca8446bfde97c3bcfae26d7d157d9600f9c3ca5f84f970b5d2e4aecb38cdfaf", "format": 1 }, { - "name": "tests/unit/plugins/action/fixtures/nxos_show_version.textfsm", + "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_ttp.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a43d22b3a39174cdecc292f455723837a6dd4573af671ab7439cce2d362f0f1c", + "chksum_sha256": "ab03e39f60d54339a10c8477ad323223de6508a729ab0d3635f234d15dcb2ec5", "format": 1 }, { - "name": "tests/unit/plugins/action/fixtures/nxos_empty_parser.textfsm", + "name": "tests/integration/targets/utils_cli_parse/tasks/fedora_textfsm.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/mock", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "dca8446bfde97c3bcfae26d7d157d9600f9c3ca5f84f970b5d2e4aecb38cdfaf", "format": 1 }, { - "name": "tests/unit/mock/vault_helper.py", + "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_xml.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41", + "chksum_sha256": "2da27258e5c5b2f59e994347df9c2024c1578366a598bdb9f92b7b6525375fde", "format": 1 }, { - "name": "tests/unit/mock/__init__.py", + "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_json.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "732de9a24704cdad80002b5e469b7b82148ec777bceea0e093aba10548fc0638", "format": 1 }, { - "name": "tests/unit/mock/procenv.py", + "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_textfsm.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87bcd1ee9580503da97f9813d00ef9499673b6e859e5b573725df5b340abbaba", + "chksum_sha256": "3136ee047a0c7a86abe2d8b1bfaf6f71108b34836ac3a0784872ead1c4530e79", "format": 1 }, { - "name": "tests/unit/mock/loader.py", + "name": "tests/integration/targets/utils_cli_parse/tasks/centos_textfsm.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b", + "chksum_sha256": "dca8446bfde97c3bcfae26d7d157d9600f9c3ca5f84f970b5d2e4aecb38cdfaf", "format": 1 }, { - "name": "tests/unit/mock/yaml_helper.py", + "name": "tests/integration/targets/utils_cli_parse/tasks/centos_ttp.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc4f4d5d2968ced8e3a04653354945d720e7c6369aad67ba7724c5981c82b6ea", + "chksum_sha256": "86028821b368a285f488ff0fed9f417682e8e979810221189d781c6e09554fca", "format": 1 }, { - "name": "tests/unit/mock/path.py", + "name": "tests/integration/targets/utils_cli_parse/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "107c7d9f5dbfcead13356525e2c49743a1149a7d9cc720c1937e0253b7f0b67e", - "format": 1 - }, - { - "name": "tests/unit/compat", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "9254cb4133f860ba7fe60ffa731c6c6c1af94d85f9a94b464523e85d0523b6f5", "format": 1 }, { - "name": "tests/unit/compat/unittest.py", + "name": "tests/integration/targets/utils_cli_parse/tasks/argspec.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b79b386fc73fbb89a0d865568032096fa0dea0d236e608ad87b55276fe93f119", + "chksum_sha256": "77982a1f454b2b6a7243fc01f68e48e1a8309baa510db00dc3f6bd3e0a0b4bdd", "format": 1 }, { - "name": "tests/unit/compat/__init__.py", + "name": "tests/integration/targets/utils_cli_parse/tasks/fedora_ttp.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "86028821b368a285f488ff0fed9f417682e8e979810221189d781c6e09554fca", "format": 1 }, { - "name": "tests/unit/compat/mock.py", + "name": "tests/integration/targets/utils_cli_parse/tasks/ubuntu_ttp.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c61dd34c35669e00f664f7f72416629ef4b7ff52992d7a5f0a7e47eb90a316f5", + "chksum_sha256": "86028821b368a285f488ff0fed9f417682e8e979810221189d781c6e09554fca", "format": 1 }, { - "name": "tests/unit/module_utils", + "name": "tests/integration/targets/utils_fact_diff", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/module_utils/test_sort_list.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5432c26e1d6929676b5fc53974191e160f6e15286ebd819fba3c204a4e55dbef", + "name": "tests/integration/targets/utils_fact_diff/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/module_utils/test_get_path.py", + "name": "tests/integration/targets/utils_fact_diff/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc0a94e3064bdf0ae20921fe4480703fe6efc3089ff45180266aefaf1c6d6283", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/unit/module_utils/test_dict_merge.py", + "name": "tests/integration/targets/utils_fact_diff/tasks/simple.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81ce3d79c154c5803a0411a9f99006a5784435db8df3a53feab84ad6544d0a6e", + "chksum_sha256": "f553cdcfd97be39cf9c0067d12e3b15bb3d783fb9f7d21559a1f3684f8483f2f", "format": 1 }, { - "name": "tests/unit/module_utils/__init__.py", + "name": "tests/integration/targets/utils_fact_diff/tasks/argspec.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "4d2b497c4f889ab78c078d4a267322691abe8a025dfb71a1dc64180167a93f8b", "format": 1 }, { - "name": "tests/unit/module_utils/test_to_paths.py", + "name": "tests/integration/targets/utils_fact_diff/tasks/filter.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "100e1809df26dfc5c42d02dc8da2f52def4c796558aec59f17a9cb6f7009a937", + "chksum_sha256": "c54727ea05083048fe11d3277aca6667dd9687d1e95010b6982ae81defb9bc13", "format": 1 }, { - "name": "tests/unit/module_utils/test_argspec_validate.py", + "name": "tests/integration/targets/utils_fact_diff/tasks/examples.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8816c68b5b5e482e05c04464e45bffa4b69700ec00090ada1f5c5b74f2f4e58", + "chksum_sha256": "8ca4ff69a313d35d39d1faa6228c03971a9019395d85ab1fec417a331f3c8330", "format": 1 }, { - "name": "tests/unit/module_utils/fixtures", + "name": "tests/integration/targets/utils_from_xml", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/module_utils/fixtures/docstring.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1f147714958e065abe3622fa3e94ee26f70d06212de8cdbe54210c28a4e71b02", - "format": 1 - }, - { - "name": "tests/unit/module_utils/fixtures/large.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "56dadab818a719846f64c0fcfd7d0c2c1eeb34cdb8cc646033311ef90b0770a1", - "format": 1 - }, - { - "name": "tests/unit/module_utils/fixtures/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/integration", + "name": "tests/integration/targets/utils_from_xml/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/requirements.txt", + "name": "tests/integration/targets/utils_from_xml/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b75218b504713c1965fd2ade34d0a29db85713adb484dabaac17bc9967bf5a22", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/integration/test_integration.py", + "name": "tests/integration/targets/utils_from_xml/tasks/simple.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff6a6be37cf9314c1dcdff0004949ef58a027b2a9b1c931ab0548e255a66dd25", + "chksum_sha256": "8cc0c47302d38b9929e0d184b11cc10cf0359d1fc4a732039a4fb6b7ea111efd", "format": 1 }, { - "name": "tests/integration/targets", + "name": "tests/integration/targets/utils_validate", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_index_of", + "name": "tests/integration/targets/utils_validate/files", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_index_of/tasks", + "name": "tests/integration/targets/utils_validate/files/criteria", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_index_of/tasks/examples_filter.yaml", + "name": "tests/integration/targets/utils_validate/files/criteria/in_rate_check.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d430649f6347b6327300fa07b06751508823293284efcb2d85cb0121fba493c5", + "chksum_sha256": "eaf0cb45846bc2ebd25ecfbe85308fd7e3358e4900da1ce0d4c9418b42ab7aa7", "format": 1 }, { - "name": "tests/integration/targets/utils_index_of/tasks/argspec.yaml", + "name": "tests/integration/targets/utils_validate/files/criteria/check_list_data.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "98d3173c95800792d144508ea1cabdb032d318d1cc77b9f0416a21e6cb732d4a", + "chksum_sha256": "80ed8bbc4b06991acb84b2b8c61bf8a45cfc0091c2b9b4b443f02fd030de16e8", "format": 1 }, { - "name": "tests/integration/targets/utils_index_of/tasks/examples_lookup.yaml", + "name": "tests/integration/targets/utils_validate/files/criteria/enabled_check.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3606cec6d01105e1e0116a63ffc6cb3293184abafcf1472a8e473d1a16711f9c", + "chksum_sha256": "d37e8293e59f15873c54a47542cb0a9190b0f2f615126f276c6177816bb608ed", "format": 1 }, { - "name": "tests/integration/targets/utils_index_of/tasks/main.yaml", + "name": "tests/integration/targets/utils_validate/files/criteria/crc_error_check.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "a1ec6bca6330a50b33920472d576acf1d62287a8aadbcf9ee63aed6673a2d784", "format": 1 }, { - "name": "tests/integration/targets/utils_index_of/tasks/simple.yaml", + "name": "tests/integration/targets/utils_validate/files/criteria/format_checker.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1835e807efc8882163e2da83587baf64fa1c73611f649af1feba94b246c08a4a", - "format": 1 - }, - { - "name": "tests/integration/targets/utils_replace_keys", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/utils_replace_keys/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "734eab506a730d90e57069d5e1177135ffeb0ac68db61942576e49144b8a5094", "format": 1 }, { - "name": "tests/integration/targets/utils_replace_keys/tasks/main.yaml", + "name": "tests/integration/targets/utils_validate/files/criteria/oper_status_up.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "2c1159ec568a023a818953cb77c8e1618af99a8ec217d6a3ac108d972b78790d", "format": 1 }, { - "name": "tests/integration/targets/utils_replace_keys/tasks/simple.yaml", + "name": "tests/integration/targets/utils_validate/files/criteria/rules.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e9b9656746b1aaf502a733cf8af5350f2c7cd2abbb229c3684ce9e213dc95156", + "chksum_sha256": "fff82706f9f040c45e3e8d927968dfb5297e7c99904c4aa5b34f6ad9262619b7", "format": 1 }, { - "name": "tests/integration/targets/utils_replace_keys/vars", + "name": "tests/integration/targets/utils_validate/files/data", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_replace_keys/vars/main.yaml", + "name": "tests/integration/targets/utils_validate/files/data/show_interface.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7bd28edb6a57c74d136d92d4faa678d480d17c8db0239fa294da1ab69cb1437c", - "format": 1 - }, - { - "name": "tests/integration/targets/utils_remove_keys", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/utils_remove_keys/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e9d872c87bec35f958131f5a57469184dcb8364000a3fd2c764e698b0f7e7148", "format": 1 }, { - "name": "tests/integration/targets/utils_remove_keys/tasks/main.yaml", + "name": "tests/integration/targets/utils_validate/files/data/fail.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "5bc357ee82697a6f8a4920451a0fdfc81f9f6af9522a134d26112abd20b41562", "format": 1 }, { - "name": "tests/integration/targets/utils_remove_keys/tasks/simple.yaml", + "name": "tests/integration/targets/utils_validate/files/data/test_list_data.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac949eae4a5560d8ab122ea6a6dc2266bca438562a17071bc2339fe2e775dd09", + "chksum_sha256": "acc07b62f23f458923737c4cd4a66bd05d1e71eb4f384003baaf2dcc760d6349", "format": 1 }, { - "name": "tests/integration/targets/utils_remove_keys/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/utils_validate/files/data/test_format_checker.json", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5d4327ea944ff2f274a6f4161c9c6f69782202d1455f383a973819e4fbb85f80", "format": 1 }, { - "name": "tests/integration/targets/utils_remove_keys/vars/main.yaml", + "name": "tests/integration/targets/utils_validate/files/data/warn.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f64c5b12c89da7b8a953d4ee3d58e5ff102206f34cef5092be9aefa45c93d34b", + "chksum_sha256": "9a5abf45b025490534361d18b5fd3e8c4ec56c52817d72a9d44c01d33e315d7c", "format": 1 }, { - "name": "tests/integration/targets/utils_from_xml", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/utils_validate/files/data/pass.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1c97ae3826430fb1d113b8ed534f4609057b61cf2864a79eb1d603cf02281d25", "format": 1 }, { - "name": "tests/integration/targets/utils_from_xml/tasks", + "name": "tests/integration/targets/utils_validate/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_from_xml/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", - "format": 1 - }, - { - "name": "tests/integration/targets/utils_from_xml/tasks/simple.yaml", + "name": "tests/integration/targets/utils_validate/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8cc0c47302d38b9929e0d184b11cc10cf0359d1fc4a732039a4fb6b7ea111efd", + "chksum_sha256": "a0a2c468f24a66b8cea391acc05802e57275f212e1d4a467516bafd440f7765e", "format": 1 }, { - "name": "tests/integration/targets/utils_consolidate", + "name": "tests/integration/targets/utils_validate/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_consolidate/tasks", + "name": "tests/integration/targets/utils_validate/tests/jsonschema", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_consolidate/tasks/main.yaml", + "name": "tests/integration/targets/utils_validate/tests/jsonschema/lookup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "97f702bb945e3a25440077a7f1c1671b63b92be19158b5aeeb7ab697f2488707", "format": 1 }, { - "name": "tests/integration/targets/utils_consolidate/tasks/simple.yaml", + "name": "tests/integration/targets/utils_validate/tests/jsonschema/filter.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7105aaee542a860d153d0269d8dcfc07d3630986f2898f2f0c6a8a848df6467d", - "format": 1 - }, - { - "name": "tests/integration/targets/utils_consolidate/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "76f0a20334ee425bf11eaaa8a6d1eac22190389887c60f9c25453c960545adaf", "format": 1 }, { - "name": "tests/integration/targets/utils_consolidate/vars/main.yaml", + "name": "tests/integration/targets/utils_validate/tests/jsonschema/module.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b9863b06cb4ff53639a027557da3cd5ac6b6b08855a181fa95bbccea94a4568", + "chksum_sha256": "d1a87d40a955e4045360cb5b5537d4f3b46d925f03a91e00082ef0fba4a85333", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/utils_validate/tests/jsonschema/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "407252f2fe336072e3563bcb900454718ec15fcb0342f4298d6133c5f4b66f1b", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks", + "name": "tests/integration/targets/utils_validate/tests/config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipv4.yaml", + "name": "tests/integration/targets/utils_validate/tests/config/lookup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8383abffdac0845a506803744ff43aafb6a69c2b748835ea3a5c9e07d73f969", + "chksum_sha256": "ba6482b4ff88840a1520a4a4a4f8ba25052b3fbc6b5e21a8e70abe93688e2728", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/main.yaml", + "name": "tests/integration/targets/utils_validate/tests/config/filter.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "ba908086e5fbc87673dac750de6dd341ddb7da9d9250571b759abd24a83fe35a", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipsubnet.yaml", + "name": "tests/integration/targets/utils_validate/tests/config/module.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3cfcf47ee32f59441573a19ab73383b433cbbc0788a9b8ffc0bb925cdffdf64", + "chksum_sha256": "3899feac6b3f90205fed11d72cd13781de4d66f82dcffa497dd18d001d198298", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/network_in_usable.yaml", + "name": "tests/integration/targets/utils_validate/tests/config/test.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7a4cc15d93654bfee1af885d8a9d49608219d0aefd42b3207742bcb8e913e3e", + "chksum_sha256": "60c4bdf55c5ad5f5adeccc04df75d979f1b9739d6706bdf1e022d05e7e726a97", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipaddr.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e6275325481abe442067c2681cda3caf7e20efeb31ba8a0cf7e50d62af0e6c4a", + "name": "tests/integration/targets/utils_validate/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/hwaddr.yaml", + "name": "tests/integration/targets/utils_validate/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d79ea40b43a1d173c26b0cbf3e86028476fc2ac535984110e9650fdb0cd5de85", + "chksum_sha256": "56fa753c51c136c218723eba14767e0da3fa34f0745a9d138791a29df3c91565", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/cidr_merge.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7424055f53f023017fb31c9f657d4852ab6105645f23f70ecb9ef8d2b8e24594", + "name": "tests/integration/targets/utils_param_list_compare", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ip4_hex.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "245f6e53dd8b2f6bcdde2ee8d7d2037de96e3438c8702475a2907423e3a036b3", + "name": "tests/integration/targets/utils_param_list_compare/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipwrap.yaml", + "name": "tests/integration/targets/utils_param_list_compare/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b340a4d9688caa6c62d57c83a61350ef476be72e956ddc2652be11f83bda9d82", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/macaddr.yaml", + "name": "tests/integration/targets/utils_param_list_compare/tasks/simple.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0d9c2c75fdd7dba56d6dad2678ea8189dd3f72fba079b9c64f7327de94a8464d", + "chksum_sha256": "e507d9cb6b6a4a4e93e9c7cacacaadeab166f8aae0d1b4372526cc9fc4148829", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/network_in_network.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e0b9961802edf76f585891f5b1128149be2c48718a337d7a26c3c15dbf0903e5", + "name": "tests/integration/targets/utils_get_path", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/slaac.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "104c76112b82ebbff3f9a8edc5d6e4f7403b813fc1ffdc1bed83fc6c1630bc0e", + "name": "tests/integration/targets/utils_get_path/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipmath.yaml", + "name": "tests/integration/targets/utils_get_path/tasks/examples_lookup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e4f81b95ab97909d5700ff50ab0c20b93d8f5be9b581a343b880c415243e2e5c", + "chksum_sha256": "5633047145361740d866a7078aa2fab73b996ebd94533d1915a4aa287460e3ff", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/reduce_on_network.yaml", + "name": "tests/integration/targets/utils_get_path/tasks/examples_filter.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce3a3f10c18b53a0e0530002482b206fe94f919afd70c47e553869adf08341f2", + "chksum_sha256": "f68eb7831768f881ad74e6cabc72c2b831369028c100f5281d51a1a00665edfb", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/next_nth_usable.yaml", + "name": "tests/integration/targets/utils_get_path/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d78051f7821f65a7ec231f6bf4d668fb5547aaf71598fbd5442c36044ca3d25", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipv6.yaml", + "name": "tests/integration/targets/utils_get_path/tasks/simple.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e9f05b478b7cad442c6fdc31f6abe887e32a8c205b0acc24c49712d87fccc18c", + "chksum_sha256": "04026349ef6f6ef67b4240091acbda13f9f1e4bee2e2d5c0eb78e43e69d0ff63", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipv6form.yaml", + "name": "tests/integration/targets/utils_get_path/tasks/argspec.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0484829f9afd48bac830f255435c598be0a6dacf9af7ef8244beeebcd9d357ca", + "chksum_sha256": "11e998ff750cd816aac9742136193a407fed74fa25be42114a9b00fbf7ef4122", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/nthhost.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "55b128379a8a764e2d12fb2d8ed54186572eecd15fce2ec9ca80391fdc56cea0", + "name": "tests/integration/targets/utils_to_xml", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/previous_nth_usable.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dba3b3b6be41729598da9ae343316e666d219e6fcc7c60bec22b163a8a7fc2c0", + "name": "tests/integration/targets/utils_to_xml/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/tasks/ipcut.yaml", + "name": "tests/integration/targets/utils_to_xml/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11eca908bac30ceb6d2296a483d2d9ca137f427f34656b435474e7b9b838e1a4", + "chksum_sha256": "b8405fb4146ef4dbfa941874b93d3c87e02310ddaabf8407f2691da3855f1093", "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/vars", + "name": "tests/integration/targets/utils_to_xml/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_ipaddr_filter/vars/main.yaml", + "name": "tests/integration/targets/utils_to_xml/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "67cd31f077c2e69839d170418f43f920c0c068508c4f6dd9d98f1b322c1bfedf", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/integration/targets/utils_to_paths", + "name": "tests/integration/targets/utils_to_xml/tasks/simple.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7228288965760ffa35f3630bf7ebfc7a6b1709d5d97550e2a2da863b35648551", + "format": 1 + }, + { + "name": "tests/integration/targets/utils_consolidate", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_to_paths/tasks", + "name": "tests/integration/targets/utils_consolidate/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_to_paths/tasks/examples_filter.yaml", + "name": "tests/integration/targets/utils_consolidate/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b51d0464be1d5eebb303d003c62a7d549fa97d28b926a2c2d5f105bd888413e4", + "chksum_sha256": "2b9863b06cb4ff53639a027557da3cd5ac6b6b08855a181fa95bbccea94a4568", "format": 1 }, { - "name": "tests/integration/targets/utils_to_paths/tasks/argspec.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e49e34f5831d822317ba67cd1c78a0bc7d3c7790fb8458ee17debda2c9b56cfa", + "name": "tests/integration/targets/utils_consolidate/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_to_paths/tasks/examples_lookup.yaml", + "name": "tests/integration/targets/utils_consolidate/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7effabb7c07aeb379aceac6e0bc1dc79b3866a75af1780184cff1a716fa4a52", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/integration/targets/utils_to_paths/tasks/main.yaml", + "name": "tests/integration/targets/utils_consolidate/tasks/simple.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "7105aaee542a860d153d0269d8dcfc07d3630986f2898f2f0c6a8a848df6467d", "format": 1 }, { - "name": "tests/integration/targets/utils_to_paths/tasks/empty_members.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2fe1cff51babbc914c2fb685bdbbb4a3930ca6914bf9a2b814804f088702cc6a", + "name": "tests/integration/targets/utils_update_fact", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_to_paths/tasks/simple.yaml", + "name": "tests/integration/targets/utils_update_fact/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/utils_update_fact/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa868cb38568c82458b11d5cfc3af8b45caeea0a87f66cdedd57de808acd8eb1", + "chksum_sha256": "8ebea41c6f8a93be2240cd0c45732a3d596cf571cb64547dc113217da56b575b", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse", + "name": "tests/integration/targets/utils_netaddr_test", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks", + "name": "tests/integration/targets/utils_netaddr_test/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/ubuntu_ttp.yaml", + "name": "tests/integration/targets/utils_netaddr_test/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86028821b368a285f488ff0fed9f417682e8e979810221189d781c6e09554fca", + "chksum_sha256": "c00756f4c7d02ea4d04b4237141685543b0c673a354774e61b2acb48f45837bd", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/centos_textfsm.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dca8446bfde97c3bcfae26d7d157d9600f9c3ca5f84f970b5d2e4aecb38cdfaf", + "name": "tests/integration/targets/utils_netaddr_test/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/fedora_ttp.yaml", + "name": "tests/integration/targets/utils_netaddr_test/tasks/subnet_of.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86028821b368a285f488ff0fed9f417682e8e979810221189d781c6e09554fca", + "chksum_sha256": "83ff3bf515253a8a340e7690c88f580f56ec1e8397a1e67d4a34cd7f29ad6ef6", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/argspec.yaml", + "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_teredo.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "77982a1f454b2b6a7243fc01f68e48e1a8309baa510db00dc3f6bd3e0a0b4bdd", + "chksum_sha256": "c1ff255343b3b1d352575ac914f4268ebca0dbbdb780f6827f75382ef4df536a", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_xml.yaml", + "name": "tests/integration/targets/utils_netaddr_test/tasks/multicast.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2da27258e5c5b2f59e994347df9c2024c1578366a598bdb9f92b7b6525375fde", + "chksum_sha256": "d8e39c219e278db46e2486ad411fe474860431184fb5e432fe36e226e26d508c", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/main.yaml", + "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv4_address.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9254cb4133f860ba7fe60ffa731c6c6c1af94d85f9a94b464523e85d0523b6f5", + "chksum_sha256": "615dbbb31b07b9482dc6ae37305ab4d5b5c019a59bc10361ac40218d5de79203", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_ttp.yaml", + "name": "tests/integration/targets/utils_netaddr_test/tasks/ip.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab03e39f60d54339a10c8477ad323223de6508a729ab0d3635f234d15dcb2ec5", + "chksum_sha256": "93fe8c749063d99f6ee84648c75b90b12453f8144d0a26c145472a2f805ef5dd", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/fedora_textfsm.yaml", + "name": "tests/integration/targets/utils_netaddr_test/tasks/loopback.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dca8446bfde97c3bcfae26d7d157d9600f9c3ca5f84f970b5d2e4aecb38cdfaf", + "chksum_sha256": "aad21feb2e6d9130c6d0e61c8babce281670ae4eccac0c9f5bfbebc7a868403d", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/centos_ttp.yaml", + "name": "tests/integration/targets/utils_netaddr_test/tasks/in_any_network.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86028821b368a285f488ff0fed9f417682e8e979810221189d781c6e09554fca", + "chksum_sha256": "e56f13ad78aba2bb04ffd61f951cba00731bafd2fdaccab7bfdee64f88e2346e", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/ubuntu_textfsm.yaml", + "name": "tests/integration/targets/utils_netaddr_test/tasks/supernet_of.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dca8446bfde97c3bcfae26d7d157d9600f9c3ca5f84f970b5d2e4aecb38cdfaf", + "chksum_sha256": "c43c74df672831d7ec50692236de868518702232a9f18655e666cd317182773e", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_textfsm.yaml", + "name": "tests/integration/targets/utils_netaddr_test/tasks/public.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3136ee047a0c7a86abe2d8b1bfaf6f71108b34836ac3a0784872ead1c4530e79", + "chksum_sha256": "0e004a3450bd9e12583d55af195a3b07307cf91dba57ee7a43ba8717c3e3ff4b", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/tasks/nxos_json.yaml", + "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_sixtofour.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "732de9a24704cdad80002b5e469b7b82148ec777bceea0e093aba10548fc0638", + "chksum_sha256": "0b1534121ecea3709d0fb5b8dd1506c57bc6a6dae5097cd7c90bd52bb9f6d16a", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/output", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_address.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b288eb0fa02b285827f29fe3cfc07240e41728bdb5cf774d95e47fdb3a1724da", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/output/nxos_show_interface_json_text.txt", + "name": "tests/integration/targets/utils_netaddr_test/tasks/unspecified.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c28e733dc3473f0dd9a1cbe5c29b0f1be25906ddb0ecd9eb3c9cd5ec9cd4f83", + "chksum_sha256": "56dbed00bd55bbf9d35fa877fc0c09f3dc68dec8e0a59303911001ed781c589d", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/output/nxos_show_interface_xml_parsed.json", + "name": "tests/integration/targets/utils_netaddr_test/tasks/reserved.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "278afc0fc6a54b10bec893de1cce2a912fe55ea37993627c9b869451ccfa8523", + "chksum_sha256": "ffe3ff53d0356e042999d9b0a78e95d27d1fa5d8d0912163eb593f5b5594ecb9", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/output/nxos_show_version_textfsm_parsed.json", + "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f397b4e90691b66a63829f2fa42874b5bea7e6558f712ce37582238e789746f7", + "chksum_sha256": "17f7a28a9a7796ee29e99b080af194ba1923736bdc1e17cb6afb4bbfae1e3820", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/output/nxos_show_interface_ttp_parsed.json", + "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv4.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1470ac4a29d08f6ef1dbf1ec6bc90fcd5cfaf200e8ad1dfee8389478ba522be7", + "chksum_sha256": "afdc9774b465291d36a84a253f6b74b3be52e6534df4c09aed5edfe1702a38a4", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/files", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_ipv4_mapped.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3bf41c07dfa38283acd03c2d9c837611736dba49158652a919afaeb6f3fafcfa", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/files/nxos_show_interface.txt", + "name": "tests/integration/targets/utils_netaddr_test/tasks/ip_address.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85baa8eed232e6d7dd7a470efb6b4f3efce552c847d1f73c80c651d1441000e5", + "chksum_sha256": "21061cd07a8a22833eb928c528ec030c11cd183896a31074bdc83fd1e898a637", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/files/nxos_show_interface.xml", + "name": "tests/integration/targets/utils_netaddr_test/tasks/private.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "363ab311f6ce9d7598f3ec3ce5546b33d634a8f079cd739ec478adc2a08fc9db", + "chksum_sha256": "9a0e6c4c080e3a1e916dbd47a051553d38b485e778d55c20ca85498c4e482376", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/files/nxos_show_version.txt", + "name": "tests/integration/targets/utils_netaddr_test/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f264359b5e09e5093a59c73d9f844f55427b67177f0727ff3223f509d4fda83", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/utils_netaddr_test/tasks/in_one_network.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "14eed91cb6c11783729c61e43077f02a8143a472f7c711d8ec32bb845ea0aa47", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/templates/centos_ifconfig.textfsm", + "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv4_netmask.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f10f192897c123e3e7fd0823384db59036d0c36b178bad57229e204688c2ba", + "chksum_sha256": "edbf017def035b5ca082756de8a91fcf4bfbcc4fc3414aa5fc60bd131a98129d", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/templates/nxos_show_interface.ttp", + "name": "tests/integration/targets/utils_netaddr_test/tasks/mac.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b54c727fb9ab5731dbef7b5c271a41276278b15b7408bd24e25eda28e5c1a09", + "chksum_sha256": "4ada1fd18ed85280d8f5bad674d7f5dfecec48ff379a8e707dbf7bbd8ab82111", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/templates/centos_df_-h.ttp", + "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv4_hostmask.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83912bee5ca45c074370bf195532ee3172a4b2e687055d5639e933d5522c33d2", + "chksum_sha256": "97dbcf159a748ca1f99c839d55af01455cf68e005ca30008cd48215d097eb461", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/templates/ubuntu_ifconfig.textfsm", + "name": "tests/integration/targets/utils_netaddr_test/tasks/resolvable.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f10f192897c123e3e7fd0823384db59036d0c36b178bad57229e204688c2ba", + "chksum_sha256": "66ec974d89255561d81d2a6a62ace155dd6cc4f028b8fd7f1e77ec3dc270fd27", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/templates/fedora_df_-h.ttp", + "name": "tests/integration/targets/utils_netaddr_test/tasks/in_network.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83912bee5ca45c074370bf195532ee3172a4b2e687055d5639e933d5522c33d2", + "chksum_sha256": "179f6a091bc6a3b788e4ab31205bc1de8762f31d5cd134f8910748e8f3f77d17", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/templates/nxos_show_version.textfsm", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dfd59adde11de6285a62179e45db7b4e20e9ca61f276f6567c86c8455f796887", + "name": "tests/integration/targets/utils_to_paths", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/templates/nxos_show_interface.yaml", + "name": "tests/integration/targets/utils_to_paths/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/utils_to_paths/tasks/examples_lookup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bcebc3ef1d3e94fd156e655704999ee16837a1c95b90c6d8bbd567e47e4ce272", + "chksum_sha256": "e7effabb7c07aeb379aceac6e0bc1dc79b3866a75af1780184cff1a716fa4a52", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/templates/ubuntu_df_-h.ttp", + "name": "tests/integration/targets/utils_to_paths/tasks/examples_filter.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83912bee5ca45c074370bf195532ee3172a4b2e687055d5639e933d5522c33d2", + "chksum_sha256": "b51d0464be1d5eebb303d003c62a7d549fa97d28b926a2c2d5f105bd888413e4", "format": 1 }, { - "name": "tests/integration/targets/utils_cli_parse/templates/fedora_ifconfig.textfsm", + "name": "tests/integration/targets/utils_to_paths/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f10f192897c123e3e7fd0823384db59036d0c36b178bad57229e204688c2ba", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/integration/targets/utils_param_list_compare", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/utils_to_paths/tasks/simple.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "aa868cb38568c82458b11d5cfc3af8b45caeea0a87f66cdedd57de808acd8eb1", "format": 1 }, { - "name": "tests/integration/targets/utils_param_list_compare/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/utils_to_paths/tasks/argspec.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e49e34f5831d822317ba67cd1c78a0bc7d3c7790fb8458ee17debda2c9b56cfa", "format": 1 }, { - "name": "tests/integration/targets/utils_param_list_compare/tasks/main.yaml", + "name": "tests/integration/targets/utils_to_paths/tasks/empty_members.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "2fe1cff51babbc914c2fb685bdbbb4a3930ca6914bf9a2b814804f088702cc6a", "format": 1 }, { - "name": "tests/integration/targets/utils_param_list_compare/tasks/simple.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e507d9cb6b6a4a4e93e9c7cacacaadeab166f8aae0d1b4372526cc9fc4148829", + "name": "tests/integration/targets/utils_replace_keys", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_get_path", + "name": "tests/integration/targets/utils_replace_keys/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_get_path/tasks", + "name": "tests/integration/targets/utils_replace_keys/vars/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7bd28edb6a57c74d136d92d4faa678d480d17c8db0239fa294da1ab69cb1437c", + "format": 1 + }, + { + "name": "tests/integration/targets/utils_replace_keys/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_get_path/tasks/examples_filter.yaml", + "name": "tests/integration/targets/utils_replace_keys/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f68eb7831768f881ad74e6cabc72c2b831369028c100f5281d51a1a00665edfb", + "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", "format": 1 }, { - "name": "tests/integration/targets/utils_get_path/tasks/argspec.yaml", + "name": "tests/integration/targets/utils_replace_keys/tasks/simple.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11e998ff750cd816aac9742136193a407fed74fa25be42114a9b00fbf7ef4122", + "chksum_sha256": "e9b9656746b1aaf502a733cf8af5350f2c7cd2abbb229c3684ce9e213dc95156", "format": 1 }, { - "name": "tests/integration/targets/utils_get_path/tasks/examples_lookup.yaml", + "name": "tests/integration/test_integration.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5633047145361740d866a7078aa2fab73b996ebd94533d1915a4aa287460e3ff", + "chksum_sha256": "ff6a6be37cf9314c1dcdff0004949ef58a027b2a9b1c931ab0548e255a66dd25", "format": 1 }, { - "name": "tests/integration/targets/utils_get_path/tasks/main.yaml", + "name": "tests/integration/requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "b75218b504713c1965fd2ade34d0a29db85713adb484dabaac17bc9967bf5a22", "format": 1 }, { - "name": "tests/integration/targets/utils_get_path/tasks/simple.yaml", + "name": "tests/config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04026349ef6f6ef67b4240091acbda13f9f1e4bee2e2d5c0eb78e43e69d0ff63", + "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e", "format": 1 }, { - "name": "tests/integration/targets/utils_fact_diff", + "name": "tests/unit", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_fact_diff/tasks", + "name": "tests/unit/mock", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_fact_diff/tasks/argspec.yaml", + "name": "tests/unit/mock/loader.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d2b497c4f889ab78c078d4a267322691abe8a025dfb71a1dc64180167a93f8b", + "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b", "format": 1 }, { - "name": "tests/integration/targets/utils_fact_diff/tasks/examples.yaml", + "name": "tests/unit/mock/yaml_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ca4ff69a313d35d39d1faa6228c03971a9019395d85ab1fec417a331f3c8330", + "chksum_sha256": "fc4f4d5d2968ced8e3a04653354945d720e7c6369aad67ba7724c5981c82b6ea", "format": 1 }, { - "name": "tests/integration/targets/utils_fact_diff/tasks/filter.yaml", + "name": "tests/unit/mock/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a3ee8e155f24c996026a08d88ee35365a1e47b1f19bc9a44d6335b4394fda74a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/utils_fact_diff/tasks/main.yaml", + "name": "tests/unit/mock/vault_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41", "format": 1 }, { - "name": "tests/integration/targets/utils_fact_diff/tasks/simple.yaml", + "name": "tests/unit/mock/procenv.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f553cdcfd97be39cf9c0067d12e3b15bb3d783fb9f7d21559a1f3684f8483f2f", + "chksum_sha256": "3ff983479d7aa4b90efe73337f723c14224edabcdfde4efe49f24cd905f45f1a", "format": 1 }, { - "name": "tests/integration/targets/utils_keep_keys", + "name": "tests/unit/mock/path.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b4f978c74a0eb5de96c00fb6ebfa2c410cb6e60bbb2b8569a473eea9dbccf4cf", + "format": 1 + }, + { + "name": "tests/unit/plugins", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_keep_keys/tasks", + "name": "tests/unit/plugins/lookup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_keep_keys/tasks/main.yaml", + "name": "tests/unit/plugins/lookup/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/utils_keep_keys/tasks/simple.yaml", + "name": "tests/unit/plugins/lookup/test_validate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dde35ae44213bd57cf8d06af380a0ec047374e13f4b56a8af11c87da95cbd50e", + "chksum_sha256": "7f45d7fdf5374150d76ccd748e78be3235e70d25729031f2e0c798b372b7d7ec", "format": 1 }, { - "name": "tests/integration/targets/utils_keep_keys/vars", + "name": "tests/unit/plugins/action", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_keep_keys/vars/main.yaml", + "name": "tests/unit/plugins/action/test_fact_diff.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef8940b0190398df13528e09eeeb4d70c7033b6dfbd55020d98cb65f87bd49e1", + "chksum_sha256": "e43ee9cf54ee1720ed01afd71a65c7a7c56cc307bebe140c82c9dc73e89b66ac", "format": 1 }, { - "name": "tests/integration/targets/utils_usable_range", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/action/test_update_fact.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a2bf8f765ce4b7629d58b011ffbcc75b7843f4ea0a477472d417ab9a1daca24d", "format": 1 }, { - "name": "tests/integration/targets/utils_usable_range/tasks", + "name": "tests/unit/plugins/action/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_usable_range/tasks/example_filter.yml", + "name": "tests/unit/plugins/action/fixtures/nxos_empty_parser.textfsm", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19a626c2c0fbe4235775b9bf9ae7b13e0c332faf940f6d733512b6f5ed3cb523", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/utils_usable_range/tasks/argspec.yml", + "name": "tests/unit/plugins/action/fixtures/nxos_show_version.textfsm", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7f5735cd4b1509e1d0b98d4857ede083995365ba6b5bf07639ac516e36e8c04", + "chksum_sha256": "a43d22b3a39174cdecc292f455723837a6dd4573af671ab7439cce2d362f0f1c", "format": 1 }, { - "name": "tests/integration/targets/utils_usable_range/tasks/main.yml", + "name": "tests/unit/plugins/action/fixtures/nxos_show_version.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "dc4ab2b1c2a8c82c81cd1c61338d0d48737f751d4f859da0509168ea4c5d3dfd", "format": 1 }, { - "name": "tests/integration/targets/utils_usable_range/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/action/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/utils_usable_range/vars/main.yml", + "name": "tests/unit/plugins/action/test_cli_parse.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb30024867cbb7d7176c4459c7c6f1c798967e788af4b537789305cbf9659ba1", + "chksum_sha256": "460fb03eb09c4f7db542e0760524fbeb84fa35be2a46452afa7e12b8f6dc0519", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/action/test_validate.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9ce84b43bd1b99cbeb188f765e0f1a10ebde3a191a38d588e52a903c4f683283", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks", + "name": "tests/unit/plugins/test", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/subnet_of.yml", + "name": "tests/unit/plugins/test/test_subnet_of.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83ff3bf515253a8a340e7690c88f580f56ec1e8397a1e67d4a34cd7f29ad6ef6", + "chksum_sha256": "d658246015b46f18ba15c6b0b69ae0746dbbffd7c0763450b266d620f0d57fe2", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_sixtofour.yml", + "name": "tests/unit/plugins/test/test_in_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b1534121ecea3709d0fb5b8dd1506c57bc6a6dae5097cd7c90bd52bb9f6d16a", + "chksum_sha256": "7d630c57f1c068e5a3a4f0459d366870303ed999c38774b02d4469a040d5daef", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/in_network.yml", + "name": "tests/unit/plugins/test/test_ipv4_hostmask.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "179f6a091bc6a3b788e4ab31205bc1de8762f31d5cd134f8910748e8f3f77d17", + "chksum_sha256": "add5c19519be801bdd9a25b86c62002594835e9d95499b8d053e8f58edee0292", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/in_one_network.yml", + "name": "tests/unit/plugins/test/test_resolvable.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14eed91cb6c11783729c61e43077f02a8143a472f7c711d8ec32bb845ea0aa47", + "chksum_sha256": "d4280507b9cb9f12927b94bf54cefae7f2de48666071b5755dcc586019670fa1", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/public.yml", + "name": "tests/unit/plugins/test/test_in_one_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0e004a3450bd9e12583d55af195a3b07307cf91dba57ee7a43ba8717c3e3ff4b", + "chksum_sha256": "46f22a802d660b6835844faa130fb932e1263dedcd286bc7797be02f7931d0f9", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv4_address.yml", + "name": "tests/unit/plugins/test/test_private.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "615dbbb31b07b9482dc6ae37305ab4d5b5c019a59bc10361ac40218d5de79203", + "chksum_sha256": "62aac1efc1576d3b792fc4a3c9565e06b4ef604d8cd46520efc63cd222120b35", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/ip_address.yml", + "name": "tests/unit/plugins/test/test_ipv4_netmask.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21061cd07a8a22833eb928c528ec030c11cd183896a31074bdc83fd1e898a637", + "chksum_sha256": "89631b6c8057acdfc77c078dc17e0648977928a361455ce9c9fa1a4ade33ae3b", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_teredo.yml", + "name": "tests/unit/plugins/test/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1ff255343b3b1d352575ac914f4268ebca0dbbdb780f6827f75382ef4df536a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/mac.yml", + "name": "tests/unit/plugins/test/test_public.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ada1fd18ed85280d8f5bad674d7f5dfecec48ff379a8e707dbf7bbd8ab82111", + "chksum_sha256": "d6d78b92c0e0c283dd688712018e9af484669f6ffb50cdbd6e7257e44176ea5c", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/main.yaml", + "name": "tests/unit/plugins/test/test_ipv4.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "693395d9792afc9f495cbed165f9c7f01811b8d3c2482f9dabe0452812ff668e", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/ip.yml", + "name": "tests/unit/plugins/test/test_ipv6_teredo.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93fe8c749063d99f6ee84648c75b90b12453f8144d0a26c145472a2f805ef5dd", + "chksum_sha256": "90d7673591333a46ae82870d88c081454a91993f9d46ebe94f284f2d59de591e", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv4_hostmask.yml", + "name": "tests/unit/plugins/test/test_ipv4_address.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97dbcf159a748ca1f99c839d55af01455cf68e005ca30008cd48215d097eb461", + "chksum_sha256": "de5141c7d33925c220f96f294bf2612aefbd50d8d46d44f209e9e2ca15e0df80", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6.yml", + "name": "tests/unit/plugins/test/test_validate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "17f7a28a9a7796ee29e99b080af194ba1923736bdc1e17cb6afb4bbfae1e3820", + "chksum_sha256": "4b8467971ce57d85ab5d556f433155616a200e66ac8a504e469215ce0e02028b", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/supernet_of.yml", + "name": "tests/unit/plugins/test/test_ipv6_ipv4_mapped.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c43c74df672831d7ec50692236de868518702232a9f18655e666cd317182773e", + "chksum_sha256": "bb2bc0c4cbf9ebe9725da184fcdc473acd4fadfc7d520cb0b80db5bd2c3d4c6c", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/reserved.yml", + "name": "tests/unit/plugins/test/test_ipv6_address.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ffe3ff53d0356e042999d9b0a78e95d27d1fa5d8d0912163eb593f5b5594ecb9", + "chksum_sha256": "a91f65dce674d2e3b049038f52429fb6f75cc160fec14ca03d711fc1915e0034", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/loopback.yml", + "name": "tests/unit/plugins/test/test_ip_address.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aad21feb2e6d9130c6d0e61c8babce281670ae4eccac0c9f5bfbebc7a868403d", + "chksum_sha256": "d1c7d5814a1cce278bdd8a67d5947dfdee8bb8fcf9d82b6d6eb987103449e9c4", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv4_netmask.yml", + "name": "tests/unit/plugins/test/test_mac.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "edbf017def035b5ca082756de8a91fcf4bfbcc4fc3414aa5fc60bd131a98129d", + "chksum_sha256": "1aab527425e836db9f88ef4f1c7ceb8b9a37600036149df373634f260a85c13d", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/resolvable.yml", + "name": "tests/unit/plugins/test/test_ipv6_sixtofour.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "66ec974d89255561d81d2a6a62ace155dd6cc4f028b8fd7f1e77ec3dc270fd27", + "chksum_sha256": "6a490ca51048d833decd376e1d2f3820ee76b3b986fd23f356478f6b14a75a6e", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/in_any_network.yml", + "name": "tests/unit/plugins/test/test_unspecified.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e56f13ad78aba2bb04ffd61f951cba00731bafd2fdaccab7bfdee64f88e2346e", + "chksum_sha256": "396227565c79653d45bbd485dcec679ad3d3241193410e1ee82d3ec99f2c50d2", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_ipv4_mapped.yml", + "name": "tests/unit/plugins/test/test_in_any_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3bf41c07dfa38283acd03c2d9c837611736dba49158652a919afaeb6f3fafcfa", + "chksum_sha256": "481edf1f24d8aee5e85b4e3838975467662b94b1aa8d90ac1a01f37d439766c2", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv4.yml", + "name": "tests/unit/plugins/test/test_supernet_of.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "afdc9774b465291d36a84a253f6b74b3be52e6534df4c09aed5edfe1702a38a4", + "chksum_sha256": "71a3934bc33250f504573bf31f66b83816c732fdcf992d0f3eaaeac0cfc25642", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/ipv6_address.yml", + "name": "tests/unit/plugins/test/test_multicast.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b288eb0fa02b285827f29fe3cfc07240e41728bdb5cf774d95e47fdb3a1724da", + "chksum_sha256": "1e70c22a75e397e2ffcbada31b35ee8419f19045db11858e13043c61b10d4eb7", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/private.yml", + "name": "tests/unit/plugins/test/test_reserved.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a0e6c4c080e3a1e916dbd47a051553d38b485e778d55c20ca85498c4e482376", + "chksum_sha256": "7c06b1cffb5bf6d5a5f5154540cc58da0563a99c4fa4a2f302504c8ac089b679", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/unspecified.yml", + "name": "tests/unit/plugins/test/test_ip.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56dbed00bd55bbf9d35fa877fc0c09f3dc68dec8e0a59303911001ed781c589d", + "chksum_sha256": "9b675dab5552272808b03c47085d317face21b690b239c21ac02e0a11d0e34e8", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/tasks/multicast.yml", + "name": "tests/unit/plugins/test/test_loopback.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d8e39c219e278db46e2486ad411fe474860431184fb5e432fe36e226e26d508c", + "chksum_sha256": "1b731fee48c23f26b2fe998ba7aab7a10e0ba36aecc1597e02e13a32220d4b9f", "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/vars", + "name": "tests/unit/plugins/test/test_ipv6.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c8f7bf3952f67b0aad7cf95b5644ab205530434e7dd9a2e563201ad88a61d6b8", + "format": 1 + }, + { + "name": "tests/unit/plugins/plugin_utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_netaddr_test/vars/main.yaml", + "name": "tests/unit/plugins/plugin_utils/test_index_of.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c00756f4c7d02ea4d04b4237141685543b0c673a354774e61b2acb48f45837bd", + "chksum_sha256": "1e7124833615311a888a8add869657853f41ba67798c284e49c0d4888ec7f2fa", "format": 1 }, { - "name": "tests/integration/targets/utils_validate", + "name": "tests/unit/plugins/sub_plugins", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tasks", + "name": "tests/unit/plugins/sub_plugins/cli_parsers", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tasks/main.yaml", + "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_json_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56fa753c51c136c218723eba14767e0da3fa34f0745a9d138791a29df3c91565", - "format": 1 - }, - { - "name": "tests/integration/targets/utils_validate/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "a4cdde648197c46f6f387a94cde4376538f0de3f8a731c322f39534bd402ff47", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tests/jsonschema", + "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tests/jsonschema/module.yaml", + "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/nxos_show_version.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1a87d40a955e4045360cb5b5537d4f3b46d925f03a91e00082ef0fba4a85333", + "chksum_sha256": "280b9a49752bd9ebddf26798b7df94115c3f3402877d350e60b3236a33fb3f68", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tests/jsonschema/filter.yaml", + "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/nxos_show_version.textfsm", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "76f0a20334ee425bf11eaaa8a6d1eac22190389887c60f9c25453c960545adaf", + "chksum_sha256": "e0ad0e83aca80d858e8c7301094b1c67e260223cf650af013980461928429916", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tests/jsonschema/lookup.yaml", + "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/nxos_show_version.ttp", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97f702bb945e3a25440077a7f1c1671b63b92be19158b5aeeb7ab697f2488707", + "chksum_sha256": "19b19fa15a9d932cf92cb94ecdca1b5b3c64e7961cef2d6574264930e6dfe466", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tests/jsonschema/test.yaml", + "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/nxos_show_version_invalid.textfsm", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "407252f2fe336072e3563bcb900454718ec15fcb0342f4298d6133c5f4b66f1b", + "chksum_sha256": "70efa127c6437e5a9428fb9701dad0e5bdf1425f0ad87c4d18ff3a4042154bc8", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tests/config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/sub_plugins/cli_parsers/fixtures/ios_show_ip_interface_brief.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cf7860ac3fe8175f2a062881ecc52f977f14fdcf92ae1a60df68edda493f645a", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tests/config/module.yaml", + "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_textfsm_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3899feac6b3f90205fed11d72cd13781de4d66f82dcffa497dd18d001d198298", + "chksum_sha256": "1a6c853a771571f23a01266ed0d147859713c049e55e515d621df180b36d83cb", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tests/config/filter.yaml", + "name": "tests/unit/plugins/sub_plugins/cli_parsers/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba908086e5fbc87673dac750de6dd341ddb7da9d9250571b759abd24a83fe35a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tests/config/lookup.yaml", + "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_xml_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba6482b4ff88840a1520a4a4a4f8ba25052b3fbc6b5e21a8e70abe93688e2728", + "chksum_sha256": "387a56ea06526bdc0b0b39e4710fa461ce9e0df677ee778879e6c152231db5db", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/tests/config/test.yaml", + "name": "tests/unit/plugins/sub_plugins/cli_parsers/test_ttp_parser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "60c4bdf55c5ad5f5adeccc04df75d979f1b9739d6706bdf1e022d05e7e726a97", + "chksum_sha256": "0ed8c629a527b7f02196735cd40b58954de5067878df9ed368fb9ac55effa55e", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files", + "name": "tests/unit/plugins/sub_plugins/validate", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/criteria", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/sub_plugins/validate/test_config.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7e1806206bbdc7d122851e64a5a8a2962a667e7fb1368891b039ea10d880da80", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/criteria/in_rate_check.json", + "name": "tests/unit/plugins/sub_plugins/validate/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eaf0cb45846bc2ebd25ecfbe85308fd7e3358e4900da1ce0d4c9418b42ab7aa7", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/criteria/enabled_check.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d37e8293e59f15873c54a47542cb0a9190b0f2f615126f276c6177816bb608ed", + "name": "tests/unit/plugins/filter", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/criteria/check_list_data.json", + "name": "tests/unit/plugins/filter/test_nthhost.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80ed8bbc4b06991acb84b2b8c61bf8a45cfc0091c2b9b4b443f02fd030de16e8", + "chksum_sha256": "d64e623888afa66c5ad67ecaae097f23291dcac857b5319b25d0e74acb5b0db8", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/criteria/rules.yaml", + "name": "tests/unit/plugins/filter/test_ipv6form.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fff82706f9f040c45e3e8d927968dfb5297e7c99904c4aa5b34f6ad9262619b7", + "chksum_sha256": "f0f438cfffcfc7d5bd5a9f1808c44de11334da483c6da0e5feeba393029b04b9", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/criteria/format_checker.json", + "name": "tests/unit/plugins/filter/test_fact_diff.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "734eab506a730d90e57069d5e1177135ffeb0ac68db61942576e49144b8a5094", + "chksum_sha256": "d22bfd2bdcaf646b644a484e6e7baac2787c9d7e5b2bea2a9fdfec4d9640c80b", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/criteria/crc_error_check.json", + "name": "tests/unit/plugins/filter/test_network_in_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a1ec6bca6330a50b33920472d576acf1d62287a8aadbcf9ee63aed6673a2d784", + "chksum_sha256": "afc6be94632b0a25f3adca23a4922bfe2c9c936c155da4d94cab3180c28b9863", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/criteria/oper_status_up.json", + "name": "tests/unit/plugins/filter/test_ipaddr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c1159ec568a023a818953cb77c8e1618af99a8ec217d6a3ac108d972b78790d", + "chksum_sha256": "98d3bae45dce4a2f91c901fbd2d0cf5875e612dd7daf5fdcf8b27be9ed77683c", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/data", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/filter/test_ipwrap.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d18ae8e036438873bcaec3bd7fe6137c9d0929d2481ed2899b40ad6a7f901e85", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/data/show_interface.json", + "name": "tests/unit/plugins/filter/test_hwaddr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e9d872c87bec35f958131f5a57469184dcb8364000a3fd2c764e698b0f7e7148", + "chksum_sha256": "2620d2aa47ec69704b63dcd186539279121f551d043776e2b81909beb0a3ebad", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/data/test_list_data.json", + "name": "tests/unit/plugins/filter/test_usable_range.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "acc07b62f23f458923737c4cd4a66bd05d1e71eb4f384003baaf2dcc760d6349", + "chksum_sha256": "c7d295c3000fb8f4e4a6dd23fd945cbcf52e7d68928a20cbf89f6659a596e2a4", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/data/test_format_checker.json", + "name": "tests/unit/plugins/filter/test_ipcut.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d4327ea944ff2f274a6f4161c9c6f69782202d1455f383a973819e4fbb85f80", + "chksum_sha256": "e5fdf693cb5159fede04b5094c9268902ba69ceea73ef35c85a6f81824d34052", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/data/fail.cfg", + "name": "tests/unit/plugins/filter/test_reduce_on_network.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5bc357ee82697a6f8a4920451a0fdfc81f9f6af9522a134d26112abd20b41562", + "chksum_sha256": "8ccf14584cf204bf359bb0711b40e099945f3a5717c4a149944ef4c4be48d345", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/data/warn.cfg", + "name": "tests/unit/plugins/filter/test_param_list_compare.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5abf45b025490534361d18b5fd3e8c4ec56c52817d72a9d44c01d33e315d7c", + "chksum_sha256": "c65d22b9614e811d8eba570fca6c6194c59bf47b3b975f4853c48113a8ff7a6d", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/files/data/pass.cfg", + "name": "tests/unit/plugins/filter/test_keep_keys.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c97ae3826430fb1d113b8ed534f4609057b61cf2864a79eb1d603cf02281d25", + "chksum_sha256": "2b91b9860329439b4355c5f2cb1e89835ca61ea948d260baed93f57858185c32", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/filter/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/utils_validate/vars/main.yaml", + "name": "tests/unit/plugins/filter/test_to_xml.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a0a2c468f24a66b8cea391acc05802e57275f212e1d4a467516bafd440f7765e", + "chksum_sha256": "4e7ecded556df9d2432aa490781c7d2fc1907b5fe6621a1b3f6e8aca988b4cd3", "format": 1 }, { - "name": "tests/integration/targets/utils_update_fact", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/filter/test_ipsubnet.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e49cb14e3509457970aeef8e6e5ad854d38784b61123e9f950f16f02b8033837", "format": 1 }, { - "name": "tests/integration/targets/utils_update_fact/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/filter/test_ipv4.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6d1b99aad3d116523b262cffee6ab317ef75c2cb96c87f110f8a52ab295f4973", "format": 1 }, { - "name": "tests/integration/targets/utils_update_fact/tasks/main.yaml", + "name": "tests/unit/plugins/filter/test_validate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ebea41c6f8a93be2240cd0c45732a3d596cf571cb64547dc113217da56b575b", + "chksum_sha256": "dc44a7bc87a3424a4a2c2c4726a2e4cafdd8a3e2f7f55a5371b7ceec8a3be5fd", "format": 1 }, { - "name": "tests/integration/targets/utils_to_xml", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/filter/test_ipmath.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c16f8a9fca5ebc70ab8560c787c8a637079c2d79fd545059f6cd7eb1f92d46c1", "format": 1 }, { - "name": "tests/integration/targets/utils_to_xml/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/filter/test_replace_keys.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5522cfab5edfdf3739180b05c3bb65152336d07106a82a33076d52eaf399a4fe", "format": 1 }, { - "name": "tests/integration/targets/utils_to_xml/tasks/main.yaml", + "name": "tests/unit/plugins/filter/test_next_nth_usable.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2512b8be56ef8a8cb314d955a252bbd15f65856975e95294d6855c39c17587c5", + "chksum_sha256": "0980d4e0ef3664c878a618717efe41ccb836e781c068f028d8777e2b42c8ebb0", "format": 1 }, { - "name": "tests/integration/targets/utils_to_xml/tasks/simple.yaml", + "name": "tests/unit/plugins/filter/test_consolidate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7228288965760ffa35f3630bf7ebfc7a6b1709d5d97550e2a2da863b35648551", + "chksum_sha256": "1dc8412704c61f5cb1b0cc52b6922a28e768cc6525453368ebebae8afbd8d6ce", "format": 1 }, { - "name": "tests/integration/targets/utils_to_xml/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/filter/test_macaddr.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5d586ac9c169f7dd133276ff0ac7078b4147face9fe39f7f6418a00473b25ded", "format": 1 }, { - "name": "tests/integration/targets/utils_to_xml/vars/main.yaml", + "name": "tests/unit/plugins/filter/test_from_xml.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8405fb4146ef4dbfa941874b93d3c87e02310ddaabf8407f2691da3855f1093", + "chksum_sha256": "01fe5504bddedec8fc5afc6de2b7b4ddc884fbf87148a52b9d1ece85b7482dfd", "format": 1 }, { - "name": "docs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/filter/test_ip4_hex.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d656d1d4ca804630601af52754c70daabc0f6fd357cec1eb1e94cdaa7db6e894", "format": 1 }, { - "name": "docs/ansible.utils.to_xml_filter.rst", + "name": "tests/unit/plugins/filter/test_network_in_usable.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dcbfe90179444aba2c77f5edb8aa3f2f1e46509b19a3b46ac1ce825c145c88c6", + "chksum_sha256": "e4073fdb1071ca2a9f332c7800bed27c47d425400a4c7ac50d60d89f4fb1b017", "format": 1 }, { - "name": "docs/ansible.utils.cli_parse_module.rst", + "name": "tests/unit/plugins/filter/test_previous_nth_usable.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d18023f4a52a2bf40a6973bff87a1507abe081e772b98c5ad0a88790fb41d00b", + "chksum_sha256": "2940ec98b9252f37708c31c5c7be03397b382cbdb55617c48a91fe56203a5f37", "format": 1 }, { - "name": "docs/ansible.utils.ipv6form_filter.rst", + "name": "tests/unit/plugins/filter/test_slaac.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "120f6dc4a15f99fab9a5e40ae86121f2410061b06415310cc2873227639d2c96", + "chksum_sha256": "d6f40ccd4972301f4d35acb137565f119b906e1a155bcf2ed7f9bdb3bafc37c0", "format": 1 }, { - "name": "docs/ansible.utils.network_in_usable_filter.rst", + "name": "tests/unit/plugins/filter/test_remove_keys.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74e58e97636306402fcc697a0478eabc57ecc2df6a02b8a8e00b8cbd23239db6", + "chksum_sha256": "d76ed7cf44390b9f18e53ed705a417d66e51d2479c1ab81c5f8015570947ac95", "format": 1 }, { - "name": "docs/ansible.utils.replace_keys_filter.rst", + "name": "tests/unit/plugins/filter/test_cidr_merge.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1861c5dccd6e4e9e24c5250c274237d4d5df62bbdcede41b78c1f808d2ddcf8", + "chksum_sha256": "fa2633572c17bdb2493badbe31a368b10ec18327bcae10350d181a7f4cefaacd", "format": 1 }, { - "name": "docs/ansible.utils.keep_keys_filter.rst", + "name": "tests/unit/plugins/filter/test_ipv6.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "57b1faf8874e35a682b8ac1f717bc43e3ab4b015bc7ac8bd984a458ab2444262", + "chksum_sha256": "7d0b81fe64f7e706c2043f1ab4e61f35536172922b281e47078996469a444636", "format": 1 }, { - "name": "docs/ansible.utils.ipv6_filter.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4cbb8f9b4687b1da3daf647c14e19c1d0eb7672f5af3b9387b308da8f2e1e9c1", + "name": "tests/unit/module_utils", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/ansible.utils.validate_filter.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7b3e3f7b9576c04425c56142667cd0ffc8f021e2624fa86e23f9e9f20745c13e", + "name": "tests/unit/module_utils/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/ansible.utils.ip4_hex_filter.rst", + "name": "tests/unit/module_utils/fixtures/docstring.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9568ea4894daa231731491939cdfb193bcc631f36580d0cb82e161e692870c15", + "chksum_sha256": "1f147714958e065abe3622fa3e94ee26f70d06212de8cdbe54210c28a4e71b02", "format": 1 }, { - "name": "docs/ansible.utils.cidr_merge_filter.rst", + "name": "tests/unit/module_utils/fixtures/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d214b5cda14a322db93269a17b361b4d8b56989b29a7808619cc5d177114a4c5", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "docs/ansible.utils.ipv4_hostmask_test.rst", + "name": "tests/unit/module_utils/fixtures/large.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "95cdff320db4d31cf5fb9abe6144b39b1cf7f1da47f827341b0c52ba5475911a", + "chksum_sha256": "56dadab818a719846f64c0fcfd7d0c2c1eeb34cdb8cc646033311ef90b0770a1", "format": 1 }, { - "name": "docs/ansible.utils.in_any_network_test.rst", + "name": "tests/unit/module_utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e9678218618d0bb3f526f0cdfaf3d09f24bbaadd6f7317b02cddc4f2bfc7598b", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "docs/ansible.utils.remove_keys_filter.rst", + "name": "tests/unit/module_utils/test_argspec_validate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d8e87cf05341c85a46097cf933e6705ca0de7a189f078165772d21604188f9f", + "chksum_sha256": "5f83ac9ca3034d6af7b3b8fd42d52daf073981d1191c7d26bd094d23966488ff", "format": 1 }, { - "name": "docs/ansible.utils.ipcut_filter.rst", + "name": "tests/unit/module_utils/test_to_paths.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "150ecfe60509b1b0093de7ea4a911eb8ab291cd1b9398586fa96a69b09daa43f", + "chksum_sha256": "39db96610cc324a48b70fcd56b6d47995712fef01a6124ef5b87f390a7c2aabf", "format": 1 }, { - "name": "docs/ansible.utils.validate_module.rst", + "name": "tests/unit/module_utils/test_dict_merge.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "03f7c4bfe67c83a1c35bec20e80c0e9ed42a9b862db517ba6244d00049901022", + "chksum_sha256": "8f1ef47e9e46b2f40a0043243467b56b4884bd4ad181eb7ffd0e1881d7fe50b2", "format": 1 }, { - "name": "docs/ansible.utils.get_path_lookup.rst", + "name": "tests/unit/module_utils/test_sort_list.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a5b58a4a23622668ac0b1ff8e8279973fba07c285d7621268259eecbcba8177", + "chksum_sha256": "df4ed8325d26693e4b170ac52084db62ccc7abb82b2a8706b491bb47c4c7501a", "format": 1 }, { - "name": "docs/ansible.utils.macaddr_filter.rst", + "name": "tests/unit/module_utils/test_get_path.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "549d998af199f3f60df3c87594d015379d4a674e7fa311df1edea8e54f613270", + "chksum_sha256": "5bf169349a95316a5b30e3fe0181f00849447213b2247f072ff8788e339f1c67", "format": 1 }, { - "name": "docs/ansible.utils.index_of_filter.rst", + "name": "tests/unit/requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cf5a4c7351a8a43b70c4efbcc6932d0a75f35d1dbb3c040918c470452c6d68ef", + "chksum_sha256": "fcea5298285c0542897536b02f5c7753645c7fa83abdcac6b0f3e15ec3d27160", "format": 1 }, { - "name": "docs/ansible.utils.nthhost_filter.rst", + "name": "codecov.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4504d31bfe9857b381ab5027d6e8979cce559db48e515ee220b47e9f83ab628d", + "chksum_sha256": "d7119b3a96ece7bcd2df6e851e7e19783049f280918a801344d502c6ada4e582", "format": 1 }, { - "name": "docs/ansible.utils.update_fact_module.rst", + "name": "tox-ansible.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a249c8e78a9da1ccc2f3a3f8532e0a3950652f678a22c232d9785e6adbdab2a", + "chksum_sha256": "fd009473385d7a79691dba3f6326b5dce9ded1705cc672917cf80e03317bf38b", "format": 1 }, { - "name": "docs/ansible.utils.fact_diff_module.rst", + "name": ".gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c27b93299035cc8c6682dda0051e91d1db168007c2c73356808098cad41da3da", + "chksum_sha256": "c444cf81acd9153b71cd9ff418b980724cac7d29c77b57d453053923dffbdcc3", "format": 1 }, { - "name": "docs/ansible.utils.unspecified_test.rst", + "name": "cspell.config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1eec59f8934a04b53d1615f3b207586fcd8fad2981b85d0665f0f57026a6f29c", + "chksum_sha256": "e1079e6d02ed34033bf83913e7b66ff7bd042e6d8ed4c113aea31123f557deb5", "format": 1 }, { - "name": "docs/docsite", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", "format": 1 }, { - "name": "docs/docsite/rst", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".flake8", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e0ac43f26ecfa3094c442566f7ad9d637c2975a4072c2cbf438b59b3adcdf219", "format": 1 }, { - "name": "docs/docsite/rst/filters_ipaddr.rst", + "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9775fb372228245e46eeff7beefdf3cd765ecfccd7e688eda2ec689e2ac2195", + "chksum_sha256": "2427bdf40969757f62caf9b4315e943c5bbe39a84fd2802c19afa0f332759b74", "format": 1 }, { - "name": "docs/docsite/extra-docs.yml", + "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "735531af48baf6de4e933219f147cf4b3187410f111ec9c188a06903675b757d", + "chksum_sha256": "b1867544249e1acedd6385529f7378e93f91208c7f27d11f1a2bb4403c68b8dd", "format": 1 }, { - "name": "docs/ansible.utils.ip_address_test.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0f9a4db063314e0acdf3dc69c1c669955a27927bbb6b25ea3fe69322d3a59390", + "name": "docs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/ansible.utils.ipv4_address_test.rst", + "name": "docs/ansible.utils.previous_nth_usable_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4842230a2ce840862d3366ecce677e56ad38600b5b07a27de3afbdc4e5b1759c", + "chksum_sha256": "94e6ce5e91e19ccb7249987bed4d5288f231e31900299698508ce3980f382e71", "format": 1 }, { - "name": "docs/ansible.utils.next_nth_usable_filter.rst", + "name": "docs/ansible.utils.unspecified_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0702412f10dce01ad520ef2c44622bdf4b4e7e1eadbdb3f7cecaf17c79cff102", + "chksum_sha256": "1eec59f8934a04b53d1615f3b207586fcd8fad2981b85d0665f0f57026a6f29c", "format": 1 }, { - "name": "docs/ansible.utils.private_test.rst", + "name": "docs/ansible.utils.ipv6_sixtofour_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4e36e2bd85c58c001cd29b548979ab23adbcdd02290f375293db88c23ca55ae3", + "chksum_sha256": "199d99f772c92d20a560fa5afbba8ac4df74a11eaccffb5c29a2d96c3e6dea02", "format": 1 }, { - "name": "docs/ansible.utils.validate_test.rst", + "name": "docs/ansible.utils.ipv6_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81f6e37b6f9275cd8bb1240a7bfa7a8fcefbb744b68c027ab922321d4547d91f", + "chksum_sha256": "05665d4cc703bf130c7593ad3e0a974e33bf1530318a32caf38bc2b9bd5ec3d0", "format": 1 }, { - "name": "docs/ansible.utils.ipmath_filter.rst", + "name": "docs/ansible.utils.slaac_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ad6e54b6e827dcf8235a8e237d94fd2ed8f7fbe34dd47aff5b5ed6fdd45e33c", + "chksum_sha256": "dc9f60ef24b7ad1e30861adfb02e97efd3db05579c0790cb07e8535db03bc69b", "format": 1 }, { - "name": "docs/ansible.utils.supernet_of_test.rst", + "name": "docs/ansible.utils.macaddr_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f5a987278d1a641a79c672006b8eeb37b1e937f4f85baaefb600a3a6e4affae4", + "chksum_sha256": "549d998af199f3f60df3c87594d015379d4a674e7fa311df1edea8e54f613270", "format": 1 }, { - "name": "docs/ansible.utils.hwaddr_filter.rst", + "name": "docs/ansible.utils.fact_diff_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "06004f98865238ad74c52a67c40b977315200c1dfd5b48e3666681b8a83f53f5", + "chksum_sha256": "c27b93299035cc8c6682dda0051e91d1db168007c2c73356808098cad41da3da", "format": 1 }, { - "name": "docs/ansible.utils.ipv6_address_test.rst", + "name": "docs/ansible.utils.replace_keys_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "30a2515d6260cfda2181cb101c26063dc5b18529cd60576d39a88160714f5af0", + "chksum_sha256": "c1861c5dccd6e4e9e24c5250c274237d4d5df62bbdcede41b78c1f808d2ddcf8", "format": 1 }, { - "name": "docs/ansible.utils.resolvable_test.rst", + "name": "docs/ansible.utils.validate_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "62013972070a09452a421a061a891e8ceebc94ea610103b6b21e14441328bed1", + "chksum_sha256": "b47930c113c23060d1281bade44f65abcfa57be02943ef2652710929fa9d6f27", "format": 1 }, { - "name": "docs/ansible.utils.ipwrap_filter.rst", + "name": "docs/ansible.utils.cidr_merge_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b26276300d797113d036be6eeac6fd76812cd8e3e32d8cae13e4421b4111d233", + "chksum_sha256": "d214b5cda14a322db93269a17b361b4d8b56989b29a7808619cc5d177114a4c5", "format": 1 }, { @@ -3333,143 +3284,143 @@ "format": 1 }, { - "name": "docs/ansible.utils.ipv6_test.rst", + "name": "docs/ansible.utils.ipv4_address_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05665d4cc703bf130c7593ad3e0a974e33bf1530318a32caf38bc2b9bd5ec3d0", + "chksum_sha256": "4842230a2ce840862d3366ecce677e56ad38600b5b07a27de3afbdc4e5b1759c", "format": 1 }, { - "name": "docs/ansible.utils.ipaddr_filter.rst", + "name": "docs/ansible.utils.ipv6form_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b3e3890d2cf44c611439f215c3e9105af9975f72c5bbd4766ddbdec49c4d01b2", + "chksum_sha256": "f5cef46d5cde1a50882f319db18ea8421e11a92cfc51b0f9d25201040bdd4a23", "format": 1 }, { - "name": "docs/ansible.utils.validate_lookup.rst", + "name": "docs/ansible.utils.validate_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "acbf3ebedc5525f291c1f8c453d03b0d774e84cc92c94935c3159e09f5e06fc4", + "chksum_sha256": "81f6e37b6f9275cd8bb1240a7bfa7a8fcefbb744b68c027ab922321d4547d91f", "format": 1 }, { - "name": "docs/ansible.utils.ipv6_sixtofour_test.rst", + "name": "docs/ansible.utils.cli_parse_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "199d99f772c92d20a560fa5afbba8ac4df74a11eaccffb5c29a2d96c3e6dea02", + "chksum_sha256": "d18023f4a52a2bf40a6973bff87a1507abe081e772b98c5ad0a88790fb41d00b", "format": 1 }, { - "name": "docs/ansible.utils.in_network_test.rst", + "name": "docs/ansible.utils.to_xml_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6054c4414e7df289acca584d8cde0025fda866f5fd8fd268c1cdba7c1cb7bd9d", + "chksum_sha256": "dcbfe90179444aba2c77f5edb8aa3f2f1e46509b19a3b46ac1ce825c145c88c6", "format": 1 }, { - "name": "docs/ansible.utils.ip_test.rst", + "name": "docs/ansible.utils.validate_lookup.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "423c666b424a893fed77918cd8afbd5acf4b95156ea109e4c1ae9b910333b39d", + "chksum_sha256": "3cb9f3909679db84ec4e17f102eca4dc16872c39098254fa1dfae976e42136d9", "format": 1 }, { - "name": "docs/ansible.utils.slaac_filter.rst", + "name": "docs/ansible.utils.resolvable_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc9f60ef24b7ad1e30861adfb02e97efd3db05579c0790cb07e8535db03bc69b", + "chksum_sha256": "62013972070a09452a421a061a891e8ceebc94ea610103b6b21e14441328bed1", "format": 1 }, { - "name": "docs/ansible.utils.ipv4_test.rst", + "name": "docs/ansible.utils.fact_diff_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "495c65997da307de9e446f77e413d0d1ec26d245d855cabc838737a78aceec11", + "chksum_sha256": "0be4cf38c71bd11475f9a4dc73700ae11ec57cd0d27af3d3379c08e94e21de09", "format": 1 }, { - "name": "docs/ansible.utils.reserved_test.rst", + "name": "docs/ansible.utils.ipsubnet_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "abfaea7206a74c57fabcf1116cbd0fc0ad510c1cab57c9da5ac29ce552370263", + "chksum_sha256": "04d4c6c32fcc688b3e4f226317ade21885628d39101cf797dafc36a0dd86ac3c", "format": 1 }, { - "name": "docs/ansible.utils.public_test.rst", + "name": "docs/ansible.utils.remove_keys_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4cb3046bae484b3de9facc9a12f078a1412af6c42dc729df3b821e8d2075fd46", + "chksum_sha256": "4d8e87cf05341c85a46097cf933e6705ca0de7a189f078165772d21604188f9f", "format": 1 }, { - "name": "docs/ansible.utils.from_xml_filter.rst", + "name": "docs/ansible.utils.ipv4_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a197b87a3c3f47315f279e12775bf5c99f36ee003ff639e3f381e5342f98ed8", + "chksum_sha256": "495c65997da307de9e446f77e413d0d1ec26d245d855cabc838737a78aceec11", "format": 1 }, { - "name": "docs/ansible.utils.ipv4_netmask_test.rst", + "name": "docs/ansible.utils.ipv6_address_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6d22ab2bffd5865608a1cdb0039226c116f4b086a0b15196e66181323acc4c6", + "chksum_sha256": "30a2515d6260cfda2181cb101c26063dc5b18529cd60576d39a88160714f5af0", "format": 1 }, { - "name": "docs/ansible.utils.mac_test.rst", + "name": "docs/ansible.utils.in_network_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f0b1e210c490176d84983fca86cb4b83fd346e40176789ffb8d3c66b1dd17921", + "chksum_sha256": "6054c4414e7df289acca584d8cde0025fda866f5fd8fd268c1cdba7c1cb7bd9d", "format": 1 }, { - "name": "docs/ansible.utils.get_path_filter.rst", + "name": "docs/ansible.utils.ipaddr_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d93dd63925b87e4d57470f4cf6436b374a975bd6ee052a8283bfa8031923ed2b", + "chksum_sha256": "b3e3890d2cf44c611439f215c3e9105af9975f72c5bbd4766ddbdec49c4d01b2", "format": 1 }, { - "name": "docs/ansible.utils.previous_nth_usable_filter.rst", + "name": "docs/ansible.utils.ipcut_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "94e6ce5e91e19ccb7249987bed4d5288f231e31900299698508ce3980f382e71", + "chksum_sha256": "150ecfe60509b1b0093de7ea4a911eb8ab291cd1b9398586fa96a69b09daa43f", "format": 1 }, { - "name": "docs/ansible.utils.loopback_test.rst", + "name": "docs/ansible.utils.ipv6_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "68ffc927cd71df145413f9c9dcdee23b940ab394989ddd7ced63a5d75957e19e", + "chksum_sha256": "4cbb8f9b4687b1da3daf647c14e19c1d0eb7672f5af3b9387b308da8f2e1e9c1", "format": 1 }, { - "name": "docs/ansible.utils.to_paths_lookup.rst", + "name": "docs/ansible.utils.validate_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3c9628ebc9e7ddfd0d478ff5b8dcbb15f86a0b85ce1607bc37e3e5e368421c1", + "chksum_sha256": "7b3e3f7b9576c04425c56142667cd0ffc8f021e2624fa86e23f9e9f20745c13e", "format": 1 }, { - "name": "docs/ansible.utils.subnet_of_test.rst", + "name": "docs/ansible.utils.index_of_lookup.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bab2b4b9c50f9250332f845ab0d6e5b8d829301fa9c9cd1f168f31d306bfdad2", + "chksum_sha256": "9d3492d8a3db1ccc4e8449fc37e05a30449dec8a71cb0801d9056ad93af0cf57", "format": 1 }, { - "name": "docs/ansible.utils.index_of_lookup.rst", + "name": "docs/ansible.utils.loopback_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d3492d8a3db1ccc4e8449fc37e05a30449dec8a71cb0801d9056ad93af0cf57", + "chksum_sha256": "68ffc927cd71df145413f9c9dcdee23b940ab394989ddd7ced63a5d75957e19e", "format": 1 }, { - "name": "docs/ansible.utils.network_in_network_filter.rst", + "name": "docs/ansible.utils.ipv6_teredo_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25caf49346a61296cab62448dec2253f7fe8d1d551de18006cb651b0a962d49d", + "chksum_sha256": "8019ff32d2d4a4b0796dc1f9a43a391edb75a5c9acc4a73c7b4b2216c54a242f", "format": 1 }, { @@ -3480,248 +3431,262 @@ "format": 1 }, { - "name": "docs/ansible.utils.param_list_compare_filter.rst", + "name": "docs/ansible.utils.from_xml_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b9a763a3b44b126a7bad44558f4e7b6d861d9a42e4978cfd5bc1f655c03dc5d3", + "chksum_sha256": "1a197b87a3c3f47315f279e12775bf5c99f36ee003ff639e3f381e5342f98ed8", "format": 1 }, { - "name": "docs/ansible.utils.reduce_on_network_filter.rst", + "name": "docs/ansible.utils.supernet_of_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8a63a854939b7468f04a5d15680840c679c4d080a0b367a61693c3a27995f10", + "chksum_sha256": "f5a987278d1a641a79c672006b8eeb37b1e937f4f85baaefb600a3a6e4affae4", "format": 1 }, { - "name": "docs/ansible.utils.ipsubnet_filter.rst", + "name": "docs/ansible.utils.ip_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04d4c6c32fcc688b3e4f226317ade21885628d39101cf797dafc36a0dd86ac3c", + "chksum_sha256": "423c666b424a893fed77918cd8afbd5acf4b95156ea109e4c1ae9b910333b39d", "format": 1 }, { - "name": "docs/ansible.utils.ipv6_ipv4_mapped_test.rst", + "name": "docs/ansible.utils.subnet_of_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2f80757dd33fb9253ed11d8de3cb8aa0fb27f880fe3fe193caa1eb13ab5ed9e", + "chksum_sha256": "bab2b4b9c50f9250332f845ab0d6e5b8d829301fa9c9cd1f168f31d306bfdad2", "format": 1 }, { - "name": "docs/ansible.utils.usable_range_filter.rst", + "name": "docs/ansible.utils.network_in_usable_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1075aa159a55fbe12b3a53076111d509078ed5f08c54327d4f1fc3f85a3a29d8", + "chksum_sha256": "74e58e97636306402fcc697a0478eabc57ecc2df6a02b8a8e00b8cbd23239db6", "format": 1 }, { - "name": "docs/ansible.utils.fact_diff_filter.rst", + "name": "docs/ansible.utils.get_path_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1742955a1e39aeb4f88c7351148a6246d4ad87f9a4481f3c21ee4dd26a5a3885", + "chksum_sha256": "d93dd63925b87e4d57470f4cf6436b374a975bd6ee052a8283bfa8031923ed2b", "format": 1 }, { - "name": "docs/ansible.utils.ipv6_teredo_test.rst", + "name": "docs/ansible.utils.hwaddr_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8019ff32d2d4a4b0796dc1f9a43a391edb75a5c9acc4a73c7b4b2216c54a242f", + "chksum_sha256": "06004f98865238ad74c52a67c40b977315200c1dfd5b48e3666681b8a83f53f5", "format": 1 }, { - "name": "docs/ansible.utils.consolidate_filter.rst", + "name": "docs/ansible.utils.update_fact_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf891d59082405b69a8bbc998ede84fac3b908dfb98f06c5eb4081288a8fcc6f", + "chksum_sha256": "9a249c8e78a9da1ccc2f3a3f8532e0a3950652f678a22c232d9785e6adbdab2a", "format": 1 }, { - "name": "docs/ansible.utils.in_one_network_test.rst", + "name": "docs/ansible.utils.mac_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9fc9e8aa7b1e66065f1fc6fe5d3813eabea32935c9010bd40bc8dd44cad350a7", + "chksum_sha256": "f0b1e210c490176d84983fca86cb4b83fd346e40176789ffb8d3c66b1dd17921", "format": 1 }, { - "name": ".isort.cfg", + "name": "docs/ansible.utils.public_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ca0097b4a09ffae0f6cad7b280f8f7acf1b6cc0c4bfd28a79ddc81d3b840262", + "chksum_sha256": "4cb3046bae484b3de9facc9a12f078a1412af6c42dc729df3b821e8d2075fd46", "format": 1 }, { - "name": "pyproject.toml", + "name": "docs/ansible.utils.ip4_hex_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1aec538a80e3fbf00bfd922d2dcd4ffbc831018d75faffea7b4c3cd3a4f44730", + "chksum_sha256": "9568ea4894daa231731491939cdfb193bcc631f36580d0cb82e161e692870c15", "format": 1 }, { - "name": ".flake8", + "name": "docs/docsite", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "docs/docsite/extra-docs.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3619890addbe81b337523c7d31461089055b267a3665f5f5c93d47fa0dbee96", + "chksum_sha256": "735531af48baf6de4e933219f147cf4b3187410f111ec9c188a06903675b757d", + "format": 1 + }, + { + "name": "docs/docsite/rst", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": ".darglint", + "name": "docs/docsite/rst/filters_ipaddr.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "954a7045c6fa17fddfe80995f7f8251efb6df1a2b05eaf479afca6bbc6dfd4f2", + "chksum_sha256": "c9775fb372228245e46eeff7beefdf3cd765ecfccd7e688eda2ec689e2ac2195", "format": 1 }, { - "name": "bindep.txt", + "name": "docs/ansible.utils.ipmath_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80645079eb025b3a905b4775ac545d080a3d7d35d537c31e04f7197c94315ab5", + "chksum_sha256": "0ad6e54b6e827dcf8235a8e237d94fd2ed8f7fbe34dd47aff5b5ed6fdd45e33c", "format": 1 }, { - "name": "changelogs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/ansible.utils.nthhost_filter.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4504d31bfe9857b381ab5027d6e8979cce559db48e515ee220b47e9f83ab628d", "format": 1 }, { - "name": "changelogs/fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/ansible.utils.usable_range_filter.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1075aa159a55fbe12b3a53076111d509078ed5f08c54327d4f1fc3f85a3a29d8", "format": 1 }, { - "name": "changelogs/fragments/.keep", + "name": "docs/ansible.utils.reduce_on_network_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b8a63a854939b7468f04a5d15680840c679c4d080a0b367a61693c3a27995f10", "format": 1 }, { - "name": "changelogs/config.yaml", + "name": "docs/ansible.utils.private_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b26fd678b46bf4df984b583a1b452e56a4d128112613982805c02f24dcb30578", + "chksum_sha256": "4e36e2bd85c58c001cd29b548979ab23adbcdd02290f375293db88c23ca55ae3", "format": 1 }, { - "name": "changelogs/changelog.yaml", + "name": "docs/ansible.utils.get_path_lookup.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83852d2642dfb2b5b85d24a797a9f0fd071ce18d2f188e56bf9aa6f193d6a271", + "chksum_sha256": "0a5b58a4a23622668ac0b1ff8e8279973fba07c285d7621268259eecbcba8177", "format": 1 }, { - "name": "tox-ansible.ini", + "name": "docs/ansible.utils.network_in_network_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "25caf49346a61296cab62448dec2253f7fe8d1d551de18006cb651b0a962d49d", "format": 1 }, { - "name": "tox.ini", + "name": "docs/ansible.utils.param_list_compare_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6264f862854740af1e1614fd4df3cbb4b2f3275e30b3c29a8a729643da942fb4", + "chksum_sha256": "b9a763a3b44b126a7bad44558f4e7b6d861d9a42e4978cfd5bc1f655c03dc5d3", "format": 1 }, { - "name": "CHANGELOG.rst", + "name": "docs/ansible.utils.keep_keys_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84971929336aa325cdbfa1f85882a48ca9b295a37f06a5c0f1f6881eec124521", + "chksum_sha256": "57b1faf8874e35a682b8ac1f717bc43e3ab4b015bc7ac8bd984a458ab2444262", "format": 1 }, { - "name": ".gitignore", + "name": "docs/ansible.utils.in_any_network_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c444cf81acd9153b71cd9ff418b980724cac7d29c77b57d453053923dffbdcc3", + "chksum_sha256": "e9678218618d0bb3f526f0cdfaf3d09f24bbaadd6f7317b02cddc4f2bfc7598b", "format": 1 }, { - "name": ".pre-commit-config.yaml", + "name": "docs/ansible.utils.ipv4_hostmask_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21bd4a2ee61d27c009c93f8ab83d78eb521ed8d6855b3dc4a3294c1f71fd7f4b", + "chksum_sha256": "95cdff320db4d31cf5fb9abe6144b39b1cf7f1da47f827341b0c52ba5475911a", "format": 1 }, { - "name": ".prettierignore", + "name": "docs/ansible.utils.reserved_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f34b5c1df98658cfd45b86975b7f782b1e3486ea712f3372d6eba685a3a826c", + "chksum_sha256": "abfaea7206a74c57fabcf1116cbd0fc0ad510c1cab57c9da5ac29ce552370263", "format": 1 }, { - "name": ".github", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/ansible.utils.ipv6_ipv4_mapped_test.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a2f80757dd33fb9253ed11d8de3cb8aa0fb27f880fe3fe193caa1eb13ab5ed9e", "format": 1 }, { - "name": ".github/workflows", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/ansible.utils.index_of_filter.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cf5a4c7351a8a43b70c4efbcc6932d0a75f35d1dbb3c040918c470452c6d68ef", "format": 1 }, { - "name": ".github/workflows/codecoverage.yml", + "name": "docs/ansible.utils.to_paths_lookup.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8bbcae622f5e51798b577df290135e846244399c2a6ccbfedac523b38a8330a3", + "chksum_sha256": "c3c9628ebc9e7ddfd0d478ff5b8dcbb15f86a0b85ce1607bc37e3e5e368421c1", "format": 1 }, { - "name": ".github/workflows/ack.yml", + "name": "docs/ansible.utils.ipv4_netmask_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24c6fbafaa69e3e3ee696f2cefa5120794b62cef7e870553dddce8b8af0a127c", + "chksum_sha256": "b6d22ab2bffd5865608a1cdb0039226c116f4b086a0b15196e66181323acc4c6", "format": 1 }, { - "name": ".github/workflows/release.yml", + "name": "docs/ansible.utils.ipwrap_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1", + "chksum_sha256": "b26276300d797113d036be6eeac6fd76812cd8e3e32d8cae13e4421b4111d233", "format": 1 }, { - "name": ".github/workflows/token_refresh.yml", + "name": "docs/ansible.utils.ip_address_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a05a918a6d5d850b2b2de22eb8dc72b97bddc3767afe717d05868fa8327a8fc", + "chksum_sha256": "0f9a4db063314e0acdf3dc69c1c669955a27927bbb6b25ea3fe69322d3a59390", "format": 1 }, { - "name": ".github/workflows/push.yml", + "name": "docs/ansible.utils.in_one_network_test.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b61f3eaed5d1cf04a5f8f5175df3946934afc994815e5e074c2dc9e58e98bc28", + "chksum_sha256": "9fc9e8aa7b1e66065f1fc6fe5d3813eabea32935c9010bd40bc8dd44cad350a7", "format": 1 }, { - "name": ".github/workflows/tests.yml", + "name": "docs/ansible.utils.consolidate_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8e211f5d28c34ed3b7a8edcaa6a785a71cabaaa29ea7175dfc8dbd83f11224d", + "chksum_sha256": "bf891d59082405b69a8bbc998ede84fac3b908dfb98f06c5eb4081288a8fcc6f", "format": 1 }, { - "name": ".github/release-drafter.yml", + "name": "docs/ansible.utils.next_nth_usable_filter.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", + "chksum_sha256": "0702412f10dce01ad520ef2c44622bdf4b4e7e1eadbdb3f7cecaf17c79cff102", "format": 1 }, { - "name": "cspell.config.yaml", + "name": "bindep.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1079e6d02ed34033bf83913e7b66ff7bd042e6d8ed4c113aea31123f557deb5", + "chksum_sha256": "80645079eb025b3a905b4775ac545d080a3d7d35d537c31e04f7197c94315ab5", "format": 1 } ], diff --git a/ansible_collections/ansible/utils/MANIFEST.json b/ansible_collections/ansible/utils/MANIFEST.json index f49dc4e4e..829a99037 100644 --- a/ansible_collections/ansible/utils/MANIFEST.json +++ b/ansible_collections/ansible/utils/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "ansible", "name": "utils", - "version": "2.12.0", + "version": "4.1.0", "authors": [ "Ansible Community" ], @@ -30,7 +30,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10bf28d793538941c35ed2b49fa5e0411a99c0a0e65f625d2b39a5a06431de42", + "chksum_sha256": "364b8a7ea619abce47e2b659b41dd8442aaf031f027a38888c9f0c48ee30181c", "format": 1 }, "format": 1 diff --git a/ansible_collections/ansible/utils/README.md b/ansible_collections/ansible/utils/README.md index 70de6c725..91feb0c1a 100644 --- a/ansible_collections/ansible/utils/README.md +++ b/ansible_collections/ansible/utils/README.md @@ -7,7 +7,7 @@ The Ansible ``ansible.utils`` collection includes a variety of plugins that aid ## Ansible version compatibility -This collection has been tested against following Ansible versions: **>=2.9.10**. +This collection has been tested against following Ansible versions: **>=2.14.0**. For collections that support Ansible 2.9, please ensure you update your `network_os` to use the fully qualified collection name (for example, `cisco.ios.ios`). diff --git a/ansible_collections/ansible/utils/changelogs/changelog.yaml b/ansible_collections/ansible/utils/changelogs/changelog.yaml index 8a472af7f..404d7aeec 100644 --- a/ansible_collections/ansible/utils/changelogs/changelog.yaml +++ b/ansible_collections/ansible/utils/changelogs/changelog.yaml @@ -97,6 +97,62 @@ releases: - add_missing_test_requirements.yml - fix_tests.yaml release_date: "2021-04-27" + 2.10.0: + release_date: "2023-05-11" + 2.10.1: + release_date: "2023-05-12" + 2.10.2: + changes: + minor_changes: + - validate - Add option `check_format` for the jsonschema engine to disable + JSON Schema format checking. + - validate - Add support for JSON Schema draft 2019-09 and 2020-12 as well as + automatically choosing the draft from the `$schema` field of the criteria. + fragments: + - netaddr_error.yml + - pre-commit.yaml + - validate_jsonschema_update.yaml + release_date: "2023-05-13" + 2.10.3: + fragments: + - fix_workflow_names.yml + release_date: "2023-05-17" + 2.10.4: + release_date: "2023-05-19" + 2.11.0: + changes: + bugfixes: + - Validate input for ipv4_hex(https://github.com/ansible-collections/ansible.utils/issues/281) + minor_changes: + - Add ipcut filter plugin.(https://github.com/ansible-collections/ansible.utils/issues/251) + - Add ipv6form filter plugin.(https://github.com/ansible-collections/ansible.utils/issues/230) + fragments: + - Bugfix_ipv4_hex.yaml + - ipcut.yaml + - ipv6form.yaml + plugins: + filter: + - description: This filter is designed to get 1st or last few bits of IP address. + name: ipcut + namespace: null + - description: + This filter is designed to convert ipv6 address in different + formats. For example expand, compressetc. + name: ipv6form + namespace: null + release_date: "2023-09-07" + 2.12.0: + changes: + minor_changes: + - Fact_diff filter plugin - Add fact_diff filter plugin. (https://github.com/ansible-collections/ansible.utils/issues/78). + fragments: + - fact_diff_filter_plugin.yaml + plugins: + filter: + - description: Find the difference between currently set facts + name: fact_diff + namespace: null + release_date: "2023-11-27" 2.2.0: changes: minor_changes: @@ -322,59 +378,61 @@ releases: - fix_pre_commit.yaml - to_xml_disable_xml_declaration.yaml release_date: "2023-01-30" - 2.10.0: - release_date: "2023-05-11" - 2.10.1: - release_date: "2023-05-12" - 2.10.2: + 3.0.0: changes: - minor_changes: - - validate - Add option `check_format` for the jsonschema engine to disable - JSON Schema format checking. - - validate - Add support for JSON Schema draft 2019-09 and 2020-12 as well as - automatically choosing the draft from the `$schema` field of the criteria. + major_changes: + - Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions + are EoL now. + release_summary: + Starting from this release, the minimum `ansible-core` version + this collection requires is `2.14.0`. That last known version compatible with + ansible-core<2.14 is `v2.12.0`. fragments: - - netaddr_error.yml - - pre-commit.yaml - - validate_jsonschema_update.yaml - release_date: "2023-05-13" - 2.10.3: - fragments: - - fix_workflow_names.yml - release_date: "2023-05-17" - 2.10.4: - release_date: "2023-05-19" - 2.11.0: + - update_requires_ansible.yaml + release_date: "2023-11-30" + 3.1.0: changes: bugfixes: - - Validate input for ipv4_hex(https://github.com/ansible-collections/ansible.utils/issues/281) + - Avoid unnecessary use of persistent connection in `cli_parse`, `fact_diff`, + `update_fact` and `validate` as this action does not require a connection. + doc_changes: + - ipv6form filter plugin - Fix to be displayed correctly. + - validate lookup plugin - Fix syntax in EXAMPLES. + - validate module - Fix syntax in EXAMPLES. minor_changes: - - Add ipcut filter plugin.(https://github.com/ansible-collections/ansible.utils/issues/251) - - Add ipv6form filter plugin.(https://github.com/ansible-collections/ansible.utils/issues/230) + - Add support in fact_diff filter plugin to show common lines.(https://github.com/ansible-collections/ansible.utils/issues/311) fragments: - - Bugfix_ipv4_hex.yaml - - ipcut.yaml - - ipv6form.yaml - plugins: - filter: - - description: This filter is designed to get 1st or last few bits of IP address. - name: ipcut - namespace: null - - description: - This filter is designed to convert ipv6 address in different - formats. For example expand, compressetc. - name: ipv6form - namespace: null - release_date: "2023-09-07" - 2.12.0: + - Fre_fact_diff.yaml + - add_require_Connection.yaml + - ipv6form-doc.yaml + - validate-doc.yaml + release_date: "2024-01-30" + 4.0.0: changes: - minor_changes: - - Fact_diff filter plugin - Add fact_diff filter plugin. (https://github.com/ansible-collections/ansible.utils/issues/78). + major_changes: + - Bumping `netaddr` to `>=0.10.1`, means that starting from this release, the + minimum `netaddr` version this collection requires is `>=0.10.1`. + - This release mainly addresses the breaking changes in the `netaddr` library. + - With the new release of `netaddr` 1.0.0, the `IPAddress.is_private()` method + has been removed and instead, the `IPAddress.is_global()` method has been + extended to support the same functionality. This change has been reflected + in the `ipaddr` filter plugin. + release_summary: + Starting from this release, the minimum `netaddr` version this + collection requires is `>=0.10.1`. fragments: - - fact_diff_filter_plugin.yaml - plugins: - filter: - - description: Find the difference between currently set facts - name: fact_diff - namespace: null - release_date: "2023-11-27" + - netaddr_is_private_deprecation.yaml + - trivial_tests_updates.yaml + release_date: "2024-03-28" + 4.1.0: + changes: + release_summary: + In the last release (`v4.0.0`), we bumped the minimum required + `netaddr` version to be `>=0.10.1`. However, since `netaddr>=0.10.1` is not + yet available in many sources other than PyPI, we have temporarily added a + fallback method to support the `ipaddr` filter with older `netaddr` versions + with this release. Once the latest `netaddr` is available in all major sources, + we will deprecate this support and eventually remove it. + fragments: + - ipaddress_is_global_fallback.yaml + release_date: "2024-04-15" diff --git a/ansible_collections/ansible/utils/changelogs/config.yaml b/ansible_collections/ansible/utils/changelogs/config.yaml index 18b915d98..669501120 100644 --- a/ansible_collections/ansible/utils/changelogs/config.yaml +++ b/ansible_collections/ansible/utils/changelogs/config.yaml @@ -1,3 +1,4 @@ +--- changelog_filename_template: ../CHANGELOG.rst changelog_filename_version_depth: 0 changes_file: changelog.yaml diff --git a/ansible_collections/ansible/utils/docs/ansible.utils.fact_diff_filter.rst b/ansible_collections/ansible/utils/docs/ansible.utils.fact_diff_filter.rst index f3460d605..2241c4fe5 100644 --- a/ansible_collections/ansible/utils/docs/ansible.utils.fact_diff_filter.rst +++ b/ansible_collections/ansible/utils/docs/ansible.utils.fact_diff_filter.rst @@ -70,6 +70,27 @@ Parameters
The first fact to be used in the comparison.
+ + +
+ common + +
+ boolean +
+ + +
    Choices: +
  • no ←
  • +
  • yes
  • +
+ + + + +
Show all common lines.
+ +
diff --git a/ansible_collections/ansible/utils/docs/ansible.utils.ipv6form_filter.rst b/ansible_collections/ansible/utils/docs/ansible.utils.ipv6form_filter.rst index 824f3188e..6ac965d6b 100644 --- a/ansible_collections/ansible/utils/docs/ansible.utils.ipv6form_filter.rst +++ b/ansible_collections/ansible/utils/docs/ansible.utils.ipv6form_filter.rst @@ -44,6 +44,11 @@ Parameters +
    Choices: +
  • compress
  • +
  • expand
  • +
  • x509
  • +
diff --git a/ansible_collections/ansible/utils/docs/ansible.utils.validate_lookup.rst b/ansible_collections/ansible/utils/docs/ansible.utils.validate_lookup.rst index 891787652..b9fa30454 100644 --- a/ansible_collections/ansible/utils/docs/ansible.utils.validate_lookup.rst +++ b/ansible_collections/ansible/utils/docs/ansible.utils.validate_lookup.rst @@ -116,12 +116,12 @@ Examples - name: set facts for data and criteria ansible.builtin.set_fact: - data: "{{ lookup('ansible.builtin.file', './validate/data/show_interfaces_iosxr.json')}}" - criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/jsonschema/show_interfaces_iosxr.json')}}" + data: "{{ lookup('ansible.builtin.file', './validate/data/show_interfaces_iosxr.json') }}" + criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/jsonschema/show_interfaces_iosxr.json') }}" - name: validate data in json format using jsonschema with lookup plugin by passing plugin configuration variable as key/value pairs ansible.builtin.set_fact: - data_criteria_checks: "{{ lookup(data, criteria, engine='ansible.utils.jsonschema', draft='draft7') }}" + data_criteria_checks: "{{ lookup('ansible.utils.validate', data, criteria, engine='ansible.utils.jsonschema', draft='draft7') }}" - name: validate data in json format using jsonschema with lookup plugin by passing plugin configuration variable as task variable ansible.builtin.set_fact: diff --git a/ansible_collections/ansible/utils/docs/ansible.utils.validate_module.rst b/ansible_collections/ansible/utils/docs/ansible.utils.validate_module.rst index 615b68a75..6948e39e1 100644 --- a/ansible_collections/ansible/utils/docs/ansible.utils.validate_module.rst +++ b/ansible_collections/ansible/utils/docs/ansible.utils.validate_module.rst @@ -103,8 +103,8 @@ Examples - name: set facts for data and criteria ansible.builtin.set_fact: - data: "{{ lookup('ansible.builtin.file', './validate/data/show_interfaces_iosxr.json')}}" - criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/jsonschema/show_interfaces_iosxr.json')}}" + data: "{{ lookup('ansible.builtin.file', './validate/data/show_interfaces_iosxr.json') }}" + criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/jsonschema/show_interfaces_iosxr.json') }}" - name: validate data in with jsonschema engine (by passing task vars as configurable plugin options) ansible.utils.validate: @@ -116,8 +116,8 @@ Examples - name: validate configuration with config plugin (see config plugin for criteria examples) ansible.utils.validate: - data: "{{ lookup('ansible.builtin.file', './backup/eos.config' }}" - criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/config/eos_config_rules.yaml' }}" + data: "{{ lookup('ansible.builtin.file', './backup/eos.config') }}" + criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/config/eos_config_rules.yaml') }}" engine: ansible.utils.config diff --git a/ansible_collections/ansible/utils/meta/runtime.yml b/ansible_collections/ansible/utils/meta/runtime.yml index 460bbaf81..ce6befd7b 100644 --- a/ansible_collections/ansible/utils/meta/runtime.yml +++ b/ansible_collections/ansible/utils/meta/runtime.yml @@ -1,2 +1,2 @@ --- -requires_ansible: ">=2.9.10" +requires_ansible: ">=2.14.0" diff --git a/ansible_collections/ansible/utils/mypy.ini b/ansible_collections/ansible/utils/mypy.ini deleted file mode 100644 index cd56a58fb..000000000 --- a/ansible_collections/ansible/utils/mypy.ini +++ /dev/null @@ -1,30 +0,0 @@ -[mypy] -files = - plugins/, - tests/ -install_types = true -namespace_packages = true -no_implicit_optional = true -non_interactive = true -pretty = true -show_column_numbers = true -show_error_codes = true -show_error_context = true -strict = true -strict_optional = true - -[mypy-ansible.*] -# No type hints as of version 2.12 -ignore_missing_imports = true - -[mypy-ansible_collections.ansible.utils.*] -# No type hints as of version 2.6.1 -ignore_missing_imports = true - -[mypy-pytest_ansible_network_integration] -# No type hints as of 6/8/2022 -ignore_missing_imports = true - -[mypy-ansible_collections.*] -# Collections are not python package -ignore_missing_imports = true diff --git a/ansible_collections/ansible/utils/plugins/action/cli_parse.py b/ansible_collections/ansible/utils/plugins/action/cli_parse.py index f9314a696..de8b418d5 100644 --- a/ansible_collections/ansible/utils/plugins/action/cli_parse.py +++ b/ansible_collections/ansible/utils/plugins/action/cli_parse.py @@ -37,6 +37,8 @@ ARGSPEC_CONDITIONALS = { class ActionModule(ActionBase): """action module""" + _requires_connection = False + PARSER_CLS_NAME = "CliParser" def __init__(self, *args, **kwargs): diff --git a/ansible_collections/ansible/utils/plugins/action/fact_diff.py b/ansible_collections/ansible/utils/plugins/action/fact_diff.py index 85674d312..d9bab6653 100644 --- a/ansible_collections/ansible/utils/plugins/action/fact_diff.py +++ b/ansible_collections/ansible/utils/plugins/action/fact_diff.py @@ -24,6 +24,8 @@ from ansible_collections.ansible.utils.plugins.modules.fact_diff import DOCUMENT class ActionModule(ActionBase): """action module""" + _requires_connection = False + def __init__(self, *args, **kwargs): super(ActionModule, self).__init__(*args, **kwargs) self._supports_async = True diff --git a/ansible_collections/ansible/utils/plugins/action/update_fact.py b/ansible_collections/ansible/utils/plugins/action/update_fact.py index da5f425af..32393ed43 100644 --- a/ansible_collections/ansible/utils/plugins/action/update_fact.py +++ b/ansible_collections/ansible/utils/plugins/action/update_fact.py @@ -26,6 +26,8 @@ from ansible_collections.ansible.utils.plugins.modules.update_fact import DOCUME class ActionModule(ActionBase): """action module""" + _requires_connection = False + def __init__(self, *args, **kwargs): """Start here""" super(ActionModule, self).__init__(*args, **kwargs) diff --git a/ansible_collections/ansible/utils/plugins/action/validate.py b/ansible_collections/ansible/utils/plugins/action/validate.py index a2eb3066a..8b4868ddb 100644 --- a/ansible_collections/ansible/utils/plugins/action/validate.py +++ b/ansible_collections/ansible/utils/plugins/action/validate.py @@ -29,6 +29,7 @@ class ActionModule(ActionBase): """action module""" VALIDATE_CLS_NAME = "Validate" + _requires_connection = False def __init__(self, *args, **kwargs): super(ActionModule, self).__init__(*args, **kwargs) diff --git a/ansible_collections/ansible/utils/plugins/filter/fact_diff.py b/ansible_collections/ansible/utils/plugins/filter/fact_diff.py index 1eb13bb61..a69012450 100644 --- a/ansible_collections/ansible/utils/plugins/filter/fact_diff.py +++ b/ansible_collections/ansible/utils/plugins/filter/fact_diff.py @@ -59,6 +59,11 @@ DOCUMENTATION = """ comparison type: list elements: str + common: + description: + - Show all common lines. + type: bool + default: false """ EXAMPLES = """ @@ -185,7 +190,7 @@ except ImportError: def _fact_diff(*args, **kwargs): """Find the difference between currently set facts""" - keys = ["before", "after", "plugin"] + keys = ["before", "after", "plugin", "common"] data = dict(zip(keys, args[1:])) data.update(kwargs) aav = AnsibleArgSpecValidator(data=data, schema=DOCUMENTATION, name="fact_diff") diff --git a/ansible_collections/ansible/utils/plugins/filter/ipv6form.py b/ansible_collections/ansible/utils/plugins/filter/ipv6form.py index 83c19e512..3d5c86ed9 100644 --- a/ansible_collections/ansible/utils/plugins/filter/ipv6form.py +++ b/ansible_collections/ansible/utils/plugins/filter/ipv6form.py @@ -61,7 +61,7 @@ DOCUMENTATION = """ required: True format: type: str - choice: + choices: ['compress', 'expand', 'x509'] description: Different formats example. compress, expand, x509 """ diff --git a/ansible_collections/ansible/utils/plugins/lookup/get_path.py b/ansible_collections/ansible/utils/plugins/lookup/get_path.py index 3370d6ac8..fa8ccf252 100644 --- a/ansible_collections/ansible/utils/plugins/lookup/get_path.py +++ b/ansible_collections/ansible/utils/plugins/lookup/get_path.py @@ -171,8 +171,7 @@ class LookupModule(LookupBase): terms = dict(zip(keys, terms)) terms.update(kwargs) - schema = [v for k, v in globals().items() if k.lower() == "documentation"] - aav = AnsibleArgSpecValidator(data=terms, schema=schema[0], name="get_path") + aav = AnsibleArgSpecValidator(data=terms, schema=DOCUMENTATION, name="get_path") valid, errors, updated_data = aav.validate() if not valid: raise AnsibleLookupError(errors) diff --git a/ansible_collections/ansible/utils/plugins/lookup/index_of.py b/ansible_collections/ansible/utils/plugins/lookup/index_of.py index 3da623ac7..8ccd4ff96 100644 --- a/ansible_collections/ansible/utils/plugins/lookup/index_of.py +++ b/ansible_collections/ansible/utils/plugins/lookup/index_of.py @@ -341,8 +341,7 @@ class LookupModule(LookupBase): terms = dict(zip(keys, terms)) terms.update(kwargs) - schema = [v for k, v in globals().items() if k.lower() == "documentation"] - aav = AnsibleArgSpecValidator(data=terms, schema=schema[0], name="index_of") + aav = AnsibleArgSpecValidator(data=terms, schema=DOCUMENTATION, name="index_of") valid, errors, updated_data = aav.validate() if not valid: raise AnsibleLookupError(errors) diff --git a/ansible_collections/ansible/utils/plugins/lookup/to_paths.py b/ansible_collections/ansible/utils/plugins/lookup/to_paths.py index 70a9abe3d..b5b1d5303 100644 --- a/ansible_collections/ansible/utils/plugins/lookup/to_paths.py +++ b/ansible_collections/ansible/utils/plugins/lookup/to_paths.py @@ -143,8 +143,7 @@ class LookupModule(LookupBase): terms = dict(zip(keys, terms)) terms.update(kwargs) - schema = [v for k, v in globals().items() if k.lower() == "documentation"] - aav = AnsibleArgSpecValidator(data=terms, schema=schema[0], name="to_paths") + aav = AnsibleArgSpecValidator(data=terms, schema=DOCUMENTATION, name="to_paths") valid, errors, updated_data = aav.validate() if not valid: raise AnsibleLookupError(errors) diff --git a/ansible_collections/ansible/utils/plugins/lookup/validate.py b/ansible_collections/ansible/utils/plugins/lookup/validate.py index 5567f157a..fbe542cd3 100644 --- a/ansible_collections/ansible/utils/plugins/lookup/validate.py +++ b/ansible_collections/ansible/utils/plugins/lookup/validate.py @@ -60,12 +60,12 @@ DOCUMENTATION = """ EXAMPLES = r""" - name: set facts for data and criteria ansible.builtin.set_fact: - data: "{{ lookup('ansible.builtin.file', './validate/data/show_interfaces_iosxr.json')}}" - criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/jsonschema/show_interfaces_iosxr.json')}}" + data: "{{ lookup('ansible.builtin.file', './validate/data/show_interfaces_iosxr.json') }}" + criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/jsonschema/show_interfaces_iosxr.json') }}" - name: validate data in json format using jsonschema with lookup plugin by passing plugin configuration variable as key/value pairs ansible.builtin.set_fact: - data_criteria_checks: "{{ lookup(data, criteria, engine='ansible.utils.jsonschema', draft='draft7') }}" + data_criteria_checks: "{{ lookup('ansible.utils.validate', data, criteria, engine='ansible.utils.jsonschema', draft='draft7') }}" - name: validate data in json format using jsonschema with lookup plugin by passing plugin configuration variable as task variable ansible.builtin.set_fact: @@ -107,9 +107,8 @@ class LookupModule(LookupBase): if kwargs.get("engine"): params.update({"engine": kwargs["engine"]}) - schema = [v for k, v in globals().items() if k.lower() == "documentation"] valid, argspec_result, updated_params = check_argspec( - schema=schema[0], + schema=DOCUMENTATION, name="validate lookup", schema_conditionals=ARGSPEC_CONDITIONALS, **params, diff --git a/ansible_collections/ansible/utils/plugins/modules/validate.py b/ansible_collections/ansible/utils/plugins/modules/validate.py index fafefb4e5..4d0e085ce 100644 --- a/ansible_collections/ansible/utils/plugins/modules/validate.py +++ b/ansible_collections/ansible/utils/plugins/modules/validate.py @@ -52,8 +52,8 @@ notes: EXAMPLES = r""" - name: set facts for data and criteria ansible.builtin.set_fact: - data: "{{ lookup('ansible.builtin.file', './validate/data/show_interfaces_iosxr.json')}}" - criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/jsonschema/show_interfaces_iosxr.json')}}" + data: "{{ lookup('ansible.builtin.file', './validate/data/show_interfaces_iosxr.json') }}" + criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/jsonschema/show_interfaces_iosxr.json') }}" - name: validate data in with jsonschema engine (by passing task vars as configurable plugin options) ansible.utils.validate: @@ -65,8 +65,8 @@ EXAMPLES = r""" - name: validate configuration with config plugin (see config plugin for criteria examples) ansible.utils.validate: - data: "{{ lookup('ansible.builtin.file', './backup/eos.config' }}" - criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/config/eos_config_rules.yaml' }}" + data: "{{ lookup('ansible.builtin.file', './backup/eos.config') }}" + criteria: "{{ lookup('ansible.builtin.file', './validate/criteria/config/eos_config_rules.yaml') }}" engine: ansible.utils.config """ diff --git a/ansible_collections/ansible/utils/plugins/plugin_utils/base/ipaddr_utils.py b/ansible_collections/ansible/utils/plugins/plugin_utils/base/ipaddr_utils.py index 0d75199fc..15040d460 100644 --- a/ansible_collections/ansible/utils/plugins/plugin_utils/base/ipaddr_utils.py +++ b/ansible_collections/ansible/utils/plugins/plugin_utils/base/ipaddr_utils.py @@ -288,8 +288,42 @@ def _previous_usable_query(v, vtype): return str(netaddr.IPAddress(int(v.ip) - 1)) +def _ip_is_global(ip): + # fallback to support netaddr < 1.0.0 + # attempt to emulate IPAddress.is_global() if it's not available + # note that there still might be some behavior differences (e.g. exceptions) + has_is_global = callable(getattr(ip, "is_global", None)) + return ( + ip.is_global() + if has_is_global + else ( + not (ip.is_private() or ip.is_link_local() or ip.is_reserved()) + and all( + ip not in netaddr.IPNetwork(ipv6net) + for ipv6net in [ + "::1/128", + "::/128", + "::ffff:0:0/96", + "64:ff9b:1::/48", + "100::/64", + "2001::/23", + "2001:db8::/32", + "2002::/16", + ] + ) + or ip in netaddr.IPRange("239.0.0.0", "239.255.255.255") # Administrative Multicast + or ip in netaddr.IPNetwork("233.252.0.0/24") # Multicast test network + or ip in netaddr.IPRange("234.0.0.0", "238.255.255.255") + or ip in netaddr.IPRange("225.0.0.0", "231.255.255.255") + or ip in netaddr.IPNetwork("192.88.99.0/24") # 6to4 anycast relays (RFC 3068) + or ip in netaddr.IPNetwork("192.0.0.9/32") + or ip in netaddr.IPNetwork("192.0.0.10/32") + ) + ) + + def _private_query(v, value): - if v.is_private(): + if not _ip_is_global(v.ip): return value @@ -298,7 +332,7 @@ def _public_query(v, value): if all( [ v_ip.is_unicast(), - not v_ip.is_private(), + _ip_is_global(v_ip), not v_ip.is_loopback(), not v_ip.is_netmask(), not v_ip.is_hostmask(), diff --git a/ansible_collections/ansible/utils/plugins/plugin_utils/fact_diff.py b/ansible_collections/ansible/utils/plugins/plugin_utils/fact_diff.py index 831ba3b70..e2d0f8209 100644 --- a/ansible_collections/ansible/utils/plugins/plugin_utils/fact_diff.py +++ b/ansible_collections/ansible/utils/plugins/plugin_utils/fact_diff.py @@ -10,8 +10,11 @@ The fact_diff plugin code """ from __future__ import absolute_import, division, print_function +import difflib import re +from collections.abc import MutableMapping + from ansible.plugins.callback import CallbackBase @@ -31,7 +34,7 @@ def _raise_error(msg): raise AnsibleFilterError(error) -def fact_diff(before, after, plugin): +def fact_diff(before, after, plugin, common): """Compare two facts or variables and get a diff. :param before: The first fact to be used in the comparison. :type before: raw @@ -40,46 +43,103 @@ def fact_diff(before, after, plugin): :param plugin: The name of the plugin in collection format :type plugin: string """ - result = run_diff(before, after, plugin) + if plugin.get("name") == "ansible.utils.native": + result = fact_diff_native().run_diff(before, after, plugin, common) return result -def _check_valid_regexes(skip_lines): - if skip_lines: - for idx, regex in enumerate(skip_lines): - try: - skip_lines[idx] = re.compile(regex) - except re.error as exc: - msg = "The regex '{regex}', is not valid. The error was {err}.".format( - regex=regex, - err=str(exc), +class fact_diff_native(CallbackBase): + def _check_valid_regexes(self, skip_lines): + if skip_lines: + for idx, regex in enumerate(skip_lines): + try: + skip_lines[idx] = re.compile(regex) + except re.error as exc: + msg = "The regex '{regex}', is not valid. The error was {err}.".format( + regex=regex, + err=str(exc), + ) + _raise_error(msg) + + def _xform(self, before, after, skip_lines): + if skip_lines: + if isinstance(before, str): + before = before.splitlines() + if isinstance(after, str): + after = after.splitlines() + before = [ + line for line in before if not any(regex.match(str(line)) for regex in skip_lines) + ] + after = [ + line for line in after if not any(regex.match(str(line)) for regex in skip_lines) + ] + if isinstance(before, list): + before = "\n".join(map(str, before)) + "\n" + if isinstance(after, list): + after = "\n".join(map(str, after)) + "\n" + return before, after, skip_lines + + def get_fact_diff(self, difflist): + if not isinstance(difflist, list): + difflist = [difflist] + ret = [] + for diff in difflist: + if "before" in diff and "after" in diff: + # format complex structures into 'files' + for x in ["before", "after"]: + if isinstance(diff[x], MutableMapping): + diff[x] = self._serialize_diff(diff[x]) + elif diff[x] is None: + diff[x] = "" + if "before_header" in diff: + before_header = "before: %s" % diff["before_header"] + else: + before_header = "before" + if "after_header" in diff: + after_header = "after: %s" % diff["after_header"] + else: + after_header = "after" + before_lines = diff["before"].splitlines(True) + after_lines = diff["after"].splitlines(True) + if before_lines and not before_lines[-1].endswith("\n"): + before_lines[-1] += "\n\\ No newline at end of file\n" + if after_lines and not after_lines[-1].endswith("\n"): + after_lines[-1] += "\n\\ No newline at end of file\n" + diff_context = ( + len(before_lines) if len(before_lines) > len(after_lines) else len(after_lines) ) - _raise_error(msg) - - -def _xform(before, after, skip_lines): - if skip_lines: - if isinstance(before, str): - before = before.splitlines() - if isinstance(after, str): - after = after.splitlines() - before = [ - line for line in before if not any(regex.match(str(line)) for regex in skip_lines) - ] - after = [line for line in after if not any(regex.match(str(line)) for regex in skip_lines)] - if isinstance(before, list): - before = "\n".join(map(str, before)) + "\n" - if isinstance(after, list): - after = "\n".join(map(str, after)) + "\n" - return before, after, skip_lines - - -def run_diff(before, after, plugin): - skip_lines = plugin["vars"].get("skip_lines") - _check_valid_regexes(skip_lines=skip_lines) - before, after, skip_lines = _xform(before, after, skip_lines=skip_lines) - diff = CallbackBase()._get_diff({"before": before, "after": after}) - ansi_escape = re.compile(r"\x1B[@-_][0-?]*[ -/]*[@-~]") - diff_text = ansi_escape.sub("", diff) - result = list(diff_text.splitlines()) - return result + differ = difflib.unified_diff( + before_lines, + after_lines, + fromfile=before_header, + tofile=after_header, + fromfiledate="", + tofiledate="", + n=diff_context, + ) + difflines = list(differ) + has_diff = False + for line in difflines: + has_diff = True + if diff["common"]: + if line.startswith("+") or line.startswith("-"): + pass + else: + ret.append(line) + else: + ret.append(line) + if has_diff: + ret.append("\n") + if "prepared" in diff: + ret.append(diff["prepared"]) + return "".join(ret) + + def run_diff(self, before, after, plugin, common): + skip_lines = plugin["vars"].get("skip_lines") + self._check_valid_regexes(skip_lines=skip_lines) + before, after, skip_lines = self._xform(before, after, skip_lines=skip_lines) + diff = self.get_fact_diff({"before": before, "after": after, "common": common}) + ansi_escape = re.compile(r"\x1B[@-_][0-?]*[ -/]*[@-~]") + diff_text = ansi_escape.sub("", diff) + result = list(diff_text.splitlines()) + return result diff --git a/ansible_collections/ansible/utils/requirements.txt b/ansible_collections/ansible/utils/requirements.txt index 8988c14c1..5b6603dc9 100644 --- a/ansible_collections/ansible/utils/requirements.txt +++ b/ansible_collections/ansible/utils/requirements.txt @@ -2,4 +2,4 @@ jsonschema textfsm ttp xmltodict -netaddr +netaddr>=0.10.1 diff --git a/ansible_collections/ansible/utils/test-requirements.txt b/ansible_collections/ansible/utils/test-requirements.txt index 4e77e6b27..bf95538e9 100644 --- a/ansible_collections/ansible/utils/test-requirements.txt +++ b/ansible_collections/ansible/utils/test-requirements.txt @@ -1,15 +1,9 @@ -# For ansible-tox-linters -black==23.3.0 ; python_version >= '3.7' -flake8 -yamllint - # Unit test runner -pytest-ansible ; python_version >= '3.9' -git+https://github.com/ansible-community/pytest-ansible-units.git ; python_version < '3.9' +pytest-ansible pytest-xdist # For integration tests pexpect git+https://github.com/ansible-network/pytest-ansible-network-integration.git ipaddress ; python_version < '3.0' -netaddr +netaddr==0.10.1 diff --git a/ansible_collections/ansible/utils/tests/config.yml b/ansible_collections/ansible/utils/tests/config.yml new file mode 100644 index 000000000..c26ea5966 --- /dev/null +++ b/ansible_collections/ansible/utils/tests/config.yml @@ -0,0 +1,3 @@ +--- +modules: + python_requires: ">=3.9" diff --git a/ansible_collections/ansible/utils/tests/integration/targets/utils_fact_diff/tasks/filter.yaml b/ansible_collections/ansible/utils/tests/integration/targets/utils_fact_diff/tasks/filter.yaml index 2ff2f1ad2..bd6e02c8f 100644 --- a/ansible_collections/ansible/utils/tests/integration/targets/utils_fact_diff/tasks/filter.yaml +++ b/ansible_collections/ansible/utils/tests/integration/targets/utils_fact_diff/tasks/filter.yaml @@ -20,28 +20,16 @@ msg: "The regex '+', is not valid" - name: Check argspec validation - ansible.builtin.set_fact: "{{ ansible.utils.fact_diff([1, 2, 3]) }}" + ansible.builtin.set_fact: + result: "{{ [1, 2, 3] | ansible.utils.fact_diff() }}" + register: error ignore_errors: true - register: result - name: Assert ansible.builtin.assert: - that: "{{ msg in result.msg }}" + that: "{{ msg in error.msg }}" vars: msg: "missing required arguments: after" - when: "result.msg | type_debug == 'list'" - -- name: Check argspec validation - ansible.builtin.set_fact: "{{ ansible.utils.fact_diff([1, 2, 3]) }}" - ignore_errors: true - register: result - -- name: Assert - ansible.builtin.assert: - that: "{{ msg in result.msg }}" - vars: - msg: "missing required arguments: before" - when: "result.msg | type_debug == 'list'" - name: Set fact ansible.builtin.set_fact: @@ -69,7 +57,7 @@ before: "{{ before | ansible.utils.to_paths }}" after: "{{ after | ansible.utils.to_paths }}" -- name: Show the difference in json format +- name: Show the difference in path format ansible.builtin.set_fact: result: "{{ before | ansible.utils.fact_diff(after) }}" @@ -78,6 +66,27 @@ before: "{{ before | to_nice_yaml }}" after: "{{ after | to_nice_yaml }}" -- name: Show the difference in json format +- name: Show the difference in yaml format ansible.builtin.set_fact: result: "{{ before | ansible.utils.fact_diff(after) }}" + +- name: Set fact + ansible.builtin.set_fact: + before: + a: + b: + c: + d: + - 0 + - 1 + after: + a: + b: + c: + d: + - 2 + - 3 + +- name: Show the common lines in json format + ansible.builtin.set_fact: + result: "{{ before | ansible.utils.fact_diff(after, common=true) }}" diff --git a/ansible_collections/ansible/utils/tests/integration/targets/utils_ipaddr_filter/tasks/ipaddr.yaml b/ansible_collections/ansible/utils/tests/integration/targets/utils_ipaddr_filter/tasks/ipaddr.yaml index aaa79c028..d7569bbe5 100644 --- a/ansible_collections/ansible/utils/tests/integration/targets/utils_ipaddr_filter/tasks/ipaddr.yaml +++ b/ansible_collections/ansible/utils/tests/integration/targets/utils_ipaddr_filter/tasks/ipaddr.yaml @@ -10,6 +10,22 @@ - "42540766412265424405338506004571095040/64" - true +- name: Set ipaddress list for private/public test + ansible.builtin.set_fact: + value_private_public: "{{ value + value_private_public_additional }}" + vars: + value_private_public_additional: + # valid private subnet address + - 172.16.0.1 + # exception: globally reachable address + - 192.0.0.9 + # multicast test network: considered global in netaddr + - 233.252.0.1 + - 234.0.0.1 + # administrative multicast: considered global in netaddr + - 225.0.0.1 + - 239.0.0.1 + - name: Ipaddr filter with empty string query ansible.builtin.set_fact: result1: "{{ value | ansible.utils.ipaddr }}" @@ -28,12 +44,20 @@ - name: Ipaddr filter with public network query ansible.builtin.set_fact: - result3: "{{ value | ansible.utils.ipaddr('public') }}" + result3: "{{ value_private_public | ansible.utils.ipaddr('public') }}" - name: Assert result for ipaddr public network query ansible.builtin.assert: that: "{{ result3 == ipaddr_result3 }}" +- name: Ipaddr filter with private network query + ansible.builtin.set_fact: + result_private: "{{ value_private_public | ansible.utils.ipaddr('private') }}" + +- name: Assert result for ipaddr private network query + ansible.builtin.assert: + that: "{{ result_private == ipaddr_result_private }}" + - name: Ipaddr filter with network query ansible.builtin.set_fact: result4: "{{ value | ansible.utils.ipaddr('net') }}" diff --git a/ansible_collections/ansible/utils/tests/integration/targets/utils_ipaddr_filter/vars/main.yaml b/ansible_collections/ansible/utils/tests/integration/targets/utils_ipaddr_filter/vars/main.yaml index 6c28bde1a..0f9c88464 100644 --- a/ansible_collections/ansible/utils/tests/integration/targets/utils_ipaddr_filter/vars/main.yaml +++ b/ansible_collections/ansible/utils/tests/integration/targets/utils_ipaddr_filter/vars/main.yaml @@ -26,12 +26,19 @@ ipaddr_result2: ipaddr_result3: - 192.24.2.1 - - 2001:db8:32c:faad::/64 + - 192.0.0.9 ipaddr_result4: - 192.168.32.0/24 - 2001:db8:32c:faad::/64 +ipaddr_result_private: + - ::1 + - 192.168.32.0/24 + - fe80::100/10 + - 2001:db8:32c:faad::/64 + - 172.16.0.1 + ipwrap_result1: - "192.24.2.1" - "host.fqdn" diff --git a/ansible_collections/ansible/utils/tests/unit/compat/__init__.py b/ansible_collections/ansible/utils/tests/unit/compat/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/ansible/utils/tests/unit/compat/mock.py b/ansible_collections/ansible/utils/tests/unit/compat/mock.py deleted file mode 100644 index 3a3e082a8..000000000 --- a/ansible_collections/ansible/utils/tests/unit/compat/mock.py +++ /dev/null @@ -1,127 +0,0 @@ -# (c) 2014, Toshio Kuratomi -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -""" -Compat module for Python3.x's unittest.mock module -""" -import sys - -import _io # pyright: ignore[reportMissingImports] - - -# Python 2.7 - -# Note: Could use the pypi mock library on python3.x as well as python2.x. It -# is the same as the python3 stdlib mock library - -try: - # Allow wildcard import because we really do want to import all of mock's - # symbols into this compat shim - # pylint: disable=wildcard-import,unused-wildcard-import - from unittest.mock import * # noqa F403 -except ImportError: - # Python 2 - # pylint: disable=wildcard-import,unused-wildcard-import - try: - from mock import * # pyright: ignore[reportMissingModuleSource] # noqa F403 - except ImportError: - print("You need the mock library installed on python2.x to run tests") - - -# Prior to 3.4.4, mock_open cannot handle binary read_data -if sys.version_info >= (3,) and sys.version_info < (3, 4, 4): - file_spec = None - - def _iterate_read_data(read_data): - # Helper for mock_open: - # Retrieve lines from read_data via a generator so that separate calls to - # readline, read, and readlines are properly interleaved - sep = b"\n" if isinstance(read_data, bytes) else "\n" - data_as_list = [line + sep for line in read_data.split(sep)] - - if data_as_list[-1] == sep: - # If the last line ended in a newline, the list comprehension will have an - # extra entry that's just a newline. Remove this. - data_as_list = data_as_list[:-1] - else: - # If there wasn't an extra newline by itself, then the file being - # emulated doesn't have a newline to end the last line remove the - # newline that our naive format() added - data_as_list[-1] = data_as_list[-1][:-1] - - for line in data_as_list: - yield line - - def mock_open(mock=None, read_data=""): - """ - A helper function to create a mock to replace the use of `open`. It works - for `open` called directly or used as a context manager. - - The `mock` argument is the mock object to configure. If `None` (the - default) then a `MagicMock` will be created for you, with the API limited - to methods or attributes available on standard file handles. - - `read_data` is a string for the `read` methoddline`, and `readlines` of the - file handle to return. This is an empty string by default. - """ - - def _readlines_side_effect(*args, **kwargs): - if handle.readlines.return_value is not None: - return handle.readlines.return_value - return list(_data) - - def _read_side_effect(*args, **kwargs): - if handle.read.return_value is not None: - return handle.read.return_value - return type(read_data)().join(_data) - - def _readline_side_effect(): - if handle.readline.return_value is not None: - while True: - yield handle.readline.return_value - for line in _data: - yield line - - global file_spec - if file_spec is None: - file_spec = list(set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO)))) - - if mock is None: - mock = MagicMock(name="open", spec=open) # noqa F405 - - handle = MagicMock(spec=file_spec) # noqa F405 - handle.__enter__.return_value = handle - - _data = _iterate_read_data(read_data) - - handle.write.return_value = None - handle.read.return_value = None - handle.readline.return_value = None - handle.readlines.return_value = None - - handle.read.side_effect = _read_side_effect - handle.readline.side_effect = _readline_side_effect() - handle.readlines.side_effect = _readlines_side_effect - - mock.return_value = handle - return mock diff --git a/ansible_collections/ansible/utils/tests/unit/compat/unittest.py b/ansible_collections/ansible/utils/tests/unit/compat/unittest.py deleted file mode 100644 index 8cbfa7b9a..000000000 --- a/ansible_collections/ansible/utils/tests/unit/compat/unittest.py +++ /dev/null @@ -1,41 +0,0 @@ -# (c) 2014, Toshio Kuratomi -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -""" -Compat module for Python2.7's unittest module -""" - -import sys - - -# Allow wildcard import because we really do want to import all of -# unittests's symbols into this compat shim -# pylint: disable=wildcard-import,unused-wildcard-import -if sys.version_info < (2, 7): - try: - # Need unittest2 on python2.6 - from unittest2 import * # noqa F403 - except ImportError: - print("You need unittest2 installed on python2.6.x to run tests") -else: - from unittest import * # noqa F403 diff --git a/ansible_collections/ansible/utils/tests/unit/mock/path.py b/ansible_collections/ansible/utils/tests/unit/mock/path.py index 67e47a4e5..73ed2d9dc 100644 --- a/ansible_collections/ansible/utils/tests/unit/mock/path.py +++ b/ansible_collections/ansible/utils/tests/unit/mock/path.py @@ -2,8 +2,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type + +from unittest.mock import MagicMock + from ansible.utils.path import unfrackpath -from ansible_collections.ansible.netcommon.tests.unit.compat.mock import MagicMock mock_unfrackpath_noop = MagicMock(spec_set=unfrackpath, side_effect=lambda x, *args, **kwargs: x) diff --git a/ansible_collections/ansible/utils/tests/unit/mock/procenv.py b/ansible_collections/ansible/utils/tests/unit/mock/procenv.py index 657d1e834..e6e09464b 100644 --- a/ansible_collections/ansible/utils/tests/unit/mock/procenv.py +++ b/ansible_collections/ansible/utils/tests/unit/mock/procenv.py @@ -27,10 +27,10 @@ import sys from contextlib import contextmanager from io import BytesIO, StringIO +from unittest import TestCase from ansible.module_utils._text import to_bytes from ansible.module_utils.six import PY3 -from ansible_collections.ansible.netcommon.tests.unit.compat import unittest @contextmanager @@ -77,7 +77,7 @@ def swap_stdout(): sys.stdout = old_stdout -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self, module_args=None): if module_args is None: module_args = { diff --git a/ansible_collections/ansible/utils/tests/unit/module_utils/test_argspec_validate.py b/ansible_collections/ansible/utils/tests/unit/module_utils/test_argspec_validate.py index 6e689ba83..0bdd54f94 100644 --- a/ansible_collections/ansible/utils/tests/unit/module_utils/test_argspec_validate.py +++ b/ansible_collections/ansible/utils/tests/unit/module_utils/test_argspec_validate.py @@ -9,7 +9,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( AnsibleArgSpecValidator, @@ -18,7 +18,7 @@ from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_valid from .fixtures.docstring import DOCUMENTATION -class TestSortList(unittest.TestCase): +class TestSortList(TestCase): def test_simple_pass(self): data = {"param_str": "string"} aav = AnsibleArgSpecValidator( diff --git a/ansible_collections/ansible/utils/tests/unit/module_utils/test_dict_merge.py b/ansible_collections/ansible/utils/tests/unit/module_utils/test_dict_merge.py index 04e14bdc0..bca7c40d6 100644 --- a/ansible_collections/ansible/utils/tests/unit/module_utils/test_dict_merge.py +++ b/ansible_collections/ansible/utils/tests/unit/module_utils/test_dict_merge.py @@ -9,12 +9,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.module_utils.common.utils import dict_merge -class TestDict_merge(unittest.TestCase): +class TestDict_merge(TestCase): def test_not_dict_base(self): base = [0] other = {"a": "b"} diff --git a/ansible_collections/ansible/utils/tests/unit/module_utils/test_get_path.py b/ansible_collections/ansible/utils/tests/unit/module_utils/test_get_path.py index a129aaa7e..53bfbeee4 100644 --- a/ansible_collections/ansible/utils/tests/unit/module_utils/test_get_path.py +++ b/ansible_collections/ansible/utils/tests/unit/module_utils/test_get_path.py @@ -9,14 +9,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.template import Templar from ansible_collections.ansible.utils.plugins.module_utils.common.get_path import get_path -class TestGetPath(unittest.TestCase): +class TestGetPath(TestCase): def setUp(self): self._environment = Templar(loader=None).environment diff --git a/ansible_collections/ansible/utils/tests/unit/module_utils/test_sort_list.py b/ansible_collections/ansible/utils/tests/unit/module_utils/test_sort_list.py index bab1b5f6b..d7e0d3223 100644 --- a/ansible_collections/ansible/utils/tests/unit/module_utils/test_sort_list.py +++ b/ansible_collections/ansible/utils/tests/unit/module_utils/test_sort_list.py @@ -9,12 +9,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.module_utils.common.utils import sort_list -class TestSortList(unittest.TestCase): +class TestSortList(TestCase): def test_simple(self): var = [3, 2, 1] result = sort_list(var) diff --git a/ansible_collections/ansible/utils/tests/unit/module_utils/test_to_paths.py b/ansible_collections/ansible/utils/tests/unit/module_utils/test_to_paths.py index 68aaf2199..c5e09e7b3 100644 --- a/ansible_collections/ansible/utils/tests/unit/module_utils/test_to_paths.py +++ b/ansible_collections/ansible/utils/tests/unit/module_utils/test_to_paths.py @@ -12,7 +12,8 @@ __metaclass__ = type import heapq import json import os -import unittest + +from unittest import TestCase from ansible.template import Templar @@ -20,7 +21,7 @@ from ansible_collections.ansible.utils.plugins.module_utils.common.get_path impo from ansible_collections.ansible.utils.plugins.module_utils.common.to_paths import to_paths -class TestToPaths(unittest.TestCase): +class TestToPaths(TestCase): def setUp(self): self._environment = Templar(loader=None).environment diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/action/test_cli_parse.py b/ansible_collections/ansible/utils/tests/unit/plugins/action/test_cli_parse.py index c0c8af770..0c6e8261e 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/action/test_cli_parse.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/action/test_cli_parse.py @@ -9,6 +9,9 @@ __metaclass__ = type import os import tempfile +from unittest import TestCase +from unittest.mock import MagicMock, patch + from ansible.module_utils.connection import ConnectionError as AnsibleConnectionError from ansible.playbook.task import Task from ansible.template import Templar @@ -22,12 +25,10 @@ from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_valid ) from ansible_collections.ansible.utils.plugins.modules.cli_parse import DOCUMENTATION from ansible_collections.ansible.utils.plugins.plugin_utils.base.cli_parser import CliParserBase -from ansible_collections.ansible.utils.tests.unit.compat import unittest -from ansible_collections.ansible.utils.tests.unit.compat.mock import MagicMock, patch from ansible_collections.ansible.utils.tests.unit.mock.loader import DictDataLoader -class TestCli_Parse(unittest.TestCase): +class TestCli_Parse(TestCase): def setUp(self): task = MagicMock(Task) play_context = MagicMock() diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/action/test_fact_diff.py b/ansible_collections/ansible/utils/tests/unit/plugins/action/test_fact_diff.py index b197356fb..457d6e992 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/action/test_fact_diff.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/action/test_fact_diff.py @@ -9,7 +9,8 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import re -import unittest + +from unittest import TestCase from ansible.playbook.task import Task from ansible.template import Templar @@ -23,7 +24,7 @@ except ImportError: from mock import MagicMock # pyright: ignore[reportMissingModuleSource] -class TestUpdate_Fact(unittest.TestCase): +class TestUpdate_Fact(TestCase): def setUp(self): task = MagicMock(Task) # Ansible > 2.13 looks for check_mode in task diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/action/test_update_fact.py b/ansible_collections/ansible/utils/tests/unit/plugins/action/test_update_fact.py index 3ec4a8f74..a0653d257 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/action/test_update_fact.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/action/test_update_fact.py @@ -9,7 +9,8 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import unittest + +from unittest import TestCase from ansible.playbook.task import Task from ansible.template import Templar @@ -79,7 +80,7 @@ INVALID_JINJA = [ ] -class TestUpdate_Fact(unittest.TestCase): +class TestUpdate_Fact(TestCase): def setUp(self): task = MagicMock(Task) # Ansible > 2.13 looks for check_mode in task diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/action/test_validate.py b/ansible_collections/ansible/utils/tests/unit/plugins/action/test_validate.py index 0176228a6..dc1f861ee 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/action/test_validate.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/action/test_validate.py @@ -8,7 +8,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleActionFail from ansible.playbook.task import Task @@ -111,7 +111,7 @@ CRITERIA_FORMAT_SUPPORT_CHECK = { } -class TestValidate(unittest.TestCase): +class TestValidate(TestCase): def setUp(self): task = MagicMock(Task) play_context = MagicMock() diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_cidr_merge.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_cidr_merge.py index 9b1545c99..8943d9360 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_cidr_merge.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_cidr_merge.py @@ -12,7 +12,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError @@ -30,7 +30,7 @@ VALID_DATA_SPAN = ["192.168.1.1", "192.168.1.2", "192.168.1.3", "192.168.1.4"] VALID_OUTPUT_SPAN = "192.168.1.0/29" -class TestCidrMerge(unittest.TestCase): +class TestCidrMerge(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_consolidate.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_consolidate.py index 729701c45..e67996796 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_consolidate.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_consolidate.py @@ -8,14 +8,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.filter.consolidate import _consolidate -class TestConsolidate(unittest.TestCase): +class TestConsolidate(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_fact_diff.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_fact_diff.py index f112d12ec..91d2640da 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_fact_diff.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_fact_diff.py @@ -8,14 +8,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.filter.fact_diff import _fact_diff -class TestUpdate_Fact(unittest.TestCase): +class TestUpdate_Fact(TestCase): def setUp(self): pass @@ -106,3 +106,13 @@ class TestUpdate_Fact(unittest.TestCase): "missing required arguments: after", str(error.exception), ) + + def test_diff_dict_common(self): + """Compare two dicts that with common option""" + self.maxDiff = None + before = {"a": {"b": {"c": {"d": [0, 1, 2, 3]}}}} + after = {"a": {"b": {"c": {"d": [0, 1, 2, 4]}}}} + result = _fact_diff("", before, after, common=True) + self.assertIn(" 0", result) + self.assertIn(" 1", result) + self.assertIn(" 2", result) diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_from_xml.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_from_xml.py index a883592f6..4643f5375 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_from_xml.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_from_xml.py @@ -8,7 +8,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleError, AnsibleFilterError @@ -26,7 +26,7 @@ OUTPUT = """{"netconf-state": \ {"@xmlns": "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring", "schemas": {"schema": null}}}""" -class TestFromXml(unittest.TestCase): +class TestFromXml(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_hwaddr.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_hwaddr.py index 1ddfd6277..3e1dea25d 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_hwaddr.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_hwaddr.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.filter.hwaddr import _hwaddr -class Test_hwaddr(unittest.TestCase): +class Test_hwaddr(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ip4_hex.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ip4_hex.py index 449b3e1a2..0fb4345f1 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ip4_hex.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ip4_hex.py @@ -12,14 +12,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.filter.ip4_hex import _ip4_hex -class TestIpWrap(unittest.TestCase): +class TestIpWrap(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipaddr.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipaddr.py index afdf1943d..2849fb853 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipaddr.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipaddr.py @@ -11,7 +11,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase import pytest @@ -36,12 +36,18 @@ from ansible_collections.ansible.utils.plugins.plugin_utils.base.ipaddr_utils im netaddr = pytest.importorskip("netaddr") -class TestIpFilter(unittest.TestCase): +class TestIpFilter(TestCase): def test_cidr_merge(self): - with pytest.raises(AnsibleFilterError, match="cidr_merge: expected iterable, got None"): + with pytest.raises( + AnsibleFilterError, + match="cidr_merge: expected iterable, got None", + ): cidr_merge(None) - with pytest.raises(AnsibleFilterError, match="cidr_merge: invalid action 'floop'"): + with pytest.raises( + AnsibleFilterError, + match="cidr_merge: invalid action 'floop'", + ): cidr_merge([], "floop") self.assertEqual(cidr_merge([]), []) @@ -389,15 +395,30 @@ class TestIpFilter(unittest.TestCase): address = "1.12.1.0/25" self.assertEqual(ipaddr(address, "network_netmask"), "1.12.1.0 255.255.255.128") address = "1.12.1.36/28" - self.assertEqual(ipaddr(address, "network_netmask"), "1.12.1.32 255.255.255.240") + self.assertEqual( + ipaddr(address, "network_netmask"), + "1.12.1.32 255.255.255.240", + ) address = "1.12.1.36/255.255.255.240" - self.assertEqual(ipaddr(address, "network_netmask"), "1.12.1.32 255.255.255.240") + self.assertEqual( + ipaddr(address, "network_netmask"), + "1.12.1.32 255.255.255.240", + ) address = "1.12.1.36/31" - self.assertEqual(ipaddr(address, "network_netmask"), "1.12.1.36 255.255.255.254") + self.assertEqual( + ipaddr(address, "network_netmask"), + "1.12.1.36 255.255.255.254", + ) address = "1.12.1.37/31" - self.assertEqual(ipaddr(address, "network_netmask"), "1.12.1.36 255.255.255.254") + self.assertEqual( + ipaddr(address, "network_netmask"), + "1.12.1.36 255.255.255.254", + ) address = "1.12.1.36/32" - self.assertEqual(ipaddr(address, "network_netmask"), "1.12.1.36 255.255.255.255") + self.assertEqual( + ipaddr(address, "network_netmask"), + "1.12.1.36 255.255.255.255", + ) address = "1.12.1.254/24" self.assertEqual(ipaddr(address, "network_netmask"), "1.12.1.0 255.255.255.0") @@ -493,7 +514,10 @@ class TestIpFilter(unittest.TestCase): self.assertEqual(ipmath("2001::1", 9), "2001::a") self.assertEqual(ipmath("2001::1", 10), "2001::b") self.assertEqual(ipmath("2001::5", -3), "2001::2") - self.assertEqual(ipmath("2001::5", -10), "2000:ffff:ffff:ffff:ffff:ffff:ffff:fffb") + self.assertEqual( + ipmath("2001::5", -10), + "2000:ffff:ffff:ffff:ffff:ffff:ffff:fffb", + ) expected = "You must pass a valid IP address; invalid_ip is invalid" with self.assertRaises(AnsibleFilterError) as exc: @@ -544,13 +568,13 @@ class TestIpFilter(unittest.TestCase): ipsubnet("1.1.1.1/25", "24") self.assertEqual(exc.exception.message, expected) - with self.assertRaisesRegexp( + with self.assertRaisesRegex( AnsibleFilterError, "You must pass a valid subnet or IP address; invalid_subnet is invalid", ): ipsubnet("192.168.144.5", "invalid_subnet") - with self.assertRaisesRegexp( + with self.assertRaisesRegex( AnsibleFilterError, "192.168.144.0/30 is not in the subnet 192.168.144.4/30", ): diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipcut.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipcut.py index a03b3b3db..c086833cf 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipcut.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipcut.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.filter.ipcut import _ipcut -class TestIpCut(unittest.TestCase): +class TestIpCut(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipmath.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipmath.py index 02e1553bb..9c36ea2c8 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipmath.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipmath.py @@ -12,14 +12,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.filter.ipmath import _ipmath -class TestIpAddr(unittest.TestCase): +class TestIpAddr(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipsubnet.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipsubnet.py index 4571b96b2..09885e671 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipsubnet.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipsubnet.py @@ -12,7 +12,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase import pytest @@ -23,7 +23,7 @@ address = "192.168.144.5" subnet = "192.168.0.0/16" -class TestIpSubnet(unittest.TestCase): +class TestIpSubnet(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv4.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv4.py index ecd57a448..130ef6eda 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv4.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv4.py @@ -12,7 +12,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase import pytest @@ -41,7 +41,7 @@ VALID_OUTPUT1 = ["::ffff:192.24.2.1/128", "::ffff:192.168.32.0/120"] VALID_OUTPUT2 = ["192.24.2.1"] -class TestIp4(unittest.TestCase): +class TestIp4(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv6.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv6.py index 4f730f90b..ad18bec27 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv6.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv6.py @@ -12,7 +12,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase import pytest @@ -44,7 +44,7 @@ VALID_OUTPUT1 = ["192.168.32.0/24", "192.24.2.1/32"] VALID_OUTPUT2 = ["::ffff:192.168.32.0", "::ffff:192.24.2.1", "fe80::100"] -class TestIp6(unittest.TestCase): +class TestIp6(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv6form.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv6form.py index b094d5553..46b6e9029 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv6form.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipv6form.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.filter.ipv6form import _ipv6form -class TestIpv6Form(unittest.TestCase): +class TestIpv6Form(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipwrap.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipwrap.py index fd31d57a9..8694fdb12 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipwrap.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_ipwrap.py @@ -12,7 +12,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase import pytest @@ -46,7 +46,7 @@ VALID_OUTPUT = [ ] -class TestIpWrap(unittest.TestCase): +class TestIpWrap(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_keep_keys.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_keep_keys.py index 70f42f2e3..767d3bd7c 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_keep_keys.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_keep_keys.py @@ -8,14 +8,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.filter.keep_keys import _keep_keys -class TestKeepKeys(unittest.TestCase): +class TestKeepKeys(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_macaddr.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_macaddr.py index adbc0cd4f..dc1e3241d 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_macaddr.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_macaddr.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.filter.macaddr import _macaddr -class Test_macaddr(unittest.TestCase): +class Test_macaddr(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_network_in_network.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_network_in_network.py index 54a080fac..36746fbb6 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_network_in_network.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_network_in_network.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.filter.network_in_network import _network_in_network -class Test_network_in_network(unittest.TestCase): +class Test_network_in_network(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_network_in_usable.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_network_in_usable.py index 27ed21bf5..c71d17e3c 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_network_in_usable.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_network_in_usable.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.filter.network_in_usable import _network_in_usable -class Test_Network_In_Usable(unittest.TestCase): +class Test_Network_In_Usable(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_next_nth_usable.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_next_nth_usable.py index 615ca89bd..4f818e7f4 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_next_nth_usable.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_next_nth_usable.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.filter.next_nth_usable import _next_nth_usable -class Test_Next_Nth_Usable(unittest.TestCase): +class Test_Next_Nth_Usable(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_nthhost.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_nthhost.py index 96be24adc..8d7b34554 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_nthhost.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_nthhost.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.filter.nthhost import _nthhost -class Test_nthhost(unittest.TestCase): +class Test_nthhost(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_param_list_compare.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_param_list_compare.py index 2e6e471d3..4f7f18da2 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_param_list_compare.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_param_list_compare.py @@ -9,14 +9,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.filter.param_list_compare import param_list_compare -class TestParam_list_compare_merge(unittest.TestCase): +class TestParam_list_compare_merge(TestCase): def test_valid_data(self): """Check passing valid data as per criteria""" diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_previous_nth_usable.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_previous_nth_usable.py index f2a2c6f84..eeb24723a 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_previous_nth_usable.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_previous_nth_usable.py @@ -12,14 +12,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.filter.previous_nth_usable import ( _previous_nth_usable, ) -class Test_previous_Nth_Usable(unittest.TestCase): +class Test_previous_Nth_Usable(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_reduce_on_network.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_reduce_on_network.py index 777409f59..b0d714cb5 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_reduce_on_network.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_reduce_on_network.py @@ -12,14 +12,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleError from ansible_collections.ansible.utils.plugins.filter.reduce_on_network import _reduce_on_network -class Test_reduce_on_network(unittest.TestCase): +class Test_reduce_on_network(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_remove_keys.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_remove_keys.py index 92b3a5964..63355336b 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_remove_keys.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_remove_keys.py @@ -8,14 +8,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.filter.remove_keys import _remove_keys -class TestReplaceKeys(unittest.TestCase): +class TestReplaceKeys(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_replace_keys.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_replace_keys.py index a27ec942b..27b1b7fb5 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_replace_keys.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_replace_keys.py @@ -8,14 +8,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError from ansible_collections.ansible.utils.plugins.filter.replace_keys import _replace_keys -class TestReplaceKeys(unittest.TestCase): +class TestReplaceKeys(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_slaac.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_slaac.py index e3d78ec8c..fe371a5a1 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_slaac.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_slaac.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.filter.slaac import _slaac -class Test_slaac(unittest.TestCase): +class Test_slaac(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_to_xml.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_to_xml.py index f1ce6fb0d..e2c883a7e 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_to_xml.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_to_xml.py @@ -8,7 +8,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleError, AnsibleFilterError @@ -35,7 +35,7 @@ OUTPUT_SPACES = """ """ -class TestToXml(unittest.TestCase): +class TestToXml(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_usable_range.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_usable_range.py index 14450e806..8b12903e1 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_usable_range.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_usable_range.py @@ -12,7 +12,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleError @@ -73,7 +73,7 @@ VALID_OUTPUT_3 = { VALID_OUTPUT_4 = {"number_of_ips": 1, "usable_ips": ["2001:db8:abcd:12::"]} -class TestUsableRange(unittest.TestCase): +class TestUsableRange(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_validate.py b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_validate.py index 6082d2edd..5c7b1fdf9 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_validate.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/filter/test_validate.py @@ -8,7 +8,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleFilterError @@ -92,7 +92,7 @@ CRITERIA_IN_RATE_CHECK = { } -class TestValidate(unittest.TestCase): +class TestValidate(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/lookup/test_validate.py b/ansible_collections/ansible/utils/tests/unit/plugins/lookup/test_validate.py index 85bbc6bde..ad94d4ad5 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/lookup/test_validate.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/lookup/test_validate.py @@ -8,7 +8,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleLookupError @@ -92,7 +92,7 @@ CRITERIA_IN_RATE_CHECK = { } -class TestValidate(unittest.TestCase): +class TestValidate(TestCase): def setUp(self): self._lp = LookupModule() diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/plugin_utils/test_index_of.py b/ansible_collections/ansible/utils/tests/unit/plugins/plugin_utils/test_index_of.py index bc426e42f..c2d5270eb 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/plugin_utils/test_index_of.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/plugin_utils/test_index_of.py @@ -10,14 +10,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.template import Templar from ansible_collections.ansible.utils.plugins.plugin_utils.index_of import index_of -class TestIndexOfFilter(unittest.TestCase): +class TestIndexOfFilter(TestCase): def setUp(self): self._tests = Templar(loader=None).environment.tests diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_json_parser.py b/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_json_parser.py index 711174897..8cdd68f1a 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_json_parser.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_json_parser.py @@ -8,11 +8,12 @@ __metaclass__ = type import json +from unittest import TestCase + from ansible_collections.ansible.utils.plugins.sub_plugins.cli_parser.json_parser import CliParser -from ansible_collections.ansible.utils.tests.unit.compat import unittest -class TestJsonParser(unittest.TestCase): +class TestJsonParser(TestCase): def test_json_parser(self): test_value = { "string": "This is a string", diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_textfsm_parser.py b/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_textfsm_parser.py index 4e9936e76..860c02431 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_textfsm_parser.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_textfsm_parser.py @@ -8,18 +8,19 @@ __metaclass__ = type import os +from unittest import TestCase + import pytest from ansible_collections.ansible.utils.plugins.sub_plugins.cli_parser.textfsm_parser import ( CliParser, ) -from ansible_collections.ansible.utils.tests.unit.compat import unittest textfsm = pytest.importorskip("textfsm") -class TestTextfsmParser(unittest.TestCase): +class TestTextfsmParser(TestCase): def test_textfsm_parser(self): nxos_cfg_path = os.path.join(os.path.dirname(__file__), "fixtures", "nxos_show_version.cfg") nxos_template_path = os.path.join( diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_ttp_parser.py b/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_ttp_parser.py index 3f47bda70..abbbe1eab 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_ttp_parser.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_ttp_parser.py @@ -8,16 +8,17 @@ __metaclass__ = type import os +from unittest import TestCase + import pytest from ansible_collections.ansible.utils.plugins.sub_plugins.cli_parser.ttp_parser import CliParser -from ansible_collections.ansible.utils.tests.unit.compat import unittest textfsm = pytest.importorskip("ttp") -class TestTextfsmParser(unittest.TestCase): +class TestTextfsmParser(TestCase): def test_ttp_parser(self): nxos_cfg_path = os.path.join(os.path.dirname(__file__), "fixtures", "nxos_show_version.cfg") nxos_template_path = os.path.join( diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_xml_parser.py b/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_xml_parser.py index 817fb583b..fe8c6916b 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_xml_parser.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/sub_plugins/cli_parsers/test_xml_parser.py @@ -7,17 +7,17 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from collections import OrderedDict +from unittest import TestCase import pytest from ansible_collections.ansible.utils.plugins.sub_plugins.cli_parser.xml_parser import CliParser -from ansible_collections.ansible.utils.tests.unit.compat import unittest xmltodict = pytest.importorskip("xmltodict") -class TestXmlParser(unittest.TestCase): +class TestXmlParser(TestCase): def test_valid_xml(self): xml = "text" xml_dict = OrderedDict( diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_any_network.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_any_network.py index 9e45958ba..0849320bf 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_any_network.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_any_network.py @@ -12,14 +12,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleError from ansible_collections.ansible.utils.plugins.test.in_any_network import _in_any_network -class TestInAnyNetwork(unittest.TestCase): +class TestInAnyNetwork(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_network.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_network.py index 5ad621a23..d742ff2c9 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_network.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_network.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.in_network import _in_network -class TestInNetwork(unittest.TestCase): +class TestInNetwork(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_one_network.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_one_network.py index 25276a9d4..76cf550ee 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_one_network.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_in_one_network.py @@ -12,14 +12,14 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleError from ansible_collections.ansible.utils.plugins.test.in_one_network import _in_one_network -class TestInOneNetwork(unittest.TestCase): +class TestInOneNetwork(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ip.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ip.py index 1c8629009..5324d8674 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ip.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ip.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.ip import _ip -class TestIp(unittest.TestCase): +class TestIp(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ip_address.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ip_address.py index b311597ea..eb04c30ba 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ip_address.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ip_address.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.ip_address import _ip_address -class TestIpAddress(unittest.TestCase): +class TestIpAddress(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4.py index 3e2192898..5284ed198 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.ipv4 import _ipv4 -class TestIpV4(unittest.TestCase): +class TestIpV4(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_address.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_address.py index 536f37265..57a9045f2 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_address.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_address.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.ipv4_address import _ipv4_address -class TestIpV4Address(unittest.TestCase): +class TestIpV4Address(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_hostmask.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_hostmask.py index 69a659e67..4ecac3ff9 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_hostmask.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_hostmask.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.ipv4_hostmask import _ipv4_hostmask -class TestIpV4Hostmask(unittest.TestCase): +class TestIpV4Hostmask(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_netmask.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_netmask.py index 82e2951d5..d4470d183 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_netmask.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv4_netmask.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.ipv4_netmask import _ipv4_netmask -class TestIpV4Netmask(unittest.TestCase): +class TestIpV4Netmask(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6.py index 3ab24b816..16abe7db9 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.ipv6 import _ipv6 -class TestIpV6(unittest.TestCase): +class TestIpV6(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_address.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_address.py index 52ecd4690..458150625 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_address.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_address.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.ipv6_address import _ipv6_address -class TestIpV6Address(unittest.TestCase): +class TestIpV6Address(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_ipv4_mapped.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_ipv4_mapped.py index 22e63e278..8ac83f429 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_ipv4_mapped.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_ipv4_mapped.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.ipv6_ipv4_mapped import _ipv6_ipv4_mapped -class TestIpV6IpV4Mapped(unittest.TestCase): +class TestIpV6IpV4Mapped(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_sixtofour.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_sixtofour.py index afcbc7f11..7875f17a1 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_sixtofour.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_sixtofour.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.ipv6_sixtofour import _ipv6_sixtofour -class TestIpV6SixToFour(unittest.TestCase): +class TestIpV6SixToFour(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_teredo.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_teredo.py index d01672547..c0b77bbe8 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_teredo.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_ipv6_teredo.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.ipv6_teredo import _ipv6_teredo -class TestIpV6Teredo(unittest.TestCase): +class TestIpV6Teredo(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_loopback.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_loopback.py index 04a03b84d..bc62c2545 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_loopback.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_loopback.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.loopback import _loopback -class TestLoopback(unittest.TestCase): +class TestLoopback(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_mac.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_mac.py index de1236aee..8487699f5 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_mac.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_mac.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.mac import _mac -class TestMac(unittest.TestCase): +class TestMac(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_multicast.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_multicast.py index 6fe7901b9..bf9d0fdd5 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_multicast.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_multicast.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.multicast import _multicast -class TestMulticast(unittest.TestCase): +class TestMulticast(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_private.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_private.py index 3d8c6f322..6622ed378 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_private.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_private.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.private import _private -class TestPrivate(unittest.TestCase): +class TestPrivate(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_public.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_public.py index b3913246e..37936ae5a 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_public.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_public.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.public import _public -class TestPublic(unittest.TestCase): +class TestPublic(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_reserved.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_reserved.py index 60be18f62..5dfcbb52f 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_reserved.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_reserved.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.reserved import _reserved -class TestReserved(unittest.TestCase): +class TestReserved(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_resolvable.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_resolvable.py index 900a86a07..02e7202ad 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_resolvable.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_resolvable.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.resolvable import _resolvable -class TestResolvable(unittest.TestCase): +class TestResolvable(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_subnet_of.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_subnet_of.py index de35ec653..fcf76a024 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_subnet_of.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_subnet_of.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.subnet_of import _subnet_of -class TestSubnetOf(unittest.TestCase): +class TestSubnetOf(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_supernet_of.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_supernet_of.py index e375b3ab3..f1a58da2c 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_supernet_of.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_supernet_of.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.supernet_of import _supernet_of -class TestSupernetOf(unittest.TestCase): +class TestSupernetOf(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_unspecified.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_unspecified.py index 8151e896f..98799fd2b 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_unspecified.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_unspecified.py @@ -12,12 +12,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible_collections.ansible.utils.plugins.test.unspecified import _unspecified -class TestUnspecified(unittest.TestCase): +class TestUnspecified(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_validate.py b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_validate.py index f70125ed3..0cef13567 100644 --- a/ansible_collections/ansible/utils/tests/unit/plugins/test/test_validate.py +++ b/ansible_collections/ansible/utils/tests/unit/plugins/test/test_validate.py @@ -8,7 +8,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import unittest +from unittest import TestCase from ansible.errors import AnsibleError @@ -92,7 +92,7 @@ CRITERIA_IN_RATE_CHECK = { } -class TestValidate(unittest.TestCase): +class TestValidate(TestCase): def setUp(self): pass diff --git a/ansible_collections/ansible/utils/tox-ansible.ini b/ansible_collections/ansible/utils/tox-ansible.ini index e69de29bb..fe560ad9d 100644 --- a/ansible_collections/ansible/utils/tox-ansible.ini +++ b/ansible_collections/ansible/utils/tox-ansible.ini @@ -0,0 +1,9 @@ +[ansible] +skip = + py3.7 + py3.8 + 2.9 + 2.10 + 2.11 + 2.12 + 2.13 diff --git a/ansible_collections/ansible/utils/tox.ini b/ansible_collections/ansible/utils/tox.ini deleted file mode 100644 index 24c6fb04f..000000000 --- a/ansible_collections/ansible/utils/tox.ini +++ /dev/null @@ -1,22 +0,0 @@ -[tox] -minversion = 1.4.2 -envlist = linters -skipsdist = True - -[testenv] -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -[testenv:black] -install_command = pip install {opts} {packages} -commands = - black -v {toxinidir} - -[testenv:linters] -install_command = pip install {opts} {packages} -commands = - black -v --check {toxinidir} - flake8 {posargs} - -[testenv:venv] -commands = {posargs} diff --git a/ansible_collections/ansible_community.py b/ansible_collections/ansible_community.py index c0f531dea..d40c10999 100644 --- a/ansible_collections/ansible_community.py +++ b/ansible_collections/ansible_community.py @@ -15,7 +15,7 @@ def main(): parser.add_argument( '--version', action='version', - version='Ansible community version 9.5.1', + version='Ansible community version 10.0.0', help="show the version of the Ansible community package", ) parser.parse_args() diff --git a/ansible_collections/ansible_release.py b/ansible_collections/ansible_release.py index 5802122ab..f461e38cb 100644 --- a/ansible_collections/ansible_release.py +++ b/ansible_collections/ansible_release.py @@ -3,4 +3,4 @@ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # SPDX-License-Identifier: GPL-3.0-or-later -ansible_version = '9.5.1' \ No newline at end of file +ansible_version = '10.0.0' \ No newline at end of file diff --git a/ansible_collections/arista/eos/.ansible-lint b/ansible_collections/arista/eos/.ansible-lint index 8d9bb70b8..9cd263023 100644 --- a/ansible_collections/arista/eos/.ansible-lint +++ b/ansible_collections/arista/eos/.ansible-lint @@ -1,5 +1,2 @@ --- profile: production - -exclude_paths: - - changelogs/changelog.yaml diff --git a/ansible_collections/arista/eos/.flake8 b/ansible_collections/arista/eos/.flake8 new file mode 100644 index 000000000..9a7fc1251 --- /dev/null +++ b/ansible_collections/arista/eos/.flake8 @@ -0,0 +1,67 @@ +[flake8] + +builtins = _ + +# Print the total number of errors: +count = true + +# Don't even try to analyze these: +extend-exclude = + # No need to traverse egg info dir + *.egg-info, + # tool cache dirs + *_cache + # project env vars + .env, + # GitHub configs + .github, + # Cache files of MyPy + .mypy_cache, + # Cache files of pytest + .pytest_cache, + # Temp dir of pytest-testmon + .tmontmp, + # Occasional virtualenv dir + .venv + # VS Code + .vscode, + # Temporary build dir + build, + # This contains sdists and wheels of ansible-navigator that we don't want to check + dist, + # Metadata of `pip wheel` cmd is autogenerated + pip-wheel-metadata, + # adjacent venv + venv + # ansible won't let me + __init__.py + +# IMPORTANT: avoid using ignore option, always use extend-ignore instead +# Completely and unconditionally ignore the following errors: +extend-ignore = + F841, + # line-length + E501, + # module level import not at top of file + E402 + +# Accessibility/large fonts and PEP8 unfriendly: +max-line-length = 120 + +# Allow certain violations in certain files: +# Please keep both sections of this list sorted, as it will be easier for others to find and add entries in the future +per-file-ignores = + # The following ignores have been researched and should be considered permanent + # each should be preceeded with an explanation of each of the error codes + # If other ignores are added for a specific file in the section following this, + # these will need to be added to that line as well. + + + # S101: Allow the use of assert within the tests directory, since tests require it. + tests/**.py: S101 + + # The following were present during the initial implementation. + # They are expected to be fixed and unignored over time. + +# Count the number of occurrences of each error/warning code and print a report: +statistics = true diff --git a/ansible_collections/arista/eos/.github/CODEOWNERS b/ansible_collections/arista/eos/.github/CODEOWNERS new file mode 100644 index 000000000..e69de29bb diff --git a/ansible_collections/arista/eos/.github/workflows/ack.yml b/ansible_collections/arista/eos/.github/workflows/ack.yml deleted file mode 100644 index fda595dc5..000000000 --- a/ansible_collections/arista/eos/.github/workflows/ack.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml -name: ack - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - pull_request_target: - types: [opened, labeled, unlabeled, synchronize] - -jobs: - ack: - uses: ansible/devtools/.github/workflows/ack.yml@main diff --git a/ansible_collections/arista/eos/.github/workflows/check_label.yml b/ansible_collections/arista/eos/.github/workflows/check_label.yml new file mode 100644 index 000000000..b120bfa32 --- /dev/null +++ b/ansible_collections/arista/eos/.github/workflows/check_label.yml @@ -0,0 +1,11 @@ +--- +name: "Check label" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + pull_request_target: + types: [opened, labeled, unlabeled, synchronize] +jobs: + check_label: + uses: ansible/ansible-content-actions/.github/workflows/check_label.yaml@main diff --git a/ansible_collections/arista/eos/.github/workflows/codecoverage.yml b/ansible_collections/arista/eos/.github/workflows/codecoverage.yml index c2a7ad60d..3e0f17919 100644 --- a/ansible_collections/arista/eos/.github/workflows/codecoverage.yml +++ b/ansible_collections/arista/eos/.github/workflows/codecoverage.yml @@ -1,8 +1,9 @@ --- -name: code_coverage +name: "Code coverage" on: # yamllint disable-line rule:truthy push: + branches: [main] pull_request: branches: [ main ] diff --git a/ansible_collections/arista/eos/.github/workflows/draft_release.yml b/ansible_collections/arista/eos/.github/workflows/draft_release.yml new file mode 100644 index 000000000..c26239ed0 --- /dev/null +++ b/ansible_collections/arista/eos/.github/workflows/draft_release.yml @@ -0,0 +1,18 @@ +--- +name: "Draft release" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + workflow_dispatch: +env: + NAMESPACE: ${{ github.repository_owner }} + COLLECTION_NAME: eos + ANSIBLE_COLLECTIONS_PATHS: ./ +jobs: + update_release_draft: + uses: ansible/ansible-content-actions/.github/workflows/draft_release.yaml@main + with: + repo: ${{ github.event.pull_request.head.repo.full_name }} + secrets: + BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/arista/eos/.github/workflows/push.yml b/ansible_collections/arista/eos/.github/workflows/push.yml deleted file mode 100644 index 67940aa72..000000000 --- a/ansible_collections/arista/eos/.github/workflows/push.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -# push workflow is shared and expected to perform actions after a merge happens -# on a maintenance branch (default or release). For example updating the -# draft release-notes. -# based on great work from -# https://github.com/T-Systems-MMS/ansible-collection-icinga-director -name: push - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - workflow_dispatch: - -env: - NAMESPACE: arista - COLLECTION_NAME: eos - ANSIBLE_COLLECTIONS_PATHS: ./ - -jobs: - update_release_draft: - uses: ansible/devtools/.github/workflows/push_network.yml@main - with: - repo: ansible-collections/arista.eos - secrets: - BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/arista/eos/.github/workflows/release.yml b/ansible_collections/arista/eos/.github/workflows/release.yml index eb04259d1..6dbb1aa39 100644 --- a/ansible_collections/arista/eos/.github/workflows/release.yml +++ b/ansible_collections/arista/eos/.github/workflows/release.yml @@ -1,12 +1,12 @@ --- -name: release +name: "Release collection" on: # yamllint disable-line rule:truthy release: types: [published] jobs: release: - uses: ansible/devtools/.github/workflows/release_collection.yml@main + uses: ansible/ansible-content-actions/.github/workflows/release.yaml@main with: environment: release secrets: diff --git a/ansible_collections/arista/eos/.github/workflows/tests.yml b/ansible_collections/arista/eos/.github/workflows/tests.yml index e9f92a2a0..2438c8f6a 100644 --- a/ansible_collections/arista/eos/.github/workflows/tests.yml +++ b/ansible_collections/arista/eos/.github/workflows/tests.yml @@ -1,5 +1,5 @@ --- -name: CI +name: "CI" concurrency: group: ${{ github.head_ref || github.run_id }} @@ -12,17 +12,18 @@ on: # yamllint disable-line rule:truthy schedule: - cron: '0 0 * * *' - jobs: - ansible-lint: - uses: ansible-network/github_actions/.github/workflows/ansible-lint.yml@main changelog: - uses: ansible-network/github_actions/.github/workflows/changelog.yml@main + uses: ansible/ansible-content-actions/.github/workflows/changelog.yaml@main if: github.event_name == 'pull_request' + build-import: + uses: ansible/ansible-content-actions/.github/workflows/build_import.yaml@main + ansible-lint: + uses: ansible/ansible-content-actions/.github/workflows/ansible_lint.yaml@main sanity: - uses: ansible-network/github_actions/.github/workflows/sanity.yml@main + uses: ansible/ansible-content-actions/.github/workflows/sanity.yaml@main unit-galaxy: - uses: ansible-network/github_actions/.github/workflows/unit_galaxy.yml@main + uses: ansible/ansible-content-actions/.github/workflows/unit.yaml@main unit-source: uses: ansible-network/github_actions/.github/workflows/unit_source.yml@main with: @@ -32,19 +33,21 @@ jobs: all_green: if: ${{ always() }} needs: - - ansible-lint - changelog + - build-import - sanity - unit-galaxy + - ansible-lint - unit-source runs-on: ubuntu-latest steps: - run: >- python -c "assert 'failure' not in set([ - '${{ needs.ansible-lint.result }}', '${{ needs.changelog.result }}', + '${{ needs.build-import.result }}', '${{ needs.sanity.result }}', - '${{ needs.unit-galaxy.result }}', + '${{ needs.unit-galaxy.result }}' + '${{ needs.ansible-lint.result }}' '${{ needs.unit-source.result }}' ])" diff --git a/ansible_collections/arista/eos/.pre-commit-config.yaml b/ansible_collections/arista/eos/.pre-commit-config.yaml index a18fd6062..06299bc68 100644 --- a/ansible_collections/arista/eos/.pre-commit-config.yaml +++ b/ansible_collections/arista/eos/.pre-commit-config.yaml @@ -7,7 +7,7 @@ repos: - id: update-docs - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v4.6.0 hooks: - id: check-merge-conflict - id: check-symlinks @@ -23,7 +23,7 @@ repos: - id: add-trailing-comma - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.0.3" + rev: "v4.0.0-alpha.8" hooks: - id: prettier entry: env CI=1 bash -c "prettier --list-different . || ec=$? && prettier --loglevel=error --write . && exit $ec" @@ -34,13 +34,18 @@ repos: - prettier-plugin-toml - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort name: Sort import statements using isort args: ["--filter-files"] - repo: https://github.com/psf/black - rev: 23.10.0 + rev: 24.3.0 hooks: - id: black + + - repo: https://github.com/pycqa/flake8 + rev: 7.0.0 + hooks: + - id: flake8 diff --git a/ansible_collections/arista/eos/CHANGELOG.rst b/ansible_collections/arista/eos/CHANGELOG.rst index 7067ecc24..70d6a4fc0 100644 --- a/ansible_collections/arista/eos/CHANGELOG.rst +++ b/ansible_collections/arista/eos/CHANGELOG.rst @@ -5,6 +5,66 @@ Arista Eos Collection Release Notes .. contents:: Topics +v9.0.0 +====== + +Major Changes +------------- + +- Update the netcommon base version 6.1.0 to support cli_restore plugin. + +Minor Changes +------------- + +- Add support for cli_restore functionality. +- Please refer the PR to know more about core changes (https://github.com/ansible-collections/ansible.netcommon/pull/618). +- cli_restore module is part of netcommon. + +v8.0.0 +====== + +Major Changes +------------- + +- This release removes previously deprecated modules and attributes from this collection. Please refer to the **Removed Features** section for details. + +Removed Features (previously deprecated) +---------------------------------------- + +- Remove depreacted eos_bgp module which is replaced with eos_bgp_global and eos_bgp_address_family. +- Remove deprecated eos_logging module which is replaced with eos_logging_global resource module. +- Remove deprecated timers.throttle attribute. + +v7.1.0 +====== + +Bugfixes +-------- + +- This fix is needed because static_routes and vlans are not returning anything when resources are not configured. +- This got noticed in this issue (https://github.com/network-automation/toolkit/issues/47) +- correct a missing whitespace and add 'auth' string. +- correct the parsing of the elements in 'name_servers' in 'eos_system' module. +- when static_routes and vlans are not confirgured then return empty list. + +Documentation Changes +--------------------- + +- eos_lag_interface - Updated examples for lag_interface module. + +v7.0.0 +====== + +Release Summary +--------------- + +Starting from this release, the minimum `ansible-core` version this collection requires is `2.14.0`. The last known version compatible with ansible-core<2.14 is `v6.2.2`. + +Major Changes +------------- + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. + v6.2.2 ====== @@ -456,7 +516,6 @@ New Modules - eos_acl_interfaces - ACL interfaces resource module - eos_acls - ACLs resource module - eos_banner - Manage multiline banners on Arista EOS devices -- eos_bgp - (deprecated, removed after 2023-01-29) Configure global BGP protocol settings on Arista EOS. - eos_command - Run arbitrary commands on an Arista EOS device - eos_config - Manage Arista EOS configuration sections - eos_eapi - Manage and configure Arista EOS eAPI. @@ -470,7 +529,6 @@ New Modules - eos_lldp - Manage LLDP configuration on Arista EOS network devices - eos_lldp_global - LLDP resource module - eos_lldp_interfaces - LLDP interfaces resource module -- eos_logging - Manage logging on network devices - eos_ospfv2 - OSPFv2 resource module - eos_static_routes - Static routes resource module - eos_system - Manage the system attributes on Arista EOS devices diff --git a/ansible_collections/arista/eos/FILES.json b/ansible_collections/arista/eos/FILES.json index 54aa8737c..5836a631c 100644 --- a/ansible_collections/arista/eos/FILES.json +++ b/ansible_collections/arista/eos/FILES.json @@ -8,52 +8,73 @@ "format": 1 }, { - "name": "ignore-2.9.txt", + "name": ".github", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".github/dependabot.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "434c723567b8bb4d59f1b64bdbf674e2869789650c878f84f08f3ebe93a97b60", + "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461", "format": 1 }, { - "name": "LICENSE", + "name": ".github/workflows", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".github/workflows/codecoverage.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "chksum_sha256": "57e1fa3c1edef3b462e23b36f5ea116f8675a71d7f49731193e38b708c859742", "format": 1 }, { - "name": ".yamllint", + "name": ".github/workflows/draft_release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", + "chksum_sha256": "e3f2c2973b06242e2dc7afb88cb1bbf2569b101a1c1e313282a26e2d6fe665fd", "format": 1 }, { - "name": "requirements.txt", + "name": ".github/workflows/check_label.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "883b106f13b0c6536f55619685ddca25968b4167dedb12e08fa37c93f4c63b25", + "chksum_sha256": "9eb6abad2038b10cd6ea70310aa88d163f10c374d1728df29bb553eff2acfaba", "format": 1 }, { - "name": "meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".github/workflows/tests.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9cee2ae0c1ec8c5905524473fb528d0dfb335cec74fee1f8564f8af2e83afbf4", "format": 1 }, { - "name": "meta/runtime.yml", + "name": ".github/workflows/release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "69670a3bc346361e18ee69fe1db6b47c18a20cd436bb72086e4b5e95d9ac3f36", + "chksum_sha256": "2e3f90a3147d93b97347d8418352f23e201417e05539a466399dd258a65d699c", "format": 1 }, { - "name": "README.md", + "name": ".github/CODEOWNERS", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": ".github/release-drafter.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "acdc105c02de4ccd8d44e0dae9894189c936d9993ae6853a99caa80a40e9d10f", + "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", "format": 1 }, { @@ -64,973 +85,889 @@ "format": 1 }, { - "name": "plugins/terminal", + "name": "plugins/httpapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/terminal/__init__.py", + "name": "plugins/httpapi/eos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a72e79bffe3d82ed6d78180b5814bd72b55ef15c57123411aef573dc18081a0b", "format": 1 }, { - "name": "plugins/terminal/eos.py", + "name": "plugins/httpapi/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6966d43cd1b18aa12c7abdd37278000985b69d3ffe827ed250146825246c40d3", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/inventory", + "name": "plugins/action", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/inventory/__init__.py", + "name": "plugins/action/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/httpapi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/httpapi/__init__.py", + "name": "plugins/action/eos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/httpapi/eos.py", + "name": "plugins/action/l2_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a72e79bffe3d82ed6d78180b5814bd72b55ef15c57123411aef573dc18081a0b", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/cliconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/l2_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/cliconf/__init__.py", + "name": "plugins/action/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/cliconf/eos.py", + "name": "plugins/action/lldp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87d6fa9386ee1db637cad55e955984a5ace088ded304828294d217688891a4a7", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/facts.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_bgp_address_family.py", + "name": "plugins/action/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d785bf8b326b2abba6c6742b427cca2938d6dac15b6dd2c8fe26033fb8032e6", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_lacp_interfaces.py", + "name": "plugins/action/interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "90ab8557eb680e0abea6fd8cdb5d463f0ef1fd73d0073ef47981a74bff0c84e7", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_vlans.py", + "name": "plugins/action/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ecd8f836dc780f467c049242138c48b1dd0d65469dab247ec66816aa36b19a30", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_eapi.py", + "name": "plugins/action/vrf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "38c5950430f09e4eb10546aa674b41c0b9ae5c85957108433008c260282cc2b0", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_ospf_interfaces.py", + "name": "plugins/action/bgp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "929edf4a24cf11021732e8e530f293f5802343e7930b6de8d629e98c005a3683", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_command.py", + "name": "plugins/action/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "355cb38f9dfa902d56c0563dfcca9c4579221f341df5b64ff3c9e22086b70016", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_snmp_server.py", + "name": "plugins/action/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b259b2d2a4ba741df2f35a8d52ef4e6a1507e840891328d2b8748ecaaffd8afb", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_banner.py", + "name": "plugins/action/command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9a40fe93e2835e8e2ef138f63de065a737fee2710b108b7ac7c3fdbba5002a8", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_facts.py", + "name": "plugins/action/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c7b074df78792a848f53b5fb6994a2673249e659dfc74cc181fb1569812425c", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_logging.py", + "name": "plugins/action/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6d59a3e4e6ba1459ca5cd94d378daf7f9bdfb84ba076929aa4a747e6c1242c9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/eos_l2_interfaces.py", + "name": "plugins/action/system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d426533a5e9c6918115e53437bc078ff85eccefbafda1d7d4dadb796a8006f3", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_ntp_global.py", + "name": "plugins/action/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0aa39b82eae1a84fbbcdb9b19ff2ca409799f31d72a4ddc7371540ddb360ef57", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_bgp.py", + "name": "plugins/action/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d933005afd3c8db70638164e7f010d00531861cbed4b03d21f5438894a6250b8", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_ospfv2.py", + "name": "plugins/action/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a0eaa5f6b3d3704c84d8dbadb6e35cbc3810598bfc9a341a4df42e68847af0e0", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_lldp_interfaces.py", + "name": "plugins/action/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "32172bac4360cbd4c9aba0bc4776294eca0dda71a97f472a71c9424a5260fc78", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/__init__.py", + "name": "plugins/action/linkagg.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_static_routes.py", + "name": "plugins/action/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b30f6f27a471fabda82eaf6ab7d9f310c5e1b39f64ad7effd01e2d5d0dae9fc", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_hostname.py", + "name": "plugins/action/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6973fb2c1d99bcd964c8c2e5124fea3acb52432c4859ca9f9911b22429e7eff3", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_bgp_global.py", + "name": "plugins/action/l3_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8fb638856c7852953717ffd65e1e2b4a6dec7ec0a005fd4ef9506be5f2d09694", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_lag_interfaces.py", + "name": "plugins/action/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2417aa86814f86ae45fa1b4bbe5f8ad7262032467ecef305a74b0a69e04ee7ba", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_prefix_lists.py", + "name": "plugins/action/banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "47bacc85ac1895d0be80898303dd039edfdf63370cf60e54efc3d9716332983e", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_system.py", + "name": "plugins/action/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a47be5a23d7bd09a965ed06f020ce990db0a9401257c49978c248ca832d71804", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_lldp_global.py", + "name": "plugins/action/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21e703a7728c2601313b810413ac0143ad7d0d70340ab7a7be7794c164f154b3", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_acls.py", + "name": "plugins/action/eapi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "01f152c6892474ad74fa3fe4d5f3828099f7d0db1eaf56d0d05f818ab6cfaf81", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_lacp.py", + "name": "plugins/action/user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "33e27255d8f4e09d9d5ec270b99a6095596fd0d633db610b92aaa3a85f415738", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_route_maps.py", + "name": "plugins/action/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2dc1be3caa9efc8e1f36a1bcfa6a7a0cfd5d780a5ebfce3273c19dd6354b997", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_logging_global.py", + "name": "plugins/action/logging.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a067a17142a631b1a972707e598306677df4061e190847ad07d517d577c4640e", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_config.py", + "name": "plugins/action/static_route.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75240b4868941e59b523617b9e01cadd64fd82061014a65183c20a2453d43d07", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_acl_interfaces.py", + "name": "plugins/action/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dcea489708bed333c4d29737c4e57db3eaea6e0d19a3b9d0c77e21054ca5d68a", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_l3_interfaces.py", + "name": "plugins/action/vlan.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa387fe06abd306df299f1303069a805fad22466a56ce59d0854de6e4ed6212f", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_ospfv3.py", + "name": "plugins/action/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d500948a6b1208e705ef00ab881c41e227d4104ecdd83f513ba8b041068cad7f", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_user.py", + "name": "plugins/action/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ae4d5492d26aa27ee9b8d9937258914af7b4cbfe77064847e141d294652d925", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_vrf.py", + "name": "plugins/action/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "17d794bb9eedeb41ff57d22fdc295db27315ebd274e5d1463d8463868511b704", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_lldp.py", + "name": "plugins/action/config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f477f9e4ececee706fcc9de764dd76fabfbc958b608034bbb6c556e92af836d", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/modules/eos_interfaces.py", + "name": "plugins/action/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6cbcf37f8e0d3a441c5923b65168ba380c1e78dd0d0081019ccc38b3209de2be", + "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", "format": 1 }, { - "name": "plugins/filter", + "name": "plugins/inventory", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/filter/__init__.py", + "name": "plugins/inventory/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils", + "name": "plugins/modules", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/__init__.py", + "name": "plugins/modules/eos_lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "21e703a7728c2601313b810413ac0143ad7d0d70340ab7a7be7794c164f154b3", "format": 1 }, { - "name": "plugins/module_utils/network", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/eos_lldp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2f477f9e4ececee706fcc9de764dd76fabfbc958b608034bbb6c556e92af836d", "format": 1 }, { - "name": "plugins/module_utils/network/__init__.py", + "name": "plugins/modules/eos_system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "eee0812798982d32f36bdb2b4e386c26d52a56f8033f0217c37a4d765ce5c1e9", "format": 1 }, { - "name": "plugins/module_utils/network/eos", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/eos_logging_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a067a17142a631b1a972707e598306677df4061e190847ad07d517d577c4640e", "format": 1 }, { - "name": "plugins/module_utils/network/eos/rm_templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/rm_templates/bgp_global.py", + "name": "plugins/modules/eos_facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "024e8dbf0bec4943c24a26d99ce20e6c992f146c6dec61fd53ce3973e2a3d9f1", + "chksum_sha256": "4c7b074df78792a848f53b5fb6994a2673249e659dfc74cc181fb1569812425c", "format": 1 }, { - "name": "plugins/module_utils/network/eos/rm_templates/bgp_address_family.py", + "name": "plugins/modules/eos_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "793f9c3e5428e09f3352cb561dc58c9707700305c419af539862702641177484", + "chksum_sha256": "6cbcf37f8e0d3a441c5923b65168ba380c1e78dd0d0081019ccc38b3209de2be", "format": 1 }, { - "name": "plugins/module_utils/network/eos/rm_templates/hostname.py", + "name": "plugins/modules/eos_acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ad569ba6de7f63168a5a8b6dff50abb5fb40e8329ba52c2412408526e22a5ca9", + "chksum_sha256": "dcea489708bed333c4d29737c4e57db3eaea6e0d19a3b9d0c77e21054ca5d68a", "format": 1 }, { - "name": "plugins/module_utils/network/eos/rm_templates/ntp_global.py", + "name": "plugins/modules/eos_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44e6b60a7ba28b25feee1b18a38435d17fd0998e7f84925258ed15e9fcc5e335", + "chksum_sha256": "355cb38f9dfa902d56c0563dfcca9c4579221f341df5b64ff3c9e22086b70016", "format": 1 }, { - "name": "plugins/module_utils/network/eos/rm_templates/snmp_server.py", + "name": "plugins/modules/eos_lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "416f060b23612c3906a20fd5ac4276d2ad8577f73c44dfad6f159f742f0db2be", + "chksum_sha256": "90ab8557eb680e0abea6fd8cdb5d463f0ef1fd73d0073ef47981a74bff0c84e7", "format": 1 }, { - "name": "plugins/module_utils/network/eos/rm_templates/__init__.py", + "name": "plugins/modules/eos_lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "32172bac4360cbd4c9aba0bc4776294eca0dda71a97f472a71c9424a5260fc78", "format": 1 }, { - "name": "plugins/module_utils/network/eos/rm_templates/ospfv3.py", + "name": "plugins/modules/eos_route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84bdbe377db05a723806e43b45d4473a6659aa5f3cdc640838a6e91145e7d8e3", + "chksum_sha256": "b2dc1be3caa9efc8e1f36a1bcfa6a7a0cfd5d780a5ebfce3273c19dd6354b997", "format": 1 }, { - "name": "plugins/module_utils/network/eos/rm_templates/route_maps.py", + "name": "plugins/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd769e2e13a0b7f1e201d647d70cec84eb7b374c31952da5a88e5436e9204f94", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/rm_templates/ospf_interfaces.py", + "name": "plugins/modules/eos_banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "830240634630601293eab68bd902aaae19e5d83bad59bb91410bdf85fa8670e7", + "chksum_sha256": "c9a40fe93e2835e8e2ef138f63de065a737fee2710b108b7ac7c3fdbba5002a8", "format": 1 }, { - "name": "plugins/module_utils/network/eos/rm_templates/logging_global.py", + "name": "plugins/modules/eos_ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99e1a95abbb6b1fd6dfe0544c955a4f8c209b5df57f538392a9277f03d529898", + "chksum_sha256": "01223340ad356c047ac03a72b8a6025f43c7a1d80f61d5e8b68c33631575fafa", "format": 1 }, { - "name": "plugins/module_utils/network/eos/rm_templates/prefix_lists.py", + "name": "plugins/modules/eos_bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f4602d1d97809c09f7d472207a6b96b7ac058f33618cbcb5ad5b0ae593935a06", + "chksum_sha256": "8fb638856c7852953717ffd65e1e2b4a6dec7ec0a005fd4ef9506be5f2d09694", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/eos_l3_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "aa387fe06abd306df299f1303069a805fad22466a56ce59d0854de6e4ed6212f", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/module.py", + "name": "plugins/modules/eos_acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f01b61830d3543669f47b987507fb7b55933588f7a1a2f731e4f9c50d848a558", + "chksum_sha256": "01f152c6892474ad74fa3fe4d5f3828099f7d0db1eaf56d0d05f818ab6cfaf81", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/eos_vlans.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ecd8f836dc780f467c049242138c48b1dd0d65469dab247ec66816aa36b19a30", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/cli/__init__.py", + "name": "plugins/modules/eos_ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a0eaa5f6b3d3704c84d8dbadb6e35cbc3810598bfc9a341a4df42e68847af0e0", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/cli/config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/eos_snmp_server.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b259b2d2a4ba741df2f35a8d52ef4e6a1507e840891328d2b8748ecaaffd8afb", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/cli/config/__init__.py", + "name": "plugins/modules/eos_lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d531801671fc5e951366d7704780ebfc920f88db852cdf9f6f5ee873d9d66253", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/cli/config/bgp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/eos_lacp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "33e27255d8f4e09d9d5ec270b99a6095596fd0d633db610b92aaa3a85f415738", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/neighbors.py", + "name": "plugins/modules/eos_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "177c15749b198e2780b1e512f2d5164999fa8e64b30647672c0a490360e76088", + "chksum_sha256": "75240b4868941e59b523617b9e01cadd64fd82061014a65183c20a2453d43d07", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/__init__.py", + "name": "plugins/modules/eos_prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "47bacc85ac1895d0be80898303dd039edfdf63370cf60e54efc3d9716332983e", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/process.py", + "name": "plugins/modules/eos_bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a47f5b38ed3ce70270b517d5d14afb25aabfae512da4891e55041c881f751878", + "chksum_sha256": "9d785bf8b326b2abba6c6742b427cca2938d6dac15b6dd2c8fe26033fb8032e6", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/address_family.py", + "name": "plugins/modules/eos_static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf393826b172df53d3cd8d0b59a39e4c8020bce080b6ea6d11ca5cdc305de992", + "chksum_sha256": "1b30f6f27a471fabda82eaf6ab7d9f310c5e1b39f64ad7effd01e2d5d0dae9fc", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/providers.py", + "name": "plugins/modules/eos_hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c92fe09b2aa69b9556470313aaece6f91b79412bc7dd972634e8b891f8ee11b", + "chksum_sha256": "6973fb2c1d99bcd964c8c2e5124fea3acb52432c4859ca9f9911b22429e7eff3", "format": 1 }, { - "name": "plugins/module_utils/network/eos/providers/__init__.py", + "name": "plugins/modules/eos_vrf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b1c2429c57cb33a31319937318bbadf0ba7f60d536f08ebcb7886e7f2f628df1", "format": 1 }, { - "name": "plugins/module_utils/network/eos/__init__.py", + "name": "plugins/modules/eos_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "0ae4d5492d26aa27ee9b8d9937258914af7b4cbfe77064847e141d294652d925", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/eos_l2_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9d426533a5e9c6918115e53437bc078ff85eccefbafda1d7d4dadb796a8006f3", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/bgp_address_family", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/eos_ospf_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "929edf4a24cf11021732e8e530f293f5802343e7930b6de8d629e98c005a3683", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/bgp_address_family/bgp_address_family.py", + "name": "plugins/modules/eos_eapi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c4cb44586c09aa01ade548e7fd768cc5acdb6184657cc69f4b7e19ef3810cdbb", + "chksum_sha256": "38c5950430f09e4eb10546aa674b41c0b9ae5c85957108433008c260282cc2b0", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/bgp_address_family/__init__.py", + "name": "plugins/modules/eos_ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "0aa39b82eae1a84fbbcdb9b19ff2ca409799f31d72a4ddc7371540ddb360ef57", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/static_routes", + "name": "plugins/module_utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/static_routes/static_routes.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d3bc5db1d739a23b0c993f770d3cca4af6ee7ab514e3c7222d1ebc7985546033", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/facts/static_routes/__init__.py", + "name": "plugins/module_utils/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/prefix_lists", + "name": "plugins/module_utils/network", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/prefix_lists/prefix_lists.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fcc290aaba4af1b68805d1d0f47147352c09109f364e113a9766e1af4500cb1f", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/facts/hostname", + "name": "plugins/module_utils/network/eos", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/hostname/hostname.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0c91edb1d5112e43527a1eb7bcc9de697035a388267a2636b23546709b119aa3", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/facts/hostname/__init__.py", + "name": "plugins/module_utils/network/eos/eos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "779df2cf7e60b4788a6c84848b7fbf892aa12e793d7f1e325cdafbe2d87ef114", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lldp_interfaces", + "name": "plugins/module_utils/network/eos/utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/utils/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/eos/utils/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "000d63e8514cc27c9f1bfaaeb16c5e689544b2c0062d5a05d7c62f010b35c982", + "chksum_sha256": "3f7d9467ef57217864bdc55cd3cf38c58744ff24a124b7cb06f6914adcc67196", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lacp", + "name": "plugins/module_utils/network/eos/rm_templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lacp/lacp.py", + "name": "plugins/module_utils/network/eos/rm_templates/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "67b727b9fe18197bb9bf3b9270e3e127d30618b3115bc58a5d8562763f82b7c9", + "chksum_sha256": "ad569ba6de7f63168a5a8b6dff50abb5fb40e8329ba52c2412408526e22a5ca9", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lacp/__init__.py", + "name": "plugins/module_utils/network/eos/rm_templates/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/facts/ospfv2", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "44e6b60a7ba28b25feee1b18a38435d17fd0998e7f84925258ed15e9fcc5e335", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/ospfv2/__init__.py", + "name": "plugins/module_utils/network/eos/rm_templates/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/eos/rm_templates/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c026c178eb5e79d3c4f721b90bf6a81a497563700b7bdaa0e275cbab1095689", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/facts/logging_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "2887677e8217b91f894b836409995c416326ed65eeabae0a8a20cbba2f8f9cc1", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/logging_global/__init__.py", + "name": "plugins/module_utils/network/eos/rm_templates/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "84bdbe377db05a723806e43b45d4473a6659aa5f3cdc640838a6e91145e7d8e3", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/logging_global/logging_global.py", + "name": "plugins/module_utils/network/eos/rm_templates/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "347a952bb18e664542416104c269d623d0d74f4095e975e29bd38ffa6a8b9471", + "chksum_sha256": "024e8dbf0bec4943c24a26d99ce20e6c992f146c6dec61fd53ce3973e2a3d9f1", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/ospfv3", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/eos/rm_templates/logging_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "99e1a95abbb6b1fd6dfe0544c955a4f8c209b5df57f538392a9277f03d529898", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/ospfv3/__init__.py", + "name": "plugins/module_utils/network/eos/rm_templates/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "830240634630601293eab68bd902aaae19e5d83bad59bb91410bdf85fa8670e7", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/eos/rm_templates/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3decdeb768d4beac99f8dac300d0dd3fc39a35e94d4b9eebf5796c4566eb6df8", + "chksum_sha256": "cd769e2e13a0b7f1e201d647d70cec84eb7b374c31952da5a88e5436e9204f94", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/legacy", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/eos/rm_templates/bgp_address_family.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "793f9c3e5428e09f3352cb561dc58c9707700305c419af539862702641177484", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/legacy/base.py", + "name": "plugins/module_utils/network/eos/rm_templates/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae7be9226844a6c41d306bf463c00087631931af57be3242325fe69994a022d7", + "chksum_sha256": "f4602d1d97809c09f7d472207a6b96b7ac058f33618cbcb5ad5b0ae593935a06", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/legacy/__init__.py", + "name": "plugins/module_utils/network/eos/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/l2_interfaces", + "name": "plugins/module_utils/network/eos/facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/l2_interfaces/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/facts/l2_interfaces/l2_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c19ff2a5d085a131ceec0742c38a9eae468962d91f3250e7427d4caf432ce56d", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/facts/ospf_interfaces", + "name": "plugins/module_utils/network/eos/facts/lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/ospf_interfaces/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/facts/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/eos/facts/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "276c32be6cf47273f43a594743a08f0caefcc569821891a9ba26a6b5e688dc65", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/facts/route_maps", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "67b727b9fe18197bb9bf3b9270e3e127d30618b3115bc58a5d8562763f82b7c9", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/route_maps/__init__.py", + "name": "plugins/module_utils/network/eos/facts/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/route_maps/route_maps.py", + "name": "plugins/module_utils/network/eos/facts/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85cf372cc7a142671feee4678aca01c08f756a97dd036e080fc71e14d16e237c", + "chksum_sha256": "e7331bdec12957b960b8e1951c7acb4fe7e90eb759bc1d77691a3efd97a0afe1", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/acl_interfaces", + "name": "plugins/module_utils/network/eos/facts/legacy", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/facts/legacy/base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ae7be9226844a6c41d306bf463c00087631931af57be3242325fe69994a022d7", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/eos/facts/legacy/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8223e431fab62ffe96492525da21806ce3dcc683b0bfad6535bacdbe20a5ec19", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lldp_global", + "name": "plugins/module_utils/network/eos/facts/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lldp_global/__init__.py", + "name": "plugins/module_utils/network/eos/facts/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lldp_global/lldp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9070fe8b2f5532a17160617ef9396da4e9c60439f912065895d1115ab43b4845", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/facts/__init__.py", + "name": "plugins/module_utils/network/eos/facts/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "4c026c178eb5e79d3c4f721b90bf6a81a497563700b7bdaa0e275cbab1095689", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/snmp_server", + "name": "plugins/module_utils/network/eos/facts/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/eos/facts/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bfd8498527758e863e712edab89d198cdc41010ff53015fad8278302a2636305", + "chksum_sha256": "d77de5b9f125a7a3718689e11f951e3ccea22fc2a326ff403a51cbff5b95d850", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/snmp_server/__init__.py", + "name": "plugins/module_utils/network/eos/facts/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lacp_interfaces", + "name": "plugins/module_utils/network/eos/facts/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/eos/facts/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "13672c35f2afb1139aea840803a5e5e7a8bacc7ad56310573829a7429f41f9a5", + "chksum_sha256": "8223e431fab62ffe96492525da21806ce3dcc683b0bfad6535bacdbe20a5ec19", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/facts/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/acls", + "name": "plugins/module_utils/network/eos/facts/route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/acls/__init__.py", + "name": "plugins/module_utils/network/eos/facts/route_maps/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/acls/acls.py", + "name": "plugins/module_utils/network/eos/facts/route_maps/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4281e9c092fcf8592b3f4edc4652f84c2fc2f234ca12b49878d38ee7ee39302a", + "chksum_sha256": "85cf372cc7a142671feee4678aca01c08f756a97dd036e080fc71e14d16e237c", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/ntp_global", + "name": "plugins/module_utils/network/eos/facts/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/ntp_global/ntp_global.py", + "name": "plugins/module_utils/network/eos/facts/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "393b9394fd4523d0c25c90898c6d417ef652ba6ad4224c7d811b78e74f883d43", + "chksum_sha256": "c19ff2a5d085a131ceec0742c38a9eae468962d91f3250e7427d4caf432ce56d", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/ntp_global/__init__.py", + "name": "plugins/module_utils/network/eos/facts/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", @@ -1058,504 +995,476 @@ "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/vlans", + "name": "plugins/module_utils/network/eos/facts/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/vlans/vlans.py", + "name": "plugins/module_utils/network/eos/facts/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "36bb3a37dcee0798b2b9cda6bd4259fcb70e67e8974dad36a3ffb8e5fd718e16", + "chksum_sha256": "0c91edb1d5112e43527a1eb7bcc9de697035a388267a2636b23546709b119aa3", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/vlans/__init__.py", + "name": "plugins/module_utils/network/eos/facts/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/interfaces", + "name": "plugins/module_utils/network/eos/facts/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/interfaces/interfaces.py", + "name": "plugins/module_utils/network/eos/facts/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d77de5b9f125a7a3718689e11f951e3ccea22fc2a326ff403a51cbff5b95d850", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/facts/lldp_interfaces/lldp_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "000d63e8514cc27c9f1bfaaeb16c5e689544b2c0062d5a05d7c62f010b35c982", + "format": 1 + }, + { + "name": "plugins/module_utils/network/eos/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/l3_interfaces", + "name": "plugins/module_utils/network/eos/facts/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/facts/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/eos/facts/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81a152c689e6101b61ec6094742e4048bac91e192e4ce580b29ab9ca6958a9d0", + "chksum_sha256": "9070fe8b2f5532a17160617ef9396da4e9c60439f912065895d1115ab43b4845", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/bgp_global", + "name": "plugins/module_utils/network/eos/facts/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/bgp_global/bgp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e526a761ad44c7d0b819eaf02202a1239807ea3d9831b9c0f7691203106d9731", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/facts/bgp_global/__init__.py", + "name": "plugins/module_utils/network/eos/facts/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/facts/facts.py", + "name": "plugins/module_utils/network/eos/facts/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7331bdec12957b960b8e1951c7acb4fe7e90eb759bc1d77691a3efd97a0afe1", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/argspec", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "bfd8498527758e863e712edab89d198cdc41010ff53015fad8278302a2636305", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/bgp_address_family", + "name": "plugins/module_utils/network/eos/facts/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/eos/facts/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e219a1d388d9e62d9e5e8752ac2a6762bf30de1fe20367d9ec9e0a88c978b87d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/eos/facts/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "fcc290aaba4af1b68805d1d0f47147352c09109f364e113a9766e1af4500cb1f", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/static_routes", + "name": "plugins/module_utils/network/eos/facts/ntp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/static_routes/static_routes.py", + "name": "plugins/module_utils/network/eos/facts/ntp_global/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba889e4244aec9094d7db701cac2eb5b815f8ed0046f8a3e9c04fe6aa2fa217b", + "chksum_sha256": "393b9394fd4523d0c25c90898c6d417ef652ba6ad4224c7d811b78e74f883d43", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/static_routes/__init__.py", + "name": "plugins/module_utils/network/eos/facts/ntp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/prefix_lists", + "name": "plugins/module_utils/network/eos/facts/l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/eos/facts/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/eos/facts/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6e8db5f08a08179db44df3aa76e7b82cfb54deb2bde8583a683a267d1695d5c", + "chksum_sha256": "81a152c689e6101b61ec6094742e4048bac91e192e4ce580b29ab9ca6958a9d0", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/hostname", + "name": "plugins/module_utils/network/eos/facts/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/hostname/hostname.py", + "name": "plugins/module_utils/network/eos/facts/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "efb917c5d1ae4dda5fab13fad9f6132c614f22f1ea51046338715e8f5bdd2fa2", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/hostname/__init__.py", + "name": "plugins/module_utils/network/eos/facts/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "4281e9c092fcf8592b3f4edc4652f84c2fc2f234ca12b49878d38ee7ee39302a", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/lldp_interfaces", + "name": "plugins/module_utils/network/eos/facts/bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/facts/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/eos/facts/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19867782c170d8d43dba9d1f18eaca89971df1a153528ff64ed5e0aca3251e97", + "chksum_sha256": "e526a761ad44c7d0b819eaf02202a1239807ea3d9831b9c0f7691203106d9731", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/lacp", + "name": "plugins/module_utils/network/eos/facts/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/lacp/lacp.py", + "name": "plugins/module_utils/network/eos/facts/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b3f0f3894afa99a36f3ef7e6970a7ca4f5ddf1ee0f78e617f43467534fc76435", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/lacp/__init__.py", + "name": "plugins/module_utils/network/eos/facts/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "3e45c11fe94e338745919779ad379fd824b08282a3d255dac6187c83b60deb53", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ospfv2", + "name": "plugins/module_utils/network/eos/facts/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ospfv2/__init__.py", + "name": "plugins/module_utils/network/eos/facts/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/eos/facts/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5cac76000d64eae4f6a3dfaf9c1bc001637f7e31e4b92cdd04df8c3b544dd2f7", + "chksum_sha256": "347a952bb18e664542416104c269d623d0d74f4095e975e29bd38ffa6a8b9471", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/logging_global", + "name": "plugins/module_utils/network/eos/facts/ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/logging_global/__init__.py", + "name": "plugins/module_utils/network/eos/facts/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/logging_global/logging_global.py", + "name": "plugins/module_utils/network/eos/facts/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2622ca645838091e8437dd720f2ed7574015fb51171e2f1b2414baf13b16a04c", + "chksum_sha256": "276c32be6cf47273f43a594743a08f0caefcc569821891a9ba26a6b5e688dc65", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ospfv3", + "name": "plugins/module_utils/network/eos/facts/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ospfv3/__init__.py", + "name": "plugins/module_utils/network/eos/facts/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/eos/facts/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c05a7e649ddc285459fd9e69eb1b5f60988ce60c115d29961439b90cdd5fae8", + "chksum_sha256": "c4cb44586c09aa01ade548e7fd768cc5acdb6184657cc69f4b7e19ef3810cdbb", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/l2_interfaces", + "name": "plugins/module_utils/network/eos/facts/vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/facts/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/eos/facts/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "65c41dc95f80ca90d8833a275cdb9e480a10b9a196dbe87f7f60fc52aec24cdb", + "chksum_sha256": "38d86c590d2b3dbb803cad22c0d382b9ed97b1098d05253451d6ee67682044b3", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ospf_interfaces", + "name": "plugins/module_utils/network/eos/facts/lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/facts/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "13672c35f2afb1139aea840803a5e5e7a8bacc7ad56310573829a7429f41f9a5", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/eos/facts/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dfa1590c0c70ddef240ef5fb993014c24214e6fa4ea42a08c52b1a9144049ba1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/route_maps", + "name": "plugins/module_utils/network/eos/facts/ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/route_maps/__init__.py", + "name": "plugins/module_utils/network/eos/facts/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/route_maps/route_maps.py", + "name": "plugins/module_utils/network/eos/facts/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e56bf6c5fcac1647331f79af77bc2c75c80809ef6c2ff2323393094c320ff781", + "chksum_sha256": "3decdeb768d4beac99f8dac300d0dd3fc39a35e94d4b9eebf5796c4566eb6df8", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/acl_interfaces", + "name": "plugins/module_utils/network/eos/argspec", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/acl_interfaces/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/argspec/acl_interfaces/acl_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6c0046bf6afab4a996e33f24201ed519569eb08acbf16761b5b11a314533c0d3", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/argspec/lldp_global", + "name": "plugins/module_utils/network/eos/argspec/lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/lldp_global/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/argspec/lldp_global/lldp_global.py", + "name": "plugins/module_utils/network/eos/argspec/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a7f1026b736127cb2e7700478502956fd2d82a3ae060d56843c34eeb59ed1cc3", + "chksum_sha256": "b3f0f3894afa99a36f3ef7e6970a7ca4f5ddf1ee0f78e617f43467534fc76435", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/snmp_server", + "name": "plugins/module_utils/network/eos/argspec/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/eos/argspec/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cfd87d2929d294b4921ef21b6db0d3e5f9eeb86ae1e997f7ed6ccb0d49d6104", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/snmp_server/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5cac76000d64eae4f6a3dfaf9c1bc001637f7e31e4b92cdd04df8c3b544dd2f7", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/facts", + "name": "plugins/module_utils/network/eos/argspec/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/facts/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "612279d76fe8e822c0b94fd23af3766e62811e27b2564bcfeedeb1eb5c94cb5c", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/facts/facts.py", + "name": "plugins/module_utils/network/eos/argspec/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f2c14a6c7b2ee25446a1d7eeda2dd5dc7acfb694719ffa90d8be271146291266", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/lacp_interfaces", + "name": "plugins/module_utils/network/eos/argspec/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/eos/argspec/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af428e8eafdfd3e0dd804f01995bb19ba139200c29d115f943bdea29f03cb9ba", + "chksum_sha256": "6c0046bf6afab4a996e33f24201ed519569eb08acbf16761b5b11a314533c0d3", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/acls", + "name": "plugins/module_utils/network/eos/argspec/route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/acls/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/route_maps/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/acls/acls.py", + "name": "plugins/module_utils/network/eos/argspec/route_maps/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7edb5254efbad96919b6344dced7ca2825fea82ed161894fb32947c9230b5d6d", + "chksum_sha256": "e56bf6c5fcac1647331f79af77bc2c75c80809ef6c2ff2323393094c320ff781", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ntp_global", + "name": "plugins/module_utils/network/eos/argspec/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ntp_global/ntp_global.py", + "name": "plugins/module_utils/network/eos/argspec/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56e9a6a4aa20da957e209497d8a486de5778d6566b9b59d01d8a753163b5455f", + "chksum_sha256": "65c41dc95f80ca90d8833a275cdb9e480a10b9a196dbe87f7f60fc52aec24cdb", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/ntp_global/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", @@ -1583,7822 +1492,7668 @@ "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/vlans", + "name": "plugins/module_utils/network/eos/argspec/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/vlans/vlans.py", + "name": "plugins/module_utils/network/eos/argspec/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7559652223d1ec6112b628ebb5ec5575ac0df8a7861c1d34e8e4383af157e972", + "chksum_sha256": "efb917c5d1ae4dda5fab13fad9f6132c614f22f1ea51046338715e8f5bdd2fa2", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/vlans/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/interfaces", + "name": "plugins/module_utils/network/eos/argspec/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/interfaces/interfaces.py", + "name": "plugins/module_utils/network/eos/argspec/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "612279d76fe8e822c0b94fd23af3766e62811e27b2564bcfeedeb1eb5c94cb5c", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/lldp_interfaces/lldp_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "19867782c170d8d43dba9d1f18eaca89971df1a153528ff64ed5e0aca3251e97", + "format": 1 + }, + { + "name": "plugins/module_utils/network/eos/argspec/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/l3_interfaces", + "name": "plugins/module_utils/network/eos/argspec/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/eos/argspec/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0afcc24d23d35e458492c17efac75178b89d730a902907310aad2a2385c03d74", + "chksum_sha256": "a7f1026b736127cb2e7700478502956fd2d82a3ae060d56843c34eeb59ed1cc3", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/bgp_global", + "name": "plugins/module_utils/network/eos/argspec/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/bgp_global/bgp_global.py", + "name": "plugins/module_utils/network/eos/argspec/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9cad63a8bae8aa7461c019d8cff5529b7a3453cdd5d37eb59050a53b94d68b3e", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/argspec/bgp_global/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/eos/config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "1cfd87d2929d294b4921ef21b6db0d3e5f9eeb86ae1e997f7ed6ccb0d49d6104", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/bgp_address_family", + "name": "plugins/module_utils/network/eos/argspec/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/eos/argspec/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2410ce1f65a84875e8e2c70444c51865f55419aee7c96f56dbd7f7d5bc2eb354", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e6e8db5f08a08179db44df3aa76e7b82cfb54deb2bde8583a683a267d1695d5c", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/static_routes", + "name": "plugins/module_utils/network/eos/argspec/ntp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/static_routes/static_routes.py", + "name": "plugins/module_utils/network/eos/argspec/ntp_global/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a9bb861e16329d067117e9cb3b0fef10a9e67a601bc95820303daf9e2b972d60", + "chksum_sha256": "56e9a6a4aa20da957e209497d8a486de5778d6566b9b59d01d8a753163b5455f", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/static_routes/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/ntp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/prefix_lists", + "name": "plugins/module_utils/network/eos/argspec/facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/facts/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "f2c14a6c7b2ee25446a1d7eeda2dd5dc7acfb694719ffa90d8be271146291266", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/eos/argspec/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d05e91016ebf5f6b8256a5118c25653c400cb61bad450fe5e046c36932ea656", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/hostname", + "name": "plugins/module_utils/network/eos/argspec/l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/hostname/hostname.py", + "name": "plugins/module_utils/network/eos/argspec/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef3523fd8423c7145629ab9976979aec5e03bee95e211d5898e488300fe25328", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/hostname/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "0afcc24d23d35e458492c17efac75178b89d730a902907310aad2a2385c03d74", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lldp_interfaces", + "name": "plugins/module_utils/network/eos/argspec/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/eos/argspec/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adf36c086148185987dcdd19a201be6b090568800b814719800526329303728f", + "chksum_sha256": "7edb5254efbad96919b6344dced7ca2825fea82ed161894fb32947c9230b5d6d", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lacp", + "name": "plugins/module_utils/network/eos/argspec/bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lacp/lacp.py", + "name": "plugins/module_utils/network/eos/argspec/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31ed665eb142d97e3c896b6f85ce63caeb7e25aed708ec32da60f9c67a14303d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lacp/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9cad63a8bae8aa7461c019d8cff5529b7a3453cdd5d37eb59050a53b94d68b3e", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ospfv2", + "name": "plugins/module_utils/network/eos/argspec/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ospfv2/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/eos/argspec/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d3bed93486d3875f85938ecbe63e45db9f4b9a1504bcd9b7b5fc36b65614d7d", + "chksum_sha256": "ba889e4244aec9094d7db701cac2eb5b815f8ed0046f8a3e9c04fe6aa2fa217b", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/logging_global", + "name": "plugins/module_utils/network/eos/argspec/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/logging_global/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/logging_global/logging_global.py", + "name": "plugins/module_utils/network/eos/argspec/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "707dc8dc34c94d1fb23ab69132240b92f96ec167938309189c1a7abb38179df2", + "chksum_sha256": "2622ca645838091e8437dd720f2ed7574015fb51171e2f1b2414baf13b16a04c", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ospfv3", + "name": "plugins/module_utils/network/eos/argspec/ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ospfv3/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/eos/argspec/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37dbf6d9294a56a3493931f12f6c963d086eac79aba42ca3ec34dd2f174ff7ce", + "chksum_sha256": "dfa1590c0c70ddef240ef5fb993014c24214e6fa4ea42a08c52b1a9144049ba1", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/l2_interfaces", + "name": "plugins/module_utils/network/eos/argspec/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/eos/argspec/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a6862117f6bd1e9bf1672f8b9064d46ee1591fb666f451dd35aa5efe6e27400", + "chksum_sha256": "e219a1d388d9e62d9e5e8752ac2a6762bf30de1fe20367d9ec9e0a88c978b87d", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ospf_interfaces", + "name": "plugins/module_utils/network/eos/argspec/vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/eos/argspec/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae0e49ac0a39b42b7e884e2f299b9ca9ac41cd7fab9477a0fcd67dbc662c5078", + "chksum_sha256": "7559652223d1ec6112b628ebb5ec5575ac0df8a7861c1d34e8e4383af157e972", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/route_maps", + "name": "plugins/module_utils/network/eos/argspec/lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/route_maps/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "af428e8eafdfd3e0dd804f01995bb19ba139200c29d115f943bdea29f03cb9ba", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/route_maps/route_maps.py", + "name": "plugins/module_utils/network/eos/argspec/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5aec84f3a36201ff7967cfb2213033e78601517c9d9e9950271e2c9d6b706ae4", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/acl_interfaces", + "name": "plugins/module_utils/network/eos/argspec/ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/argspec/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/eos/argspec/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6d4dde06ac68d4d095efecb55bde60c39d70a82219586d244d2067de19ba81a", + "chksum_sha256": "c61585017405594b9a54868bd326c8b643bf4322fb71524aabce204162814097", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lldp_global", + "name": "plugins/module_utils/network/eos/config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lldp_global/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "plugins/module_utils/network/eos/config/lacp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lldp_global/lldp_global.py", + "name": "plugins/module_utils/network/eos/config/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "27d08d64512225b47da179d0e081fc0608f1f48cd8cccab963e955e08df2c774", + "chksum_sha256": "31ed665eb142d97e3c896b6f85ce63caeb7e25aed708ec32da60f9c67a14303d", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/__init__.py", + "name": "plugins/module_utils/network/eos/config/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/snmp_server", + "name": "plugins/module_utils/network/eos/config/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/eos/config/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "486843b85b3910419ae61b299ee310dcea42eba21d65bd9158b43dc65f3dcdd3", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/snmp_server/__init__.py", + "name": "plugins/module_utils/network/eos/config/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "4d3bed93486d3875f85938ecbe63e45db9f4b9a1504bcd9b7b5fc36b65614d7d", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lacp_interfaces", + "name": "plugins/module_utils/network/eos/config/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/eos/config/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a9703e96ab5eda5b95d5c0069333b89dc0ff157359b1fbcdc912e8ee5e451631", + "chksum_sha256": "0029737e5ba87bb4e877598e76612224530d61ec3bb691e14d5d50c050897fe3", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/config/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/acls", + "name": "plugins/module_utils/network/eos/config/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/acls/__init__.py", + "name": "plugins/module_utils/network/eos/config/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b6d4dde06ac68d4d095efecb55bde60c39d70a82219586d244d2067de19ba81a", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/acls/acls.py", + "name": "plugins/module_utils/network/eos/config/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a6be42cb681d771db7a2ed06959b2f4b5efb781ed41358f11c6f00a576ed7c8", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ntp_global", + "name": "plugins/module_utils/network/eos/config/route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ntp_global/ntp_global.py", + "name": "plugins/module_utils/network/eos/config/route_maps/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f562cf150ed3ee9b270f26b2f3510c028cf3903686677bf9d1b77c847b61782", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/ntp_global/__init__.py", + "name": "plugins/module_utils/network/eos/config/route_maps/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5aec84f3a36201ff7967cfb2213033e78601517c9d9e9950271e2c9d6b706ae4", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lag_interfaces", + "name": "plugins/module_utils/network/eos/config/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/eos/config/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1f837132ef6cd38ae6a05e68dcc8f061e77eb811a27df2e763c26c57fdca5845", + "chksum_sha256": "2a6862117f6bd1e9bf1672f8b9064d46ee1591fb666f451dd35aa5efe6e27400", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/config/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/vlans", + "name": "plugins/module_utils/network/eos/config/lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/vlans/vlans.py", + "name": "plugins/module_utils/network/eos/config/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "731a58d75154de32049ade89361dc64cdfcf2153ef27f37fac8ac21ad9570f4a", + "chksum_sha256": "1f837132ef6cd38ae6a05e68dcc8f061e77eb811a27df2e763c26c57fdca5845", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/vlans/__init__.py", + "name": "plugins/module_utils/network/eos/config/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/interfaces", + "name": "plugins/module_utils/network/eos/config/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/interfaces/interfaces.py", + "name": "plugins/module_utils/network/eos/config/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0029737e5ba87bb4e877598e76612224530d61ec3bb691e14d5d50c050897fe3", + "chksum_sha256": "ef3523fd8423c7145629ab9976979aec5e03bee95e211d5898e488300fe25328", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/config/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/l3_interfaces", + "name": "plugins/module_utils/network/eos/config/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/eos/config/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/eos/config/lldp_interfaces/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02bfd7533ef86f4474fb202a0cd6d710ae65bd35c68b2e25f0c4b3410ea93c29", + "chksum_sha256": "adf36c086148185987dcdd19a201be6b090568800b814719800526329303728f", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/bgp_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/eos/config/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/bgp_global/bgp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c81b5c555f1df05264b446bf4697ca1e25ecef7464d10ef217584f34a12ed6ea", + "name": "plugins/module_utils/network/eos/config/lldp_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/config/bgp_global/__init__.py", + "name": "plugins/module_utils/network/eos/config/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/eos.py", + "name": "plugins/module_utils/network/eos/config/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "779df2cf7e60b4788a6c84848b7fbf892aa12e793d7f1e325cdafbe2d87ef114", + "chksum_sha256": "27d08d64512225b47da179d0e081fc0608f1f48cd8cccab963e955e08df2c774", "format": 1 }, { - "name": "plugins/module_utils/network/eos/utils", + "name": "plugins/module_utils/network/eos/config/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/eos/utils/__init__.py", + "name": "plugins/module_utils/network/eos/config/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/eos/utils/utils.py", + "name": "plugins/module_utils/network/eos/config/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3f7d9467ef57217864bdc55cd3cf38c58744ff24a124b7cb06f6914adcc67196", + "chksum_sha256": "486843b85b3910419ae61b299ee310dcea42eba21d65bd9158b43dc65f3dcdd3", "format": 1 }, { - "name": "plugins/action", + "name": "plugins/module_utils/network/eos/config/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/bgp_global.py", + "name": "plugins/module_utils/network/eos/config/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/lacp.py", + "name": "plugins/module_utils/network/eos/config/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "3d05e91016ebf5f6b8256a5118c25653c400cb61bad450fe5e046c36932ea656", "format": 1 }, { - "name": "plugins/action/vlans.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "name": "plugins/module_utils/network/eos/config/ntp_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/eapi.py", + "name": "plugins/module_utils/network/eos/config/ntp_global/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "5f562cf150ed3ee9b270f26b2f3510c028cf3903686677bf9d1b77c847b61782", "format": 1 }, { - "name": "plugins/action/lag_interfaces.py", + "name": "plugins/module_utils/network/eos/config/ntp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/l2_interface.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "name": "plugins/module_utils/network/eos/config/l3_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/user.py", + "name": "plugins/module_utils/network/eos/config/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/interfaces.py", + "name": "plugins/module_utils/network/eos/config/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "02bfd7533ef86f4474fb202a0cd6d710ae65bd35c68b2e25f0c4b3410ea93c29", "format": 1 }, { - "name": "plugins/action/linkagg.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "name": "plugins/module_utils/network/eos/config/acls", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/bgp_address_family.py", + "name": "plugins/module_utils/network/eos/config/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/system.py", + "name": "plugins/module_utils/network/eos/config/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "1a6be42cb681d771db7a2ed06959b2f4b5efb781ed41358f11c6f00a576ed7c8", "format": 1 }, { - "name": "plugins/action/static_routes.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "name": "plugins/module_utils/network/eos/config/bgp_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/l3_interface.py", + "name": "plugins/module_utils/network/eos/config/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/hostname.py", + "name": "plugins/module_utils/network/eos/config/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "c81b5c555f1df05264b446bf4697ca1e25ecef7464d10ef217584f34a12ed6ea", "format": 1 }, { - "name": "plugins/action/lacp_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "name": "plugins/module_utils/network/eos/config/static_routes", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/logging.py", + "name": "plugins/module_utils/network/eos/config/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/ntp_global.py", + "name": "plugins/module_utils/network/eos/config/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "a9bb861e16329d067117e9cb3b0fef10a9e67a601bc95820303daf9e2b972d60", "format": 1 }, { - "name": "plugins/action/snmp_server.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "name": "plugins/module_utils/network/eos/config/logging_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/__init__.py", + "name": "plugins/module_utils/network/eos/config/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/interface.py", + "name": "plugins/module_utils/network/eos/config/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "707dc8dc34c94d1fb23ab69132240b92f96ec167938309189c1a7abb38179df2", "format": 1 }, { - "name": "plugins/action/ospfv3.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "name": "plugins/module_utils/network/eos/config/ospf_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/route_maps.py", + "name": "plugins/module_utils/network/eos/config/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/bgp.py", + "name": "plugins/module_utils/network/eos/config/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "ae0e49ac0a39b42b7e884e2f299b9ca9ac41cd7fab9477a0fcd67dbc662c5078", "format": 1 }, { - "name": "plugins/action/l2_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "name": "plugins/module_utils/network/eos/config/bgp_address_family", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/command.py", + "name": "plugins/module_utils/network/eos/config/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/acl_interfaces.py", + "name": "plugins/module_utils/network/eos/config/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "2410ce1f65a84875e8e2c70444c51865f55419aee7c96f56dbd7f7d5bc2eb354", "format": 1 }, { - "name": "plugins/action/ospfv2.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "name": "plugins/module_utils/network/eos/config/vlans", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/config.py", + "name": "plugins/module_utils/network/eos/config/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/eos.py", + "name": "plugins/module_utils/network/eos/config/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "731a58d75154de32049ade89361dc64cdfcf2153ef27f37fac8ac21ad9570f4a", "format": 1 }, { - "name": "plugins/action/acls.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "name": "plugins/module_utils/network/eos/config/lacp_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/static_route.py", + "name": "plugins/module_utils/network/eos/config/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "a9703e96ab5eda5b95d5c0069333b89dc0ff157359b1fbcdc912e8ee5e451631", "format": 1 }, { - "name": "plugins/action/lldp.py", + "name": "plugins/module_utils/network/eos/config/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/l3_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "name": "plugins/module_utils/network/eos/config/ospfv3", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/ospf_interfaces.py", + "name": "plugins/module_utils/network/eos/config/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/lldp_interfaces.py", + "name": "plugins/module_utils/network/eos/config/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "5ce1d71db3569fd01fd7a529e4b728e9edf1c6b3691049f3a82987d2d0c7455d", "format": 1 }, { - "name": "plugins/action/logging_global.py", + "name": "plugins/module_utils/network/eos/providers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/eos/providers/module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "f01b61830d3543669f47b987507fb7b55933588f7a1a2f731e4f9c50d848a558", "format": 1 }, { - "name": "plugins/action/prefix_lists.py", + "name": "plugins/module_utils/network/eos/providers/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/vlan.py", + "name": "plugins/module_utils/network/eos/providers/providers.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "7c92fe09b2aa69b9556470313aaece6f91b79412bc7dd972634e8b891f8ee11b", "format": 1 }, { - "name": "plugins/action/banner.py", + "name": "plugins/module_utils/network/eos/providers/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/eos/providers/cli/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/vrf.py", + "name": "plugins/module_utils/network/eos/providers/cli/config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/eos/providers/cli/config/bgp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/process.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "a47f5b38ed3ce70270b517d5d14afb25aabfae512da4891e55041c881f751878", "format": 1 }, { - "name": "plugins/action/facts.py", + "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/lldp_global.py", + "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/neighbors.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde3990650be3770dff01181cd9e3cda93a4b8f06dcd788cdbe2419e84bb3bb6", + "chksum_sha256": "177c15749b198e2780b1e512f2d5164999fa8e64b30647672c0a490360e76088", "format": 1 }, { - "name": ".ansible-lint", + "name": "plugins/module_utils/network/eos/providers/cli/config/bgp/address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c", + "chksum_sha256": "bf393826b172df53d3cd8d0b59a39e4c8020bce080b6ea6d11ca5cdc305de992", "format": 1 }, { - "name": "test-requirements.txt", + "name": "plugins/module_utils/network/eos/providers/cli/config/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8467be9cdbc47d5456dc3d15b1fb6821f730b7e4ceafac79bddf466a38eb053", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": ".vscode", + "name": "plugins/terminal", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": ".vscode/settings.json", + "name": "plugins/terminal/eos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "689cb2b210cace81743b1da8f00db7a4a7027b193dc85b17be2918b6f9977bfe", + "chksum_sha256": "6966d43cd1b18aa12c7abdd37278000985b69d3ffe827ed250146825246c40d3", "format": 1 }, { - "name": "tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/terminal/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/sanity", + "name": "plugins/cliconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.9.txt", + "name": "plugins/cliconf/eos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c562d6941e7798adfb9f88ff0791f32d9e867dcd22292a4d8041c32585285a1", + "chksum_sha256": "9252eb6292c7ad1b785ab029492cd65d36c3080f1a49f7e54563f1afdea23cda", "format": 1 }, { - "name": "tests/sanity/ignore-2.13.txt", + "name": "plugins/cliconf/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/sanity/ignore-2.11.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63", + "name": "plugins/filter", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.10.txt", + "name": "plugins/filter/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/sanity/ignore-2.14.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40", + "name": "meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.17.txt", + "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40", + "chksum_sha256": "5f6d803f340cd245abf00d69ccbb608eacf9c579536edde378c3416bbabb2c53", "format": 1 }, { - "name": "tests/sanity/ignore-2.16.txt", + "name": ".ansible-lint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40", + "chksum_sha256": "d24c42e934dbb40a90a121d3dc31d4583c1781386ceb3a19c0401e2aa1295171", "format": 1 }, { - "name": "tests/sanity/ignore-2.12.txt", + "name": ".pre-commit-config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63", + "chksum_sha256": "d13352770609525d83bf97a2a2100f02ebe67bbef09b25f201ac7dffa77a0a75", "format": 1 }, { - "name": "tests/sanity/ignore-2.15.txt", + "name": "pyproject.toml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40", + "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc", "format": 1 }, { - "name": "tests/config.yml", + "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "de5087316490411841c67aa3307cfdd3acaea09875c9b4dee6852bca7c120764", + "chksum_sha256": "2bda8fcbebb01f38af1b1af69787d2bac8549743b8d121b6bdfdf1fab1338665", "format": 1 }, { - "name": "tests/unit", + "name": "changelogs", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/requirements.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", + "name": "changelogs/fragments", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/__init__.py", + "name": "changelogs/fragments/.keep", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/mock", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/unit/mock/vault_helper.py", + "name": "changelogs/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661", + "chksum_sha256": "03ddb712fc00dcdde125bd062a4fffc3ce5846d43ac90c3191c8ac8da4196303", "format": 1 }, { - "name": "tests/unit/mock/__init__.py", + "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "4467d07b9c09292415a9aa68144fc31d33ec2c357f41145186458a425a8712a1", "format": 1 }, { - "name": "tests/unit/mock/procenv.py", + "name": ".isort.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d0f54fd298f7888bfada6f867ee0f883f776a368916410abe2e5d31b8d17faec", + "chksum_sha256": "0ac83124be8cf24f40e7457c3a7ede4409108ee8caa89976cdb03d6d1ae336d1", "format": 1 }, { - "name": "tests/unit/mock/loader.py", + "name": ".yamllint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bea80cf14afd91d02e652a3a395bed3d74fdf373d12d5af6a41daf5516646663", + "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", "format": 1 }, { - "name": "tests/unit/mock/yaml_helper.py", + "name": "test-requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4dbe503c0585b634f72b82eef6b9f8d078ae383ed865bb016db31992dac97600", + "chksum_sha256": "ca239357ead93fd66122e6781f5cfc2cadff458397215db66775c312fd79a2a9", "format": 1 }, { - "name": "tests/unit/mock/path.py", + "name": ".prettierignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44b6e5b20c52ab9f4f57eaf79948d7ce9b6fa0546ae7d103abaa3bbfa66c5f19", + "chksum_sha256": "29d6205739f8fa2ea1dfb82777cc64dd269e51fe58c7c713682f71ac8b1973c4", "format": 1 }, { - "name": "tests/unit/modules", + "name": "tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/conftest.py", + "name": "tests/integration/target-prefixes.network", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048", + "chksum_sha256": "ec96e8ef2e9e3856cae9bbefb51f64492bd044f17d17310cc560ec990ab14468", "format": 1 }, { - "name": "tests/unit/modules/utils.py", + "name": "tests/integration/network-integration.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e9c58b776c4d76cfc671ebfddb1a290a50af7dd0aa1b69b2ad1c5ae1b2545b7", + "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d", "format": 1 }, { - "name": "tests/unit/modules/network", + "name": "tests/integration/targets", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration/targets/eos_lldp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos", + "name": "tests/integration/targets/eos_lldp/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_acl_interfaces.py", + "name": "tests/integration/targets/eos_lldp/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc656eddee1d1e7d1e19f853e822ddd2e3278e8bbd2d3b3b3dbdb1b92ef881a7", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_ospfv3.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1041888b1a9bc1959250af27978e23620b8ed9aa14db113d338643394461e0f5", + "name": "tests/integration/targets/eos_lldp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_static_routes.py", + "name": "tests/integration/targets/eos_lldp/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9bff61e7421e9ead114f758cedede3e348e783e5b8962a4efc1737926a95a319", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_user.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5c25ffa2c6c9151aa2917352cead5c31e710b989f478cbf1b2633414d8267d7c", + "name": "tests/integration/targets/eos_lldp/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/eos_module.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b3f4714ae9af0063ed76f955c15e8492b3f7d69ecc52b3c1e139f49f2a0ea4d4", + "name": "tests/integration/targets/eos_lldp/tests/eapi", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_l3_interfaces.py", + "name": "tests/integration/targets/eos_lldp/tests/eapi/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f0cd14e440fa9fde8c41f357b4349ecfb990b3e55079a95ee85c1047adf82bb6", + "chksum_sha256": "f7b48fe0eac8caa3e2d627764dfa3fb2a4d9ccb00db62e4fad31670c2a390671", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_bgp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "82670df14b058649c33891ba1a4c3bfdfda6ef39a1d199244626d9f051bf6675", + "name": "tests/integration/targets/eos_lldp/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_command.py", + "name": "tests/integration/targets/eos_lldp/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e22eb99b373411967bf240388b482c5bdfe4448b00f963a6fbf0081517bca097", + "chksum_sha256": "53b18d54488b69edfd167f85e21b91301fdea473379481f5d96be206edd7124f", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_lag_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cba4b3add8c9d73648c923686cef9d7f824fdc4e73df92e831265b2e809e1744", + "name": "tests/integration/targets/eos_lldp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_ospfv2.py", + "name": "tests/integration/targets/eos_lldp/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80ac2358e9441421006c95dfa8e0cde4fb72187c00abd27f1e90ffa887663365", + "chksum_sha256": "6c58c665f3d46c7e382b12352535b4c300ea576b2c8e2e075b93a6ce18f2031b", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_snmp_server.py", + "name": "tests/integration/targets/eos_lldp/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8a1c34ad13c8b2fc1094b04fedd2d647e7dc8a5f067988a4739b3d84c076a29", + "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_lacp_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "70ae233aea97e698eecf3bd6bea988be6424762c798f685fafb45c23a850b75d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/eos/test_eos_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6268f4ef47c8ae2582c0a4493cd2dab406ad317073fa51d33db5363714e991b9", - "format": 1 - }, - { - "name": "tests/unit/modules/network/eos/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/modules/network/eos/test_eos_bgp.py", + "name": "tests/integration/targets/eos_lldp/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "46cf0755d9c960c529dc800d9d05a42491ab167c1a5308c0b7ae11f04e1c8715", + "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_acls.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8c8ec6d225cf7b4fe555df3f8b0496cbc214d8cd7d0eea0077e7b6939abc593c", + "name": "tests/integration/targets/eos_bgp_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_l2_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "02074974c27359bbd52ba8d27eda47a1c212abc5bfb2189e1384b34698286f8f", + "name": "tests/integration/targets/eos_bgp_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_ospf_interfaces.py", + "name": "tests/integration/targets/eos_bgp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8815ea63958a8ff0e2be4f247efe981ea816db5668ea2f6fe15cd719a863e875", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_vlans.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6867734a8347edfe2b6ec59b80effe6cb821ed8092009502476b9f1bf7dce55c", + "name": "tests/integration/targets/eos_bgp_global/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_logging.py", + "name": "tests/integration/targets/eos_bgp_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c2aaac1a0154b77aadf3845c8222783d731cec4595c5b795c9d10654d54449de", + "chksum_sha256": "a1c6b658736d10bad13d5b973aa9955f414ef50fa30aa23a890374ab544a2f3b", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_lldp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "606176c03a6d9a7e8414b4b432cb09112c00727e2fad9af2a5409a70faa4f040", + "name": "tests/integration/targets/eos_bgp_global/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_bgp_address_family.py", + "name": "tests/integration/targets/eos_bgp_global/templates/populate_af.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "95e130c9d56b7b425c88a68932ae20fe75971f08455030fc6597f92d9bf7b666", + "chksum_sha256": "a890c9293ff8120b194c107a6f70bdca6d62433ed701398a8214feaecb42bba6", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_route_maps.py", + "name": "tests/integration/targets/eos_bgp_global/templates/populate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64c5e7252ff26e97a830919c94b339097fe2efacfded5072b7c47783deae9bd1", + "chksum_sha256": "cbb352548a62d123453d921de875e2acb84594a405ddafe0c04460de66e62928", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_prefix_lists.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dc8288bf978fd5a41ce1b5ede8df2cdeb53e034fca88e864dd1384c31df0fb8e", + "name": "tests/integration/targets/eos_bgp_global/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_lacp.py", + "name": "tests/integration/targets/eos_bgp_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "50ed02ab288dbc74ddcf9c0d1b22f3871f21ffcb71a0d22c8b5c023175c31510", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2226be54468edd007e582baa0bb937f2ad19460b0904084500b632388f55bfc4", + "name": "tests/integration/targets/eos_bgp_global/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures", + "name": "tests/integration/targets/eos_bgp_global/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_eapi_show_mgmt.json", + "name": "tests/integration/targets/eos_bgp_global/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "963dde77e29e22955f66b6d4a4d880c327419e3c719556219b19cf2d9d515c07", + "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7011ff501cdde31949153491b1f1092e8d8afa6a27510ab594deb1504403c2d0", + "chksum_sha256": "de7a1434091a39ef8cc7b4dd5439d3b37ae5b77a68f90ff04d5a83160cdbfc9b", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_config_config_updated.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "199f6fddff67988e4e15efde118949a06623ac6cda6cc56a43110fab3da655d9", + "chksum_sha256": "58ef58d4be3aa6e9478afcdb9010c490d331d3523a5d4804a0a68f3d1555d9d9", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_eapi_show_mgmt_unconfigured.json", + "name": "tests/integration/targets/eos_bgp_global/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "09f3bdc48ce35e7200a5a5da2f2722dff46de4bd8ebc1d1718fa4ed7a08310df", + "chksum_sha256": "5c0343e2441998a70cccd7a221674cd22a585a30cb660edf3089ac0b090e798f", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_l2_interfaces_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "501ad2cead9d2a90aa7529319befbf62a4f58f7988995788c5206c90fbec5afc", + "chksum_sha256": "5d8689ef6e49ccbba62ad1ebc44268ac6d8f82c7f001b21251b5d09c7ec7d32b", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_route_maps_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64a5a2e160aff448bb567d8d4fdba4c3231f85ab0b44e2f596fe2784148e8554", + "chksum_sha256": "cbb352548a62d123453d921de875e2acb84594a405ddafe0c04460de66e62928", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv3_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97763a63f53b38b8c864ed38f800e4270d600065cdd4acde805c3b1ca384e6b5", + "chksum_sha256": "4d04fc66d72fa6c188227956f100f60c5653c829ef71f493379e1aaaed85fb60", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv2_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c4e0126af072bca2ca99eb356d26868e44adae27ffa3622f54fc431122e66ace", + "chksum_sha256": "36c8fb15c11b0806cf005745d3430a56d953e9f6780a7cef5aafd2a09a0535ad", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_lag_interfaces_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "996743ab19a23f6fbb30754d1f4beb2911c6b4ffa69a28665dfc79b5ad519b65", + "chksum_sha256": "02c017ff36027b957a2682c52ba544c014969f9b4ed9e9a725981a818191cd7b", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_ospf_interfaces_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c664a8713d7ccd543333cca425528c1726d6790b8364bdd6a5e8720ce4183be", + "chksum_sha256": "6fd9e647d40d57feb5aa630c4ad460edcc0a5053310451f19ede0fd8d741ffe3", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv3_config_gather.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "091b340fe2578196b84cd9b133d0cc01e479a27a12caeb2a796355c571a39cb4", + "chksum_sha256": "c43d6297de44a8d0ff51684af71b0f6837eaaa5d475561572902e6683b194247", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_config_candidate.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3352c8002ead9454c96fa97e82bc2bf245ac57a69edbf8a934bed4ef809de3de", + "chksum_sha256": "f749361ee14f98e79fa6a1f95335d7c2e66d2c28f517b1852b5b7f4cfbb9d429", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_acl_interfaces_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/purged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29bdd16b7032ccf6dd42d4c2e78ebe00aaaf155ea7f5d9049c638f742478f312", + "chksum_sha256": "7c4383c852e0367d67b96145d03829375611f90a60fa91aebf9ae41e7f8de1d2", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_static_routes_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tests/common/_populate_af.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9de7fbc93c152431ec2baf2f7c8ba736ced12148e8bff2e7b54eb7dd39c4b04d", + "chksum_sha256": "4f02550439ab2971f3dedc3958ee676bf2f3dd53532dca527bc619cf2f1a1d9e", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_acls_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c58fb25414acf3b04a882b8172c4c048c637b5906670a1c3a5f36e8a3aad0380", + "name": "tests/integration/targets/eos_bgp_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_l3_interfaces_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0989f0ad8aea46b6b4b7111aee264687387c44e8cc68154f8d9c054d22581d1d", + "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_global_af_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd5318703b4822b5a27eb24bb0d1898c7e5559e96151114784e5a5e92d07f535", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_vlan_config.cfg", + "name": "tests/integration/targets/eos_bgp_global/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e71249b2afca7c80191a77d86753e21419042d51d570de0b3c717a204f01400", + "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_command_show_version.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cd0ee8985d66e4cff1ebeff617108414d701cdb2acebf9327329f62e093f7062", + "name": "tests/integration/targets/eos_eapi", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration/targets/eos_eapi/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_logging_global_config.cfg", + "name": "tests/integration/targets/eos_eapi/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "616869cf79f4faf6f64276e039fbcad728d3e012eba2073b118b0296d9334013", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_lldp_global_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "41eb838c679e2fd974f15bd92461a1627b29a0f2b8b1c5a5c3fef8a472efaad3", + "name": "tests/integration/targets/eos_eapi/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_interfaces_config.cfg", + "name": "tests/integration/targets/eos_eapi/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05edee2806d57e1a907026a24ea0fd51582008c1d24b63c5fc1463e86204683e", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_ntp_global_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1c841ab014af5105c26d977cfcac4de50919a8537bf632698f95e5ea5f2b5c0b", + "name": "tests/integration/targets/eos_eapi/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_global_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3cef54b0f53689ccdd9a9de7e3d23fa7fa591582506b438f1b628752b5b0847b", + "name": "tests/integration/targets/eos_eapi/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_snmp_server_config.cfg", + "name": "tests/integration/targets/eos_eapi/tests/cli/stop.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "955317964226d2639660f6006be99a9c1d67e3a8dcea25ba7b2c4a569059a4f9", + "chksum_sha256": "70621105e0b6c97e34047f0ce8408da1cb5e03868c8678df2f28bcf817c57527", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_hostname_config.cfg", + "name": "tests/integration/targets/eos_eapi/tests/cli/off.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9", + "chksum_sha256": "593ed779304b25cb537ca13fc88e95a91a938109f5d5f9f6722a29f37573c040", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_banner_show_banner.txt", + "name": "tests/integration/targets/eos_eapi/tests/cli/on.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc2e6349862de27bfb1d50da78684b7b6320c6c8626a7ae378ce07852d64f984", + "chksum_sha256": "626f6ef04d9b5eeec3c2633d9517c0c632fe4b758470326278e7df918eec58c1", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_lacp_config.cfg", + "name": "tests/integration/targets/eos_eapi/tests/cli/start.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a89a5f03e68185c4a50f5410ea4fb04caca756685c8d906c1b4558fa52896aa", + "chksum_sha256": "66702395e736d29c01bdfcf6f45a349937108ce757696dde4cef46ca1986ba7c", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_prefix_lists_config.cfg", + "name": "tests/integration/targets/eos_eapi/tests/cli/vrf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed6dda06d2158651429f03d9db644514e20f89e6d3c58331fc09e059c76a22ff", + "chksum_sha256": "64545c869099218860beec3678baf8209b39d66a5841128afafc15775a6e9eff", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_eapi_show_vrf.text", + "name": "tests/integration/targets/eos_eapi/tests/cli/badtransport.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a43e222ce4d0e6aec92afabb2d5ff7f6cc7fd96ce4e055b6ffc02ad1492373d5", + "chksum_sha256": "1620fab5693bd0fb373e2d53372188eb73a2fe5a3d389b11052ea42df490ee26", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_logging_config.cfg", + "name": "tests/integration/targets/eos_eapi/tests/cli/configure.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d35c0e1702f10694008ce77f2d405c569d3745738fa4ceab306cdb638f5b465d", + "chksum_sha256": "6efb0ff5e69c8eb46e1101343bc93272549578ad68a74fede9781a99bfb5983a", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_lacp_interfaces_config.cfg", + "name": "tests/integration/targets/eos_eapi/tests/cli/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "414cc25eb0be567529b328993c191ea1f282c2620ff5f45b57462ec7e950ddca", + "chksum_sha256": "37b279c3fc0c94ed140a3e3890e309424710bcd35856f31b4211d5e7841f4656", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_af_config.cfg", + "name": "tests/integration/targets/eos_eapi/tests/cli/zzz_reset.1", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9cfca9294069868122bcad8e9a7bcfdfd6101949fd9959ec32766b682f635a68", + "chksum_sha256": "01cd53e28355e0d65ba10accb15c95a17f824555796003f0225d7879a40382e9", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_config_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "03abdcaedc2f739a12fd1c31f37164f02ed471aff024ad8e654a0d7ec3e611e6", + "name": "tests/integration/targets/eos_eapi/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_user_config.cfg", + "name": "tests/integration/targets/eos_eapi/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b11830bd90b2c0e492cba03f0af73a5229a4723e47959812544961bde1ac438", + "chksum_sha256": "8d0f3e120b5e0f83314d06ed429b515b98e122ebdd4111b4e5be0bf09098877c", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_system_config.cfg", + "name": "tests/integration/targets/eos_eapi/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1cb12a14186402c703d639d484b7ea9829e52f9159afac4f7779bd396f5e43f", + "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv2_config_gather.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6271cc911105743891d46bde906d969ad2ce562d8bfa9364d845da33cb9c3bde", + "name": "tests/integration/targets/eos_vrf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/fixtures/eos_static_routes_config1.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "22d8eb393f411a1034b6d77b5137ca205b1d01b09a6488c5c30199145b99bf7c", + "name": "tests/integration/targets/eos_vrf/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_hostname.py", + "name": "tests/integration/targets/eos_vrf/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d475c839bd9eec611ad9226f604113e43f3ee337f7ae1fa839a5cd7812c74d99", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_ntp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f5c329f3a991e1aef099556f1b128a6d31e6bc16c160c8df7ac9c311278c6a3d", + "name": "tests/integration/targets/eos_vrf/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_eapi.py", + "name": "tests/integration/targets/eos_vrf/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55469a55bf8e298dc208f9a8d85fe7a50d4b0e38979b1e8e68601b04455ad5a3", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_system.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d70923c1e52358c5aca24ec7db07df4fc7f35482f9167494f5239ecd8b835ff9", + "name": "tests/integration/targets/eos_vrf/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_logging_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2a4e09637aeb8e41fbadb07cd02b0006f9a5c7ca1404ef912177a383f9e3a614", + "name": "tests/integration/targets/eos_vrf/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/eos/test_eos_banner.py", + "name": "tests/integration/targets/eos_vrf/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53e44aeafc087453c5a441b201e08dd8b11058cfc88f0b89fa60d9afaa8d2e44", + "chksum_sha256": "cea011f04a3c8f2d06c412f8512259c89a2e3a57b55effeef99fa45434d9be15", "format": 1 }, { - "name": "tests/unit/compat", + "name": "tests/integration/targets/eos_vrf/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/compat/unittest.py", + "name": "tests/integration/targets/eos_vrf/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81", + "chksum_sha256": "8e0a1de7edebf8e1de1b1bd68c83fa3e6669085f9cd28e417cbb11f43da75068", "format": 1 }, { - "name": "tests/unit/compat/__init__.py", + "name": "tests/integration/targets/eos_vrf/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", "format": 1 }, { - "name": "tests/unit/compat/mock.py", + "name": "tests/integration/targets/eos_vrf/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4e0ca26e6e2982bc40db782db3a0d4950e8c5a749171c0da22c27c85acd23ea", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration", + "name": "tests/integration/targets/eos_lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets", + "name": "tests/integration/targets/eos_lag_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_lag_interfaces/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tasks", + "name": "tests/integration/targets/eos_lag_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lldp_global/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lldp_global/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_lag_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c", + "chksum_sha256": "594c6341406e70e47b7f9a9af53f481c6876cea084a03beca4068406e59f149c", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/meta", + "name": "tests/integration/targets/eos_lag_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/meta/main.yml", + "name": "tests/integration/targets/eos_lag_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/defaults", + "name": "tests/integration/targets/eos_lag_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lldp_global/tests", + "name": "tests/integration/targets/eos_lag_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/parsed.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c49e1972ec01b3646c6d93d8dce2d3672048797e780cd160b4b721a08b348d89", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4cce5198a2d66a44e8775b311ff670c877aed0d7d37c5f7b43d843f0f1e1f08", + "chksum_sha256": "0a09e158385c2158469622bdd80fbaacde054cc03c780e2f895973c59413eb38", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ac4431a75c62d1a70050d834f822be901e87b57cf6178b14069bd0dba8a95fe", + "chksum_sha256": "b05efe5f17248475b35be8de1008f92763eabc0a46f7e6e6ef721d0ed1c0d005", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44cb429ba9a7352289e7ce9c1f1b46965ea1c360510d031c554472b04012c4ae", + "chksum_sha256": "bb70b82e4f2780065245088e2a0868d4bd3ac4d78772c3533772904502384b7f", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61363b2fbb08af548968fd3bef7e529f5f1a15d59d8c36732c9a430488d4d2ff", + "chksum_sha256": "e8dd392df3bb210172a0fb991fafc904367293cc00e7dbdd2289ab477d58011b", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0048d6a4374fade15d938c1d79b79eb8b3d95500fe31a55b8e2509b3fc39cef6", + "chksum_sha256": "b58309f8938bba932257668c1dd8e88057583702dd483304b451dc2bcb3d2389", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/_reset_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "13d7c23ac9137d74bd2614020c8d8c585f3fb9ae30d53d8a120a1abe168d47d0", + "chksum_sha256": "e67fbf115a90966048b5dd75e61b370f6001fdebaf1da0c8cd8670e7593ef086", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ecfacbd7e8e994b8e1ca0db698eb1226a9f0cdecd0bc4dcaee71466d7fa237b3", + "chksum_sha256": "d4e9b522c4e33d097cea87a3bfbdb7d7c0420be389b4b2ae4b0ec2c1dc9c1589", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tests/common/_reset_config.yaml", + "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97c3ee1287e7584f46521ddc1bd32b3f6928c6f0c2f30fb00ded22272649ab1d", + "chksum_sha256": "ac0aaba7718ec98d92a4b78ded3ee5dd5c7b0f7bbf4eb62a00200769ebd84362", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb37329f298bade2c13b44af8e8036f83bdda812f2acca9eead754340be8d829", + "chksum_sha256": "ec7f5172df48561a7661707c31befc2372876e79536cf8452cce42131e26efa3", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/vars", + "name": "tests/integration/targets/eos_lag_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_global/vars/main.yaml", + "name": "tests/integration/targets/eos_lag_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e8be33a4b8c4f6ed1238e648834c66b382d5d0c9638b2aaa15d23e5433e181e", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global", + "name": "tests/integration/targets/eos_lag_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_lag_interfaces/tasks/eapi.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tasks", + "name": "tests/integration/targets/eos_prefix_lists/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tasks/main.yaml", + "name": "tests/integration/targets/eos_prefix_lists/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "name": "tests/integration/targets/eos_prefix_lists/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_prefix_lists/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "chksum_sha256": "fbdeab37387d1fd29e31ca469d49a5297e3fe095e30c0a02dd0f402a7bfe87a7", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/meta", + "name": "tests/integration/targets/eos_prefix_lists/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/meta/main.yaml", + "name": "tests/integration/targets/eos_prefix_lists/templates/populate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "f41196dd12570c02dff69372f0539ac676553a8c97da1637db552399aa691fcd", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/defaults", + "name": "tests/integration/targets/eos_prefix_lists/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/defaults/main.yaml", + "name": "tests/integration/targets/eos_prefix_lists/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests", + "name": "tests/integration/targets/eos_prefix_lists/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common", + "name": "tests/integration/targets/eos_prefix_lists/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2770a4c9d78449e45cb039ca95cc66215d4b5fca8aeca52e28280daacb29ee5", + "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "653a99b2d157d5894d94aacc19083fc14c76b23077a390c15c6c6ef57aea62f5", + "chksum_sha256": "40293ea4167e097760e7aeb5b43e229510ef4eefe55161f18756aea2410aca32", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61de4747e7132e7d8e54ec9eb6443f26e2896927739607b0dc6074d5369beae3", + "chksum_sha256": "412ce27b1e535cfda5876456c2355d78a394ef0db13ba99c334f632732efb388", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c490f97548080abda0e8ebf836466a8a6bde8787bc433c6223ba3d59fd42170", + "chksum_sha256": "75d1ef4096be7283925fda58180d9f70f9bbb42cc023228ee6bf69aab00052c8", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", + "chksum_sha256": "1246641c583926029ffa31cf7d9f68a5a3b5d9b6c3426323965a7ace18308646", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7ae7444cf6cc04a2541fabd62ec1667d165cb39ce0b7d171f6efac9e4bd7638", + "chksum_sha256": "f41196dd12570c02dff69372f0539ac676553a8c97da1637db552399aa691fcd", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a3027ab685c832aec9f4b8cfa8e26cc8589f25f9fc802b246d3935ab7f1206c5", + "chksum_sha256": "5789eb8ee641ebf96faa3beaba1360916812f0b72bf79005dacf09038224eb1b", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1340381f48cc0d4caa0403bbab7b72de9484ba5fb9efa952068ef9af8234e596", + "chksum_sha256": "8184f88e334762f387e4baa6b3ab70c3c160a75c861d669a89b1f2940fa0b501", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04ab08225d0e0b263fb06ebafa021ee73c6117852c370d5266d36a5c13fff449", + "chksum_sha256": "2481891014a0b474f98bbf7691a95628da7c0897b3ee4fc8046cbc79e0f54c75", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5776e2445ac71c922c12d4f1a1aa667a2c824a3e4e6653bbe6f834a1da2dec19", + "chksum_sha256": "eee19a016590fc436d8be49414f1f5bd60598eac308df3f1581ec52677c6db1a", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "108321fdfd99cdb6ff1b98da4741aa931453d409480f06c8c9af67e1aaae93e9", + "chksum_sha256": "40b71ec679a26a406e66f31dc4b561a0671ffc493ead69d80c60d7a58a8bb871", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/vars", + "name": "tests/integration/targets/eos_prefix_lists/tests/common/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4b607978c8e64316d6196fa19665a85a0eadbf919ccb8875644857cf9b328407", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_prefix_lists/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/vars/main.yaml", + "name": "tests/integration/targets/eos_prefix_lists/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c2b71c8e8843f1fa24e2f0bafd6c1bd7880c076e0f5ded8086f8ac71f46955d6", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_prefix_lists/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_logging_global/templates/populate.cfg", + "name": "tests/integration/targets/eos_prefix_lists/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0637d1b53afb46a8eec79f5c0763905f7f7c182db42f823402261479d71fae15", + "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi", + "name": "tests/integration/targets/eos_hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tasks", + "name": "tests/integration/targets/eos_hostname/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tasks/main.yaml", + "name": "tests/integration/targets/eos_hostname/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d0f3e120b5e0f83314d06ed429b515b98e122ebdd4111b4e5be0bf09098877c", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tasks/cli.yaml", + "name": "tests/integration/targets/eos_hostname/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_hostname/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", + "chksum_sha256": "9762cc4a787aec50485af807234f50902fde96f57e6ad904e62a9588c1f61373", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/meta", + "name": "tests/integration/targets/eos_hostname/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/meta/main.yml", + "name": "tests/integration/targets/eos_hostname/templates/populate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/defaults", + "name": "tests/integration/targets/eos_hostname/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/defaults/main.yaml", + "name": "tests/integration/targets/eos_hostname/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tests", + "name": "tests/integration/targets/eos_hostname/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tests/cli", + "name": "tests/integration/targets/eos_hostname/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tests/cli/start.yaml", + "name": "tests/integration/targets/eos_hostname/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "66702395e736d29c01bdfcf6f45a349937108ce757696dde4cef46ca1986ba7c", + "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tests/cli/stop.yaml", + "name": "tests/integration/targets/eos_hostname/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70621105e0b6c97e34047f0ce8408da1cb5e03868c8678df2f28bcf817c57527", + "chksum_sha256": "9093ee823c0145791216cf2d53f00df72c6ba361f525b2337b6645bdb7d3e8c5", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tests/cli/vrf.yaml", + "name": "tests/integration/targets/eos_hostname/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64545c869099218860beec3678baf8209b39d66a5841128afafc15775a6e9eff", + "chksum_sha256": "d89644559714c65b378af2d9a1e23c0432a2f1abd4fb09f3538f844430dc06d3", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tests/cli/configure.yaml", + "name": "tests/integration/targets/eos_hostname/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6efb0ff5e69c8eb46e1101343bc93272549578ad68a74fede9781a99bfb5983a", + "chksum_sha256": "aed726bbfbc34673f8da380cceaac909741a8a4533d1abf057afb6d9f5b0b214", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tests/cli/off.yaml", + "name": "tests/integration/targets/eos_hostname/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "593ed779304b25cb537ca13fc88e95a91a938109f5d5f9f6722a29f37573c040", + "chksum_sha256": "969820bbaeb224608a4aab530cbeeb88627ac039bcacf2a1942ec42705e5514d", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tests/cli/zzz_reset.1", + "name": "tests/integration/targets/eos_hostname/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "01cd53e28355e0d65ba10accb15c95a17f824555796003f0225d7879a40382e9", + "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tests/cli/on.yaml", + "name": "tests/integration/targets/eos_hostname/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "626f6ef04d9b5eeec3c2633d9517c0c632fe4b758470326278e7df918eec58c1", + "chksum_sha256": "e8f9622547f2e0fa5c603e7d1e76348d76da8bac90ebfa21179749ee691cd648", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tests/cli/config.yaml", + "name": "tests/integration/targets/eos_hostname/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37b279c3fc0c94ed140a3e3890e309424710bcd35856f31b4211d5e7841f4656", + "chksum_sha256": "bbd01a1b82535d87fb2c5192c045a1452c02385b1d9325bdcb8013b03f3840d5", "format": 1 }, { - "name": "tests/integration/targets/eos_eapi/tests/cli/badtransport.yaml", + "name": "tests/integration/targets/eos_hostname/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1620fab5693bd0fb373e2d53372188eb73a2fe5a3d389b11052ea42df490ee26", + "chksum_sha256": "36160ee5a95d8b19e314fbe8b473f56c8dc87e209f3c9394803a1b7a900f9ed4", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_hostname/tests/common/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "079da330b620d09b22c55b8c63db98278c3347639db086a2c86f0039f2d13f35", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tasks", + "name": "tests/integration/targets/eos_hostname/tests/common/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "784e0e5db4b302883890287cd2ba18d7005403f1c05be8c8c23f7d8b1f807cea", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_hostname/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tasks/main.yaml", + "name": "tests/integration/targets/eos_hostname/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tasks/cli.yaml", + "name": "tests/integration/targets/eos_hostname/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d8c084f757657a7a323a0fd6c49fef789d8ef373f770fb46f864563bc23c4ef", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_hostname/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/meta", + "name": "tests/integration/targets/eos_ntp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/meta/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_snmp_server/defaults", + "name": "tests/integration/targets/eos_ntp_global/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/defaults/main.yaml", + "name": "tests/integration/targets/eos_ntp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests", + "name": "tests/integration/targets/eos_ntp_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common", + "name": "tests/integration/targets/eos_ntp_global/vars/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b44421f37fc760a771a3a602eff1724eddc44e6dc49e6275afe538587c656a3c", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_ntp_global/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/eos_ntp_global/templates/populate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49411b2c85202029944048c9b98c93755510c85f9912a6de5c31987bd5fb199d", + "chksum_sha256": "db6ca3b0768262fced3ee97dd2e9b9b9f6085d81047770a3883c7b65973d51dc", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e15abd88634fd0d4e37994033dbad069c4c6a5a74032fbdcb28054fd2ce24f50", + "name": "tests/integration/targets/eos_ntp_global/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_ntp_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "92b980a2b2ec6624a2d10d807e8026953ec336d0c8f56ee070d27b0b8cd66ed6", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "03a12bd881dbe8be8c2a60638c8f2e564cc0b176ea9764af6a17d015098c8ac0", + "name": "tests/integration/targets/eos_ntp_global/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_ntp_global/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_ntp_global/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_ntp_global/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7de001d983e8873496684af8bbd816f668626f0cb61280f1e0d07326af32bdda", + "chksum_sha256": "8ad00ff561ee93d06eabfc81bfdd27c78dd622a1f9776da62893eb6a219fa338", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_ntp_global/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a65a37d14b4764392ea5d9ccfa3debe6b1bfdcb5f4501477a51714f1f38eeefa", + "chksum_sha256": "425b9069cbfe0e6daec1d28d3023f886464df76571975acfa14d43285eab3dd5", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_ntp_global/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "90b472eb859697c791cb385ea0972ab042ffe3af2afedd902bf780cbd29ceac7", + "chksum_sha256": "db285e5dba7f6690073a06d6fa2c71df3f551c1df280f25fc99a690c96b74053", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_ntp_global/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5498af2763ccdc85790108ce60fec119ee9ee184694ab4dbb73bcc84411931a2", + "chksum_sha256": "65f05f9b573112dd4035eadd0ef4c037794e2c2d8575a9e57bce3363f9251e9d", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_ntp_global/tests/common/update.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd35e88f8ab1a36691e324cf1c5e98721a41035cc9ef210966b4f744869fbd17", + "chksum_sha256": "a8d288c944ccb44045ad3ae954b9f8c24cd785b81a8d895a49601b8bdb3da459", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_ntp_global/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c058c00472d829b53fb556f986cb2fbf9943b02212719a676530c1ca1ef3864e", + "chksum_sha256": "db6ca3b0768262fced3ee97dd2e9b9b9f6085d81047770a3883c7b65973d51dc", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_ntp_global/tests/common/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "80a3c218ee8aaefd8e3fccc016b73adede17f646b5cb7aeb92930b2ebf240e08", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/vars/main.yaml", + "name": "tests/integration/targets/eos_ntp_global/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae7da77e7cf9b6b97d3b5f42e00cb9f2ab4b591724f14421ce31ecaa491a410a", + "chksum_sha256": "930ade9d4163376aae340574caca0dbcb60880eaabc6836d7357898b325a670c", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_ntp_global/tests/common/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "42c31c2540456a34184d4bab9fc456c8ac86f151e3fe42609f6acfac96638eeb", "format": 1 }, { - "name": "tests/integration/targets/eos_snmp_server/templates/populate.cfg", + "name": "tests/integration/targets/eos_ntp_global/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "955317964226d2639660f6006be99a9c1d67e3a8dcea25ba7b2c4a569059a4f9", + "chksum_sha256": "ad9aa73641fa04cef01184edad25e66075435e1190f1fd8dd6b35bf9a3da968d", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_ntp_global/tests/common/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d755dec987689bb90c08d6864899ad17b02cc78e78ec8126d1ff75897f7aea77", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/tasks", + "name": "tests/integration/targets/eos_ntp_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/tasks/main.yaml", + "name": "tests/integration/targets/eos_ntp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c58c665f3d46c7e382b12352535b4c300ea576b2c8e2e075b93a6ce18f2031b", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/tasks/cli.yaml", + "name": "tests/integration/targets/eos_ntp_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_ntp_global/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", + "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/meta", + "name": "tests/integration/targets/eos_logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/meta/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lldp/defaults", + "name": "tests/integration/targets/eos_logging_global/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/defaults/main.yaml", + "name": "tests/integration/targets/eos_logging_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/tests", + "name": "tests/integration/targets/eos_logging_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/tests/cli", + "name": "tests/integration/targets/eos_logging_global/vars/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c2b71c8e8843f1fa24e2f0bafd6c1bd7880c076e0f5ded8086f8ac71f46955d6", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_logging_global/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/tests/cli/basic.yaml", + "name": "tests/integration/targets/eos_logging_global/templates/populate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53b18d54488b69edfd167f85e21b91301fdea473379481f5d96be206edd7124f", + "chksum_sha256": "0637d1b53afb46a8eec79f5c0763905f7f7c182db42f823402261479d71fae15", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/tests/eapi", + "name": "tests/integration/targets/eos_logging_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp/tests/eapi/basic.yaml", + "name": "tests/integration/targets/eos_logging_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7b48fe0eac8caa3e2d627764dfa3fb2a4d9ccb00db62e4fad31670c2a390671", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces", + "name": "tests/integration/targets/eos_logging_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tasks", + "name": "tests/integration/targets/eos_logging_global/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lldp_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/eos_logging_global/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997", + "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_logging_global/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lldp_interfaces/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "5776e2445ac71c922c12d4f1a1aa667a2c824a3e4e6653bbe6f834a1da2dec19", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/meta/main.yml", + "name": "tests/integration/targets/eos_logging_global/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lldp_interfaces/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "108321fdfd99cdb6ff1b98da4741aa931453d409480f06c8c9af67e1aaae93e9", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/eos_logging_global/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lldp_interfaces/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "61de4747e7132e7d8e54ec9eb6443f26e2896927739607b0dc6074d5369beae3", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_logging_global/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e10f178b46e0a654204ab75a7487641c6345c51592481e64d7c7d5d15317ac67", + "chksum_sha256": "7c490f97548080abda0e8ebf836466a8a6bde8787bc433c6223ba3d59fd42170", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_logging_global/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7576f665b34ce43ec4245fd5765611aa031ffbf73096d9f8907b7e5a9f537c52", + "chksum_sha256": "1340381f48cc0d4caa0403bbab7b72de9484ba5fb9efa952068ef9af8234e596", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_logging_global/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0e5f55128df4f7326db45dfc8c478e59a39d68053caf563625473079580d6838", + "chksum_sha256": "653a99b2d157d5894d94aacc19083fc14c76b23077a390c15c6c6ef57aea62f5", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_logging_global/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61c502d64492d3127c5503a4c6180c49d6bfba16ce0b4db6d37f5547b8bed58c", + "chksum_sha256": "b2770a4c9d78449e45cb039ca95cc66215d4b5fca8aeca52e28280daacb29ee5", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_logging_global/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8fbe99406870ccff9922c49a2ae193a563edcfb51cd7a4e2797181d1a3edf3ec", + "chksum_sha256": "a3027ab685c832aec9f4b8cfa8e26cc8589f25f9fc802b246d3935ab7f1206c5", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_logging_global/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a49e3976aa794644e2cb1ed765367a39ad81b39a42c16bca3bf32c8043dc9b1", + "chksum_sha256": "f7ae7444cf6cc04a2541fabd62ec1667d165cb39ce0b7d171f6efac9e4bd7638", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_logging_global/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73c669fdf692d5f7f3b578f6a4a46f8b0fff6d62da0f62ad903648405e9934dc", + "chksum_sha256": "04ab08225d0e0b263fb06ebafa021ee73c6117852c370d5266d36a5c13fff449", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "670d9e454375f4479720d7a70e5099afd23319aa52bf2d01ba9b916ffd385d8e", + "name": "tests/integration/targets/eos_logging_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_logging_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23e7bceb1fd85748923512e2facfaf4cb2727570be530b30897febd6c79f2a1a", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/_reset_config.yaml", + "name": "tests/integration/targets/eos_logging_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c711ecfe5d02de94fed82b58d3402e733c1e575fea60c3f9744f3379b01d1b33", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_logging_global/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4f0aac4ed1a3d18ee04a35d42b989ee6a3e2a8ad07ee8b98f56f275b027e826", + "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps", + "name": "tests/integration/targets/eos_l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tasks", + "name": "tests/integration/targets/eos_l3_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tasks/main.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "name": "tests/integration/targets/eos_l3_interfaces/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "chksum_sha256": "9bd8cfc16471691295c6cc5b75efdef88860f2aad20ec00f62ffc614e2976776", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/meta", + "name": "tests/integration/targets/eos_l3_interfaces/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/meta/main.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/templates/reset.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "3e02b044e876b189ce336a3a4802eb8af3df7d69c9d74f94877a8ec495e240dc", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/defaults", + "name": "tests/integration/targets/eos_l3_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/defaults/main.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests", + "name": "tests/integration/targets/eos_l3_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cdabf064aef1475c5f3ca82c999bf1b31e113c0dc8e8c23c043b792d4ea0d6f1", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_route_maps/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "28c7426a5b17a56f3b95701a57e71358f555978f8411340e51b098932fbe5bc4", + "chksum_sha256": "03f049dcce225d8de33873ff4f8a2244b4e6053857d212b6bd473476cd429b14", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "15d0e603090321cfdddd64967bc56c26dfb3003af6930743aa03bc6171ff0a3f", + "chksum_sha256": "c06867d92daaf7f51b661451f56dd63be75711f4f8c407a7f7365879cb4d295c", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a089af65191e7c43d545eca51f782b7d202e2cb2d56494bface34b020cb45666", + "chksum_sha256": "7c4177bbc89805770c555ca12366593738cd4fcfe2830e23b35a286aecc43ed3", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "60cc6ccf0b2663bfb35b98686d984c74580676ff0f846553237213ea77df4177", + "chksum_sha256": "95215014c2825aee51c3c204de545ae03738dae62b0e268c617a498276643713", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", + "chksum_sha256": "1be80d6bfade12c26b76660664893c1846149bb7eb9398fa5e610d48d54e9b78", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a43b4966005a8a7ff89e03d834bdafcc7bca6d64de605c312d06bce503883af5", + "chksum_sha256": "cc35e0f775451453ac2c523a27b8ca29590551f20ba1dd504553b72cd3f48096", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common/_reset_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "79312d821332f81704323f4a81c7a25bc6028b81da83946485016d95669068d7", + "chksum_sha256": "cbf3a7bcba86ab51a41f5df9700c3361614a761a59c7a818e28b9e2b47e49826", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64a5a2e160aff448bb567d8d4fdba4c3231f85ab0b44e2f596fe2784148e8554", + "chksum_sha256": "f17e653bfdb385c99bf7db088d3269b67d962148561c5b4ae3248adfad050ce4", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44f4351a9b5d2fe29f5ceb7b8da5353d19e68a3ee410ed12f362f8ae419faf42", + "chksum_sha256": "a65aac4ca425465052942c3fd31c9d51ffb175047cbce064752fab288c7e4367", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "351d48443390baf9e5ba8e9b8856931bb61b2dfa4b78ad8c1096ca9f02a1c663", + "chksum_sha256": "e8b467b03ab2c858ce56d5520307e0482341b16e05579f077e5bf8742d71fc95", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef67fa3a5f7c2e93109b6fe7a8241945ba90f239fab62d805af4229984ffd5d0", + "chksum_sha256": "4660abfc6652a70079d0ea81ddca1be88fe04998d9396edef977e7c5ba5df1af", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/vars", + "name": "tests/integration/targets/eos_l3_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/vars/main.yaml", + "name": "tests/integration/targets/eos_l3_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d337f562d76680d2b85d2144b4897034f37423f7f160a16e9c9ea66cc41f0f50", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_l3_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_route_maps/templates/populate.cfg", + "name": "tests/integration/targets/eos_l3_interfaces/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c74494f69023cfc97d41e81575736420b6f29e2d384b0e7f8f41c446ffdc603a", + "chksum_sha256": "1629beb9c4c49792f78a1425442a6a6e0e5dd9a0ed824c1cced81e6e97a0e47c", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists", + "name": "tests/integration/targets/eos_lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tasks", + "name": "tests/integration/targets/eos_lacp_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_prefix_lists/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_prefix_lists/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/meta", + "name": "tests/integration/targets/eos_lacp_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/meta/main.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/defaults", + "name": "tests/integration/targets/eos_lacp_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_prefix_lists/tests", + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/parsed.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e2bc98e817414304b3ad22cf0d6747e9908af6b692824cb5dd751058968e2de3", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8184f88e334762f387e4baa6b3ab70c3c160a75c861d669a89b1f2940fa0b501", + "chksum_sha256": "c417f982e3ee716d3de8a1bd93a0671eb29a513a6e4b62b7ec9ab6a06e038511", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5789eb8ee641ebf96faa3beaba1360916812f0b72bf79005dacf09038224eb1b", + "chksum_sha256": "1a8a850858d11124418c7fbc26742397895220754befde252ad24117705e3deb", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75d1ef4096be7283925fda58180d9f70f9bbb42cc023228ee6bf69aab00052c8", + "chksum_sha256": "2b46d6ceee61ab907fcb57229bf38f361785e90cba1c90ac5ff50d4e9513a3d7", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1246641c583926029ffa31cf7d9f68a5a3b5d9b6c3426323965a7ace18308646", + "chksum_sha256": "a3796a2313899acffb35cddcaa5673d76efd8751d1fed12d820f5973a9476d8d", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4b607978c8e64316d6196fa19665a85a0eadbf919ccb8875644857cf9b328407", + "chksum_sha256": "d6a728cf70443f8ffc3ff061c9ee8d1eb85866c930760f3b277200956f41fb99", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/_reset_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", + "chksum_sha256": "b36bf6f528c9b79fc7a9b7f2d3b182ca1f2ddd3339579701d92b36b019ec959d", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eee19a016590fc436d8be49414f1f5bd60598eac308df3f1581ec52677c6db1a", + "chksum_sha256": "f924be9202c965db71f4880a635ba5acc81f9cb91f0101907f3e96387674e8f7", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2481891014a0b474f98bbf7691a95628da7c0897b3ee4fc8046cbc79e0f54c75", + "chksum_sha256": "cce344c093d2137f12b8a9933298953bc3330081dcbae362088a5097b2514813", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f41196dd12570c02dff69372f0539ac676553a8c97da1637db552399aa691fcd", + "chksum_sha256": "45ec3d12aef7d086d901f4bba8e6084fe7a13cf8b31f321621c598fa2cb88405", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40b71ec679a26a406e66f31dc4b561a0671ffc493ead69d80c60d7a58a8bb871", + "chksum_sha256": "4bcd6ab1c2fc53eb4c774397a6ee078ce4382963c6ffb53e7514a13721c24974", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_lacp_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40293ea4167e097760e7aeb5b43e229510ef4eefe55161f18756aea2410aca32", + "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_lacp_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "412ce27b1e535cfda5876456c2355d78a394ef0db13ba99c334f632732efb388", + "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/vars", + "name": "tests/integration/targets/eos_lacp_interfaces/tasks/eapi.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/vars/main.yaml", + "name": "tests/integration/targets/eos_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fbdeab37387d1fd29e31ca469d49a5297e3fe095e30c0a02dd0f402a7bfe87a7", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/templates", + "name": "tests/integration/targets/eos_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_prefix_lists/templates/populate.cfg", + "name": "tests/integration/targets/eos_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f41196dd12570c02dff69372f0539ac676553a8c97da1637db552399aa691fcd", + "chksum_sha256": "21f21b62a39efa62ebd86dc0b152614f89828c29b70b513a5eab734ba59bb230", "format": 1 }, { - "name": "tests/integration/targets/eos_user", + "name": "tests/integration/targets/eos_interfaces/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_user/tasks", + "name": "tests/integration/targets/eos_interfaces/templates/reset.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0a096e71ea1c5a1c492cc2e33283e427338efdf9d837a590b582c2702ccee07e", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_user/tasks/main.yaml", + "name": "tests/integration/targets/eos_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_user/tasks/cli.yaml", + "name": "tests/integration/targets/eos_interfaces/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_interfaces/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", + "chksum_sha256": "0c3a7c9a205c5ff75308f7bb5b9ec60565eb624f45526d5712b3e1ed026e087a", "format": 1 }, { - "name": "tests/integration/targets/eos_user/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", + "chksum_sha256": "fed3bcba071a6d00304fba18b40062463af1e4f9098048ca4385c8ee7d3703ee", "format": 1 }, { - "name": "tests/integration/targets/eos_user/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_interfaces/tests/common/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7f0746803db7cb46077bb261ea73492246c9973b05d4369c4830edd6181bf453", "format": 1 }, { - "name": "tests/integration/targets/eos_user/meta/main.yaml", + "name": "tests/integration/targets/eos_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "bc26969057893c4516d300b795ab9a9ca599596ea075a83972b2af4ed2164596", "format": 1 }, { - "name": "tests/integration/targets/eos_user/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_interfaces/tests/common/_parsed.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "36a0793cac2c404b733a21498bf803d7fc38942c11ea65ea26521ca4d64e04d8", "format": 1 }, { - "name": "tests/integration/targets/eos_user/defaults/main.yaml", + "name": "tests/integration/targets/eos_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "a62f1fe641f551ad15f8c85593b987486f1099f5a9172a1b27e73b4520e8ee29", "format": 1 }, { - "name": "tests/integration/targets/eos_user/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_interfaces/tests/common/_reset_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7ae46767fb3bead2365a6cc3aeb9acfb44d8ad8fdee5313f144fe1d248110eaf", "format": 1 }, { - "name": "tests/integration/targets/eos_user/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_interfaces/tests/common/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2d7fe951ce7d79d1fee4fa2149e1f341d06c7910a220bda9e86118ea26349fef", "format": 1 }, { - "name": "tests/integration/targets/eos_user/tests/cli/auth.yaml", + "name": "tests/integration/targets/eos_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ece4746e3d18508426ba2ab784a91bed28670217a75be85b234b03ebb66dfd89", + "chksum_sha256": "5a0737935c23ff3552dcf975ee16cfa42adfbcea87cf8bb0b8926b2ccf09c8d0", "format": 1 }, { - "name": "tests/integration/targets/eos_user/tests/cli/basic.yaml", + "name": "tests/integration/targets/eos_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "432c95aa920b1774308ea58ea6159647675bb2f7f1cffde182c64662dcc857fc", + "chksum_sha256": "ca023a36a14d5f2de1b213f4e7626424523c01e952e08789e5cac48107ae0b4f", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_interfaces/tests/common/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ca4a201cb5ed8e1649d04eba504fc0ba0584b9404df7d3fdc3df1d9cb708c992", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tasks", + "name": "tests/integration/targets/eos_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/eos_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/eos_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_interfaces/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/meta", + "name": "tests/integration/targets/eos_static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/meta/main.yaml", + "name": "tests/integration/targets/eos_static_routes/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_static_routes/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/defaults", + "name": "tests/integration/targets/eos_static_routes/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/eos_static_routes/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests", + "name": "tests/integration/targets/eos_static_routes/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common", + "name": "tests/integration/targets/eos_static_routes/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/eos_static_routes/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f61d79526410667fe97aa0c1fa0c6a0162e500c6abc373d025165382643b96a4", + "chksum_sha256": "5c1986157b288504efba9959764aa6b8de99c79007f97a59c48e6ad72a496535", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_static_routes/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4f997c36cc9170f11226c5057f8a2a6b9da5717306c07a8dcfae8517d9b4152d", + "chksum_sha256": "bec9055d452548f078aec3418ef1d147865a0b03c739b9a8cb7609142959736c", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_static_routes/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c607da23362194cb7a396214a601408e7ea7b78e895567b6a070205916f4677", + "chksum_sha256": "7efefbf1285c5fc94d42b155d5e3236241aea41a49727bf31e0d27710209a2e2", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_static_routes/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e9086ad58ff3a415a829921047e1c805e34d6ae95488b9b1c937b20a922ae964", + "chksum_sha256": "f8d6eb37916d612ff4b460b42cb1f8689420f1607695d867bf5a1ea7505bf64a", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_static_routes/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb5f91b025aa37891756c22bfae165a560c4c00bcee7f0d93005ddc79944886e", + "chksum_sha256": "4df3d87f73db3368744f45083b9b822543ce447d77a6167922de9c3cc3908909", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_static_routes/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", + "chksum_sha256": "6022c467edbcead6301a2203a755a2ab12fe648877cb77cdc2ab32f5d0cf6581", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_static_routes/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "698af51d7f6a6ced71a9415495684f30be35b26cb298b53e1de7792a3d857c18", + "chksum_sha256": "dbd2727c4906cba6e945896b24be521129405364dab6c4444652c2804f91a8ee", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_static_routes/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3389b2ec80e9dfa1b851de623ba7bf990b39240feebc9e3cb18dac87b85250e", + "chksum_sha256": "c93a2f5e26cee3ca747d7dacfb5233adb9c1448b72c54119fd32dce25988f0b8", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/gathered_empty_config.yml", + "name": "tests/integration/targets/eos_static_routes/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6ff5c23745f6f182db2a1173cd25b5a98a29465a8bc37cae61678d8c577af23", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/_parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b5c505431c56a3bd030ee52a85e240626c905bfe2809aab18a2e761066e0ccbb", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4222a5770d1b912a7ac71103749ff82d93dd903e769e87690471a59be0c7e988", + "chksum_sha256": "9ab33deec36ea6b8eea7be1b6eafb943f360759fe3b3e5c78211a9ab6cda58f3", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_static_routes/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3fd4657ae775a57bdcda3537eaafb956b979f0a1569c80583364e96f16e2f201", + "chksum_sha256": "08eaf829db084d4878287253871d6dde4d9027f179af071ba0b501eb474791bf", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_static_routes/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c136e2d339db165c433d2b3bd05409e542892bb8a5a94f53737891fb082d16f8", + "chksum_sha256": "2c42048158fb304b5951f30de6ce718b723ff26659c2f1ece7f577612f557675", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/vars", + "name": "tests/integration/targets/eos_static_routes/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/vars/main.yaml", + "name": "tests/integration/targets/eos_static_routes/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bd015c6e2a8c0de8c44a813c8d30a6554cb1f7dec683760cd30a899ce85481c5", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_static_routes/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_ospf_interfaces/templates/populate.cfg", + "name": "tests/integration/targets/eos_static_routes/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2d645f551982b7ea8613b5d94260428dbcd4cd3207d34a4bb51fb8722b0ffc4", + "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_config", + "name": "tests/integration/targets/eos_route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tasks", + "name": "tests/integration/targets/eos_route_maps/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fbf830cf0b2f6eccbbf21e658888b119977106bee0aa263cc2ac4393ddc19d4f", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_config/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_config/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_route_maps/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tasks/cli_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cad1c35e72ece6063b7dd0600ae72e4e0f2f29b963d58733833bfb71db1ff1dc", + "name": "tests/integration/targets/eos_route_maps/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tasks/redirection.yaml", + "name": "tests/integration/targets/eos_route_maps/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b49deae160fc4dfe8307a0ffb0749eedf58bfe63871c77531866e164fe7f955b", + "chksum_sha256": "d337f562d76680d2b85d2144b4897034f37423f7f160a16e9c9ea66cc41f0f50", "format": 1 }, { - "name": "tests/integration/targets/eos_config/meta", + "name": "tests/integration/targets/eos_route_maps/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/meta/main.yml", + "name": "tests/integration/targets/eos_route_maps/templates/populate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "c74494f69023cfc97d41e81575736420b6f29e2d384b0e7f8f41c446ffdc603a", "format": 1 }, { - "name": "tests/integration/targets/eos_config/defaults", + "name": "tests/integration/targets/eos_route_maps/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/defaults/main.yaml", + "name": "tests/integration/targets/eos_route_maps/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests", + "name": "tests/integration/targets/eos_route_maps/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli", + "name": "tests/integration/targets/eos_route_maps/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/toplevel_before.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "727839044c517b93bff6eeb4786a005f52b4c17adcca79db896113ef5a788ff5", + "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/toplevel_after.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "caea8fad79205e27a673f4ee9fe66ae8337bed0172587d7f41f27f4c3354fa2d", + "chksum_sha256": "351d48443390baf9e5ba8e9b8856931bb61b2dfa4b78ad8c1096ca9f02a1c663", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/sublevel_strict.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb86226952eb153150fe0e1b41d8bbd2d38bbb2323831ff4a865553f161ead28", + "chksum_sha256": "ef67fa3a5f7c2e93109b6fe7a8241945ba90f239fab62d805af4229984ffd5d0", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/diff_against_config.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ba680c356fa88e96ed721f29df59097b2aabe32030286f032e3f981db797276", + "chksum_sha256": "15d0e603090321cfdddd64967bc56c26dfb3003af6930743aa03bc6171ff0a3f", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/src_match_none.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6f0ba65100459757c0b7dab013d12f4b901e2af19979c49047b6c403e2a1877", + "chksum_sha256": "a089af65191e7c43d545eca51f782b7d202e2cb2d56494bface34b020cb45666", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/sublevel_block.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f954e5787b9b7e557b058e9f4e8720bfe36b468b4822bf29913ed3d14042475c", + "chksum_sha256": "64a5a2e160aff448bb567d8d4fdba4c3231f85ab0b44e2f596fe2784148e8554", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/toplevel.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fb6ec870503106ced6935c661248ff3e9d637bafc418f9b50f6bd01329c26ce2", + "chksum_sha256": "28c7426a5b17a56f3b95701a57e71358f555978f8411340e51b098932fbe5bc4", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/sublevel_strict_mul_parents.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ab71a8f63f346ecaac7f063da41865f2e61466559bd8e3b01c5c8cd5d4e63ff", + "chksum_sha256": "cdabf064aef1475c5f3ca82c999bf1b31e113c0dc8e8c23c043b792d4ea0d6f1", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/config.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a76cb30e8f9c86209fa61ebfd779b91e9f5996a527b4856ec5d1f91d5bdfb77", + "chksum_sha256": "79312d821332f81704323f4a81c7a25bc6028b81da83946485016d95669068d7", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/replace_block.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8229d1f16924795dadcae8472ba22a0d6ed7efdba4a7c8c12864f2915c1ed9c6", + "chksum_sha256": "a43b4966005a8a7ff89e03d834bdafcc7bca6d64de605c312d06bce503883af5", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/sublevel_exact.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a6f66fe3cca7fc667d32dd2de4f5bc6fc7d82d2d92953316ad3d6e4f16ec463", + "chksum_sha256": "44f4351a9b5d2fe29f5ceb7b8da5353d19e68a3ee410ed12f362f8ae419faf42", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/src_basic.yaml", + "name": "tests/integration/targets/eos_route_maps/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "115d6ac4c64b7d029afd2ddb9588b5eeb323ccf12391cf9bc1ba7db051c0847e", + "chksum_sha256": "60cc6ccf0b2663bfb35b98686d984c74580676ff0f846553237213ea77df4177", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/check_mode.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8b8ade7952b3bdfbe87a27bef6a6072bf1559fb682ed03477c2c4bbb95add14d", + "name": "tests/integration/targets/eos_route_maps/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/defaults.yaml", + "name": "tests/integration/targets/eos_route_maps/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4390d24f8debc9f9a06bd6f75cedac8f6de373193dd6f477329d0479908e66b7", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/backup.yaml", + "name": "tests/integration/targets/eos_route_maps/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d9bdcefed31e07edf3c37a38a9bdd50b83b235723758b4f4afee6afddb1b9e5", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/src_invalid.yaml", + "name": "tests/integration/targets/eos_route_maps/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52ca0bec01fc312731dc6e4be0b4439a1ffcbdb24716321987fbea517a5e145a", + "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/save.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b576d2db1098db6187c8dabf08b98f2f768c955c0fc76d32f946c50df47d3bc3", + "name": "tests/integration/targets/eos_system", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli/sublevel.yaml", + "name": "tests/integration/targets/eos_system/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_system/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0f7743e4751629f7b7b985959361b7ac07cf23c267d74777401cd2e45bcff7d1", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi", + "name": "tests/integration/targets/eos_system/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/toplevel_before.yaml", + "name": "tests/integration/targets/eos_system/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f7329aacb123f76e1a2df214a99787da817035c59e9c0e2664f7934daba6efe", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/toplevel_after.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "90e106e955ff3865916079955ddf5af545cdaa7372c491bf0ba61076cd80bb4c", + "name": "tests/integration/targets/eos_system/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_strict.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dbf1e3fd93dc6e50049a62d8107765cdbba14ee1f843606845bf30d0a982cd42", + "name": "tests/integration/targets/eos_system/tests/eapi", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/src_match_none.yaml", + "name": "tests/integration/targets/eos_system/tests/eapi/set_domain_name.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c42bb681923e1aea5664c1a629c22da23afd186fbdcbaa1c8f6a5df716e69bec", + "chksum_sha256": "8cfd63ce023b45928d446783ffcd516e4ab736187d36102514859dd9aabcec05", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_block.yaml", + "name": "tests/integration/targets/eos_system/tests/eapi/set_hostname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3dde12483d855a7b2da463f885ac18f0b10b36b9b6acc538de96c4de23157c61", + "chksum_sha256": "6bce01fac4d41bba5dc1495d183f86d153fbd010a3b1ac760bd07c32bcd3c5f2", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/toplevel.yaml", + "name": "tests/integration/targets/eos_system/tests/eapi/set_lookup_source.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "45276c0a74aba09ed8c7c48de80af2dd32219a324303610bc9cf80c3c8bc283b", + "chksum_sha256": "5ec0cefc6ecaf3e422116a57b7a77dac7c7e8de65543b445baaa5b08bb0c31a1", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_exact.yaml", + "name": "tests/integration/targets/eos_system/tests/eapi/set_domain_list.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5501acfbe1e6d31324268704c74ddf6bf1d7d9eb0e158edcbbe4ff4b214cc76a", + "chksum_sha256": "c864953ce83d0099b4f025894c10d502d1ecff22776b89688f784bf172b4f936", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/src_basic.yaml", + "name": "tests/integration/targets/eos_system/tests/eapi/set_name_servers.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb891145f21b067fae034a29cded633ad42f8c834d477f8997b2517753fa7300", + "chksum_sha256": "3f151be120cd9e6e74b1778bf682f08879753fc2198c807e4ecebe4486d21c28", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/defaults.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0ece39d7ef9b05d0e14b28c199af6dd0181c05c687fcf8555b7e41f35406f4c6", + "name": "tests/integration/targets/eos_system/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/backup.yaml", + "name": "tests/integration/targets/eos_system/tests/cli/set_domain_name.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b7ff6fa23044a1941225d49d2d23d85c1cede5f6d194625515b78a94ceccef0", + "chksum_sha256": "96a436ed7ba93da80b30b7fde2babbd14d77e20c888843f12fbd37f368774c05", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/src_invalid.yaml", + "name": "tests/integration/targets/eos_system/tests/cli/set_hostname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "751ce477a9a859e0fe8c0a420a836a9aeb6ee4e4d00d58af9e96fa4b15731577", + "chksum_sha256": "3ddfe22c80b9e909d2cafe93380715fc7d695425a4bf23c0c549bbb1414fc8dc", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/save.yaml", + "name": "tests/integration/targets/eos_system/tests/cli/set_lookup_source.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b10fe8c1dec1cc8276a16bcfeb6b70ac9667c8fc42cc5acd7f742fbdd2a2a2f6", + "chksum_sha256": "9b571561204978b797cde9c09803bd0f35e3a4b1d0f032d549b0d8a479bb7742", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/eapi/sublevel.yaml", + "name": "tests/integration/targets/eos_system/tests/cli/set_domain_list.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "402e518d37d1d8a5c283de5593d26f4067c6ce3312b90e9f9b5c41c8c52892af", + "chksum_sha256": "382aace82bf0f7d0a09ba8f2a35a825bf9085cdca7d62d507096e65e361b6922", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/redirection", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_system/tests/cli/set_name_servers.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5a6511f53c7475d55b01bd0fd150ecc8432e6a237a0634b9f7d0dab26473d88b", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/redirection/cli", + "name": "tests/integration/targets/eos_system/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/redirection/cli/shortname.yaml", + "name": "tests/integration/targets/eos_system/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d944cd696544ff17ad20e40bea70421da8141a1c22b5b4227b8b2cec348ce085", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_config/tests/cli_config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/eos_config/tests/cli_config/cli_backup.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3bd7e06189b2e0a2c94746eeacb0988676f417f3a6740b1ef65a39609ae5d735", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_config/tests/cli_config/cli_basic.yaml", + "name": "tests/integration/targets/eos_system/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "135e26aae8c87670f187e83c82608ece8fe523e21e51824780e082ed0b4bf4ff", + "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", "format": 1 }, { - "name": "tests/integration/targets/eos_config/config.txt", + "name": "tests/integration/targets/eos_system/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a925a8805c82634beb0a514ef8ab88912b8b3e296763329a74d7690b0429dc6", + "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", "format": 1 }, { - "name": "tests/integration/targets/eos_config/templates", + "name": "tests/integration/targets/eos_lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/templates/basic", + "name": "tests/integration/targets/eos_lldp_global/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/templates/basic/cmds.j2", + "name": "tests/integration/targets/eos_lldp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "635043eb1da106cc08711181db0d52331cc4ba2cda07e30466641f4c7497f10f", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_config/templates/basic/interface_config.j2", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6d6e2f3a34e61e1912c313154341699bc6398ccd884e4663bbdcefab7e76f6ec", + "name": "tests/integration/targets/eos_lldp_global/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/templates/basic/config.j2", + "name": "tests/integration/targets/eos_lldp_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d6e2f3a34e61e1912c313154341699bc6398ccd884e4663bbdcefab7e76f6ec", + "chksum_sha256": "2e8be33a4b8c4f6ed1238e648834c66b382d5d0c9638b2aaa15d23e5433e181e", "format": 1 }, { - "name": "tests/integration/targets/eos_config/templates/defaults", + "name": "tests/integration/targets/eos_lldp_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_config/templates/defaults/test.j2", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6d6e2f3a34e61e1912c313154341699bc6398ccd884e4663bbdcefab7e76f6ec", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_config/templates/defaults/config.j2", + "name": "tests/integration/targets/eos_lldp_global/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82249ebe8dcfdb0ab85598bd0f7ba759187bfc19c5c04a772d3308f27d85eefe", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp", + "name": "tests/integration/targets/eos_lldp_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tasks", + "name": "tests/integration/targets/eos_lldp_global/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lacp/tasks/cli.yaml", + "name": "tests/integration/targets/eos_lldp_global/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997", + "chksum_sha256": "ecfacbd7e8e994b8e1ca0db698eb1226a9f0cdecd0bc4dcaee71466d7fa237b3", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_lldp_global/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lacp/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "cb37329f298bade2c13b44af8e8036f83bdda812f2acca9eead754340be8d829", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/meta/main.yml", + "name": "tests/integration/targets/eos_lldp_global/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lacp/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "4ac4431a75c62d1a70050d834f822be901e87b57cf6178b14069bd0dba8a95fe", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/defaults/main.yaml", + "name": "tests/integration/targets/eos_lldp_global/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lacp/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lacp/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "44cb429ba9a7352289e7ce9c1f1b46965ea1c360510d031c554472b04012c4ae", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_lldp_global/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "256d175eb92a50a737d23b476ff3fe20d9999764b3cdac3fe3f625bc357bc809", + "chksum_sha256": "0048d6a4374fade15d938c1d79b79eb8b3d95500fe31a55b8e2509b3fc39cef6", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_lldp_global/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "298c194b94ae3f3750c516e2245251ed37611565c429ccf4fd7427c22df368cd", + "chksum_sha256": "b4cce5198a2d66a44e8775b311ff670c877aed0d7d37c5f7b43d843f0f1e1f08", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_lldp_global/tests/common/_reset_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7cc12a2c9c2b6154d7474af3cc090677b5067fa213c13ba6fb8b4203b9aa0149", + "chksum_sha256": "97c3ee1287e7584f46521ddc1bd32b3f6928c6f0c2f30fb00ded22272649ab1d", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_lldp_global/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1567cbeeee2362aa296686ff39b8a1fb0e95ee41adfb130e8612826981e7113d", + "chksum_sha256": "61363b2fbb08af548968fd3bef7e529f5f1a15d59d8c36732c9a430488d4d2ff", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_lldp_global/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "800ead8f10e3d4bc50ddf469a53b358695197f47476eb4b3789aa011e16f1dea", + "chksum_sha256": "13d7c23ac9137d74bd2614020c8d8c585f3fb9ae30d53d8a120a1abe168d47d0", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tests/common/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dade4172a3223fc93e1eca92c3303456eb1f6c154c4cbcedad9a1e267821a311", + "name": "tests/integration/targets/eos_lldp_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_lldp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14973e3f346a4f8643baff860e9a35d46a16d7ed42212bc804ffa2b78f70c023", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tests/common/_reset_config.yaml", + "name": "tests/integration/targets/eos_lldp_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d0dcc0055c8b24c34f55531d55a1069274e7450a6592a5223e9976887437cd33", + "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_lldp_global/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bfdee3db7e752c613eb903f5b515c30d6ae3b5da4b641f9c575416aa32d77649", + "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family", + "name": "tests/integration/targets/eos_snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tasks", + "name": "tests/integration/targets/eos_snmp_server/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e40fe291a7e7d70bd846b4acf8f4a1a465948b9a02b037d9b0fd0a4193055baa", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_bgp_address_family/tasks/cli.yaml", + "name": "tests/integration/targets/eos_snmp_server/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tasks/eapi.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "name": "tests/integration/targets/eos_snmp_server/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tasks/redirection.yaml", + "name": "tests/integration/targets/eos_snmp_server/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b61bd7a713c0b9735361ff90fb07b90d1b4fb97b9c822c2c979bd6eb82b892c", + "chksum_sha256": "ae7da77e7cf9b6b97d3b5f42e00cb9f2ab4b591724f14421ce31ecaa491a410a", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/meta", + "name": "tests/integration/targets/eos_snmp_server/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/meta/main.yaml", + "name": "tests/integration/targets/eos_snmp_server/templates/populate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "955317964226d2639660f6006be99a9c1d67e3a8dcea25ba7b2c4a569059a4f9", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/defaults", + "name": "tests/integration/targets/eos_snmp_server/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/defaults/main.yaml", + "name": "tests/integration/targets/eos_snmp_server/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests", + "name": "tests/integration/targets/eos_snmp_server/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common", + "name": "tests/integration/targets/eos_snmp_server/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "36c8fb15c11b0806cf005745d3430a56d953e9f6780a7cef5aafd2a09a0535ad", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2d367a172a6119e19318a7925d0f93ab844f3285d5e7818894d5754dff1c3879", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_snmp_server/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a72b2cdd640e76fd8cebc5dc40db9e7f021f219a006e0e202f38753e67f3e66", + "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_snmp_server/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e8015071f7ffcce80ad0ededdef7f16e73a69a32d9f045d358db22e27e0bc37", + "chksum_sha256": "fd35e88f8ab1a36691e324cf1c5e98721a41035cc9ef210966b4f744869fbd17", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_snmp_server/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "768a7c9e05c637f812712a5de2588a2fae4c9296e89f082ef30ce5efefe0939a", + "chksum_sha256": "c058c00472d829b53fb556f986cb2fbf9943b02212719a676530c1ca1ef3864e", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_snmp_server/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", + "chksum_sha256": "92b980a2b2ec6624a2d10d807e8026953ec336d0c8f56ee070d27b0b8cd66ed6", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_snmp_server/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2bbbe9bb69931adedbcb614bd349ce9dc7291f38b6dfa81420db786051dac73", + "chksum_sha256": "03a12bd881dbe8be8c2a60638c8f2e564cc0b176ea9764af6a17d015098c8ac0", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_snmp_server/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19423e7d29df73b400d5b47fea1fce275bcd2b04d184470aa5659097038915e1", + "chksum_sha256": "90b472eb859697c791cb385ea0972ab042ffe3af2afedd902bf780cbd29ceac7", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_snmp_server/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b889f292c92b4630f9cd7f3ff38826eb0db4f2937fc2f9e5af1f266245cca74", + "chksum_sha256": "e15abd88634fd0d4e37994033dbad069c4c6a5a74032fbdcb28054fd2ce24f50", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_redirection.yaml", + "name": "tests/integration/targets/eos_snmp_server/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ed262f5f0ecec25b856f900c3bf6d2b460b8988d495e8b8bd2a94be0e4b136f", + "chksum_sha256": "49411b2c85202029944048c9b98c93755510c85f9912a6de5c31987bd5fb199d", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_snmp_server/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b772bb07168e677fd6bf5c7cefdb28b4343d2c51f4463422e7b6a0cf9959f327", + "chksum_sha256": "a65a37d14b4764392ea5d9ccfa3debe6b1bfdcb5f4501477a51714f1f38eeefa", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_snmp_server/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6039629f8dcaf5a5985dde73f3aeadf9a238c6bb09cba2cf52953fd33d75fdf", + "chksum_sha256": "7de001d983e8873496684af8bbd816f668626f0cb61280f1e0d07326af32bdda", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_snmp_server/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "501991afb657b98d52a6b17858e19fc4def44d6fc1b308af9d9339ed9b1bcbfc", + "chksum_sha256": "5498af2763ccdc85790108ce60fec119ee9ee184694ab4dbb73bcc84411931a2", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/vars", + "name": "tests/integration/targets/eos_snmp_server/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/vars/main.yaml", + "name": "tests/integration/targets/eos_snmp_server/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80bb6f23199fee8ae2ed4149e4706e9a23f0b0093a9f03c982fc8f3590919fc5", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_snmp_server/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2d8c084f757657a7a323a0fd6c49fef789d8ef373f770fb46f864563bc23c4ef", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_address_family/templates/populate.cfg", + "name": "tests/integration/targets/eos_snmp_server/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b889f292c92b4630f9cd7f3ff38826eb0db4f2937fc2f9e5af1f266245cca74", + "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes", + "name": "tests/integration/targets/eos_bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tasks", + "name": "tests/integration/targets/eos_bgp_address_family/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tasks/main.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "name": "tests/integration/targets/eos_bgp_address_family/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "chksum_sha256": "80bb6f23199fee8ae2ed4149e4706e9a23f0b0093a9f03c982fc8f3590919fc5", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/meta", + "name": "tests/integration/targets/eos_bgp_address_family/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/meta/main.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/templates/populate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "0b889f292c92b4630f9cd7f3ff38826eb0db4f2937fc2f9e5af1f266245cca74", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/defaults", + "name": "tests/integration/targets/eos_bgp_address_family/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/defaults/main.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests", + "name": "tests/integration/targets/eos_bgp_address_family/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dbd2727c4906cba6e945896b24be521129405364dab6c4444652c2804f91a8ee", + "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_redirection.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6022c467edbcead6301a2203a755a2ab12fe648877cb77cdc2ab32f5d0cf6581", + "chksum_sha256": "6ed262f5f0ecec25b856f900c3bf6d2b460b8988d495e8b8bd2a94be0e4b136f", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8d6eb37916d612ff4b460b42cb1f8689420f1607695d867bf5a1ea7505bf64a", + "chksum_sha256": "e6039629f8dcaf5a5985dde73f3aeadf9a238c6bb09cba2cf52953fd33d75fdf", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c42048158fb304b5951f30de6ce718b723ff26659c2f1ece7f577612f557675", + "chksum_sha256": "501991afb657b98d52a6b17858e19fc4def44d6fc1b308af9d9339ed9b1bcbfc", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c1986157b288504efba9959764aa6b8de99c79007f97a59c48e6ad72a496535", + "chksum_sha256": "5a72b2cdd640e76fd8cebc5dc40db9e7f021f219a006e0e202f38753e67f3e66", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ab33deec36ea6b8eea7be1b6eafb943f360759fe3b3e5c78211a9ab6cda58f3", + "chksum_sha256": "1e8015071f7ffcce80ad0ededdef7f16e73a69a32d9f045d358db22e27e0bc37", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c93a2f5e26cee3ca747d7dacfb5233adb9c1448b72c54119fd32dce25988f0b8", + "chksum_sha256": "0b889f292c92b4630f9cd7f3ff38826eb0db4f2937fc2f9e5af1f266245cca74", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4df3d87f73db3368744f45083b9b822543ce447d77a6167922de9c3cc3908909", + "chksum_sha256": "2d367a172a6119e19318a7925d0f93ab844f3285d5e7818894d5754dff1c3879", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08eaf829db084d4878287253871d6dde4d9027f179af071ba0b501eb474791bf", + "chksum_sha256": "36c8fb15c11b0806cf005745d3430a56d953e9f6780a7cef5aafd2a09a0535ad", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bec9055d452548f078aec3418ef1d147865a0b03c739b9a8cb7609142959736c", + "chksum_sha256": "19423e7d29df73b400d5b47fea1fce275bcd2b04d184470aa5659097038915e1", "format": 1 }, { - "name": "tests/integration/targets/eos_static_routes/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7efefbf1285c5fc94d42b155d5e3236241aea41a49727bf31e0d27710209a2e2", + "chksum_sha256": "b2bbbe9bb69931adedbcb614bd349ce9dc7291f38b6dfa81420db786051dac73", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b772bb07168e677fd6bf5c7cefdb28b4343d2c51f4463422e7b6a0cf9959f327", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tasks", + "name": "tests/integration/targets/eos_bgp_address_family/tests/common/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "768a7c9e05c637f812712a5de2588a2fae4c9296e89f082ef30ce5efefe0939a", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_bgp_address_family/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tasks/redirection.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", + "chksum_sha256": "7b61bd7a713c0b9735361ff90fb07b90d1b4fb97b9c822c2c979bd6eb82b892c", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997", + "chksum_sha256": "e40fe291a7e7d70bd846b4acf8f4a1a465948b9a02b037d9b0fd0a4193055baa", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_bgp_address_family/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/meta", + "name": "tests/integration/targets/eos_bgp_address_family/tasks/eapi.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_smoke", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/meta/main.yml", + "name": "tests/integration/targets/eos_smoke/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_smoke/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/defaults", + "name": "tests/integration/targets/eos_smoke/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/eos_smoke/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests", + "name": "tests/integration/targets/eos_smoke/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common", + "name": "tests/integration/targets/eos_smoke/tests/eapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_smoke/tests/eapi/common_utils.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6a728cf70443f8ffc3ff061c9ee8d1eb85866c930760f3b277200956f41fb99", + "chksum_sha256": "a18fa7aed51409b4944aada8a31a413f1058fda4ca0e652f55296166b6c5a253", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_smoke/tests/eapi/common_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a8a850858d11124418c7fbc26742397895220754befde252ad24117705e3deb", + "chksum_sha256": "8c0c76c10792321352005faed0ae9c51f1387f4964f2175e9a8e39af1c444ca1", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2b46d6ceee61ab907fcb57229bf38f361785e90cba1c90ac5ff50d4e9513a3d7", + "name": "tests/integration/targets/eos_smoke/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_smoke/tests/cli/common_utils.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4bcd6ab1c2fc53eb4c774397a6ee078ce4382963c6ffb53e7514a13721c24974", + "chksum_sha256": "16ff2cbec75c329d7ffaeff96467873aae0b48e203e9013b5643fc47af5d47aa", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_smoke/tests/cli/misc_tests.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cce344c093d2137f12b8a9933298953bc3330081dcbae362088a5097b2514813", + "chksum_sha256": "8d12a8d25e86ab4cb05fbb567d3e602da96ccf9c7249a92d4e7b00175242085e", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_smoke/tests/cli/common_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f924be9202c965db71f4880a635ba5acc81f9cb91f0101907f3e96387674e8f7", + "chksum_sha256": "8c0c76c10792321352005faed0ae9c51f1387f4964f2175e9a8e39af1c444ca1", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_smoke/tests/cli/reboot.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a3796a2313899acffb35cddcaa5673d76efd8751d1fed12d820f5973a9476d8d", + "chksum_sha256": "f89bcad9703169bbc45f7cb7a306b81666f9ac935a912a144da191470dcf1102", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_smoke/tests/cli/caching.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "45ec3d12aef7d086d901f4bba8e6084fe7a13cf8b31f321621c598fa2cb88405", + "chksum_sha256": "ea530ff631421e3a7a074f77dcaf5b511a4020d80f609a967362c7708b910c01", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_smoke/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_smoke/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2bc98e817414304b3ad22cf0d6747e9908af6b692824cb5dd751058968e2de3", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/_reset_config.yaml", + "name": "tests/integration/targets/eos_smoke/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b36bf6f528c9b79fc7a9b7f2d3b182ca1f2ddd3339579701d92b36b019ec959d", + "chksum_sha256": "c7d7b1929079920b7a5922066471180e88e05b39a275e6e842f3d8bb6e5269c4", "format": 1 }, { - "name": "tests/integration/targets/eos_lacp_interfaces/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_smoke/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c417f982e3ee716d3de8a1bd93a0671eb29a513a6e4b62b7ec9ab6a06e038511", + "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp", + "name": "tests/integration/targets/eos_l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp/tasks", + "name": "tests/integration/targets/eos_l2_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8d0f3e120b5e0f83314d06ed429b515b98e122ebdd4111b4e5be0bf09098877c", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_bgp/tasks/cli.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp/meta", + "name": "tests/integration/targets/eos_l2_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp/meta/main.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "2d11de6e7c7e491f1f5247e77d3cc3367368e71c12900e057007742b5f69b93e", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp/defaults", + "name": "tests/integration/targets/eos_l2_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp/defaults/main.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp/tests", + "name": "tests/integration/targets/eos_l2_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp/tests/cli", + "name": "tests/integration/targets/eos_l2_interfaces/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp/tests/cli/basic.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9bdebd0673be1e39039dcb426a889e569042dad0c5cb7b2bf01ba68d7091b894", + "chksum_sha256": "edb8b0ac8acd4b5e054bbfa29800537c9b159ab96d7187400f26c80be72c7abf", "format": 1 }, { - "name": "tests/integration/targets/eos_acls", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e27eed12e565edc2ef8199044486e7df6759cf3a8fa2c4999c06d465b416ac11", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c9f82a69c636f9d85ef893fb5d2fba696d0a47bc9fe1e2c3e316acb63b79453d", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tasks/main.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", + "chksum_sha256": "aaf8f107ec4a7699b08aba428c96066164570af0da4c031499210e65a9ac976a", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tasks/cli.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "123f47356786e4facd8bf8169639c0286878d1ad6e37b71c283d8729848ee841", + "chksum_sha256": "9f5bae45f76d827baaed602070abd64acc8a7c7f22410e169b0871344f1023ba", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f3757d49c81f01e6fdc9ed127fe45328fca0d8bb2871cf5277a0af7f27ea533", + "chksum_sha256": "fce0cbcecc5da5700eadd7509b5ec52749d2161ff7b3f99b95a4d2796c158f4c", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/eos_acls/meta/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_acls/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/eos_acls/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_acls/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/eos_acls/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/eos_acls/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c567c0a070d35ae7dc0def99be6a57bdf14d0485dd785e72c4c9e192c98d12ec", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_acls/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_reset_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6688f31ad22c98409e9af72340492edcfb288cef4d3c30037ed424b886cf634e", + "chksum_sha256": "cb38b9a77caba2c84ab6c80ba15134346ae856147e816086b43f2c90a0e8014e", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d9b49e9cd0c20334e2f3ac1aaa7cf75fa51acfe5d2d47b60d35d77260d77b145", + "chksum_sha256": "7fe18f0fa44accb4bdd0464888179e38186b2bc1bb7534786d823700eab75201", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0659d10743e2796f81f48bae653e0cdf722e3999e7c2593453290fd0eafaf63e", + "chksum_sha256": "01c98f37d467b49d62c858aa1eb80e31829d3af8df1d67b17b95612b1e014d2f", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_cleanup.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adf72055e9bffeaa9a7d332e77898a2ff6f1748eb02046d0867c907601c72cc7", + "chksum_sha256": "72c891a2b69fea4a08d88aef80ab42588f0761b3fcee4654ea769a82e2cad772", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ae640e0d6726b443b36e33c066555aab81c0c865d21f92a9218fb449839df17", + "chksum_sha256": "0ed56a5c9ced6b499dda2d9788c2021ea24b0d17f0d0931a7c11b9addc59f3e6", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "161b63801d5e2e1ed876dc6929ab54c7f2f89bef189ab4b7f394679b6561b244", + "chksum_sha256": "ab629c595374a5ff76a3d76f22278948131ccfd3f5de5e08f8bb0fae170883c0", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tests/common/_parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "49fbf1221f7702466cfa35dc681b919b2e7f627e1649743147b80bdf021fd1f0", + "name": "tests/integration/targets/eos_l2_interfaces/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02a799009a3c14748b28e1ca595ec784e16f7589e3d08786991775bb73edc628", + "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tests/common/_parsed_cfg.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be71f5afa12feed2b7689ce870b7eda8b2b722b1968643f26951691612fa7822", + "chksum_sha256": "3d287a5645a94634b96fbeb33a93d7cc866421adb10d5e45810aae4ae003fd52", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_l2_interfaces/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b73e35944c74b107af433bbcc6e7b7c4cf64f928a29dadffa1f8d469c1c6d25", + "chksum_sha256": "90b0fb30b63afdda9bc8d5bee03e2b6cc6f785a7af550690bf002a207fa42d9c", "format": 1 }, { - "name": "tests/integration/targets/eos_acls/tests/common/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "50f9aa1e9a9c7e29fc6efd923caa8cfb358bbd69417b539d2ecd978af5e1519c", + "name": "tests/integration/targets/eos_ospf_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_acls/vars", + "name": "tests/integration/targets/eos_ospf_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_acls/vars/main.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ac57542e8c5b785dac916943f46c3166ab7e8ed158541a5f38c8d83ba8247c2", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_acl_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tasks", + "name": "tests/integration/targets/eos_ospf_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", + "chksum_sha256": "bd015c6e2a8c0de8c44a813c8d30a6554cb1f7dec683760cd30a899ce85481c5", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "name": "tests/integration/targets/eos_ospf_interfaces/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/templates/populate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "chksum_sha256": "e2d645f551982b7ea8613b5d94260428dbcd4cd3207d34a4bb51fb8722b0ffc4", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/meta", + "name": "tests/integration/targets/eos_ospf_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/meta/main.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/defaults", + "name": "tests/integration/targets/eos_ospf_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a79b77c93a1982c2682c177681bfcef5f3fb3421e3ef10be452fc81dc3ce8871", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_acl_interfaces/tests", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/_populate.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b87b082bd1a6efb8a4fcffbc804615955068460aa128235e5bc6833b551be9b2", + "chksum_sha256": "3fd4657ae775a57bdcda3537eaafb956b979f0a1569c80583364e96f16e2f201", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dfc9f3e78036a19826feccd2fad6679dd22d05d44fdf5226540ce1f29256f261", + "chksum_sha256": "c136e2d339db165c433d2b3bd05409e542892bb8a5a94f53737891fb082d16f8", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e43043f8a8c88832634fb29c4839abc2be35598c34df4a953d0eda562a90c78e", + "chksum_sha256": "7c607da23362194cb7a396214a601408e7ea7b78e895567b6a070205916f4677", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e304de25e98dfbbd3e8b884f6478d7b841a022b232febe94380f256a50a51557", + "chksum_sha256": "e9086ad58ff3a415a829921047e1c805e34d6ae95488b9b1c937b20a922ae964", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f2b15009df3b8b2bd9936379027b7f544a9c81a23e5c33fb9847b25a0b54645c", + "chksum_sha256": "b5c505431c56a3bd030ee52a85e240626c905bfe2809aab18a2e761066e0ccbb", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4cfbb7d9c017eea2318fb53edf60ff9b83e6dfeccae2d6bc85f16d05d33a7ff0", + "chksum_sha256": "4f997c36cc9170f11226c5057f8a2a6b9da5717306c07a8dcfae8517d9b4152d", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1668ec34e8d2f67dc611925ddf3b4f00ae826f0a65c72d939a8b1046d64c873d", + "chksum_sha256": "f61d79526410667fe97aa0c1fa0c6a0162e500c6abc373d025165382643b96a4", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1f5be632f4525a5de8591f6aa83113ccf37fd9cb62d0f5b6ef4c62dcfb1c6fa7", + "chksum_sha256": "e3389b2ec80e9dfa1b851de623ba7bf990b39240feebc9e3cb18dac87b85250e", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dad0f95e9549bce843069bc4584803994e2549a64e70c6d844e5d37e41190630", + "chksum_sha256": "698af51d7f6a6ced71a9415495684f30be35b26cb298b53e1de7792a3d857c18", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0d3dca47353e80e36f629fd572a1b64e2c49dd75d82bf4ab28fc53634d33803b", + "chksum_sha256": "4222a5770d1b912a7ac71103749ff82d93dd903e769e87690471a59be0c7e988", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/gathered_empty_config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86b04f3482cda3dd386cac6bd225865c4f3637845bc2b38165814e6c89bbaa2a", + "chksum_sha256": "f6ff5c23745f6f182db2a1173cd25b5a98a29465a8bc37cae61678d8c577af23", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "876b6b7da3c239e569da81974334a14293ce92683bae9643239bcd4bb083c94b", + "chksum_sha256": "cb5f91b025aa37891756c22bfae165a560c4c00bcee7f0d93005ddc79944886e", "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/vars", + "name": "tests/integration/targets/eos_ospf_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_acl_interfaces/vars/main.yaml", + "name": "tests/integration/targets/eos_ospf_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8631d3b93d4bf6c66a2d3f5e5c11f188f364dc3a36a4bfa5614a51a045a1d49f", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/prepare_eos_tests", + "name": "tests/integration/targets/eos_ospf_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_ospf_interfaces/tasks/eapi.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_eos_tests/tasks", + "name": "tests/integration/targets/eos_lacp/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_eos_tests/tasks/main.yml", + "name": "tests/integration/targets/eos_lacp/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c53c149ac2c5c508711c2414d406b033110276eb4622949358a6e1efcf3cd505", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/prepare_eos_tests/meta", + "name": "tests/integration/targets/eos_lacp/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_eos_tests/meta/main.yaml", + "name": "tests/integration/targets/eos_lacp/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname", + "name": "tests/integration/targets/eos_lacp/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tasks", + "name": "tests/integration/targets/eos_lacp/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tasks/main.yaml", + "name": "tests/integration/targets/eos_lacp/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", + "chksum_sha256": "14973e3f346a4f8643baff860e9a35d46a16d7ed42212bc804ffa2b78f70c023", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tasks/cli.yaml", + "name": "tests/integration/targets/eos_lacp/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "chksum_sha256": "bfdee3db7e752c613eb903f5b515c30d6ae3b5da4b641f9c575416aa32d77649", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_lacp/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "chksum_sha256": "298c194b94ae3f3750c516e2245251ed37611565c429ccf4fd7427c22df368cd", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/eos_hostname/meta/main.yaml", + "name": "tests/integration/targets/eos_lacp/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "7cc12a2c9c2b6154d7474af3cc090677b5067fa213c13ba6fb8b4203b9aa0149", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_lacp/tests/common/_parsed.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "800ead8f10e3d4bc50ddf469a53b358695197f47476eb4b3789aa011e16f1dea", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/defaults/main.yaml", + "name": "tests/integration/targets/eos_lacp/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "256d175eb92a50a737d23b476ff3fe20d9999764b3cdac3fe3f625bc357bc809", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_lacp/tests/common/_reset_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d0dcc0055c8b24c34f55531d55a1069274e7450a6592a5223e9976887437cd33", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_lacp/tests/common/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1567cbeeee2362aa296686ff39b8a1fb0e95ee41adfb130e8612826981e7113d", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/eos_lacp/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bbd01a1b82535d87fb2c5192c045a1452c02385b1d9325bdcb8013b03f3840d5", + "chksum_sha256": "dade4172a3223fc93e1eca92c3303456eb1f6c154c4cbcedad9a1e267821a311", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e8f9622547f2e0fa5c603e7d1e76348d76da8bac90ebfa21179749ee691cd648", + "name": "tests/integration/targets/eos_lacp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_lacp/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aed726bbfbc34673f8da380cceaac909741a8a4533d1abf057afb6d9f5b0b214", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_lacp/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "969820bbaeb224608a4aab530cbeeb88627ac039bcacf2a1942ec42705e5514d", + "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_lacp/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", + "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "079da330b620d09b22c55b8c63db98278c3347639db086a2c86f0039f2d13f35", + "name": "tests/integration/targets/eos_banner", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "36160ee5a95d8b19e314fbe8b473f56c8dc87e209f3c9394803a1b7a900f9ed4", + "name": "tests/integration/targets/eos_banner/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_banner/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "784e0e5db4b302883890287cd2ba18d7005403f1c05be8c8c23f7d8b1f807cea", + "name": "tests/integration/targets/eos_banner/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_banner/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9093ee823c0145791216cf2d53f00df72c6ba361f525b2337b6645bdb7d3e8c5", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/tests/common/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d89644559714c65b378af2d9a1e23c0432a2f1abd4fb09f3538f844430dc06d3", + "name": "tests/integration/targets/eos_banner/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/vars", + "name": "tests/integration/targets/eos_banner/tests/eapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/vars/main.yaml", + "name": "tests/integration/targets/eos_banner/tests/eapi/basic-motd.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9762cc4a787aec50485af807234f50902fde96f57e6ad904e62a9588c1f61373", + "chksum_sha256": "c8e94533c27b7c01e870af443aae37c16cb5180e86658a8de5a2a6b5599efb97", "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/templates", + "name": "tests/integration/targets/eos_banner/tests/eapi/basic-login.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d7cd4bec5ba015f96ac020675f8b4a256dcc1e2bdd9f4b59775237acaa8d809c", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_banner/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_hostname/templates/populate.cfg", + "name": "tests/integration/targets/eos_banner/tests/cli/basic-motd.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9", + "chksum_sha256": "4b2551d785983506768deb63cd2f8ba8ae35c5e6ce5eae18e340fd75291e390a", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_banner/tests/cli/basic-login.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5a6ff4ad57df259c1322d52be030e6bda317af6738e2e3ebf043ca14b5fc9d64", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tasks", + "name": "tests/integration/targets/eos_banner/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tasks/main.yaml", + "name": "tests/integration/targets/eos_banner/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tasks/cli.yaml", + "name": "tests/integration/targets/eos_banner/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7d7b1929079920b7a5922066471180e88e05b39a275e6e842f3d8bb6e5269c4", + "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_banner/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/meta", + "name": "tests/integration/targets/eos_command", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/meta/main.yml", + "name": "tests/integration/targets/eos_command/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_command/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/defaults", + "name": "tests/integration/targets/eos_command/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/defaults/main.yaml", + "name": "tests/integration/targets/eos_command/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tests", + "name": "tests/integration/targets/eos_command/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tests/cli", + "name": "tests/integration/targets/eos_command/tests/eapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tests/cli/common_utils.yaml", + "name": "tests/integration/targets/eos_command/tests/eapi/notequal.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "16ff2cbec75c329d7ffaeff96467873aae0b48e203e9013b5643fc47af5d47aa", + "chksum_sha256": "fa8076a05fc1d4cfc801e077a2204d20cb1c7eca29ee7efca969fb68bb4969a9", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tests/cli/misc_tests.yaml", + "name": "tests/integration/targets/eos_command/tests/eapi/equal.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d12a8d25e86ab4cb05fbb567d3e602da96ccf9c7249a92d4e7b00175242085e", + "chksum_sha256": "bf0a37bd334e4ac7039fa458189a52163c074d38da24e01b4e31b1a5df564bf5", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tests/cli/common_config.yaml", + "name": "tests/integration/targets/eos_command/tests/eapi/greaterthanorequal.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c0c76c10792321352005faed0ae9c51f1387f4964f2175e9a8e39af1c444ca1", + "chksum_sha256": "58247b34643e80aa852c3069ab18673c02c98a30845b2edc808262ccd0e26a37", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tests/cli/caching.yaml", + "name": "tests/integration/targets/eos_command/tests/eapi/lessthanorequal.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea530ff631421e3a7a074f77dcaf5b511a4020d80f609a967362c7708b910c01", + "chksum_sha256": "5762ba9c8c56c10a9473447afc5e4be6f14c8a13f64840fe001e0b1fb1a0cf9a", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tests/cli/reboot.yaml", + "name": "tests/integration/targets/eos_command/tests/eapi/version.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f89bcad9703169bbc45f7cb7a306b81666f9ac935a912a144da191470dcf1102", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_smoke/tests/eapi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "3a28c24b52f933e2a767f91719be61f48f473d42854b0f2bb17583d1ec9b6d6a", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tests/eapi/common_utils.yaml", + "name": "tests/integration/targets/eos_command/tests/eapi/invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a18fa7aed51409b4944aada8a31a413f1058fda4ca0e652f55296166b6c5a253", + "chksum_sha256": "e0ff41bbdbf781316e8f8b28ae72d5c6f2dd45d9040e340ed8e089632c62dfb5", "format": 1 }, { - "name": "tests/integration/targets/eos_smoke/tests/eapi/common_config.yaml", + "name": "tests/integration/targets/eos_command/tests/eapi/timeout.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c0c76c10792321352005faed0ae9c51f1387f4964f2175e9a8e39af1c444ca1", + "chksum_sha256": "77c15954650a439dd4fad91b81be94d802c38168a3ab63478d957492874362e5", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_command/tests/eapi/lessthan.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9cf1473ef81732265c8fab9d4aac0e2412a160b4cd1b8bccf474a6b4b872093a", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_command/tests/eapi/bad_operator.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "92b19c1a1597bad3fe8920c6d15810f2df039981b9488dc802e31b599255ca7c", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/eos_command/tests/eapi/greaterthan.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "c4156873ff938c4126af0092303770286cd3c1829ec579689a0413d85b57a7d6", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/eos_command/tests/eapi/output.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997", + "chksum_sha256": "693de41c9288eff0fecd465d42917945b0304d9ed5e0ac8f0370e25daf21b8c3", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_command/tests/eapi/contains.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c", + "chksum_sha256": "35fa217e836688b2d7399c66f9408109429434afe4e85a78fa57ba9d440e7083", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/meta", + "name": "tests/integration/targets/eos_command/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/meta/main.yaml", + "name": "tests/integration/targets/eos_command/tests/cli/notequal.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_lag_interfaces/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "3bb2dfd7a6a694105573c6eadaa72f817458acc9dcb0dd0a1a854d319d09cef5", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/eos_command/tests/cli/equal.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "762cb51b120a123a9af5a8256b45ff6103bf26624e6425e4a8b42c1c34cb70df", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_command/tests/cli/greaterthanorequal.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0410c3b348dcd910c449696a7ca05847e90d4e9d0504287ef1ede60d9f526308", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_command/tests/cli/lessthanorequal.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "02dac1c05e69cfe6e0db11694305e27d5cf5c18b916c83725145a01c45d151ce", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/eos_command/tests/cli/version.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b58309f8938bba932257668c1dd8e88057583702dd483304b451dc2bcb3d2389", + "chksum_sha256": "7e1ca984e5d0cff37df1d4029e0a9044daa287e5b6355387920054695dfd61cc", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/eos_command/tests/cli/invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b05efe5f17248475b35be8de1008f92763eabc0a46f7e6e6ef721d0ed1c0d005", + "chksum_sha256": "b5fad1e7df8589dfd24573eb51f93dfb513d5fae99d434fd92edeb5ee1e96945", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/eos_command/tests/cli/timeout.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb70b82e4f2780065245088e2a0868d4bd3ac4d78772c3533772904502384b7f", + "chksum_sha256": "0710688d24996846459569d49568102b47517ceb62da0be0168f8f4cc10744b2", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/eos_command/tests/cli/lessthan.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac0aaba7718ec98d92a4b78ded3ee5dd5c7b0f7bbf4eb62a00200769ebd84362", + "chksum_sha256": "6829309ca8cf687d623c0c9f497e1f145aea6dc7df99c832174e549c18c83620", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/eos_command/tests/cli/cli_command.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d4e9b522c4e33d097cea87a3bfbdb7d7c0420be389b4b2ae4b0ec2c1dc9c1589", + "chksum_sha256": "da86906ca5b2fd63ecc66e426e89f951058a3c90f0e9fd36accf6001837fda25", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/eos_command/tests/cli/bad_operator.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8dd392df3bb210172a0fb991fafc904367293cc00e7dbdd2289ab477d58011b", + "chksum_sha256": "7519d9b6d82234763393ccb21be1c3b1aee3457627c963bddb6db8ddb11df7ea", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/eos_command/tests/cli/greaterthan.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec7f5172df48561a7661707c31befc2372876e79536cf8452cce42131e26efa3", + "chksum_sha256": "84cf8932e41d9e08041c38f84dfb9b1d62680abc42a4b645245ef5fd365b362a", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/eos_command/tests/cli/output.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c49e1972ec01b3646c6d93d8dce2d3672048797e780cd160b4b721a08b348d89", + "chksum_sha256": "c4f066d2e8544080a5cf534d49cac23b6af9380724df99f1ac2ea601fdae230d", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/_reset_config.yaml", + "name": "tests/integration/targets/eos_command/tests/cli/contains.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e67fbf115a90966048b5dd75e61b370f6001fdebaf1da0c8cd8670e7593ef086", + "chksum_sha256": "e4e02af125647f0d0812ea8f3d43e8ca78a8ba11e4a572c39a8a061f836aada7", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/eos_command/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_command/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a09e158385c2158469622bdd80fbaacde054cc03c780e2f895973c59413eb38", + "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_command/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", "format": 1 }, { - "name": "tests/integration/targets/eos_lag_interfaces/vars/main.yaml", + "name": "tests/integration/targets/eos_command/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "594c6341406e70e47b7f9a9af53f481c6876cea084a03beca4068406e59f149c", + "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", "format": 1 }, { - "name": "tests/integration/targets/eos_logging", + "name": "tests/integration/targets/eos_acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging/tasks", + "name": "tests/integration/targets/eos_acls/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging/tasks/main.yaml", + "name": "tests/integration/targets/eos_acls/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_logging/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", + "name": "tests/integration/targets/eos_acls/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_acls/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", + "chksum_sha256": "4ac57542e8c5b785dac916943f46c3166ab7e8ed158541a5f38c8d83ba8247c2", "format": 1 }, { - "name": "tests/integration/targets/eos_logging/meta", + "name": "tests/integration/targets/eos_acls/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging/meta/main.yaml", + "name": "tests/integration/targets/eos_acls/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_logging/defaults", + "name": "tests/integration/targets/eos_acls/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_acls/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_logging/defaults/main.yaml", + "name": "tests/integration/targets/eos_acls/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "adf72055e9bffeaa9a7d332e77898a2ff6f1748eb02046d0867c907601c72cc7", "format": 1 }, { - "name": "tests/integration/targets/eos_logging/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_acls/tests/common/parsed.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8b73e35944c74b107af433bbcc6e7b7c4cf64f928a29dadffa1f8d469c1c6d25", "format": 1 }, { - "name": "tests/integration/targets/eos_logging/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_acls/tests/common/_parsed_cfg.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be71f5afa12feed2b7689ce870b7eda8b2b722b1968643f26951691612fa7822", "format": 1 }, { - "name": "tests/integration/targets/eos_logging/tests/cli/basic.yaml", + "name": "tests/integration/targets/eos_acls/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a007ba121e4852763d37a3f6c644aa9eb28771279d1190aadcf77eb97675c5a4", + "chksum_sha256": "50f9aa1e9a9c7e29fc6efd923caa8cfb358bbd69417b539d2ecd978af5e1519c", "format": 1 }, { - "name": "tests/integration/targets/eos_logging/tests/eapi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_acls/tests/common/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d9b49e9cd0c20334e2f3ac1aaa7cf75fa51acfe5d2d47b60d35d77260d77b145", "format": 1 }, { - "name": "tests/integration/targets/eos_logging/tests/eapi/basic.yaml", + "name": "tests/integration/targets/eos_acls/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "90cbadb226481ddfba8e6981076e1d859499316b2c4018afea81607d469cd0ee", + "chksum_sha256": "49fbf1221f7702466cfa35dc681b919b2e7f627e1649743147b80bdf021fd1f0", "format": 1 }, { - "name": "tests/integration/targets/eos_command", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_acls/tests/common/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6688f31ad22c98409e9af72340492edcfb288cef4d3c30037ed424b886cf634e", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_acls/tests/common/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c567c0a070d35ae7dc0def99be6a57bdf14d0485dd785e72c4c9e192c98d12ec", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tasks/main.yaml", + "name": "tests/integration/targets/eos_acls/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", + "chksum_sha256": "161b63801d5e2e1ed876dc6929ab54c7f2f89bef189ab4b7f394679b6561b244", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tasks/cli.yaml", + "name": "tests/integration/targets/eos_acls/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", + "chksum_sha256": "8ae640e0d6726b443b36e33c066555aab81c0c865d21f92a9218fb449839df17", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_acls/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", + "chksum_sha256": "02a799009a3c14748b28e1ca595ec784e16f7589e3d08786991775bb73edc628", "format": 1 }, { - "name": "tests/integration/targets/eos_command/meta", + "name": "tests/integration/targets/eos_acls/tests/common/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0659d10743e2796f81f48bae653e0cdf722e3999e7c2593453290fd0eafaf63e", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_acls/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_command/meta/main.yml", + "name": "tests/integration/targets/eos_acls/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", "format": 1 }, { - "name": "tests/integration/targets/eos_command/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_acls/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "123f47356786e4facd8bf8169639c0286878d1ad6e37b71c283d8729848ee841", "format": 1 }, { - "name": "tests/integration/targets/eos_command/defaults/main.yaml", + "name": "tests/integration/targets/eos_acls/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "9f3757d49c81f01e6fdc9ed127fe45328fca0d8bb2871cf5277a0af7f27ea533", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests", + "name": "tests/integration/targets/eos_lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli", + "name": "tests/integration/targets/eos_lldp_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/lessthan.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6829309ca8cf687d623c0c9f497e1f145aea6dc7df99c832174e549c18c83620", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/invalid.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_lldp_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5fad1e7df8589dfd24573eb51f93dfb513d5fae99d434fd92edeb5ee1e96945", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/greaterthanorequal.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0410c3b348dcd910c449696a7ca05847e90d4e9d0504287ef1ede60d9f526308", + "chksum_sha256": "23e7bceb1fd85748923512e2facfaf4cb2727570be530b30897febd6c79f2a1a", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/contains.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e4e02af125647f0d0812ea8f3d43e8ca78a8ba11e4a572c39a8a061f836aada7", + "chksum_sha256": "b4f0aac4ed1a3d18ee04a35d42b989ee6a3e2a8ad07ee8b98f56f275b027e826", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/equal.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "762cb51b120a123a9af5a8256b45ff6103bf26624e6425e4a8b42c1c34cb70df", + "chksum_sha256": "7576f665b34ce43ec4245fd5765611aa031ffbf73096d9f8907b7e5a9f537c52", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/bad_operator.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7519d9b6d82234763393ccb21be1c3b1aee3457627c963bddb6db8ddb11df7ea", + "chksum_sha256": "0e5f55128df4f7326db45dfc8c478e59a39d68053caf563625473079580d6838", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/lessthanorequal.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02dac1c05e69cfe6e0db11694305e27d5cf5c18b916c83725145a01c45d151ce", + "chksum_sha256": "73c669fdf692d5f7f3b578f6a4a46f8b0fff6d62da0f62ad903648405e9934dc", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/output.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c4f066d2e8544080a5cf534d49cac23b6af9380724df99f1ac2ea601fdae230d", + "chksum_sha256": "e10f178b46e0a654204ab75a7487641c6345c51592481e64d7c7d5d15317ac67", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/greaterthan.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/_reset_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84cf8932e41d9e08041c38f84dfb9b1d62680abc42a4b645245ef5fd365b362a", + "chksum_sha256": "c711ecfe5d02de94fed82b58d3402e733c1e575fea60c3f9744f3379b01d1b33", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/timeout.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0710688d24996846459569d49568102b47517ceb62da0be0168f8f4cc10744b2", + "chksum_sha256": "2a49e3976aa794644e2cb1ed765367a39ad81b39a42c16bca3bf32c8043dc9b1", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/notequal.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3bb2dfd7a6a694105573c6eadaa72f817458acc9dcb0dd0a1a854d319d09cef5", + "chksum_sha256": "8fbe99406870ccff9922c49a2ae193a563edcfb51cd7a4e2797181d1a3edf3ec", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/version.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7e1ca984e5d0cff37df1d4029e0a9044daa287e5b6355387920054695dfd61cc", + "chksum_sha256": "670d9e454375f4479720d7a70e5099afd23319aa52bf2d01ba9b916ffd385d8e", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/cli/cli_command.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da86906ca5b2fd63ecc66e426e89f951058a3c90f0e9fd36accf6001837fda25", + "chksum_sha256": "61c502d64492d3127c5503a4c6180c49d6bfba16ce0b4db6d37f5547b8bed58c", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/eapi", + "name": "tests/integration/targets/eos_lldp_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/eapi/lessthan.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9cf1473ef81732265c8fab9d4aac0e2412a160b4cd1b8bccf474a6b4b872093a", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/eapi/invalid.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0ff41bbdbf781316e8f8b28ae72d5c6f2dd45d9040e340ed8e089632c62dfb5", + "chksum_sha256": "f53f0ae420b815a40999516a0df43dbf6be6478362d4fd00f938647cd31ea997", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/eapi/greaterthanorequal.yaml", + "name": "tests/integration/targets/eos_lldp_interfaces/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "58247b34643e80aa852c3069ab18673c02c98a30845b2edc808262ccd0e26a37", + "chksum_sha256": "6d01e053990d738bcb911756ab9be2a7659b592d0841d98a1efbe9f4abb2528c", "format": 1 }, { - "name": "tests/integration/targets/eos_command/tests/eapi/contains.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "35fa217e836688b2d7399c66f9408109429434afe4e85a78fa57ba9d440e7083", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_command/tests/eapi/equal.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bf0a37bd334e4ac7039fa458189a52163c074d38da24e01b4e31b1a5df564bf5", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_command/tests/eapi/bad_operator.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "92b19c1a1597bad3fe8920c6d15810f2df039981b9488dc802e31b599255ca7c", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_command/tests/eapi/lessthanorequal.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5762ba9c8c56c10a9473447afc5e4be6f14c8a13f64840fe001e0b1fb1a0cf9a", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_command/tests/eapi/output.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "693de41c9288eff0fecd465d42917945b0304d9ed5e0ac8f0370e25daf21b8c3", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_command/tests/eapi/greaterthan.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c4156873ff938c4126af0092303770286cd3c1829ec579689a0413d85b57a7d6", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_command/tests/eapi/timeout.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "77c15954650a439dd4fad91b81be94d802c38168a3ab63478d957492874362e5", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_command/tests/eapi/notequal.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fa8076a05fc1d4cfc801e077a2204d20cb1c7eca29ee7efca969fb68bb4969a9", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_command/tests/eapi/version.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3a28c24b52f933e2a767f91719be61f48f473d42854b0f2bb17583d1ec9b6d6a", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_interfaces", + "name": "tests/integration/targets/eos_vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tasks", + "name": "tests/integration/targets/eos_vlans/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/eos_vlans/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "name": "tests/integration/targets/eos_vlans/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_vlans/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "chksum_sha256": "361a49c0e4e03684a6718513ec6a800c844d872b6dba61efdb68249d61b34124", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/meta", + "name": "tests/integration/targets/eos_vlans/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/meta/main.yml", + "name": "tests/integration/targets/eos_vlans/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/defaults", + "name": "tests/integration/targets/eos_vlans/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_interfaces/tests", + "name": "tests/integration/targets/eos_vlans/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_vlans/tests/common/parsed.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "97d8e342f7bee82d8027e115e1f5165d4a68e898b83813a2f710833e5fee4a33", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_vlans/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a62f1fe641f551ad15f8c85593b987486f1099f5a9172a1b27e73b4520e8ee29", + "chksum_sha256": "fb1e1d667d069e7d04de886871344ca9fc0a0bded7b3c2a7437a4d95b95dd05d", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_vlans/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f0746803db7cb46077bb261ea73492246c9973b05d4369c4830edd6181bf453", + "chksum_sha256": "6512281e2fd290fd40f8f18191e72c127c2e3df9537c05559ecb25aed09ee4bb", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_vlans/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bc26969057893c4516d300b795ab9a9ca599596ea075a83972b2af4ed2164596", + "chksum_sha256": "cdf7d6ea7f6f5c2ad9065b1b13e04198c38882991e60197c5c569fa6dce0d98d", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_vlans/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca4a201cb5ed8e1649d04eba504fc0ba0584b9404df7d3fdc3df1d9cb708c992", + "chksum_sha256": "24f8e0b4cb5d9b1444c92f7260088952ba7aa9a71949521dd331f5a434686783", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_vlans/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a0737935c23ff3552dcf975ee16cfa42adfbcea87cf8bb0b8926b2ccf09c8d0", + "chksum_sha256": "d4df0e51ef94b5a4ef06900a79bd20e79f84a964710a14de559368071f405669", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_vlans/tests/common/_reset_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d7fe951ce7d79d1fee4fa2149e1f341d06c7910a220bda9e86118ea26349fef", + "chksum_sha256": "31618630d4e82bffcf3ca7a4b12b835bb1b3bdf67d518eac68f72bb26b0d6924", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_vlans/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "36a0793cac2c404b733a21498bf803d7fc38942c11ea65ea26521ca4d64e04d8", + "chksum_sha256": "23f1318af4e38f802c10ac90ec7cce6573c0eac7665773f877059bcb90426bee", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_vlans/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca023a36a14d5f2de1b213f4e7626424523c01e952e08789e5cac48107ae0b4f", + "chksum_sha256": "fab8447a90775e038817655f20e15623512f87e042c86c7f93c6f5fe902aa37e", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_vlans/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c3a7c9a205c5ff75308f7bb5b9ec60565eb624f45526d5712b3e1ed026e087a", + "chksum_sha256": "8a2ed31515941cfc98d86db63eed394b71c6e749b8ef7a7433f5d3ff518f585a", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common/_reset_config.yaml", + "name": "tests/integration/targets/eos_vlans/tests/common/idempotent.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7ae46767fb3bead2365a6cc3aeb9acfb44d8ad8fdee5313f144fe1d248110eaf", + "chksum_sha256": "c41bbf0a4522e6f01b3e38067c543afb71b21fcbfa0a8ededd26d0683e50a81d", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_vlans/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fed3bcba071a6d00304fba18b40062463af1e4f9098048ca4385c8ee7d3703ee", + "chksum_sha256": "d33a3d3ddf38335484012ddc3a995f050d899f1f5686fae5e8ae88f8686f9d5b", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/vars", + "name": "tests/integration/targets/eos_vlans/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/vars/main.yaml", + "name": "tests/integration/targets/eos_vlans/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21f21b62a39efa62ebd86dc0b152614f89828c29b70b513a5eab734ba59bb230", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_vlans/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_interfaces/templates/reset.cfg", + "name": "tests/integration/targets/eos_vlans/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a096e71ea1c5a1c492cc2e33283e427338efdf9d837a590b582c2702ccee07e", + "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_system", + "name": "tests/integration/targets/eos_ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_system/tasks", + "name": "tests/integration/targets/eos_ospfv2/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_system/tasks/main.yaml", + "name": "tests/integration/targets/eos_ospfv2/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", + "name": "tests/integration/targets/eos_ospfv2/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_system/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_ospfv2/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", + "chksum_sha256": "c7cc18f6491766c65c2c46d595e731de7a188f6c8a4d85a511193825761fc5c1", "format": 1 }, { - "name": "tests/integration/targets/eos_system/meta", + "name": "tests/integration/targets/eos_ospfv2/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_system/meta/main.yml", + "name": "tests/integration/targets/eos_ospfv2/templates/populate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "a50326c21eba1d983db933b7a18c112f2aa7c5f16d574dc908095d9258b1cdb3", "format": 1 }, { - "name": "tests/integration/targets/eos_system/defaults", + "name": "tests/integration/targets/eos_ospfv2/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_system/defaults/main.yaml", + "name": "tests/integration/targets/eos_ospfv2/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests", + "name": "tests/integration/targets/eos_ospfv2/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/cli", + "name": "tests/integration/targets/eos_ospfv2/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/cli/set_lookup_source.yaml", + "name": "tests/integration/targets/eos_ospfv2/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b571561204978b797cde9c09803bd0f35e3a4b1d0f032d549b0d8a479bb7742", + "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/cli/set_domain_name.yaml", + "name": "tests/integration/targets/eos_ospfv2/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96a436ed7ba93da80b30b7fde2babbd14d77e20c888843f12fbd37f368774c05", + "chksum_sha256": "e8a3b87032a207d23558a38cd9b6dc25ec6af9ed0e9bc6b41725619fb0f180d0", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/cli/set_name_servers.yaml", + "name": "tests/integration/targets/eos_ospfv2/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a6511f53c7475d55b01bd0fd150ecc8432e6a237a0634b9f7d0dab26473d88b", + "chksum_sha256": "63faa553716754def756ba24e2a6f899177afdad432eb183b788390d219e1901", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/cli/set_domain_list.yaml", + "name": "tests/integration/targets/eos_ospfv2/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "382aace82bf0f7d0a09ba8f2a35a825bf9085cdca7d62d507096e65e361b6922", + "chksum_sha256": "2a7cd3925d54d03101a02b74c8b75fbf36fc335d3e53202ec6645f4b133f9cff", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/cli/set_hostname.yaml", + "name": "tests/integration/targets/eos_ospfv2/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ddfe22c80b9e909d2cafe93380715fc7d695425a4bf23c0c549bbb1414fc8dc", + "chksum_sha256": "efe02afcb1c79bf68872562eb02977725e731dfbe7536b270e0273e2766a6521", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/eapi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_ospfv2/tests/common/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ebe46cf49f8af67c8cfe104d7c6e943b0280e000755907f8e718a035c9a622db", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/eapi/set_lookup_source.yaml", + "name": "tests/integration/targets/eos_ospfv2/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5ec0cefc6ecaf3e422116a57b7a77dac7c7e8de65543b445baaa5b08bb0c31a1", + "chksum_sha256": "0c38f23b440f4e2e1c0024d0c3e828cabea8b77cb08245223e9d1bd041824f55", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/eapi/set_domain_name.yaml", + "name": "tests/integration/targets/eos_ospfv2/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8cfd63ce023b45928d446783ffcd516e4ab736187d36102514859dd9aabcec05", + "chksum_sha256": "d3e4c4999c892bdb9fca72e568774b2c986d7bdfa8fa419c651767c6d4482d50", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/eapi/set_name_servers.yaml", + "name": "tests/integration/targets/eos_ospfv2/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3f151be120cd9e6e74b1778bf682f08879753fc2198c807e4ecebe4486d21c28", + "chksum_sha256": "e9e40c2f4be5c39a0bf44fc386944705e5fe6af989b7b2eab6ca282f7fb183a5", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/eapi/set_domain_list.yaml", + "name": "tests/integration/targets/eos_ospfv2/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c864953ce83d0099b4f025894c10d502d1ecff22776b89688f784bf172b4f936", + "chksum_sha256": "b7d761b36741b02edb289d71aaeac703a09dd50044f06b7a22efb65c1debf4e9", "format": 1 }, { - "name": "tests/integration/targets/eos_system/tests/eapi/set_hostname.yaml", + "name": "tests/integration/targets/eos_ospfv2/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6bce01fac4d41bba5dc1495d183f86d153fbd010a3b1ac760bd07c32bcd3c5f2", + "chksum_sha256": "e88142e55ffbbe41f70ee83358da99cd518becb3ff0901f786bb4d56cc098d30", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global", + "name": "tests/integration/targets/eos_ospfv2/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/eos_ntp_global/tasks/main.yaml", + "name": "tests/integration/targets/eos_ospfv2/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tasks/cli.yaml", + "name": "tests/integration/targets/eos_ospfv2/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_ospfv2/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/meta", + "name": "tests/integration/targets/prepare_eos_tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/meta/main.yaml", + "name": "tests/integration/targets/prepare_eos_tests/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/prepare_eos_tests/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/defaults", + "name": "tests/integration/targets/prepare_eos_tests/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/defaults/main.yaml", + "name": "tests/integration/targets/prepare_eos_tests/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "c53c149ac2c5c508711c2414d406b033110276eb4622949358a6e1efcf3cd505", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests", + "name": "tests/integration/targets/eos_ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common", + "name": "tests/integration/targets/eos_ospfv3/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/eos_ospfv3/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "930ade9d4163376aae340574caca0dbcb60880eaabc6836d7357898b325a670c", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "80a3c218ee8aaefd8e3fccc016b73adede17f646b5cb7aeb92930b2ebf240e08", + "name": "tests/integration/targets/eos_ospfv3/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_ospfv3/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db285e5dba7f6690073a06d6fa2c71df3f551c1df280f25fc99a690c96b74053", + "chksum_sha256": "9917e16f0a7a0b7484fe0780a79f0b22180b634ad091fee3f94946946d87e030", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_ospfv3/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_ospfv3/templates/populate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "65f05f9b573112dd4035eadd0ef4c037794e2c2d8575a9e57bce3363f9251e9d", + "chksum_sha256": "96b764ff7795f328d12684eb2dd1aa60ea1e4d6d5d3e6ed638273aa7deb25686", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_ospfv3/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_ospfv3/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/update.yaml", + "name": "tests/integration/targets/eos_ospfv3/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_ospfv3/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_ospfv3/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8d288c944ccb44045ad3ae954b9f8c24cd785b81a8d895a49601b8bdb3da459", + "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_ospfv3/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ad9aa73641fa04cef01184edad25e66075435e1190f1fd8dd6b35bf9a3da968d", + "chksum_sha256": "c5780138500b761a2832d155ea8a30d7e78fa10a02ab581125af875994bb45c8", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_ospfv3/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42c31c2540456a34184d4bab9fc456c8ac86f151e3fe42609f6acfac96638eeb", + "chksum_sha256": "db343d29422b68984563c86904ac0ad79845853240e757cc26248b267f8e6f11", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_ospfv3/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db6ca3b0768262fced3ee97dd2e9b9b9f6085d81047770a3883c7b65973d51dc", + "chksum_sha256": "ef28a5797b256528edd1bff83509babe07944218468f22f9bdeeef905b52a4b2", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_ospfv3/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d755dec987689bb90c08d6864899ad17b02cc78e78ec8126d1ff75897f7aea77", + "chksum_sha256": "dc8f776fa74a50716d8a0194c5a56a51305991e4295186c2f011afe0cd89a87a", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_ospfv3/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ad00ff561ee93d06eabfc81bfdd27c78dd622a1f9776da62893eb6a219fa338", + "chksum_sha256": "96b764ff7795f328d12684eb2dd1aa60ea1e4d6d5d3e6ed638273aa7deb25686", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_ospfv3/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "425b9069cbfe0e6daec1d28d3023f886464df76571975acfa14d43285eab3dd5", + "chksum_sha256": "18a10808206e727ecffe9b9714974da7d6c95edacd2758b0dd75d207fd6539d2", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_ospfv3/tests/common/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "772202a71a3c35454372ee3e7d0a8bc98615b619f4cc37ebf1bc20ac7d5d55bf", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/vars/main.yaml", + "name": "tests/integration/targets/eos_ospfv3/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b44421f37fc760a771a3a602eff1724eddc44e6dc49e6275afe538587c656a3c", + "chksum_sha256": "704e3f910ea6a5ef1cab48ec4bbea46955189e811124fa2c1a8dce9a0efb6a17", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_ospfv3/tests/common/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "848be2a6e6d9c51844e1fc50931b124190b58f4e6250741c5adc4fd90b5a397e", "format": 1 }, { - "name": "tests/integration/targets/eos_ntp_global/templates/populate.cfg", + "name": "tests/integration/targets/eos_ospfv3/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db6ca3b0768262fced3ee97dd2e9b9b9f6085d81047770a3883c7b65973d51dc", + "chksum_sha256": "c53dc625cf760dec12686ef99081361defb9dbbfaf9f6ce2d6d00cd6b0eda97a", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_ospfv3/tests/common/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8d5a2e7460ef5bb7f6647ee5902bb0e4a9322beec5011a3c84d47804f5ffed7e", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tasks", + "name": "tests/integration/targets/eos_ospfv3/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tasks/main.yaml", + "name": "tests/integration/targets/eos_ospfv3/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tasks/cli.yaml", + "name": "tests/integration/targets/eos_ospfv3/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_ospfv3/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/meta", + "name": "tests/integration/targets/eos_user", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/meta/main.yaml", + "name": "tests/integration/targets/eos_user/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_user/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/defaults", + "name": "tests/integration/targets/eos_user/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/defaults/main.yaml", + "name": "tests/integration/targets/eos_user/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tests", + "name": "tests/integration/targets/eos_user/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tests/common", + "name": "tests/integration/targets/eos_user/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0c38f23b440f4e2e1c0024d0c3e828cabea8b77cb08245223e9d1bd041824f55", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_ospfv2/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ebe46cf49f8af67c8cfe104d7c6e943b0280e000755907f8e718a035c9a622db", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_ospfv2/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_user/tests/cli/auth.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "63faa553716754def756ba24e2a6f899177afdad432eb183b788390d219e1901", + "chksum_sha256": "1a12965b11fc3ea92d23a9f7fd34b621c425c52c63a0f97c89baf0cb251152ac", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_user/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a7cd3925d54d03101a02b74c8b75fbf36fc335d3e53202ec6645f4b133f9cff", + "chksum_sha256": "432c95aa920b1774308ea58ea6159647675bb2f7f1cffde182c64662dcc857fc", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tests/common/rtt.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e88142e55ffbbe41f70ee83358da99cd518becb3ff0901f786bb4d56cc098d30", + "name": "tests/integration/targets/eos_user/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_user/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", + "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_user/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e9e40c2f4be5c39a0bf44fc386944705e5fe6af989b7b2eab6ca282f7fb183a5", + "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_user/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3e4c4999c892bdb9fca72e568774b2c986d7bdfa8fa419c651767c6d4482d50", + "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tests/common/_parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "efe02afcb1c79bf68872562eb02977725e731dfbe7536b270e0273e2766a6521", + "name": "tests/integration/targets/eos_acl_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tests/common/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b7d761b36741b02edb289d71aaeac703a09dd50044f06b7a22efb65c1debf4e9", + "name": "tests/integration/targets/eos_acl_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8a3b87032a207d23558a38cd9b6dc25ec6af9ed0e9bc6b41725619fb0f180d0", + "chksum_sha256": "a79b77c93a1982c2682c177681bfcef5f3fb3421e3ef10be452fc81dc3ce8871", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/vars", + "name": "tests/integration/targets/eos_acl_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/vars/main.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7cc18f6491766c65c2c46d595e731de7a188f6c8a4d85a511193825761fc5c1", + "chksum_sha256": "8631d3b93d4bf6c66a2d3f5e5c11f188f364dc3a36a4bfa5614a51a045a1d49f", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/templates", + "name": "tests/integration/targets/eos_acl_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv2/templates/populate.cfg", + "name": "tests/integration/targets/eos_acl_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a50326c21eba1d983db933b7a18c112f2aa7c5f16d574dc908095d9258b1cdb3", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global", + "name": "tests/integration/targets/eos_acl_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tasks", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tasks/main.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", + "chksum_sha256": "4cfbb7d9c017eea2318fb53edf60ff9b83e6dfeccae2d6bc85f16d05d33a7ff0", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tasks/cli.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "chksum_sha256": "86b04f3482cda3dd386cac6bd225865c4f3637845bc2b38165814e6c89bbaa2a", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_bgp_global/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "876b6b7da3c239e569da81974334a14293ce92683bae9643239bcd4bb083c94b", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/meta/main.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_bgp_global/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e43043f8a8c88832634fb29c4839abc2be35598c34df4a953d0eda562a90c78e", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/defaults/main.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_bgp_global/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/eos_bgp_global/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e304de25e98dfbbd3e8b884f6478d7b841a022b232febe94380f256a50a51557", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "36c8fb15c11b0806cf005745d3430a56d953e9f6780a7cef5aafd2a09a0535ad", + "chksum_sha256": "dad0f95e9549bce843069bc4584803994e2549a64e70c6d844e5d37e41190630", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d04fc66d72fa6c188227956f100f60c5653c829ef71f493379e1aaaed85fb60", + "chksum_sha256": "dfc9f3e78036a19826feccd2fad6679dd22d05d44fdf5226540ce1f29256f261", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c0343e2441998a70cccd7a221674cd22a585a30cb660edf3089ac0b090e798f", + "chksum_sha256": "b87b082bd1a6efb8a4fcffbc804615955068460aa128235e5bc6833b551be9b2", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d8689ef6e49ccbba62ad1ebc44268ac6d8f82c7f001b21251b5d09c7ec7d32b", + "chksum_sha256": "1f5be632f4525a5de8591f6aa83113ccf37fd9cb62d0f5b6ef4c62dcfb1c6fa7", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/_populate_af.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4f02550439ab2971f3dedc3958ee676bf2f3dd53532dca527bc619cf2f1a1d9e", + "chksum_sha256": "1668ec34e8d2f67dc611925ddf3b4f00ae826f0a65c72d939a8b1046d64c873d", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f749361ee14f98e79fa6a1f95335d7c2e66d2c28f517b1852b5b7f4cfbb9d429", + "chksum_sha256": "0d3dca47353e80e36f629fd572a1b64e2c49dd75d82bf4ab28fc53634d33803b", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", + "chksum_sha256": "f2b15009df3b8b2bd9936379027b7f544a9c81a23e5c33fb9847b25a0b54645c", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6fd9e647d40d57feb5aa630c4ad460edcc0a5053310451f19ede0fd8d741ffe3", + "name": "tests/integration/targets/eos_acl_interfaces/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02c017ff36027b957a2682c52ba544c014969f9b4ed9e9a725981a818191cd7b", + "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_acl_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cbb352548a62d123453d921de875e2acb84594a405ddafe0c04460de66e62928", + "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_acl_interfaces/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c43d6297de44a8d0ff51684af71b0f6837eaaa5d475561572902e6683b194247", + "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "de7a1434091a39ef8cc7b4dd5439d3b37ae5b77a68f90ff04d5a83160cdbfc9b", + "name": "tests/integration/targets/eos_config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/purged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7c4383c852e0367d67b96145d03829375611f90a60fa91aebf9ae41e7f8de1d2", + "name": "tests/integration/targets/eos_config/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_config/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "58ef58d4be3aa6e9478afcdb9010c490d331d3523a5d4804a0a68f3d1555d9d9", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/vars", + "name": "tests/integration/targets/eos_config/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/vars/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a1c6b658736d10bad13d5b973aa9955f414ef50fa30aa23a890374ab544a2f3b", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_bgp_global/templates", + "name": "tests/integration/targets/eos_config/templates/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/templates/populate.cfg", + "name": "tests/integration/targets/eos_config/templates/defaults/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cbb352548a62d123453d921de875e2acb84594a405ddafe0c04460de66e62928", + "chksum_sha256": "82249ebe8dcfdb0ab85598bd0f7ba759187bfc19c5c04a772d3308f27d85eefe", "format": 1 }, { - "name": "tests/integration/targets/eos_bgp_global/templates/populate_af.cfg", + "name": "tests/integration/targets/eos_config/templates/defaults/test.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a890c9293ff8120b194c107a6f70bdca6d62433ed701398a8214feaecb42bba6", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_facts", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "6d6e2f3a34e61e1912c313154341699bc6398ccd884e4663bbdcefab7e76f6ec", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tasks", + "name": "tests/integration/targets/eos_config/templates/basic", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tasks/main.yaml", + "name": "tests/integration/targets/eos_config/templates/basic/cmds.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", + "chksum_sha256": "635043eb1da106cc08711181db0d52331cc4ba2cda07e30466641f4c7497f10f", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tasks/cli.yaml", + "name": "tests/integration/targets/eos_config/templates/basic/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", + "chksum_sha256": "6d6e2f3a34e61e1912c313154341699bc6398ccd884e4663bbdcefab7e76f6ec", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_config/templates/basic/interface_config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb15ea77586a3f5e330abaeb5a693d1e431f3ba0d68e867fa6658ef1d00fc197", + "chksum_sha256": "6d6e2f3a34e61e1912c313154341699bc6398ccd884e4663bbdcefab7e76f6ec", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/meta", + "name": "tests/integration/targets/eos_config/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_facts/meta/main.yml", + "name": "tests/integration/targets/eos_config/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/eos_facts/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_facts/tests", + "name": "tests/integration/targets/eos_config/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tests/cli", + "name": "tests/integration/targets/eos_config/tests/eapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tests/cli/not_hardware.yaml", + "name": "tests/integration/targets/eos_config/tests/eapi/toplevel_after.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "347997e8a2b793de8202fa7c55fe8fb5befc15f804046653b24305aa96dea558", + "chksum_sha256": "90e106e955ff3865916079955ddf5af545cdaa7372c491bf0ba61076cd80bb4c", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tests/cli/default_facts.yaml", + "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_exact.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ae6cae32ba80370ac7e8254cc4103412ad26ff7ef67467f860501a93bd7ba03", + "chksum_sha256": "5501acfbe1e6d31324268704c74ddf6bf1d7d9eb0e158edcbbe4ff4b214cc76a", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tests/cli/invalid_subset.yaml", + "name": "tests/integration/targets/eos_config/tests/eapi/save.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "30ebae89f553fe7b179031c471332dde8a564a6fa8c280d90044283b59d635cf", + "chksum_sha256": "b10fe8c1dec1cc8276a16bcfeb6b70ac9667c8fc42cc5acd7f742fbdd2a2a2f6", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tests/cli/all_facts.yaml", + "name": "tests/integration/targets/eos_config/tests/eapi/src_invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e88adb456f3bf5b08ce7b72aaa11b73bfaebd5563b39ecf155ca55bc5e326ee", + "chksum_sha256": "751ce477a9a859e0fe8c0a420a836a9aeb6ee4e4d00d58af9e96fa4b15731577", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tests/eapi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_config/tests/eapi/src_match_none.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c42bb681923e1aea5664c1a629c22da23afd186fbdcbaa1c8f6a5df716e69bec", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tests/eapi/not_hardware.yaml", + "name": "tests/integration/targets/eos_config/tests/eapi/sublevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "412ad00f379dfbf2c04c539173c7c88068c175cf54fc2336644e1f0bfbbdc1c0", + "chksum_sha256": "402e518d37d1d8a5c283de5593d26f4067c6ce3312b90e9f9b5c41c8c52892af", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tests/eapi/default_facts.yaml", + "name": "tests/integration/targets/eos_config/tests/eapi/backup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "784e54cb91e72291cb7c430e617b1b70840fea8f67ab2667fe8c18ad3aff5c0e", + "chksum_sha256": "8b7ff6fa23044a1941225d49d2d23d85c1cede5f6d194625515b78a94ceccef0", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tests/eapi/invalid_subset.yaml", + "name": "tests/integration/targets/eos_config/tests/eapi/defaults.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fb127eb858414a991f7de95891bc3fb5205f0cec63fab24c58717c26355a6b18", + "chksum_sha256": "0ece39d7ef9b05d0e14b28c199af6dd0181c05c687fcf8555b7e41f35406f4c6", "format": 1 }, { - "name": "tests/integration/targets/eos_facts/tests/eapi/all_facts.yaml", + "name": "tests/integration/targets/eos_config/tests/eapi/toplevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "65f1bede3bea1ae5490850f77a0d8e0d5d369af4e05050b0cef51b7bc3430859", + "chksum_sha256": "45276c0a74aba09ed8c7c48de80af2dd32219a324303610bc9cf80c3c8bc283b", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_strict.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dbf1e3fd93dc6e50049a62d8107765cdbba14ee1f843606845bf30d0a982cd42", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_config/tests/eapi/toplevel_before.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7f7329aacb123f76e1a2df214a99787da817035c59e9c0e2664f7934daba6efe", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tasks/main.yaml", + "name": "tests/integration/targets/eos_config/tests/eapi/src_basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "bb891145f21b067fae034a29cded633ad42f8c834d477f8997b2517753fa7300", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tasks/cli.yaml", + "name": "tests/integration/targets/eos_config/tests/eapi/sublevel_block.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "chksum_sha256": "3dde12483d855a7b2da463f885ac18f0b10b36b9b6acc538de96c4de23157c61", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tasks/eapi.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "name": "tests/integration/targets/eos_config/tests/redirection", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/meta", + "name": "tests/integration/targets/eos_config/tests/redirection/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/meta/main.yaml", + "name": "tests/integration/targets/eos_config/tests/redirection/cli/shortname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "d944cd696544ff17ad20e40bea70421da8141a1c22b5b4227b8b2cec348ce085", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/defaults", + "name": "tests/integration/targets/eos_config/tests/cli_config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/defaults/main.yaml", + "name": "tests/integration/targets/eos_config/tests/cli_config/cli_backup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "3bd7e06189b2e0a2c94746eeacb0988676f417f3a6740b1ef65a39609ae5d735", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_config/tests/cli_config/cli_basic.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "135e26aae8c87670f187e83c82608ece8fe523e21e51824780e082ed0b4bf4ff", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common", + "name": "tests/integration/targets/eos_config/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/toplevel_after.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "772202a71a3c35454372ee3e7d0a8bc98615b619f4cc37ebf1bc20ac7d5d55bf", + "chksum_sha256": "1d3dca9f3f341cc31221c027c6db7a6973e4e25f8a2297c1f4843e7c591eed05", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/deleted.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/sublevel_exact.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18a10808206e727ecffe9b9714974da7d6c95edacd2758b0dd75d207fd6539d2", + "chksum_sha256": "8a6f66fe3cca7fc667d32dd2de4f5bc6fc7d82d2d92953316ad3d6e4f16ec463", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/save.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef28a5797b256528edd1bff83509babe07944218468f22f9bdeeef905b52a4b2", + "chksum_sha256": "b576d2db1098db6187c8dabf08b98f2f768c955c0fc76d32f946c50df47d3bc3", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/src_invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc8f776fa74a50716d8a0194c5a56a51305991e4295186c2f011afe0cd89a87a", + "chksum_sha256": "52ca0bec01fc312731dc6e4be0b4439a1ffcbdb24716321987fbea517a5e145a", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/check_mode.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d5a2e7460ef5bb7f6647ee5902bb0e4a9322beec5011a3c84d47804f5ffed7e", + "chksum_sha256": "8b8ade7952b3bdfbe87a27bef6a6072bf1559fb682ed03477c2c4bbb95add14d", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/_populate.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/sublevel_strict_mul_parents.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dccc5998d088e1918f8022c69860a4b490af97d164b7beaaf04054824b0340b6", + "chksum_sha256": "3ab71a8f63f346ecaac7f063da41865f2e61466559bd8e3b01c5c8cd5d4e63ff", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/src_match_none.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ccb7da45bb920569021036a8ad9757cd020f0012686b5d073f29f9621f7471e1", + "chksum_sha256": "e6f0ba65100459757c0b7dab013d12f4b901e2af19979c49047b6c403e2a1877", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/overridden.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/sublevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "704e3f910ea6a5ef1cab48ec4bbea46955189e811124fa2c1a8dce9a0efb6a17", + "chksum_sha256": "0f7743e4751629f7b7b985959361b7ac07cf23c267d74777401cd2e45bcff7d1", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_config/tests/cli/backup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96b764ff7795f328d12684eb2dd1aa60ea1e4d6d5d3e6ed638273aa7deb25686", + "chksum_sha256": "6d9bdcefed31e07edf3c37a38a9bdd50b83b235723758b4f4afee6afddb1b9e5", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/diff_against_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c53dc625cf760dec12686ef99081361defb9dbbfaf9f6ce2d6d00cd6b0eda97a", + "chksum_sha256": "1ba680c356fa88e96ed721f29df59097b2aabe32030286f032e3f981db797276", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/defaults.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5780138500b761a2832d155ea8a30d7e78fa10a02ab581125af875994bb45c8", + "chksum_sha256": "4390d24f8debc9f9a06bd6f75cedac8f6de373193dd6f477329d0479908e66b7", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/toplevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db343d29422b68984563c86904ac0ad79845853240e757cc26248b267f8e6f11", + "chksum_sha256": "3e835db5710bb920f585d443324bf7c30793f25df236c6f4d8622e1bf42095bf", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_config/tests/cli/sublevel_strict.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eb86226952eb153150fe0e1b41d8bbd2d38bbb2323831ff4a865553f161ead28", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/vars/main.yaml", + "name": "tests/integration/targets/eos_config/tests/cli/toplevel_before.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9917e16f0a7a0b7484fe0780a79f0b22180b634ad091fee3f94946946d87e030", + "chksum_sha256": "f4955cab6fdf4c6ff358e66481287548ba046ecb78b569315021cd4b4356873e", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_config/tests/cli/config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "93ead3551d70c71fed4ffeb043f58c511891b4737f39ebfb2f26c8ce8b703dce", "format": 1 }, { - "name": "tests/integration/targets/eos_ospfv3/templates/populate.cfg", + "name": "tests/integration/targets/eos_config/tests/cli/src_basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96b764ff7795f328d12684eb2dd1aa60ea1e4d6d5d3e6ed638273aa7deb25686", + "chksum_sha256": "115d6ac4c64b7d029afd2ddb9588b5eeb323ccf12391cf9bc1ba7db051c0847e", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_config/tests/cli/replace_block.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8229d1f16924795dadcae8472ba22a0d6ed7efdba4a7c8c12864f2915c1ed9c6", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tasks", + "name": "tests/integration/targets/eos_config/tests/cli/sublevel_block.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f954e5787b9b7e557b058e9f4e8720bfe36b468b4822bf29913ed3d14042475c", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_config/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/eos_config/tasks/redirection.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "b49deae160fc4dfe8307a0ffb0749eedf58bfe63871c77531866e164fe7f955b", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/eos_config/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "chksum_sha256": "fbf830cf0b2f6eccbbf21e658888b119977106bee0aa263cc2ac4393ddc19d4f", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tasks/eapi.yaml", + "name": "tests/integration/targets/eos_config/tasks/cli_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1629beb9c4c49792f78a1425442a6a6e0e5dd9a0ed824c1cced81e6e97a0e47c", + "chksum_sha256": "cad1c35e72ece6063b7dd0600ae72e4e0f2f29b963d58733833bfb71db1ff1dc", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_config/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/meta/main.yaml", + "name": "tests/integration/targets/eos_config/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/defaults", + "name": "tests/integration/targets/eos_config/config.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9a925a8805c82634beb0a514ef8ab88912b8b3e296763329a74d7690b0429dc6", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/eos_facts/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/eos_facts/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests", + "name": "tests/integration/targets/eos_facts/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common", + "name": "tests/integration/targets/eos_facts/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "format": 1 + }, + { + "name": "tests/integration/targets/eos_facts/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cc35e0f775451453ac2c523a27b8ca29590551f20ba1dd504553b72cd3f48096", + "name": "tests/integration/targets/eos_facts/tests/eapi", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common/gathered.yaml", + "name": "tests/integration/targets/eos_facts/tests/eapi/not_hardware.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c4177bbc89805770c555ca12366593738cd4fcfe2830e23b35a286aecc43ed3", + "chksum_sha256": "412ad00f379dfbf2c04c539173c7c88068c175cf54fc2336644e1f0bfbbdc1c0", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common/empty_config.yaml", + "name": "tests/integration/targets/eos_facts/tests/eapi/all_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "95215014c2825aee51c3c204de545ae03738dae62b0e268c617a498276643713", + "chksum_sha256": "65f1bede3bea1ae5490850f77a0d8e0d5d369af4e05050b0cef51b7bc3430859", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common/rtt.yaml", + "name": "tests/integration/targets/eos_facts/tests/eapi/default_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4660abfc6652a70079d0ea81ddca1be88fe04998d9396edef977e7c5ba5df1af", + "chksum_sha256": "784e54cb91e72291cb7c430e617b1b70840fea8f67ab2667fe8c18ad3aff5c0e", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/eos_facts/tests/eapi/invalid_subset.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a65aac4ca425465052942c3fd31c9d51ffb175047cbce064752fab288c7e4367", + "chksum_sha256": "fb127eb858414a991f7de95891bc3fb5205f0cec63fab24c58717c26355a6b18", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f17e653bfdb385c99bf7db088d3269b67d962148561c5b4ae3248adfad050ce4", + "name": "tests/integration/targets/eos_facts/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common/_parsed.cfg", + "name": "tests/integration/targets/eos_facts/tests/cli/not_hardware.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1be80d6bfade12c26b76660664893c1846149bb7eb9398fa5e610d48d54e9b78", + "chksum_sha256": "347997e8a2b793de8202fa7c55fe8fb5befc15f804046653b24305aa96dea558", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common/replaced.yaml", + "name": "tests/integration/targets/eos_facts/tests/cli/all_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8b467b03ab2c858ce56d5520307e0482341b16e05579f077e5bf8742d71fc95", + "chksum_sha256": "9e88adb456f3bf5b08ce7b72aaa11b73bfaebd5563b39ecf155ca55bc5e326ee", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/eos_facts/tests/cli/network_facts", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "03f049dcce225d8de33873ff4f8a2244b4e6053857d212b6bd473476cd429b14", + "chksum_sha256": "479cf1f759bce65d32176d8c9f885cb7abf5f8b99140389aaba24995760d601a", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common/_reset_config.yaml", + "name": "tests/integration/targets/eos_facts/tests/cli/default_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cbf3a7bcba86ab51a41f5df9700c3361614a761a59c7a818e28b9e2b47e49826", + "chksum_sha256": "0ae6cae32ba80370ac7e8254cc4103412ad26ff7ef67467f860501a93bd7ba03", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/tests/common/rendered.yaml", + "name": "tests/integration/targets/eos_facts/tests/cli/invalid_subset.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c06867d92daaf7f51b661451f56dd63be75711f4f8c407a7f7365879cb4d295c", + "chksum_sha256": "30ebae89f553fe7b179031c471332dde8a564a6fa8c280d90044283b59d635cf", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/vars", + "name": "tests/integration/targets/eos_facts/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/vars/main.yaml", + "name": "tests/integration/targets/eos_facts/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9bd8cfc16471691295c6cc5b75efdef88860f2aad20ec00f62ffc614e2976776", + "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/eos_facts/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", "format": 1 }, { - "name": "tests/integration/targets/eos_l3_interfaces/templates/reset.cfg", + "name": "tests/integration/targets/eos_facts/tasks/eapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e02b044e876b189ce336a3a4802eb8af3df7d69c9d74f94877a8ec495e240dc", + "chksum_sha256": "cb15ea77586a3f5e330abaeb5a693d1e431f3ba0d68e867fa6658ef1d00fc197", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces", + "name": "tests/sanity", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/sanity/ignore-2.11.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tasks/main.yaml", + "name": "tests/sanity/ignore-2.9.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0e130c100282c8de2a2d63717b5e5960124ffd70fe3dcb644596b555f254b8d", + "chksum_sha256": "8c562d6941e7798adfb9f88ff0791f32d9e867dcd22292a4d8041c32585285a1", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tasks/cli.yaml", + "name": "tests/sanity/ignore-2.12.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d287a5645a94634b96fbeb33a93d7cc866421adb10d5e45810aae4ae003fd52", + "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tasks/eapi.yaml", + "name": "tests/sanity/ignore-2.15.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "90b0fb30b63afdda9bc8d5bee03e2b6cc6f785a7af550690bf002a207fa42d9c", + "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/sanity/ignore-2.14.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/meta/main.yml", + "name": "tests/sanity/ignore-2.18.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/sanity/ignore-2.10.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7c9647b2dee513f57df36fee1897a54856aeba3b5fed24f2b7d6612b225ead63", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/defaults/main.yaml", + "name": "tests/sanity/ignore-2.17.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/sanity/ignore-2.16.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/sanity/ignore-2.13.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eef9f110ac24f19f2bd0d195d6ab988d986929ea42f869864ba19a025c882e40", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/deleted.yaml", + "name": "tests/config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fce0cbcecc5da5700eadd7509b5ec52749d2161ff7b3f99b95a4d2796c158f4c", + "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c9f82a69c636f9d85ef893fb5d2fba696d0a47bc9fe1e2c3e316acb63b79453d", + "name": "tests/unit", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "aaf8f107ec4a7699b08aba428c96066164570af0da4c031499210e65a9ac976a", + "name": "tests/unit/mock", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/rtt.yaml", + "name": "tests/unit/mock/loader.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab629c595374a5ff76a3d76f22278948131ccfd3f5de5e08f8bb0fae170883c0", + "chksum_sha256": "bea80cf14afd91d02e652a3a395bed3d74fdf373d12d5af6a41daf5516646663", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_cleanup.yml", + "name": "tests/unit/mock/yaml_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "72c891a2b69fea4a08d88aef80ab42588f0761b3fcee4654ea769a82e2cad772", + "chksum_sha256": "4dbe503c0585b634f72b82eef6b9f8d078ae383ed865bb016db31992dac97600", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/merged.yaml", + "name": "tests/unit/mock/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "01c98f37d467b49d62c858aa1eb80e31829d3af8df1d67b17b95612b1e014d2f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/overridden.yaml", + "name": "tests/unit/mock/vault_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fe18f0fa44accb4bdd0464888179e38186b2bc1bb7534786d823700eab75201", + "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_parsed.cfg", + "name": "tests/unit/mock/procenv.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f5bae45f76d827baaed602070abd64acc8a7c7f22410e169b0871344f1023ba", + "chksum_sha256": "3ff983479d7aa4b90efe73337f723c14224edabcdfde4efe49f24cd905f45f1a", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/replaced.yaml", + "name": "tests/unit/mock/path.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ed56a5c9ced6b499dda2d9788c2021ea24b0d17f0d0931a7c11b9addc59f3e6", + "chksum_sha256": "110552d5ab0ffabe2bc6b6c57e9f389be3920da2e0f37ea5b628795d1b426bfd", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "edb8b0ac8acd4b5e054bbfa29800537c9b159ab96d7187400f26c80be72c7abf", + "name": "tests/unit/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/_reset_config.yaml", + "name": "tests/unit/modules/conftest.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb38b9a77caba2c84ab6c80ba15134346ae856147e816086b43f2c90a0e8014e", + "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/tests/common/rendered.yaml", + "name": "tests/unit/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e27eed12e565edc2ef8199044486e7df6759cf3a8fa2c4999c06d465b416ac11", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/vars", + "name": "tests/unit/modules/network", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_l2_interfaces/vars/main.yaml", + "name": "tests/unit/modules/network/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d11de6e7c7e491f1f5247e77d3cc3367368e71c12900e057007742b5f69b93e", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans", + "name": "tests/unit/modules/network/eos", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/test_eos_prefix_lists.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "661ea9a69d2e3b8f45af167d6ae80619d248379eb9a24a8ca5e00a2a5ce5c533", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tasks/main.yaml", + "name": "tests/unit/modules/network/eos/test_eos_lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "b002b079441356772dd706ec1b61c49e31685a9b7d7bc6f2e596ab49c52e7938", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tasks/cli.yaml", + "name": "tests/unit/modules/network/eos/test_eos_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a37cc29ff691d020e7eddf204f7250275beee4a4c9d28d30b47981eabdaa6281", + "chksum_sha256": "3477c71403dbad66c8b51936403a0793c206830f8ffd97d169b24a400292a110", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tasks/eapi.yaml", + "name": "tests/unit/modules/network/eos/test_eos_ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2833f074f91eb14f89df2cf60665de978c3504c2b340b5729edeaac0ead3df5d", + "chksum_sha256": "63417ff9fc378c2cca3ddba37e37a1683daadab22ebcefb642813da6260485b8", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/test_eos_acl_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "07324539cdb0b8556e3a40d960a97f30ab3d40e665812307337e84e20b43b857", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/meta/main.yml", + "name": "tests/unit/modules/network/eos/test_eos_logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "298820d41ac982e3feae9381645a83b6120a5d683d6e019ecf37ef9e5219c681", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/defaults", + "name": "tests/unit/modules/network/eos/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/defaults/main.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_command_show_version.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/eos_vlans/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "cd0ee8985d66e4cff1ebeff617108414d701cdb2acebf9327329f62e093f7062", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_system_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d1cb12a14186402c703d639d484b7ea9829e52f9159afac4f7779bd396f5e43f", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/idempotent.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_eapi_show_vrf.text", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c41bbf0a4522e6f01b3e38067c543afb71b21fcbfa0a8ededd26d0683e50a81d", + "chksum_sha256": "a43e222ce4d0e6aec92afabb2d5ff7f6cc7fd96ce4e055b6ffc02ad1492373d5", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/deleted.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_ntp_global_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d4df0e51ef94b5a4ef06900a79bd20e79f84a964710a14de559368071f405669", + "chksum_sha256": "1c841ab014af5105c26d977cfcac4de50919a8537bf632698f95e5ea5f2b5c0b", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/gathered.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_banner_show_banner.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6512281e2fd290fd40f8f18191e72c127c2e3df9537c05559ecb25aed09ee4bb", + "chksum_sha256": "dc2e6349862de27bfb1d50da78684b7b6320c6c8626a7ae378ce07852d64f984", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/empty_config.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_acls_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cdf7d6ea7f6f5c2ad9065b1b13e04198c38882991e60197c5c569fa6dce0d98d", + "chksum_sha256": "c58fb25414acf3b04a882b8172c4c048c637b5906670a1c3a5f36e8a3aad0380", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/rtt.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d33a3d3ddf38335484012ddc3a995f050d899f1f5686fae5e8ae88f8686f9d5b", + "chksum_sha256": "7011ff501cdde31949153491b1f1092e8d8afa6a27510ab594deb1504403c2d0", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/merged.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_hostname_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fab8447a90775e038817655f20e15623512f87e042c86c7f93c6f5fe902aa37e", + "chksum_sha256": "55cfe4746ef24943eac865d5b0fd9b6a6884e0e529983e253d5764175c01c6e9", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/overridden.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_logging_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23f1318af4e38f802c10ac90ec7cce6573c0eac7665773f877059bcb90426bee", + "chksum_sha256": "d35c0e1702f10694008ce77f2d405c569d3745738fa4ceab306cdb638f5b465d", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/_parsed.cfg", + "name": "tests/unit/modules/network/eos/fixtures/eos_snmp_server_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24f8e0b4cb5d9b1444c92f7260088952ba7aa9a71949521dd331f5a434686783", + "chksum_sha256": "955317964226d2639660f6006be99a9c1d67e3a8dcea25ba7b2c4a569059a4f9", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/replaced.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_route_maps_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a2ed31515941cfc98d86db63eed394b71c6e749b8ef7a7433f5d3ff518f585a", + "chksum_sha256": "64a5a2e160aff448bb567d8d4fdba4c3231f85ab0b44e2f596fe2784148e8554", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/parsed.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_lldp_global_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97d8e342f7bee82d8027e115e1f5165d4a68e898b83813a2f710833e5fee4a33", + "chksum_sha256": "41eb838c679e2fd974f15bd92461a1627b29a0f2b8b1c5a5c3fef8a472efaad3", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/_reset_config.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_acl_interfaces_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31618630d4e82bffcf3ca7a4b12b835bb1b3bdf67d518eac68f72bb26b0d6924", + "chksum_sha256": "29bdd16b7032ccf6dd42d4c2e78ebe00aaaf155ea7f5d9049c638f742478f312", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/tests/common/rendered.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv2_config_gather.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fb1e1d667d069e7d04de886871344ca9fc0a0bded7b3c2a7437a4d95b95dd05d", + "chksum_sha256": "6271cc911105743891d46bde906d969ad2ce562d8bfa9364d845da33cb9c3bde", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_static_routes_config1.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "22d8eb393f411a1034b6d77b5137ca205b1d01b09a6488c5c30199145b99bf7c", "format": 1 }, { - "name": "tests/integration/targets/eos_vlans/vars/main.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv3_config_gather.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "361a49c0e4e03684a6718513ec6a800c844d872b6dba61efdb68249d61b34124", + "chksum_sha256": "091b340fe2578196b84cd9b133d0cc01e479a27a12caeb2a796355c571a39cb4", "format": 1 }, { - "name": "tests/integration/targets/eos_banner", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_vlan_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6e71249b2afca7c80191a77d86753e21419042d51d570de0b3c717a204f01400", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_config_candidate.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3352c8002ead9454c96fa97e82bc2bf245ac57a69edbf8a934bed4ef809de3de", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/tasks/main.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_ospf_interfaces_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5cf7fcbac079abb6f5cb6c649a9d27fe838821be84e54b51d4f35f98e64aa6e", + "chksum_sha256": "2c664a8713d7ccd543333cca425528c1726d6790b8364bdd6a5e8720ce4183be", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/tasks/cli.yaml", + "name": "tests/unit/modules/network/eos/fixtures/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/tasks/eapi.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_eapi_show_mgmt_unconfigured.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b14bb0d83e5f509721d34f537bb0812798e5b3d3ad6794f1cb7314c8a419202", + "chksum_sha256": "09f3bdc48ce35e7200a5a5da2f2722dff46de4bd8ebc1d1718fa4ed7a08310df", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_lag_interfaces_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "996743ab19a23f6fbb30754d1f4beb2911c6b4ffa69a28665dfc79b5ad519b65", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/meta/main.yml", + "name": "tests/unit/modules/network/eos/fixtures/eos_logging_global_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "616869cf79f4faf6f64276e039fbcad728d3e012eba2073b118b0296d9334013", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_global_af_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dd5318703b4822b5a27eb24bb0d1898c7e5559e96151114784e5a5e92d07f535", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/defaults/main.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_prefix_lists_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "ed6dda06d2158651429f03d9db644514e20f89e6d3c58331fc09e059c76a22ff", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_interfaces_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "05edee2806d57e1a907026a24ea0fd51582008c1d24b63c5fc1463e86204683e", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv2_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c4e0126af072bca2ca99eb356d26868e44adae27ffa3622f54fc431122e66ace", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/tests/cli/basic-login.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_global_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a6ff4ad57df259c1322d52be030e6bda317af6738e2e3ebf043ca14b5fc9d64", + "chksum_sha256": "3cef54b0f53689ccdd9a9de7e3d23fa7fa591582506b438f1b628752b5b0847b", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/tests/cli/basic-motd.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_eapi_show_mgmt.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4b2551d785983506768deb63cd2f8ba8ae35c5e6ce5eae18e340fd75291e390a", + "chksum_sha256": "963dde77e29e22955f66b6d4a4d880c327419e3c719556219b19cf2d9d515c07", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/tests/eapi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_static_routes_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9de7fbc93c152431ec2baf2f7c8ba736ced12148e8bff2e7b54eb7dd39c4b04d", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/tests/eapi/basic-login.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_config_config_updated.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7cd4bec5ba015f96ac020675f8b4a256dcc1e2bdd9f4b59775237acaa8d809c", + "chksum_sha256": "199f6fddff67988e4e15efde118949a06623ac6cda6cc56a43110fab3da655d9", "format": 1 }, { - "name": "tests/integration/targets/eos_banner/tests/eapi/basic-motd.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_config_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8e94533c27b7c01e870af443aae37c16cb5180e86658a8de5a2a6b5599efb97", + "chksum_sha256": "03abdcaedc2f739a12fd1c31f37164f02ed471aff024ad8e654a0d7ec3e611e6", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_bgp_af_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9cfca9294069868122bcad8e9a7bcfdfd6101949fd9959ec32766b682f635a68", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_l2_interfaces_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "501ad2cead9d2a90aa7529319befbf62a4f58f7988995788c5206c90fbec5afc", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf/tasks/main.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_user_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e0a1de7edebf8e1de1b1bd68c83fa3e6669085f9cd28e417cbb11f43da75068", + "chksum_sha256": "2b11830bd90b2c0e492cba03f0af73a5229a4723e47959812544961bde1ac438", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf/tasks/cli.yaml", + "name": "tests/unit/modules/network/eos/fixtures/eos_lacp_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6788027c858762808079ce3f9cec195264aebb130bf132dfec6ff2fcfeb025c5", + "chksum_sha256": "5a89a5f03e68185c4a50f5410ea4fb04caca756685c8d906c1b4558fa52896aa", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_l3_interfaces_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0989f0ad8aea46b6b4b7111aee264687387c44e8cc68154f8d9c054d22581d1d", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf/meta/main.yml", + "name": "tests/unit/modules/network/eos/fixtures/eos_lacp_interfaces_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b5d25c408cac682eb405cfc386cedbf17e6480d46e83bba18c91fcfe5d6e48", + "chksum_sha256": "414cc25eb0be567529b328993c191ea1f282c2620ff5f45b57462ec7e950ddca", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/fixtures/eos_ospfv3_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "97763a63f53b38b8c864ed38f800e4270d600065cdd4acde805c3b1ca384e6b5", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf/defaults/main.yaml", + "name": "tests/unit/modules/network/eos/test_eos_l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "a22acc199b608eaa81388ae90560832bdcfd9e18151093afb55d3fac6c79bb0e", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/test_eos_lacp_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9d9e2f2de94155c7b25b3e22b3f2d945348ba9cac930e31647e80c49f32d2e2b", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/eos_module.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b3f4714ae9af0063ed76f955c15e8492b3f7d69ecc52b3c1e139f49f2a0ea4d4", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf/tests/cli/basic.yaml", + "name": "tests/unit/modules/network/eos/test_eos_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cea011f04a3c8f2d06c412f8512259c89a2e3a57b55effeef99fa45434d9be15", + "chksum_sha256": "fa4338232a2405c9435c72b47bf43adba9a77fa9f1e807c6e32939842fce1ace", "format": 1 }, { - "name": "tests/integration/targets/eos_vrf/aliases", + "name": "tests/unit/modules/network/eos/test_eos_bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "78ddd666d2a3c42ff62cf41e2aa080cd4d756df6e84e3b87b1d251c0e01c58c9", "format": 1 }, { - "name": "tests/integration/target-prefixes.network", + "name": "tests/unit/modules/network/eos/test_eos_ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec96e8ef2e9e3856cae9bbefb51f64492bd044f17d17310cc560ec990ab14468", + "chksum_sha256": "2eaf0fb95775a20f7e0dbe6a5f95183e278dbd18a7f08649094a36a6174df92e", "format": 1 }, { - "name": "tests/integration/network-integration.cfg", + "name": "tests/unit/modules/network/eos/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/.gitignore", + "name": "tests/unit/modules/network/eos/test_eos_ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", + "chksum_sha256": "905a631997755cc518785f31f2baeb7a34bf1e6f02e66252d61ce6f155c6bbed", "format": 1 }, { - "name": "docs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/eos/test_eos_eapi.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b589a590266ed8e34f6360348ef1011aa397ea1e23f7ec14762d211435be1473", "format": 1 }, { - "name": "docs/arista.eos.eos_lldp_interfaces_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7299a09dc0f8360ad7d8c95d13b8c0e9f07035e910f58efa4e6e6c550f5b377d", + "chksum_sha256": "b08eaedb4f944efd3636cfeeebef411d71a64a222ee9d209004f31ad4804ad75", "format": 1 }, { - "name": "docs/arista.eos.eos_static_routes_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e556daa557e50664de8a09d706c314cddf9b54c82368f621d07afdcec06cc44d", + "chksum_sha256": "70a9eeb3e6ef95046e460f7c31934730ec5ccc22a3c05791caae48f5c67603c1", "format": 1 }, { - "name": "docs/arista.eos.eos_logging_global_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5ac61d63be154248e23a8b1d65878997ba5ee5c7c7cccc5134e557d6132c85f", + "chksum_sha256": "e0c1b2145831e16013e56db5f767f4256ab0a91e15bda47b86775a53f4e9d75b", "format": 1 }, { - "name": "docs/arista.eos.eos_ospfv2_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cbb9fbfb8196b35682ea97231c66e5feb28fc0c59cc87c9ccfb5f4352bec573e", + "chksum_sha256": "ca8c440f919185f6532f28cc43a6967a7e6344f20b4504adf2d5871d5c5081c1", "format": 1 }, { - "name": "docs/arista.eos.eos_route_maps_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c72fa7b5ddaa69adf74a0e20f10338bd9e00a4bcf8b80d8833d2508ec90e38a1", + "chksum_sha256": "b4d5a241b0c3a84829c2523efb6848d492ded2f58e4a8ef34ac8bf65e00f31ff", "format": 1 }, { - "name": "docs/arista.eos.eos_system_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb36d86019cdf27d92c314fdb25f037aaba0c7529ab40a18dac4b217e7fe4c01", + "chksum_sha256": "8b337538bc350ea37c5be05ba18c6e6c9cee42541f787f94535f9eb41fe6a7b3", "format": 1 }, { - "name": "docs/arista.eos.eos_interfaces_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a455227b4df8d2346b1f77b5132247cd731082ffa814e451d75396c117b60cff", + "chksum_sha256": "d1b91c7248ff3e522b2c9738bbd202f02663cd446c6582407a5e5f45030d27c7", "format": 1 }, { - "name": "docs/arista.eos.eos_ospf_interfaces_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83887e8f1a80e7472057297779adde8017ab6371a3c41c99e4ed4c21d7b34858", + "chksum_sha256": "d64de59aeeb1314ad32d5d4d8b3c04f545dae54a4a9621c862ce732852d38299", "format": 1 }, { - "name": "docs/arista.eos.eos_bgp_global_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "892272aec233fa0f0110eba45ab0a8f4107122a387cb00c3920860f4d002fc26", + "chksum_sha256": "9700e19afd5f9b5fa5929af623abdc7297851c38e95a4afa12b3d165b490f06c", "format": 1 }, { - "name": "docs/arista.eos.eos_ntp_global_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82bea9b37a6b60b3372f4ff510bfcd0e59b0a15f5e6fe5a850630125f7c10c3c", + "chksum_sha256": "7f27a55927d142e5d1b3d5daf9c4c70a0c7746bfb922757b8b61a87f0be84944", "format": 1 }, { - "name": "docs/arista.eos.eos_ospfv3_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54fe29219103c40dfdb961918efbe64f676c122b331d1151307ce95190424b05", + "chksum_sha256": "28c6260cb281011e88a06b56da8f776f3e74c74ce6483667c4f4694f0d84a2aa", "format": 1 }, { - "name": "docs/arista.eos.eos_vrf_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c6664519aa55395647325147639ccf77de85e600a1abefaf3f83755af82c32b", + "chksum_sha256": "e05c63bbf7d8d358e7aa4ca3265d6c0001122a46728e884313a7e7028fd33b49", "format": 1 }, { - "name": "docs/arista.eos.eos_command_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3d335bd1672f0a46e52990493ff4d829f18392f3bc1a7949bbc6a99837103d7", + "chksum_sha256": "f047d0ac15b59f5e571bd1777a52096a0036ba7fae0f4b0f297f044c589c9595", "format": 1 }, { - "name": "docs/arista.eos.eos_lag_interfaces_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19ef80abb38cd39ff502c43f4ddca3883584376c19f1b20621f0fd11b565b920", + "chksum_sha256": "67c6d4923cb8220bbf9dcc9c59db873c8f4bc0a2246473dc0ae5b76846ff9893", "format": 1 }, { - "name": "docs/arista.eos.eos_banner_module.rst", + "name": "tests/unit/modules/network/eos/test_eos_lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b128807c32c6a491aa78a1b56512e2982f5d6811641d0b14e8e347d4cf8a5b06", + "chksum_sha256": "688b40d8068764274c19a34ba2fe36721470b933dc966416d062b8b2e87c315f", "format": 1 }, { - "name": "docs/arista.eos.eos_eapi_module.rst", + "name": "tests/unit/modules/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ff82c55d35021b368eaeb719ad4c4b0e15111fcec0e038d13970e3db9b0a0f0", + "chksum_sha256": "414c272e9a403bb6009460ec9502c5acfaa9c80b2159c742f6cb2e225938be3e", "format": 1 }, { - "name": "docs/arista.eos.eos_l2_interfaces_module.rst", + "name": "tests/unit/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "875b8b13249159af500f7785bd39a89722dd4a01161c549b84efc5105e89fb10", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "docs/arista.eos.eos_lacp_module.rst", + "name": "tests/unit/requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41c37120e15ed62a0b939ec0cce0e747fefcb74ef051d7c831bdd6a4831a73b6", + "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", "format": 1 }, { - "name": "docs/arista.eos.eos_l3_interfaces_module.rst", + "name": "tests/.gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ee5f610c3334d0c43e72a061217ec202d79042c97bf82f2a62eb6075cc8a4b", + "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", "format": 1 }, { - "name": "docs/arista.eos.eos_prefix_lists_module.rst", + "name": "tox-ansible.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "77c510223083c0c16f010a59da50d32474093900d238ac7d985fe4b98454ce1a", + "chksum_sha256": "da802bfc2dc2671ca7caba028e8a635b459b131874041d119b698717333a7a49", "format": 1 }, { - "name": "docs/arista.eos.eos_user_module.rst", + "name": ".gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "820458159242af177985582cc6a0b35d82d9a44d3387e14c05b195a5baae2075", + "chksum_sha256": "a2ebfecdb6c1b58267fbe97e6e2ac02c2b963df7673fc1047270f0f0cff16732", "format": 1 }, { - "name": "docs/arista.eos.eos_lacp_interfaces_module.rst", + "name": "LICENSE", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "734d129c2aed3bc167555a6a863d93361b7c4a96c4af55b45329d52b04cca95c", + "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", "format": 1 }, { - "name": "docs/arista.eos.eos_vlans_module.rst", + "name": ".vscode", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".vscode/settings.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc743c4b64f6ac842967f495059b06ac5008a2fc93e73ab33ca06de5d9b5b322", + "chksum_sha256": "689cb2b210cace81743b1da8f00db7a4a7027b193dc85b17be2918b6f9977bfe", "format": 1 }, { - "name": "docs/arista.eos.eos_facts_module.rst", + "name": ".flake8", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a80619e2a2f0d283a69c669d9486243fce9d68a80ac07cd92b22c3845c1a124", + "chksum_sha256": "f357bc604a44fe8a5912ec2b9067b734a88d1026da98d5993905d7b34ab44357", "format": 1 }, { - "name": "docs/arista.eos.eos_lldp_module.rst", + "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7aa54a176f3d95e20db2127d8b7428ff5ccd511016b007f80d469c7e64922ee2", + "chksum_sha256": "19dc268d4f51e2246ddf2fcf471f20fec732ca99aea9ab27e1cbba7a87c8c5be", "format": 1 }, { - "name": "docs/arista.eos.eos_hostname_module.rst", + "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9803954ef010d617a8faea5d3bbd0b9f62a4f11d32d9d09bf0a03a7f32fa47d1", + "chksum_sha256": "883b106f13b0c6536f55619685ddca25968b4167dedb12e08fa37c93f4c63b25", "format": 1 }, { - "name": "docs/arista.eos.eos_bgp_address_family_module.rst", + "name": "docs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "docs/arista.eos.eos_ospfv2_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db2a2a582e437d5ef5ecc712aa232a3263430cde26fd1e030f4f7d8fb945e7d1", + "chksum_sha256": "cbb9fbfb8196b35682ea97231c66e5feb28fc0c59cc87c9ccfb5f4352bec573e", "format": 1 }, { - "name": "docs/arista.eos.eos_logging_module.rst", + "name": "docs/arista.eos.eos_static_routes_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ed61ec5ef8d86ad44bf605217913fc8d9979496766ca33ad196939f940fb5d9", + "chksum_sha256": "e556daa557e50664de8a09d706c314cddf9b54c82368f621d07afdcec06cc44d", "format": 1 }, { @@ -9409,10 +9164,17 @@ "format": 1 }, { - "name": "docs/arista.eos.eos_snmp_server_module.rst", + "name": "docs/arista.eos.eos_vrf_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "95804c5a71ea18fc6ce044dc1711dfb10abf8dae9aacc61b6d5bb8888dbb3ddd", + "chksum_sha256": "0c6664519aa55395647325147639ccf77de85e600a1abefaf3f83755af82c32b", + "format": 1 + }, + { + "name": "docs/arista.eos.eos_lldp_interfaces_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7299a09dc0f8360ad7d8c95d13b8c0e9f07035e910f58efa4e6e6c550f5b377d", "format": 1 }, { @@ -9423,192 +9185,206 @@ "format": 1 }, { - "name": "docs/arista.eos.eos_config_module.rst", + "name": "docs/arista.eos.eos_user_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8534f76fb2956d6a825bca465195717143caeabb8dad0dbaeecd98cd87b831e", + "chksum_sha256": "820458159242af177985582cc6a0b35d82d9a44d3387e14c05b195a5baae2075", "format": 1 }, { - "name": "docs/arista.eos.eos_cliconf.rst", + "name": "docs/arista.eos.eos_l3_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52b6530cf3a4711a1b8e40dcff5063e73fc3e868e6cba0b91976e8ba53af8a14", + "chksum_sha256": "44ee5f610c3334d0c43e72a061217ec202d79042c97bf82f2a62eb6075cc8a4b", "format": 1 }, { - "name": "docs/arista.eos.eos_lldp_global_module.rst", + "name": "docs/arista.eos.eos_ntp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f0fea31fef727f45440a5363e764f99345b4f7e3d079fe5e36388f0ac2b20948", + "chksum_sha256": "82bea9b37a6b60b3372f4ff510bfcd0e59b0a15f5e6fe5a850630125f7c10c3c", "format": 1 }, { - "name": "docs/arista.eos.eos_bgp_module.rst", + "name": "docs/arista.eos.eos_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75e256d769047f67382bc69c8937d95106efe9c999392c69ec9ee212193dd857", + "chksum_sha256": "a455227b4df8d2346b1f77b5132247cd731082ffa814e451d75396c117b60cff", "format": 1 }, { - "name": "docs/arista.eos.eos_acls_module.rst", + "name": "docs/arista.eos.eos_lacp_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5cf3899b43a7949c4079e95c026995a56e06fc5bf705d4c2687b8315a44c3a42", + "chksum_sha256": "41c37120e15ed62a0b939ec0cce0e747fefcb74ef051d7c831bdd6a4831a73b6", "format": 1 }, { - "name": ".isort.cfg", + "name": "docs/arista.eos.eos_command_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ac83124be8cf24f40e7457c3a7ede4409108ee8caa89976cdb03d6d1ae336d1", + "chksum_sha256": "c3d335bd1672f0a46e52990493ff4d829f18392f3bc1a7949bbc6a99837103d7", "format": 1 }, { - "name": "pyproject.toml", + "name": "docs/arista.eos.eos_hostname_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc", + "chksum_sha256": "9803954ef010d617a8faea5d3bbd0b9f62a4f11d32d9d09bf0a03a7f32fa47d1", "format": 1 }, { - "name": "bindep.txt", + "name": "docs/arista.eos.eos_vlans_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2cb7d868bf5a674ff9531652c2f591c4767816c5ce240a75330c1585861e70b0", + "chksum_sha256": "dc743c4b64f6ac842967f495059b06ac5008a2fc93e73ab33ca06de5d9b5b322", "format": 1 }, { - "name": "changelogs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/arista.eos.eos_lldp_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7aa54a176f3d95e20db2127d8b7428ff5ccd511016b007f80d469c7e64922ee2", "format": 1 }, { - "name": "changelogs/fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/arista.eos.eos_facts_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5a80619e2a2f0d283a69c669d9486243fce9d68a80ac07cd92b22c3845c1a124", "format": 1 }, { - "name": "changelogs/fragments/.keep", + "name": "docs/arista.eos.eos_snmp_server_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "95804c5a71ea18fc6ce044dc1711dfb10abf8dae9aacc61b6d5bb8888dbb3ddd", "format": 1 }, { - "name": "changelogs/config.yaml", + "name": "docs/arista.eos.eos_bgp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "03ddb712fc00dcdde125bd062a4fffc3ce5846d43ac90c3191c8ac8da4196303", + "chksum_sha256": "892272aec233fa0f0110eba45ab0a8f4107122a387cb00c3920860f4d002fc26", "format": 1 }, { - "name": "changelogs/changelog.yaml", + "name": "docs/arista.eos.eos_lldp_global_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f0fea31fef727f45440a5363e764f99345b4f7e3d079fe5e36388f0ac2b20948", + "format": 1 + }, + { + "name": "docs/arista.eos.eos_lag_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31b9728ef0a2dcdd94ebd9d93eb1fe948e3de0404c203f63f6dee275cb5943e8", + "chksum_sha256": "450f78cb5e371d925bc21c5ed5ffdc90fd098ca65de2e421f96c344ea094878c", "format": 1 }, { - "name": "tox.ini", + "name": "docs/arista.eos.eos_lacp_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4246b891e853d1fc828a1dff460bcd43c3ea3aa08d6686b8396bd17169806546", + "chksum_sha256": "734d129c2aed3bc167555a6a863d93361b7c4a96c4af55b45329d52b04cca95c", "format": 1 }, { - "name": "CHANGELOG.rst", + "name": "docs/arista.eos.eos_ospfv3_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84daa7535f1cd39ce8c0ecaeb7254ed4ff201ff101d164177e4cbc4c985a3882", + "chksum_sha256": "756aa82267c7e0995dd8f88cfc6b12703fbcd68907fc8610f65204a2d8bb4faa", "format": 1 }, { - "name": ".gitignore", + "name": "docs/arista.eos.eos_bgp_address_family_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2ebfecdb6c1b58267fbe97e6e2ac02c2b963df7673fc1047270f0f0cff16732", + "chksum_sha256": "db2a2a582e437d5ef5ecc712aa232a3263430cde26fd1e030f4f7d8fb945e7d1", "format": 1 }, { - "name": ".pre-commit-config.yaml", + "name": "docs/arista.eos.eos_route_maps_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f06cb69ac03a025140d5c35b162e6e045a101aa729d7805ba2b1e1d6b82d4aed", + "chksum_sha256": "c72fa7b5ddaa69adf74a0e20f10338bd9e00a4bcf8b80d8833d2508ec90e38a1", "format": 1 }, { - "name": ".prettierignore", + "name": "docs/arista.eos.eos_eapi_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29d6205739f8fa2ea1dfb82777cc64dd269e51fe58c7c713682f71ac8b1973c4", + "chksum_sha256": "4ff82c55d35021b368eaeb719ad4c4b0e15111fcec0e038d13970e3db9b0a0f0", "format": 1 }, { - "name": ".github", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/arista.eos.eos_l2_interfaces_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "875b8b13249159af500f7785bd39a89722dd4a01161c549b84efc5105e89fb10", "format": 1 }, { - "name": ".github/dependabot.yml", + "name": "docs/arista.eos.eos_cliconf.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461", + "chksum_sha256": "52b6530cf3a4711a1b8e40dcff5063e73fc3e868e6cba0b91976e8ba53af8a14", "format": 1 }, { - "name": ".github/workflows", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/arista.eos.eos_acls_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5cf3899b43a7949c4079e95c026995a56e06fc5bf705d4c2687b8315a44c3a42", "format": 1 }, { - "name": ".github/workflows/codecoverage.yml", + "name": "docs/arista.eos.eos_prefix_lists_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8bbcae622f5e51798b577df290135e846244399c2a6ccbfedac523b38a8330a3", + "chksum_sha256": "77c510223083c0c16f010a59da50d32474093900d238ac7d985fe4b98454ce1a", "format": 1 }, { - "name": ".github/workflows/ack.yml", + "name": "docs/arista.eos.eos_logging_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24c6fbafaa69e3e3ee696f2cefa5120794b62cef7e870553dddce8b8af0a127c", + "chksum_sha256": "c5ac61d63be154248e23a8b1d65878997ba5ee5c7c7cccc5134e557d6132c85f", "format": 1 }, { - "name": ".github/workflows/release.yml", + "name": "docs/arista.eos.eos_banner_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1", + "chksum_sha256": "b128807c32c6a491aa78a1b56512e2982f5d6811641d0b14e8e347d4cf8a5b06", "format": 1 }, { - "name": ".github/workflows/push.yml", + "name": "docs/arista.eos.eos_ospf_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3164180ee4d514fea284a79033515effa6270d70d25ef3da77da318c2ac6382e", + "chksum_sha256": "83887e8f1a80e7472057297779adde8017ab6371a3c41c99e4ed4c21d7b34858", "format": 1 }, { - "name": ".github/workflows/tests.yml", + "name": "docs/arista.eos.eos_system_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a363c29cae8f4b799d88470e5cc5546312966f5559f25ffd680611119035dd29", + "chksum_sha256": "852c5c712440e5f7b2207343f9796e04c758cf9967854a29601c1e172153cd21", "format": 1 }, { - "name": ".github/release-drafter.yml", + "name": "docs/arista.eos.eos_config_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", + "chksum_sha256": "a8534f76fb2956d6a825bca465195717143caeabb8dad0dbaeecd98cd87b831e", + "format": 1 + }, + { + "name": "bindep.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2cb7d868bf5a674ff9531652c2f591c4767816c5ce240a75330c1585861e70b0", "format": 1 } ], diff --git a/ansible_collections/arista/eos/MANIFEST.json b/ansible_collections/arista/eos/MANIFEST.json index b6a9c23ac..602c48e49 100644 --- a/ansible_collections/arista/eos/MANIFEST.json +++ b/ansible_collections/arista/eos/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "arista", "name": "eos", - "version": "6.2.2", + "version": "9.0.0", "authors": [ "Ansible Network Community (ansible-network)" ], @@ -17,7 +17,7 @@ "license": [], "license_file": "LICENSE", "dependencies": { - "ansible.netcommon": ">=2.5.1" + "ansible.netcommon": ">=6.1.0" }, "repository": "https://github.com/ansible-collections/arista.eos", "documentation": null, @@ -28,7 +28,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0f8a8eb3b5a249bb7e2a5867fd7cd7beb2a0c475f7686454977dc6a549dc9955", + "chksum_sha256": "4decd5b6443703b190b9bb872e5d08d718ae4a5c9f599998101e013aff357acd", "format": 1 }, "format": 1 diff --git a/ansible_collections/arista/eos/README.md b/ansible_collections/arista/eos/README.md index cb978ac79..eb527c8a1 100644 --- a/ansible_collections/arista/eos/README.md +++ b/ansible_collections/arista/eos/README.md @@ -12,7 +12,7 @@ This collection has been tested against Arista EOS 4.24.6F. ## Ansible version compatibility -This collection has been tested against following Ansible versions: **>=2.9.10**. +This collection has been tested against following Ansible versions: **>=2.14.0**. For collections that support Ansible 2.9, please ensure you update your `network_os` to use the fully qualified collection name (for example, `cisco.ios.ios`). @@ -43,7 +43,6 @@ Name | Description [arista.eos.eos_acl_interfaces](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_acl_interfaces_module.rst)|ACL interfaces resource module [arista.eos.eos_acls](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_acls_module.rst)|ACLs resource module [arista.eos.eos_banner](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_banner_module.rst)|Manage multiline banners on Arista EOS devices -[arista.eos.eos_bgp](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_bgp_module.rst)|(deprecated, removed after 2023-01-29) Configure global BGP protocol settings on Arista EOS. [arista.eos.eos_bgp_address_family](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_bgp_address_family_module.rst)|Manages BGP address family resource module [arista.eos.eos_bgp_global](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_bgp_global_module.rst)|Manages BGP global resource module [arista.eos.eos_command](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_command_module.rst)|Run arbitrary commands on an Arista EOS device @@ -60,7 +59,6 @@ Name | Description [arista.eos.eos_lldp](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_lldp_module.rst)|Manage LLDP configuration on Arista EOS network devices [arista.eos.eos_lldp_global](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_lldp_global_module.rst)|LLDP resource module [arista.eos.eos_lldp_interfaces](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_lldp_interfaces_module.rst)|LLDP interfaces resource module -[arista.eos.eos_logging](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_logging_module.rst)|Manage logging on network devices [arista.eos.eos_logging_global](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_logging_global_module.rst)|Manages logging resource module [arista.eos.eos_ntp_global](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_ntp_global_module.rst)|Manages ntp resource module [arista.eos.eos_ospf_interfaces](https://github.com/ansible-collections/arista.eos/blob/main/docs/arista.eos.eos_ospf_interfaces_module.rst)|OSPF Interfaces Resource Module. @@ -114,8 +112,6 @@ The following example task replaces configuration changes in the existing config state: replaced ``` -**NOTE**: For Ansible 2.9, you may not see deprecation warnings when you run your playbooks with this collection. Use this documentation to track when a module is deprecated. - ### See Also: * [Arista EOS Platform Options](https://docs.ansible.com/ansible/latest/network/user_guide/platform_eos.html) diff --git a/ansible_collections/arista/eos/changelogs/changelog.yaml b/ansible_collections/arista/eos/changelogs/changelog.yaml index da67f8362..fbb2d9833 100644 --- a/ansible_collections/arista/eos/changelogs/changelog.yaml +++ b/ansible_collections/arista/eos/changelogs/changelog.yaml @@ -11,11 +11,6 @@ releases: - description: Manage multiline banners on Arista EOS devices name: eos_banner namespace: "" - - description: - (deprecated, removed after 2023-01-29) Configure global BGP protocol - settings on Arista EOS. - name: eos_bgp - namespace: "" - description: Run arbitrary commands on an Arista EOS device name: eos_command namespace: "" @@ -55,9 +50,6 @@ releases: - description: LLDP interfaces resource module name: eos_lldp_interfaces namespace: "" - - description: Manage logging on network devices - name: eos_logging - namespace: "" - description: OSPFv2 resource module name: eos_ospfv2 namespace: "" @@ -586,3 +578,61 @@ releases: fragments: - ospf_v2_reference_bandwidth_fix.yaml release_date: "2023-11-27" + 7.0.0: + changes: + major_changes: + - Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions + are EoL now. + release_summary: + Starting from this release, the minimum `ansible-core` version + this collection requires is `2.14.0`. The last known version compatible with + ansible-core<2.14 is `v6.2.2`. + fragments: + - fix_downstream_tests.yaml + release_date: "2023-11-30" + 7.1.0: + changes: + bugfixes: + - This fix is needed because static_routes and vlans are not returning anything + when resources are not configured. + - This got noticed in this issue (https://github.com/network-automation/toolkit/issues/47) + - correct a missing whitespace and add 'auth' string. + - correct the parsing of the elements in 'name_servers' in 'eos_system' module. + - when static_routes and vlans are not confirgured then return empty list. + doc_changes: + - eos_lag_interface - Updated examples for lag_interface module. + fragments: + - bugfixes_return_empty_data_structure_for_no_facts.yaml + - eos_system_element_parsing_fix.yaml + - lag_interface_docupdate.yml + - snmp_missing_whitespace_and_authentication_fix.yaml + - tests_trivial.yaml + - trivial_tests.yaml + release_date: "2024-03-06" + 8.0.0: + changes: + major_changes: + - This release removes previously deprecated modules and attributes from this + collection. Please refer to the **Removed Features** section for details. + removed_features: + - Remove depreacted eos_bgp module which is replaced with eos_bgp_global and + eos_bgp_address_family. + - Remove deprecated eos_logging module which is replaced with eos_logging_global + resource module. + - Remove deprecated timers.throttle attribute. + fragments: + - remove_deprecated.yaml + - trivial_tests_updates.yaml + release_date: "2024-03-27" + 9.0.0: + changes: + major_changes: + - Update the netcommon base version 6.1.0 to support cli_restore plugin. + minor_changes: + - Add support for cli_restore functionality. + - Please refer the PR to know more about core changes (https://github.com/ansible-collections/ansible.netcommon/pull/618). + - cli_restore module is part of netcommon. + fragments: + - 218sanity.yml + - add_restore_support.yaml + release_date: "2024-04-13" diff --git a/ansible_collections/arista/eos/docs/arista.eos.eos_bgp_module.rst b/ansible_collections/arista/eos/docs/arista.eos.eos_bgp_module.rst deleted file mode 100644 index 21f57f30b..000000000 --- a/ansible_collections/arista/eos/docs/arista.eos.eos_bgp_module.rst +++ /dev/null @@ -1,986 +0,0 @@ -.. _arista.eos.eos_bgp_module: - - -****************** -arista.eos.eos_bgp -****************** - -**(deprecated, removed after 2023-01-29) Configure global BGP protocol settings on Arista EOS.** - - -Version added: 1.0.0 - -.. contents:: - :local: - :depth: 1 - -DEPRECATED ----------- -:Removed in collection release after 2023-01-01 -:Why: Updated module released with more functionality. -:Alternative: eos_bgp_global - - - -Synopsis --------- -- This module provides configuration management of global BGP parameters on Arista EOS devices. - - - - -Parameters ----------- - -.. raw:: html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterChoices/DefaultsComments
-
- config - -
- dictionary -
-
- -
Specifies the BGP related configuration.
-
-
- address_family - -
- list - / elements=dictionary -
-
- -
Specifies BGP address family related configurations.
-
-
- afi - -
- string - / required -
-
-
    Choices: -
  • ipv4
  • -
  • ipv6
  • -
-
-
Type of address family to configure.
-
-
- neighbors - -
- list - / elements=dictionary -
-
- -
Specifies BGP neighbor related configurations in Address Family configuration mode.
-
-
- activate - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Enable the Address Family for this Neighbor.
-
-
- default_originate - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Originate default route to this neighbor.
-
-
- graceful_restart - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Enable/disable graceful restart mode for this neighbor.
-
-
- neighbor - -
- string - / required -
-
- -
Neighbor router address.
-
-
- weight - -
- integer -
-
- -
Assign weight for routes learnt from this neighbor.
-
The range is from 0 to 65535
-
-
- networks - -
- list - / elements=dictionary -
-
- -
Specify Networks to announce via BGP.
-
For operation replace, this option is mutually exclusive with root level networks option.
-
-
- masklen - -
- integer -
-
- -
Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.).
-
-
- prefix - -
- string - / required -
-
- -
Network ID to announce via BGP.
-
-
- route_map - -
- string -
-
- -
Route map to modify the attributes.
-
-
- redistribute - -
- list - / elements=dictionary -
-
- -
Specifies the redistribute information from another routing protocol.
-
-
- protocol - -
- string - / required -
-
-
    Choices: -
  • ospfv3
  • -
  • ospf
  • -
  • isis
  • -
  • static
  • -
  • connected
  • -
  • rip
  • -
-
-
Specifies the protocol for configuring redistribute information.
-
-
- route_map - -
- string -
-
- -
Specifies the route map reference.
-
-
- bgp_as - -
- integer - / required -
-
- -
Specifies the BGP Autonomous System (AS) number to configure on the device.
-
-
- log_neighbor_changes - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Enable/disable logging neighbor up/down and reset reason.
-
-
- neighbors - -
- list - / elements=dictionary -
-
- -
Specifies BGP neighbor related configurations.
-
-
- description - -
- string -
-
- -
Neighbor specific description.
-
-
- ebgp_multihop - -
- integer -
-
- -
Specifies the maximum hop count for EBGP neighbors not on directly connected networks.
-
The range is from 1 to 255.
-
-
- enabled - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Administratively shutdown or enable a neighbor.
-
-
- maximum_prefix - -
- integer -
-
- -
Maximum number of prefixes to accept from this peer.
-
The range is from 0 to 4294967294.
-
-
- neighbor - -
- string - / required -
-
- -
Neighbor router address.
-
-
- password - -
- string -
-
- -
Password to authenticate the BGP peer connection.
-
-
- peer_group - -
- string -
-
- -
Name of the peer group that the neighbor is a member of.
-
-
- remote_as - -
- integer - / required -
-
- -
Remote AS of the BGP neighbor to configure.
-
-
- remove_private_as - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Remove the private AS number from outbound updates.
-
-
- route_reflector_client - -
- integer -
-
- -
Specify a neighbor as a route reflector client.
-
-
- timers - -
- dictionary -
-
- -
Specifies BGP neighbor timer related configurations.
-
-
- holdtime - -
- integer - / required -
-
- -
Interval (in seconds) after not receiving a keepalive message that device declares a peer dead.
-
The range is from 3 to 7200.
-
Setting this value to 0 will not send keep-alives (hold forever).
-
-
- keepalive - -
- integer - / required -
-
- -
Frequency (in seconds) with which the device sends keepalive messages to its peer.
-
The range is from 0 to 3600.
-
-
- update_source - -
- string -
-
- -
Source of the routing updates.
-
-
- networks - -
- list - / elements=dictionary -
-
- -
Specify Networks to announce via BGP.
-
For operation replace, this option is mutually exclusive with networks option under address_family.
-
For operation replace, if the device already has an address family activated, this option is not allowed.
-
-
- masklen - -
- integer -
-
- -
Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.).
-
-
- prefix - -
- string - / required -
-
- -
Network ID to announce via BGP.
-
-
- route_map - -
- string -
-
- -
Route map to modify the attributes.
-
-
- redistribute - -
- list - / elements=dictionary -
-
- -
Specifies the redistribute information from another routing protocol.
-
-
- protocol - -
- string - / required -
-
-
    Choices: -
  • ospf
  • -
  • ospfv3
  • -
  • static
  • -
  • connected
  • -
  • rip
  • -
  • isis
  • -
-
-
Specifies the protocol for configuring redistribute information.
-
-
- route_map - -
- string -
-
- -
Specifies the route map reference.
-
-
- router_id - -
- string -
-
- -
Configures the BGP routing process router-id value.
-
-
- operation - -
- string -
-
-
    Choices: -
  • merge ←
  • -
  • replace
  • -
  • override
  • -
  • delete
  • -
-
-
Specifies the operation to be performed on the BGP process configured on the device.
-
In case of merge, the input configuration will be merged with the existing BGP configuration on the device.
-
In case of replace, if there is a diff between the existing configuration and the input configuration, the existing configuration will be replaced by the input configuration for every option that has the diff.
-
In case of override, all the existing BGP configuration will be removed from the device and replaced with the input configuration.
-
In case of delete the existing BGP configuration will be removed from the device.
-
-
- - -Notes ------ - -.. note:: - - Tested against Arista EOS 4.24.6F - - - -Examples --------- - -.. code-block:: yaml - - - name: configure global bgp as 64496 - arista.eos.eos_bgp: - config: - bgp_as: 64496 - router_id: 192.0.2.1 - log_neighbor_changes: true - neighbors: - - neighbor: 203.0.113.5 - remote_as: 64511 - timers: - keepalive: 300 - holdtime: 360 - - neighbor: 198.51.100.2 - remote_as: 64498 - networks: - - prefix: 198.51.100.0 - route_map: RMAP_1 - - prefix: 192.0.2.0 - masklen: 23 - address_family: - - afi: ipv4 - safi: unicast - redistribute: - - protocol: isis - route_map: RMAP_1 - operation: merge - - name: Configure BGP neighbors - arista.eos.eos_bgp: - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.10 - remote_as: 64496 - description: IBGP_NBR_1 - ebgp_multihop: 100 - timers: - keepalive: 300 - holdtime: 360 - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - operation: merge - - name: Configure root-level networks for BGP - arista.eos.eos_bgp: - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - prefix: 203.0.113.32 - masklen: 27 - route_map: RMAP_2 - operation: merge - - name: Configure BGP neighbors under address family mode - arista.eos.eos_bgp: - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - neighbors: - - neighbor: 203.0.113.10 - activate: true - default_originate: true - - neighbor: 192.0.2.15 - activate: true - graceful_restart: true - operation: merge - - name: remove bgp as 64496 from config - arista.eos.eos_bgp: - config: - bgp_as: 64496 - operation: delete - - - -Return Values -------------- -Common return values are documented `here `_, the following are the fields unique to this module: - -.. raw:: html - - - - - - - - - - - - -
KeyReturnedDescription
-
- commands - -
- list -
-
always -
The list of configuration mode commands to send to the device
-
-
Sample:
-
['router bgp 64496', 'bgp router-id 192.0.2.1', 'bgp log-neighbor-changes', 'neighbor 203.0.113.5 remote-as 64511', 'neighbor 203.0.113.5 timers 300 360', 'neighbor 198.51.100.2 remote-as 64498', 'network 198.51.100.0 route-map RMAP_1', 'network 192.0.2.0 mask 255.255.254.0', 'address-family ipv4', 'redistribute isis route-map RMAP_1', 'exit-address-family']
-
-

- - -Status ------- - - -- This module will be removed in a release after 2023-01-01. *[deprecated]* -- For more information see `DEPRECATED`_. - - -Authors -~~~~~~~ - -- Nilashish Chakraborty (@NilashishC) diff --git a/ansible_collections/arista/eos/docs/arista.eos.eos_lag_interfaces_module.rst b/ansible_collections/arista/eos/docs/arista.eos.eos_lag_interfaces_module.rst index 4caabb004..e5feadf87 100644 --- a/ansible_collections/arista/eos/docs/arista.eos.eos_lag_interfaces_module.rst +++ b/ansible_collections/arista/eos/docs/arista.eos.eos_lag_interfaces_module.rst @@ -196,10 +196,10 @@ Examples - name: Merge provided LAG attributes with existing device configuration arista.eos.eos_lag_interfaces: config: - - name: 5 + - name: Port-Channel5 members: - member: Ethernet2 - mode: on + mode: "on" state: merged # After state: @@ -225,10 +225,10 @@ Examples - name: Replace all device configuration of specified LAGs with provided configuration arista.eos.eos_lag_interfaces: config: - - name: 5 + - name: Port-Channel5 members: - member: Ethernet2 - mode: on + mode: "on" state: replaced # After state: @@ -253,10 +253,10 @@ Examples - name: Override all device configuration of all LAG attributes with provided configuration arista.eos.eos_lag_interfaces: config: - - name: 10 + - name: Port-Channel10 members: - member: Ethernet2 - mode: on + mode: "on" state: overridden # After state: @@ -282,7 +282,7 @@ Examples - name: Delete LAG attributes of the given interfaces. arista.eos.eos_lag_interfaces: config: - - name: 5 + - name: Port-Channel5 members: - member: Ethernet1 state: deleted @@ -310,24 +310,24 @@ Examples # Output: # parsed: - # - name: 5 + # - name: Port-Channel5 # members: # - member: Ethernet2 - # mode: on + # mode: "on" # - member: Ethernet1 - # mode: on + # mode: "on" # using rendered: - name: Use Rendered to convert the structured data to native config arista.eos.eos_lag_interfaces: config: - - name: 5 + - name: Port-Channel5 members: - member: Ethernet2 - mode: on + mode: "on" - member: Ethernet1 - mode: on + mode: "on" state: rendered # ----------- # Output @@ -355,7 +355,7 @@ Examples # Output: # gathered: - # - name: 5 + # - name: Port-Channel5 # members: # - member: Ethernet2 # mode: on diff --git a/ansible_collections/arista/eos/docs/arista.eos.eos_logging_module.rst b/ansible_collections/arista/eos/docs/arista.eos.eos_logging_module.rst deleted file mode 100644 index 77c3b9ed4..000000000 --- a/ansible_collections/arista/eos/docs/arista.eos.eos_logging_module.rst +++ /dev/null @@ -1,388 +0,0 @@ -.. _arista.eos.eos_logging_module: - - -********************** -arista.eos.eos_logging -********************** - -**Manage logging on network devices** - - -Version added: 1.0.0 - -.. contents:: - :local: - :depth: 1 - -DEPRECATED ----------- -:Removed in collection release after 2024-01-01 -:Why: Updated module released with more functionality. -:Alternative: eos_logging_global - - - -Synopsis --------- -- This module provides declarative management of logging on Arista Eos devices. - - - - -Parameters ----------- - -.. raw:: html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterChoices/DefaultsComments
-
- aggregate - -
- list - / elements=dictionary -
-
- -
List of logging definitions.
-
-
- dest - -
- string -
-
-
    Choices: -
  • on
  • -
  • host
  • -
  • console
  • -
  • monitor
  • -
  • buffered
  • -
-
-
Destination of the logs.
-
-
- facility - -
- string -
-
- -
Set logging facility.
-
-
- level - -
- string -
-
-
    Choices: -
  • emergencies
  • -
  • alerts
  • -
  • critical
  • -
  • errors
  • -
  • warnings
  • -
  • notifications
  • -
  • informational
  • -
  • debugging
  • -
-
-
Set logging severity levels.
-
-
- name - -
- string -
-
- -
The hostname or IP address of the destination.
-
Required when dest=host.
-
-
- size - -
- integer -
-
- -
Size of buffer. The acceptable value is in range from 10 to 2147483647 bytes.
-
-
- state - -
- string -
-
-
    Choices: -
  • present ←
  • -
  • absent
  • -
-
-
State of the logging configuration.
-
-
- dest - -
- string -
-
-
    Choices: -
  • on
  • -
  • host
  • -
  • console
  • -
  • monitor
  • -
  • buffered
  • -
-
-
Destination of the logs.
-
-
- facility - -
- string -
-
- -
Set logging facility.
-
-
- level - -
- string -
-
-
    Choices: -
  • emergencies
  • -
  • alerts
  • -
  • critical
  • -
  • errors
  • -
  • warnings
  • -
  • notifications
  • -
  • informational
  • -
  • debugging
  • -
-
-
Set logging severity levels.
-
-
- name - -
- string -
-
- -
The hostname or IP address of the destination.
-
Required when dest=host.
-
-
- size - -
- integer -
-
- -
Size of buffer. The acceptable value is in range from 10 to 2147483647 bytes.
-
-
- state - -
- string -
-
-
    Choices: -
  • present ←
  • -
  • absent
  • -
-
-
State of the logging configuration.
-
-
- - -Notes ------ - -.. note:: - - Tested against Arista EOS 4.24.6F - - - -Examples --------- - -.. code-block:: yaml - - - name: configure host logging - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: present - - - name: remove host logging configuration - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: absent - - - name: configure console logging level and facility - arista.eos.eos_logging: - dest: console - facility: local7 - level: debugging - state: present - - - name: enable logging to all - arista.eos.eos_logging: - dest: on - - - name: configure buffer size - arista.eos.eos_logging: - dest: buffered - size: 5000 - - - name: Configure logging using aggregate - arista.eos.eos_logging: - aggregate: - - {dest: console, level: warnings} - - {dest: buffered, size: 480000} - state: present - - - -Return Values -------------- -Common return values are documented `here `_, the following are the fields unique to this module: - -.. raw:: html - - - - - - - - - - - - -
KeyReturnedDescription
-
- commands - -
- list -
-
always -
The list of configuration mode commands to send to the device
-
-
Sample:
-
['logging facility local7', 'logging host 172.16.0.1']
-
-

- - -Status ------- - - -- This module will be removed in a release after 2024-01-01. *[deprecated]* -- For more information see `DEPRECATED`_. - - -Authors -~~~~~~~ - -- Trishna Guha (@trishnaguha) diff --git a/ansible_collections/arista/eos/docs/arista.eos.eos_ospfv3_module.rst b/ansible_collections/arista/eos/docs/arista.eos.eos_ospfv3_module.rst index 8cb04a354..1b9dbfffe 100644 --- a/ansible_collections/arista/eos/docs/arista.eos.eos_ospfv3_module.rst +++ b/ansible_collections/arista/eos/docs/arista.eos.eos_ospfv3_module.rst @@ -2054,134 +2054,6 @@ Parameters - - - - - - -
- throttle - -
- dictionary -
- - - - -
This command is deprecated by 'timers lsa' or 'timers spf'.
- - - - - - - - - -
- initial - -
- integer -
- - - - -
Initial SPF schedule delay in msecs.
- - - - - - - - - -
- lsa - -
- boolean -
- - -
    Choices: -
  • no
  • -
  • yes
  • -
- - -
Configure threshold for retransmission of lsa
- - - - - - - - - -
- max - -
- integer -
- - - - -
Max wait time between two SPFs in msecs.
- - - - - - - - - -
- min - -
- integer -
- - - - -
Min Hold time between two SPFs in msecs
- - - - - - - - - -
- spf - -
- boolean -
- - -
    Choices: -
  • no
  • -
  • yes
  • -
- - -
Configure time between SPF calculations
- - - @@ -3695,128 +3567,6 @@ Parameters - - - - - -
- throttle - -
- dictionary -
- - - - -
This command is deprecated by 'timers lsa' or 'timers spf'.
- - - - - - - - -
- initial - -
- integer -
- - - - -
Initial SPF schedule delay in msecs.
- - - - - - - - -
- lsa - -
- boolean -
- - -
    Choices: -
  • no
  • -
  • yes
  • -
- - -
Configure threshold for retransmission of lsa
- - - - - - - - -
- max - -
- integer -
- - - - -
Max wait time between two SPFs in msecs.
- - - - - - - - -
- min - -
- integer -
- - - - -
Min Hold time between two SPFs in msecs
- - - - - - - - -
- spf - -
- boolean -
- - -
    Choices: -
  • no
  • -
  • yes
  • -
- - -
Configure time between SPF calculations
- - - diff --git a/ansible_collections/arista/eos/docs/arista.eos.eos_system_module.rst b/ansible_collections/arista/eos/docs/arista.eos.eos_system_module.rst index 12f080f75..3e6099eab 100644 --- a/ansible_collections/arista/eos/docs/arista.eos.eos_system_module.rst +++ b/ansible_collections/arista/eos/docs/arista.eos.eos_system_module.rst @@ -103,7 +103,7 @@ Parameters
list - / elements=string + / elements=raw
diff --git a/ansible_collections/arista/eos/ignore-2.9.txt b/ansible_collections/arista/eos/ignore-2.9.txt deleted file mode 100644 index dd36b8936..000000000 --- a/ansible_collections/arista/eos/ignore-2.9.txt +++ /dev/null @@ -1,136 +0,0 @@ -plugins/module_utils/network/eos/providers/cli/config/bgp/address_family.py future-import-boilerplate -plugins/module_utils/network/eos/providers/cli/config/bgp/address_family.py metaclass-boilerplate -plugins/module_utils/network/eos/providers/cli/config/bgp/neighbors.py future-import-boilerplate -plugins/module_utils/network/eos/providers/cli/config/bgp/neighbors.py metaclass-boilerplate -plugins/module_utils/network/eos/providers/cli/config/bgp/process.py future-import-boilerplate -plugins/module_utils/network/eos/providers/cli/config/bgp/process.py metaclass-boilerplate -plugins/module_utils/network/eos/providers/module.py future-import-boilerplate -plugins/module_utils/network/eos/providers/module.py metaclass-boilerplate -plugins/module_utils/network/eos/providers/providers.py future-import-boilerplate -plugins/module_utils/network/eos/providers/providers.py metaclass-boilerplate -plugins/modules/eos_banner.py future-import-boilerplate -plugins/modules/eos_banner.py metaclass-boilerplate -plugins/modules/eos_banner.py validate-modules:doc-missing-type -plugins/modules/eos_banner.py validate-modules:doc-required-mismatch -plugins/modules/eos_bgp.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/eos_bgp.py validate-modules:doc-elements-mismatch -plugins/modules/eos_bgp.py validate-modules:doc-missing-type -plugins/modules/eos_bgp.py validate-modules:doc-type-does-not-match-spec -plugins/modules/eos_bgp.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/eos_bgp.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_command.py future-import-boilerplate -plugins/modules/eos_command.py metaclass-boilerplate -plugins/modules/eos_command.py validate-modules:doc-missing-type -plugins/modules/eos_command.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_command.py validate-modules:doc-required-mismatch -plugins/modules/eos_command.py validate-modules:parameter-list-no-elements -plugins/modules/eos_config.py future-import-boilerplate -plugins/modules/eos_config.py metaclass-boilerplate -plugins/modules/eos_config.py validate-modules:doc-missing-type -plugins/modules/eos_config.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_config.py validate-modules:doc-required-mismatch -plugins/modules/eos_config.py validate-modules:parameter-list-no-elements -plugins/modules/eos_eapi.py future-import-boilerplate -plugins/modules/eos_eapi.py metaclass-boilerplate -plugins/modules/eos_eapi.py validate-modules:doc-default-does-not-match-spec -plugins/modules/eos_eapi.py validate-modules:doc-missing-type -plugins/modules/eos_eapi.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_eapi.py validate-modules:doc-required-mismatch -plugins/modules/eos_lldp.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/eos_lldp.py validate-modules:doc-missing-type -plugins/modules/eos_lldp.py validate-modules:doc-required-mismatch -plugins/modules/eos_logging.py future-import-boilerplate -plugins/modules/eos_logging.py metaclass-boilerplate -plugins/modules/eos_logging.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/eos_logging.py validate-modules:doc-elements-mismatch -plugins/modules/eos_logging.py validate-modules:doc-missing-type -plugins/modules/eos_logging.py validate-modules:missing-suboption-docs -plugins/modules/eos_logging.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_logging.py validate-modules:undocumented-parameter -plugins/modules/eos_logging.py validate-modules:doc-required-mismatch -plugins/modules/eos_system.py future-import-boilerplate -plugins/modules/eos_system.py metaclass-boilerplate -plugins/modules/eos_system.py validate-modules:doc-missing-type -plugins/modules/eos_system.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_system.py validate-modules:doc-required-mismatch -plugins/modules/eos_system.py validate-modules:parameter-list-no-elements -plugins/modules/eos_user.py future-import-boilerplate -plugins/modules/eos_user.py metaclass-boilerplate -plugins/modules/eos_user.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/eos_user.py validate-modules:doc-elements-mismatch -plugins/modules/eos_user.py validate-modules:doc-missing-type -plugins/modules/eos_user.py validate-modules:missing-suboption-docs -plugins/modules/eos_user.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_user.py validate-modules:undocumented-parameter -plugins/modules/eos_user.py validate-modules:doc-required-mismatch -plugins/modules/eos_vrf.py future-import-boilerplate -plugins/modules/eos_vrf.py metaclass-boilerplate -plugins/modules/eos_vrf.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/eos_vrf.py validate-modules:doc-elements-mismatch -plugins/modules/eos_vrf.py validate-modules:doc-missing-type -plugins/modules/eos_vrf.py validate-modules:missing-suboption-docs -plugins/modules/eos_vrf.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_vrf.py validate-modules:undocumented-parameter -plugins/modules/eos_vrf.py validate-modules:doc-required-mismatch -plugins/modules/eos_vrf.py validate-modules:parameter-list-no-elements -plugins/modules/eos_interface.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/eos_interface.py validate-modules:doc-missing-type -plugins/modules/eos_interface.py validate-modules:missing-suboption-docs -plugins/modules/eos_interface.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_interface.py validate-modules:undocumented-parameter -plugins/modules/eos_interface.py validate-modules:doc-required-mismatch -plugins/modules/eos_interface.py validate-modules:doc-elements-mismatch -plugins/modules/eos_vlan.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/eos_vlan.py validate-modules:doc-missing-type -plugins/modules/eos_vlan.py validate-modules:missing-suboption-docs -plugins/modules/eos_vlan.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_vlan.py validate-modules:undocumented-parameter -plugins/modules/eos_vlan.py validate-modules:doc-required-mismatch -plugins/modules/eos_vlan.py validate-modules:parameter-list-no-elements -plugins/modules/eos_vlan.py validate-modules:doc-elements-mismatch -plugins/modules/eos_l3_interface.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/eos_l3_interface.py validate-modules:doc-missing-type -plugins/modules/eos_l3_interface.py validate-modules:missing-suboption-docs -plugins/modules/eos_l3_interface.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_l3_interface.py validate-modules:undocumented-parameter -plugins/modules/eos_l3_interface.py validate-modules:doc-required-mismatch -plugins/modules/eos_l3_interface.py validate-modules:doc-elements-mismatch -plugins/modules/eos_l2_interface.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/eos_l2_interface.py validate-modules:doc-missing-type -plugins/modules/eos_l2_interface.py validate-modules:missing-suboption-docs -plugins/modules/eos_l2_interface.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_l2_interface.py validate-modules:undocumented-parameter -plugins/modules/eos_l2_interface.py validate-modules:doc-required-mismatch -plugins/modules/eos_l2_interface.py validate-modules:doc-elements-mismatch -plugins/modules/eos_linkagg.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/eos_linkagg.py validate-modules:doc-missing-type -plugins/modules/eos_linkagg.py validate-modules:missing-suboption-docs -plugins/modules/eos_linkagg.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_linkagg.py validate-modules:undocumented-parameter -plugins/modules/eos_linkagg.py validate-modules:doc-required-mismatch -plugins/modules/eos_linkagg.py validate-modules:parameter-list-no-elements -plugins/modules/eos_linkagg.py validate-modules:doc-elements-mismatch -plugins/modules/eos_static_route.py validate-modules:doc-choices-do-not-match-spec -plugins/modules/eos_static_route.py validate-modules:doc-missing-type -plugins/modules/eos_static_route.py validate-modules:missing-suboption-docs -plugins/modules/eos_static_route.py validate-modules:parameter-type-not-in-doc -plugins/modules/eos_static_route.py validate-modules:undocumented-parameter -plugins/modules/eos_static_route.py validate-modules:doc-required-mismatch -plugins/modules/eos_static_route.py validate-modules:doc-elements-mismatch -plugins/modules/eos_interfaces.py validate-modules:doc-elements-mismatch -plugins/modules/eos_interfaces.py validate-modules:parameter-list-no-elements -plugins/modules/eos_facts.py validate-modules:doc-required-mismatch -plugins/modules/eos_facts.py validate-modules:parameter-list-no-elements -plugins/action/eos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/doc_fragments/eos.py future-import-boilerplate -plugins/doc_fragments/eos.py metaclass-boilerplate -plugins/module_utils/network/eos/eos.py future-import-boilerplate -plugins/module_utils/network/eos/eos.py metaclass-boilerplate -tests/unit/mock/path.py future-import-boilerplate -tests/unit/mock/path.py metaclass-boilerplate -tests/unit/mock/yaml_helper.py future-import-boilerplate -tests/unit/mock/yaml_helper.py metaclass-boilerplate -tests/unit/modules/conftest.py future-import-boilerplate -tests/unit/modules/conftest.py metaclass-boilerplate -tests/unit/modules/utils.py future-import-boilerplate -tests/unit/modules/utils.py metaclass-boilerplate diff --git a/ansible_collections/arista/eos/meta/runtime.yml b/ansible_collections/arista/eos/meta/runtime.yml index e297849f5..d5545a0bc 100644 --- a/ansible_collections/arista/eos/meta/runtime.yml +++ b/ansible_collections/arista/eos/meta/runtime.yml @@ -1,5 +1,5 @@ --- -requires_ansible: ">=2.9.10" +requires_ansible: ">=2.14.0" plugin_routing: modules: acl_interfaces: @@ -8,15 +8,6 @@ plugin_routing: redirect: arista.eos.eos_acls banner: redirect: arista.eos.eos_banner - bgp: - redirect: arista.eos.eos_bgp - deprecation: - removal_date: "2023-01-01" - warning_text: See the plugin documentation for more details - eos_bgp: - deprecation: - removal_date: "2023-01-01" - warning_text: See the plugin documentation for more details bgp_address_family: redirect: arista.eos.eos_bgp_address_family bgp_global: @@ -49,15 +40,6 @@ plugin_routing: redirect: arista.eos.eos_lldp_global lldp_interfaces: redirect: arista.eos.eos_lldp_interfaces - logging: - redirect: arista.eos.eos_logging - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details - eos_logging: - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details logging_global: redirect: arista.eos.eos_logging_global ntp_global: diff --git a/ansible_collections/arista/eos/plugins/cliconf/eos.py b/ansible_collections/arista/eos/plugins/cliconf/eos.py index 9c6fb753c..847ca8e0c 100644 --- a/ansible_collections/arista/eos/plugins/cliconf/eos.py +++ b/ansible_collections/arista/eos/plugins/cliconf/eos.py @@ -328,6 +328,12 @@ class Cliconf(CliconfBase): responses.append(out) return responses + def restore(self, filename=None, path=""): + if not filename: + raise ValueError("'file_name' value is required for restore") + cmd = f"configure replace {path}{filename} best-effort" + return self.send_command(cmd) + def get_diff( self, candidate=None, diff --git a/ansible_collections/arista/eos/plugins/module_utils/network/eos/argspec/ospfv3/ospfv3.py b/ansible_collections/arista/eos/plugins/module_utils/network/eos/argspec/ospfv3/ospfv3.py index ece4db0cd..7964b4f4f 100644 --- a/ansible_collections/arista/eos/plugins/module_utils/network/eos/argspec/ospfv3/ospfv3.py +++ b/ansible_collections/arista/eos/plugins/module_utils/network/eos/argspec/ospfv3/ospfv3.py @@ -128,16 +128,6 @@ class Ospfv3Args(object): # pylint: disable=R0903 "timers": { "type": "dict", "options": { - "throttle": { - "type": "dict", - "options": { - "max": {"type": "int"}, - "initial": {"type": "int"}, - "min": {"type": "int"}, - "spf": {"type": "bool"}, - "lsa": {"type": "bool"}, - }, - }, "spf": { "type": "dict", "options": { @@ -357,16 +347,6 @@ class Ospfv3Args(object): # pylint: disable=R0903 "timers": { "type": "dict", "options": { - "throttle": { - "type": "dict", - "options": { - "max": {"type": "int"}, - "initial": {"type": "int"}, - "min": {"type": "int"}, - "spf": {"type": "bool"}, - "lsa": {"type": "bool"}, - }, - }, "spf": { "type": "dict", "options": { diff --git a/ansible_collections/arista/eos/plugins/module_utils/network/eos/config/ospfv3/ospfv3.py b/ansible_collections/arista/eos/plugins/module_utils/network/eos/config/ospfv3/ospfv3.py index ed01f1c5e..b567de6f8 100644 --- a/ansible_collections/arista/eos/plugins/module_utils/network/eos/config/ospfv3/ospfv3.py +++ b/ansible_collections/arista/eos/plugins/module_utils/network/eos/config/ospfv3/ospfv3.py @@ -147,30 +147,6 @@ class Ospfv3(ResourceModule): def _global_compare(self, want, have): for name, entry in iteritems(want): if name == "timers": - if entry.get("throttle"): - throttle = entry.pop("throttle") - modified = {} - if throttle.get("lsa"): - modified["lsa"] = { - "max": throttle["max"], - "min": throttle["min"], - "initial": throttle["initial"], - "direction": "tx", - } - if throttle.get("spf"): - modified["spf"] = { - "max": throttle["max"], - "min": throttle["min"], - "initial": throttle["initial"], - } - entry.update(modified) - self._module.warn( - " ** The 'timers' argument has been changed to have separate 'lsa' and 'spf' keys and 'throttle' has been deprecated. ** " - " \n** Your task has been modified to use {0}. ** " - " \n** timers.throttle will be removed after '2024-01-01' ** ".format( - entry, - ), - ) if entry.get("lsa") and not isinstance(entry["lsa"], dict): modified = {} if not isinstance(entry["lsa"], int): @@ -183,13 +159,6 @@ class Ospfv3(ResourceModule): "lsa": {"direction": "rx", "min": entry["lsa"]}, }, } - self._module.warn( - " ** 'timers lsa arrival' has changed to 'timers lsa rx min interval' from eos 4.23 onwards. ** " - " \n** Your task has been modified to use {0}. ** " - " \n** timers.lsa of type int will be removed after '2024-01-01' ** ".format( - modified, - ), - ) entry["lsa"] = modified["timers"]["lsa"] if name in ["vrf", "address_family"]: continue @@ -240,30 +209,6 @@ class Ospfv3(ResourceModule): for name, entry in iteritems(wafs): begin = len(self.commands) if "timers" in entry: - if entry["timers"].get("throttle"): - throttle = entry["timers"].pop("throttle") - modified = {} - if throttle.get("lsa"): - modified["lsa"] = { - "max": throttle["max"], - "min": throttle["min"], - "initial": throttle["initial"], - "direction": "tx", - } - if throttle.get("spf"): - modified["spf"] = { - "max": throttle["max"], - "min": throttle["min"], - "initial": throttle["initial"], - } - entry["timers"].update(modified) - self._module.warn( - " ** The 'timers' argument has been changed to have separate 'lsa' and 'spf' keys and 'throttle' has been deprecated. ** " - " \n** Your task has been modified to use {0}. ** " - " \n** timers.throttle will be removed after '2024-01-01' ** ".format( - entry["timers"], - ), - ) if entry["timers"].get("lsa") and not isinstance( entry["timers"]["lsa"], dict, @@ -281,13 +226,6 @@ class Ospfv3(ResourceModule): }, }, } - self._module.warn( - " ** 'timers lsa arrival' has changed to 'timers lsa rx min interval' from eos 4.23 onwards. ** " - " \n** Your task has been modified to use {0}. ** " - " \n** timers.lsa of type int will be removed after '2024-01-01' ** ".format( - modified, - ), - ) entry["timers"]["lsa"] = modified["timers"]["lsa"] self._compare_lists(want=entry, have=hafs.get(name, {})) self._areas_compare(want=entry, have=hafs.get(name, {})) diff --git a/ansible_collections/arista/eos/plugins/module_utils/network/eos/facts/static_routes/static_routes.py b/ansible_collections/arista/eos/plugins/module_utils/network/eos/facts/static_routes/static_routes.py index c97c48d5f..369f869ef 100644 --- a/ansible_collections/arista/eos/plugins/module_utils/network/eos/facts/static_routes/static_routes.py +++ b/ansible_collections/arista/eos/plugins/module_utils/network/eos/facts/static_routes/static_routes.py @@ -96,7 +96,7 @@ class Static_routesFacts(object): if obj: objs.append(obj) ansible_facts["ansible_network_resources"].pop("static_routes", None) - facts = {} + facts = {"static_routes": []} if objs: facts["static_routes"] = [] params = utils.validate_config( diff --git a/ansible_collections/arista/eos/plugins/module_utils/network/eos/facts/vlans/vlans.py b/ansible_collections/arista/eos/plugins/module_utils/network/eos/facts/vlans/vlans.py index eddd4c4e5..a6bfcb697 100644 --- a/ansible_collections/arista/eos/plugins/module_utils/network/eos/facts/vlans/vlans.py +++ b/ansible_collections/arista/eos/plugins/module_utils/network/eos/facts/vlans/vlans.py @@ -69,7 +69,7 @@ class VlansFacts(object): objs.extend(obj) ansible_facts["ansible_network_resources"].pop("vlans", None) - facts = {} + facts = {"vlans": []} if objs: params = utils.validate_config( self.argument_spec, diff --git a/ansible_collections/arista/eos/plugins/module_utils/network/eos/rm_templates/snmp_server.py b/ansible_collections/arista/eos/plugins/module_utils/network/eos/rm_templates/snmp_server.py index ef83f506a..3e22fe780 100644 --- a/ansible_collections/arista/eos/plugins/module_utils/network/eos/rm_templates/snmp_server.py +++ b/ansible_collections/arista/eos/plugins/module_utils/network/eos/rm_templates/snmp_server.py @@ -294,7 +294,7 @@ def _tmplt_snmp_server_hosts(config_data): el = list(config_data["hosts"].values())[0] command = "snmp-server host " + el["host"] if el.get("vrf"): - command += " vrf" + el["vrf"] + command += " vrf " + el["vrf"] if el.get("informs"): command += " informs" if el.get("traps"): @@ -334,7 +334,7 @@ def _tmplt_snmp_server_users_auth(config_data): command += " udp-port " + str(el["udp_port"]) command += " " + el["version"] if el.get("auth"): - command += " " + el["auth"]["algorithm"] + " " + el["auth"]["auth_passphrase"] + command += " auth " + el["auth"]["algorithm"] + " " + el["auth"]["auth_passphrase"] if el["auth"].get("encryption"): command += " priv " + el["auth"]["encryption"] + " " + el["auth"]["priv_passphrase"] return command @@ -351,7 +351,7 @@ def _tmplt_snmp_server_users_localized(config_data): if el.get("localized"): command += " localized " + el["localized"]["engineid"] el = el["localized"] - command += " " + el["algorithm"] + " " + el["auth_passphrase"] + command += " auth " + el["algorithm"] + " " + el["auth_passphrase"] if el.get("encryption"): command += " priv " + el["encryption"] + " " + el["priv_passphrase"] return command diff --git a/ansible_collections/arista/eos/plugins/modules/eos_bgp.py b/ansible_collections/arista/eos/plugins/modules/eos_bgp.py deleted file mode 100644 index e740f6c2e..000000000 --- a/ansible_collections/arista/eos/plugins/modules/eos_bgp.py +++ /dev/null @@ -1,468 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# (c) 2019, Ansible by Red Hat, inc -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# - -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - - -DOCUMENTATION = """ -module: eos_bgp -author: Nilashish Chakraborty (@NilashishC) -short_description: (deprecated, removed after 2023-01-29) Configure global BGP protocol settings on Arista EOS. -description: -- This module provides configuration management of global BGP parameters on Arista - EOS devices. -version_added: 1.0.0 -deprecated: - alternative: eos_bgp_global - why: Updated module released with more functionality. - removed_at_date: '2023-01-01' -notes: -- Tested against Arista EOS 4.24.6F -options: - config: - description: - - Specifies the BGP related configuration. - type: dict - suboptions: - bgp_as: - description: - - Specifies the BGP Autonomous System (AS) number to configure on the device. - type: int - required: true - router_id: - description: - - Configures the BGP routing process router-id value. - type: str - log_neighbor_changes: - description: - - Enable/disable logging neighbor up/down and reset reason. - type: bool - neighbors: - description: - - Specifies BGP neighbor related configurations. - type: list - elements: dict - suboptions: - neighbor: - description: - - Neighbor router address. - required: true - type: str - remote_as: - description: - - Remote AS of the BGP neighbor to configure. - type: int - required: true - update_source: - description: - - Source of the routing updates. - type: str - password: - description: - - Password to authenticate the BGP peer connection. - type: str - description: - description: - - Neighbor specific description. - type: str - ebgp_multihop: - description: - - Specifies the maximum hop count for EBGP neighbors not on directly connected - networks. - - The range is from 1 to 255. - type: int - peer_group: - description: - - Name of the peer group that the neighbor is a member of. - type: str - timers: - description: - - Specifies BGP neighbor timer related configurations. - type: dict - suboptions: - keepalive: - description: - - Frequency (in seconds) with which the device sends keepalive messages - to its peer. - - The range is from 0 to 3600. - type: int - required: true - holdtime: - description: - - Interval (in seconds) after not receiving a keepalive message that - device declares a peer dead. - - The range is from 3 to 7200. - - Setting this value to 0 will not send keep-alives (hold forever). - type: int - required: true - route_reflector_client: - description: - - Specify a neighbor as a route reflector client. - type: int - remove_private_as: - description: - - Remove the private AS number from outbound updates. - type: bool - enabled: - description: - - Administratively shutdown or enable a neighbor. - type: bool - maximum_prefix: - description: - - Maximum number of prefixes to accept from this peer. - - The range is from 0 to 4294967294. - type: int - redistribute: - description: - - Specifies the redistribute information from another routing protocol. - type: list - elements: dict - suboptions: - protocol: - description: - - Specifies the protocol for configuring redistribute information. - required: true - type: str - choices: [ospf, ospfv3, static, connected, rip, isis] - route_map: - description: - - Specifies the route map reference. - type: str - networks: - description: - - Specify Networks to announce via BGP. - - For operation replace, this option is mutually exclusive with networks option - under address_family. - - For operation replace, if the device already has an address family activated, - this option is not allowed. - type: list - elements: dict - suboptions: - prefix: - description: - - Network ID to announce via BGP. - required: true - type: str - masklen: - description: - - Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.). - type: int - route_map: - description: - - Route map to modify the attributes. - type: str - address_family: - description: - - Specifies BGP address family related configurations. - type: list - elements: dict - suboptions: - afi: - description: - - Type of address family to configure. - type: str - choices: - - ipv4 - - ipv6 - required: true - redistribute: - description: - - Specifies the redistribute information from another routing protocol. - type: list - elements: dict - suboptions: - protocol: - description: - - Specifies the protocol for configuring redistribute information. - required: true - type: str - choices: - - ospfv3 - - ospf - - isis - - static - - connected - - rip - route_map: - description: - - Specifies the route map reference. - type: str - networks: - description: - - Specify Networks to announce via BGP. - - For operation replace, this option is mutually exclusive with root level - networks option. - type: list - elements: dict - suboptions: - prefix: - description: - - Network ID to announce via BGP. - required: true - type: str - masklen: - description: - - Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.). - type: int - route_map: - description: - - Route map to modify the attributes. - type: str - neighbors: - description: - - Specifies BGP neighbor related configurations in Address Family configuration - mode. - type: list - elements: dict - suboptions: - neighbor: - description: - - Neighbor router address. - required: true - type: str - activate: - description: - - Enable the Address Family for this Neighbor. - type: bool - default_originate: - description: - - Originate default route to this neighbor. - type: bool - graceful_restart: - description: - - Enable/disable graceful restart mode for this neighbor. - type: bool - weight: - description: - - Assign weight for routes learnt from this neighbor. - - The range is from 0 to 65535 - type: int - operation: - description: - - Specifies the operation to be performed on the BGP process configured on the - device. - - In case of merge, the input configuration will be merged with the existing BGP - configuration on the device. - - In case of replace, if there is a diff between the existing configuration and - the input configuration, the existing configuration will be replaced by the - input configuration for every option that has the diff. - - In case of override, all the existing BGP configuration will be removed from - the device and replaced with the input configuration. - - In case of delete the existing BGP configuration will be removed from the device. - type: str - default: merge - choices: - - merge - - replace - - override - - delete -""" - -EXAMPLES = """ -- name: configure global bgp as 64496 - arista.eos.eos_bgp: - config: - bgp_as: 64496 - router_id: 192.0.2.1 - log_neighbor_changes: true - neighbors: - - neighbor: 203.0.113.5 - remote_as: 64511 - timers: - keepalive: 300 - holdtime: 360 - - neighbor: 198.51.100.2 - remote_as: 64498 - networks: - - prefix: 198.51.100.0 - route_map: RMAP_1 - - prefix: 192.0.2.0 - masklen: 23 - address_family: - - afi: ipv4 - safi: unicast - redistribute: - - protocol: isis - route_map: RMAP_1 - operation: merge -- name: Configure BGP neighbors - arista.eos.eos_bgp: - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.10 - remote_as: 64496 - description: IBGP_NBR_1 - ebgp_multihop: 100 - timers: - keepalive: 300 - holdtime: 360 - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - operation: merge -- name: Configure root-level networks for BGP - arista.eos.eos_bgp: - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - prefix: 203.0.113.32 - masklen: 27 - route_map: RMAP_2 - operation: merge -- name: Configure BGP neighbors under address family mode - arista.eos.eos_bgp: - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - neighbors: - - neighbor: 203.0.113.10 - activate: true - default_originate: true - - neighbor: 192.0.2.15 - activate: true - graceful_restart: true - operation: merge -- name: remove bgp as 64496 from config - arista.eos.eos_bgp: - config: - bgp_as: 64496 - operation: delete -""" -RETURN = """ -commands: - description: The list of configuration mode commands to send to the device - returned: always - type: list - sample: - - router bgp 64496 - - bgp router-id 192.0.2.1 - - bgp log-neighbor-changes - - neighbor 203.0.113.5 remote-as 64511 - - neighbor 203.0.113.5 timers 300 360 - - neighbor 198.51.100.2 remote-as 64498 - - network 198.51.100.0 route-map RMAP_1 - - network 192.0.2.0 mask 255.255.254.0 - - address-family ipv4 - - redistribute isis route-map RMAP_1 - - exit-address-family -""" -from ansible.module_utils._text import to_text - -from ansible_collections.arista.eos.plugins.module_utils.network.eos.providers.cli.config.bgp.process import ( - REDISTRIBUTE_PROTOCOLS, -) -from ansible_collections.arista.eos.plugins.module_utils.network.eos.providers.module import ( - NetworkModule, -) - - -def main(): - """main entry point for module execution""" - network_spec = { - "prefix": dict(required=True), - "masklen": dict(type="int"), - "route_map": dict(), - } - - redistribute_spec = { - "protocol": dict(choices=list(REDISTRIBUTE_PROTOCOLS), required=True), - "route_map": dict(), - } - - timer_spec = { - "keepalive": dict(type="int", required=True), - "holdtime": dict(type="int", required=True), - } - - neighbor_spec = { - "neighbor": dict(required=True), - "remote_as": dict(type="int", required=True), - "update_source": dict(), - "password": dict(no_log=True), - "enabled": dict(type="bool"), - "description": dict(), - "ebgp_multihop": dict(type="int"), - "timers": dict(type="dict", options=timer_spec), - "peer_group": dict(), - "maximum_prefix": dict(type="int"), - "route_reflector_client": dict(type="int"), - "remove_private_as": dict(type="bool"), - } - - af_neighbor_spec = { - "neighbor": dict(required=True), - "activate": dict(type="bool"), - "default_originate": dict(type="bool"), - "graceful_restart": dict(type="bool"), - "weight": dict(type="int"), - } - - address_family_spec = { - "afi": dict(choices=["ipv4", "ipv6"], required=True), - "networks": dict(type="list", elements="dict", options=network_spec), - "redistribute": dict( - type="list", - elements="dict", - options=redistribute_spec, - ), - "neighbors": dict( - type="list", - elements="dict", - options=af_neighbor_spec, - ), - } - - config_spec = { - "bgp_as": dict(type="int", required=True), - "router_id": dict(), - "log_neighbor_changes": dict(type="bool"), - "neighbors": dict(type="list", elements="dict", options=neighbor_spec), - "address_family": dict( - type="list", - elements="dict", - options=address_family_spec, - ), - "redistribute": dict( - type="list", - elements="dict", - options=redistribute_spec, - ), - "networks": dict(type="list", elements="dict", options=network_spec), - } - - argument_spec = { - "config": dict(type="dict", options=config_spec), - "operation": dict( - default="merge", - choices=["merge", "replace", "override", "delete"], - ), - } - - module = NetworkModule( - argument_spec=argument_spec, - supports_check_mode=True, - ) - - try: - result = module.edit_config(config_filter="| section bgp") - except Exception as exc: - module.fail_json(msg=to_text(exc)) - - module.exit_json(**result) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/arista/eos/plugins/modules/eos_lag_interfaces.py b/ansible_collections/arista/eos/plugins/modules/eos_lag_interfaces.py index 2a58f796f..1af9a2f4e 100644 --- a/ansible_collections/arista/eos/plugins/modules/eos_lag_interfaces.py +++ b/ansible_collections/arista/eos/plugins/modules/eos_lag_interfaces.py @@ -112,10 +112,10 @@ EXAMPLES = """ - name: Merge provided LAG attributes with existing device configuration arista.eos.eos_lag_interfaces: config: - - name: 5 + - name: Port-Channel5 members: - member: Ethernet2 - mode: on + mode: "on" state: merged # After state: @@ -141,10 +141,10 @@ EXAMPLES = """ - name: Replace all device configuration of specified LAGs with provided configuration arista.eos.eos_lag_interfaces: config: - - name: 5 + - name: Port-Channel5 members: - member: Ethernet2 - mode: on + mode: "on" state: replaced # After state: @@ -169,10 +169,10 @@ EXAMPLES = """ - name: Override all device configuration of all LAG attributes with provided configuration arista.eos.eos_lag_interfaces: config: - - name: 10 + - name: Port-Channel10 members: - member: Ethernet2 - mode: on + mode: "on" state: overridden # After state: @@ -198,7 +198,7 @@ EXAMPLES = """ - name: Delete LAG attributes of the given interfaces. arista.eos.eos_lag_interfaces: config: - - name: 5 + - name: Port-Channel5 members: - member: Ethernet1 state: deleted @@ -226,24 +226,24 @@ EXAMPLES = """ # Output: # parsed: -# - name: 5 +# - name: Port-Channel5 # members: # - member: Ethernet2 -# mode: on +# mode: "on" # - member: Ethernet1 -# mode: on +# mode: "on" # using rendered: - name: Use Rendered to convert the structured data to native config arista.eos.eos_lag_interfaces: config: - - name: 5 + - name: Port-Channel5 members: - member: Ethernet2 - mode: on + mode: "on" - member: Ethernet1 - mode: on + mode: "on" state: rendered # ----------- # Output @@ -271,7 +271,7 @@ EXAMPLES = """ # Output: # gathered: -# - name: 5 +# - name: Port-Channel5 # members: # - member: Ethernet2 # mode: on diff --git a/ansible_collections/arista/eos/plugins/modules/eos_logging.py b/ansible_collections/arista/eos/plugins/modules/eos_logging.py deleted file mode 100644 index 845af44d5..000000000 --- a/ansible_collections/arista/eos/plugins/modules/eos_logging.py +++ /dev/null @@ -1,505 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -# Copyright: (c) 2017, Ansible by Red Hat, inc -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - - -DOCUMENTATION = """ -module: eos_logging -author: Trishna Guha (@trishnaguha) -short_description: Manage logging on network devices -description: -- This module provides declarative management of logging on Arista Eos devices. -version_added: 1.0.0 -deprecated: - alternative: eos_logging_global - why: Updated module released with more functionality. - removed_at_date: '2024-01-01' -notes: -- Tested against Arista EOS 4.24.6F -options: - dest: - description: - - Destination of the logs. - choices: - - "on" - - host - - console - - monitor - - buffered - type: str - name: - description: - - The hostname or IP address of the destination. - - Required when I(dest=host). - type: str - size: - description: - - Size of buffer. The acceptable value is in range from 10 to 2147483647 bytes. - type: int - facility: - description: - - Set logging facility. - type: str - level: - description: - - Set logging severity levels. - choices: - - emergencies - - alerts - - critical - - errors - - warnings - - notifications - - informational - - debugging - type: str - aggregate: - description: List of logging definitions. - type: list - elements: dict - suboptions: - dest: - description: - - Destination of the logs. - choices: - - "on" - - host - - console - - monitor - - buffered - type: str - name: - description: - - The hostname or IP address of the destination. - - Required when I(dest=host). - type: str - size: - description: - - Size of buffer. The acceptable value is in range from 10 to 2147483647 bytes. - type: int - facility: - description: - - Set logging facility. - type: str - level: - description: - - Set logging severity levels. - choices: - - emergencies - - alerts - - critical - - errors - - warnings - - notifications - - informational - - debugging - type: str - state: - description: - - State of the logging configuration. - default: present - type: str - choices: - - present - - absent - state: - description: - - State of the logging configuration. - default: present - type: str - choices: - - present - - absent -""" - -EXAMPLES = """ -- name: configure host logging - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: present - -- name: remove host logging configuration - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: absent - -- name: configure console logging level and facility - arista.eos.eos_logging: - dest: console - facility: local7 - level: debugging - state: present - -- name: enable logging to all - arista.eos.eos_logging: - dest: on - -- name: configure buffer size - arista.eos.eos_logging: - dest: buffered - size: 5000 - -- name: Configure logging using aggregate - arista.eos.eos_logging: - aggregate: - - {dest: console, level: warnings} - - {dest: buffered, size: 480000} - state: present -""" - -RETURN = """ -commands: - description: The list of configuration mode commands to send to the device - returned: always - type: list - sample: - - logging facility local7 - - logging host 172.16.0.1 -""" - -import re - -from copy import deepcopy - -from ansible.module_utils._text import to_text -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.common.validation import check_required_if -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import ( - remove_default_spec, -) - -from ansible_collections.arista.eos.plugins.module_utils.network.eos.eos import ( - get_config, - load_config, -) - - -DEST_GROUP = ["on", "host", "console", "monitor", "buffered"] -LEVEL_GROUP = [ - "emergencies", - "alerts", - "critical", - "errors", - "warnings", - "notifications", - "informational", - "debugging", -] - - -def validate_size(value, module): - if value: - if not int(10) <= value <= int(2147483647): - module.fail_json(msg="size must be between 10 and 2147483647") - else: - return value - - -def map_obj_to_commands(updates, module): - commands = list() - want, have = updates - - for w in want: - dest = w["dest"] - name = w["name"] - size = w["size"] - facility = w["facility"] - level = w["level"] - state = w["state"] - del w["state"] - - if state == "absent" and w in have: - if dest: - if dest == "host": - commands.append("no logging host {0}".format(name)) - - elif dest in DEST_GROUP: - commands.append("no logging {0}".format(dest)) - - else: - module.fail_json( - msg="dest must be among console, monitor, buffered, host, on", - ) - - if facility: - commands.append("no logging facility {0}".format(facility)) - - if state == "present" and w not in have: - if facility: - present = False - - # Iterate over every dictionary in the 'have' list to check if - # similar configuration for facility exists or not - - for entry in have: - if not entry["dest"] and entry["facility"] == facility: - present = True - - if not present: - commands.append("logging facility {0}".format(facility)) - - if dest == "host": - commands.append("logging host {0}".format(name)) - - elif dest == "on": - commands.append("logging on") - - elif dest == "buffered" and size: - present = False - - # Deals with the following two cases: - # Case 1: logging buffered - # logging buffered - # - # Case 2: Same buffered logging configuration - # already exists (i.e., both size & - # level are same) - - for entry in have: - if entry["dest"] == "buffered" and entry["size"] == size: - if not level or entry["level"] == level: - present = True - - if not present: - if size and level: - commands.append( - "logging buffered {0} {1}".format(size, level), - ) - else: - commands.append("logging buffered {0}".format(size)) - - else: - if dest: - dest_cmd = "logging {0}".format(dest) - if level: - dest_cmd += " {0}".format(level) - - commands.append(dest_cmd) - return commands - - -def parse_facility(line): - facility = None - match = re.search(r"logging facility (\S+)", line, re.M) - if match: - facility = match.group(1) - - return facility - - -def parse_size(line, dest): - size = None - - if dest == "buffered": - match = re.search(r"logging buffered (\S+)", line, re.M) - if match: - try: - int_size = int(match.group(1)) - except ValueError: - int_size = None - - if int_size: - if isinstance(int_size, int): - size = str(match.group(1)) - else: - size = str(10) - - return size - - -def parse_name(line, dest): - name = None - if dest == "host": - match = re.search(r"logging host (\S+)", line, re.M) - if match: - name = match.group(1) - - return name - - -def parse_level(line, dest): - level = None - - if dest != "host": - # Line for buffer logging entry in running-config is of the form: - # logging buffered - - if dest == "buffered": - match = re.search(r"logging buffered (?:\d+) (\S+)", line, re.M) - - else: - match = re.search(r"logging {0} (\S+)".format(dest), line, re.M) - - if match: - if match.group(1) in LEVEL_GROUP: - level = match.group(1) - - return level - - -def map_config_to_obj(module): - obj = [] - - data = get_config(module, flags=["section logging"]) - - for line in data.split("\n"): - match = re.search(r"logging (\S+)", line, re.M) - - if match: - if match.group(1) in DEST_GROUP: - dest = match.group(1) - - else: - dest = None - - obj.append( - { - "dest": dest, - "name": parse_name(line, dest), - "size": parse_size(line, dest), - "facility": parse_facility(line), - "level": parse_level(line, dest), - }, - ) - - return obj - - -def parse_obj(obj, module): - if module.params["size"] is None: - obj.append( - { - "dest": module.params["dest"], - "name": module.params["name"], - "size": module.params["size"], - "facility": module.params["facility"], - "level": module.params["level"], - "state": module.params["state"], - }, - ) - - else: - obj.append( - { - "dest": module.params["dest"], - "name": module.params["name"], - "size": str(validate_size(module.params["size"], module)), - "facility": module.params["facility"], - "level": module.params["level"], - "state": module.params["state"], - }, - ) - - return obj - - -def map_params_to_obj(module, required_if=None): - obj = [] - aggregate = module.params.get("aggregate") - if aggregate: - for item in aggregate: - for key in item: - if item.get(key) is None: - item[key] = module.params[key] - - try: - check_required_if(required_if, item) - except TypeError as exc: - module.fail_json(to_text(exc)) - d = item.copy() - - if d["dest"] != "host": - d["name"] = None - - if d["dest"] == "buffered": - if "size" in d: - d["size"] = str(validate_size(d["size"], module)) - elif "size" not in d: - d["size"] = str(10) - else: - pass - - if d["dest"] != "buffered": - d["size"] = None - - obj.append(d) - - else: - if module.params["dest"] != "host": - module.params["name"] = None - - if module.params["dest"] == "buffered": - if not module.params["size"]: - module.params["size"] = str(10) - else: - module.params["size"] = None - - parse_obj(obj, module) - - return obj - - -def main(): - """main entry point for module execution""" - element_spec = dict( - dest=dict(choices=DEST_GROUP), - name=dict(), - size=dict(type="int"), - facility=dict(), - level=dict(choices=LEVEL_GROUP), - state=dict(default="present", choices=["present", "absent"]), - ) - - aggregate_spec = deepcopy(element_spec) - - # remove default in aggregate spec, to handle common arguments - remove_default_spec(aggregate_spec) - - aggregate_spec["state"].update(default="present") - argument_spec = dict( - aggregate=dict(type="list", elements="dict", options=aggregate_spec), - ) - - argument_spec.update(element_spec) - - required_if = [("dest", "host", ["name"])] - - module = AnsibleModule( - argument_spec=argument_spec, - required_if=required_if, - supports_check_mode=True, - ) - - warnings = list() - - result = {"changed": False} - if warnings: - result["warnings"] = warnings - - have = map_config_to_obj(module) - want = map_params_to_obj(module, required_if=required_if) - - commands = map_obj_to_commands((want, have), module) - result["commands"] = commands - - if commands: - commit = not module.check_mode - response = load_config(module, commands, commit=commit) - if response.get("diff") and module._diff: - result["diff"] = {"prepared": response.get("diff")} - result["session_name"] = response.get("session") - result["changed"] = True - - module.exit_json(**result) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/arista/eos/plugins/modules/eos_ospfv3.py b/ansible_collections/arista/eos/plugins/modules/eos_ospfv3.py index c1194f767..287cb12d8 100644 --- a/ansible_collections/arista/eos/plugins/modules/eos_ospfv3.py +++ b/ansible_collections/arista/eos/plugins/modules/eos_ospfv3.py @@ -284,25 +284,6 @@ options: pacing: description: Configure OSPF packet pacing. type: int - throttle: - description: This command is deprecated by 'timers lsa' or 'timers spf'. - type: dict - suboptions: - initial: - description: Initial SPF schedule delay in msecs. - type: int - min: - description: Min Hold time between two SPFs in msecs - type: int - max: - description: Max wait time between two SPFs in msecs. - type: int - lsa: - description: Configure threshold for retransmission of lsa - type: bool - spf: - description: Configure time between SPF calculations - type: bool spf: description: Configure OSPFv3 spf timers. type: dict @@ -627,25 +608,6 @@ options: description: Configure OSPF timers. type: dict suboptions: - throttle: - description: This command is deprecated by 'timers lsa' or 'timers spf'. - type: dict - suboptions: - initial: - description: Initial SPF schedule delay in msecs. - type: int - min: - description: Min Hold time between two SPFs in msecs - type: int - max: - description: Max wait time between two SPFs in msecs. - type: int - lsa: - description: Configure threshold for retransmission of lsa - type: bool - spf: - description: Configure time between SPF calculations - type: bool out_delay: description: Configure out-delay timer. type: int diff --git a/ansible_collections/arista/eos/plugins/modules/eos_system.py b/ansible_collections/arista/eos/plugins/modules/eos_system.py index b38d9772d..924e7052d 100644 --- a/ansible_collections/arista/eos/plugins/modules/eos_system.py +++ b/ansible_collections/arista/eos/plugins/modules/eos_system.py @@ -66,7 +66,7 @@ options: argument accepts either a list of DNS servers or a list of hashes that configure the name server and VRF name. See examples. type: list - elements: str + elements: raw state: description: - State of the configuration values in the device's current active configuration. When @@ -342,7 +342,7 @@ def main(): # { interface: , vrf: } lookup_source=dict(type="list", elements="raw"), # { server: ; vrf: } - name_servers=dict(type="list", elements="str"), + name_servers=dict(type="list", elements="raw"), state=dict(default="present", choices=["present", "absent"]), ) diff --git a/ansible_collections/arista/eos/plugins/modules/eos_vrf.py b/ansible_collections/arista/eos/plugins/modules/eos_vrf.py index 556ef3233..14981a14d 100644 --- a/ansible_collections/arista/eos/plugins/modules/eos_vrf.py +++ b/ansible_collections/arista/eos/plugins/modules/eos_vrf.py @@ -314,16 +314,19 @@ def map_params_to_obj(module): "name": module.params["name"], "state": module.params["state"], "rd": module.params["rd"], - "interfaces": [ - intf.replace(" ", "").lower() for intf in module.params["interfaces"] - ] - if module.params["interfaces"] - else [], - "associated_interfaces": [ - intf.replace(" ", "").lower() for intf in module.params["associated_interfaces"] - ] - if module.params["associated_interfaces"] - else [], + "interfaces": ( + [intf.replace(" ", "").lower() for intf in module.params["interfaces"]] + if module.params["interfaces"] + else [] + ), + "associated_interfaces": ( + [ + intf.replace(" ", "").lower() + for intf in module.params["associated_interfaces"] + ] + if module.params["associated_interfaces"] + else [] + ), }, ) diff --git a/ansible_collections/arista/eos/test-requirements.txt b/ansible_collections/arista/eos/test-requirements.txt index 0ff1eda81..22d89642b 100644 --- a/ansible_collections/arista/eos/test-requirements.txt +++ b/ansible_collections/arista/eos/test-requirements.txt @@ -1,10 +1,13 @@ -black==23.3.0 ; python_version >= '3.7' -coverage==4.5.4 -cffi==1.14.5 +# For ansible-tox-linters +black==23.3.0 flake8 -mock ; python_version < '3.5' +yamllint + +# Unit test runner +cffi==1.14.5 +mock pexpect pytest-xdist -yamllint rstcheck<4,>=3 -git+https://github.com/ansible-community/pytest-ansible-units.git +pytest-ansible +pytest-cov diff --git a/ansible_collections/arista/eos/tests/config.yml b/ansible_collections/arista/eos/tests/config.yml index 41f529264..c26ea5966 100644 --- a/ansible_collections/arista/eos/tests/config.yml +++ b/ansible_collections/arista/eos/tests/config.yml @@ -1,3 +1,3 @@ --- modules: - python_requires: ">=3.6" + python_requires: ">=3.9" diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/defaults/main.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/defaults/main.yaml deleted file mode 100644 index 9ef5ba516..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/defaults/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -testcase: "*" -test_items: [] diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/meta/main.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/meta/main.yaml deleted file mode 100644 index d29186fe0..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/meta/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -dependencies: - - prepare_eos_tests diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/cli.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/cli.yaml deleted file mode 100644 index 57bedc474..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/cli.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -- name: Collect all cli test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - delegate_to: localhost - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases (connection=ansible.netcommon.network_cli) - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - vars: - ansible_connection: ansible.netcommon.network_cli diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/main.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/main.yaml deleted file mode 100644 index c3b429408..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tasks/main.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- name: Invoke cli tasks - ansible.builtin.include_tasks: cli.yaml - tags: - - network_cli diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tests/cli/basic.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tests/cli/basic.yaml deleted file mode 100644 index 794d21d3e..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_bgp/tests/cli/basic.yaml +++ /dev/null @@ -1,399 +0,0 @@ ---- -- name: Basic Tests - ansible.builtin.debug: msg="START eos cli/eos_bgp.yaml on connection={{ ansible_connection }}" - -- name: Clear existing BGP config - become: true - ignore_errors: true - arista.eos.eos_bgp: &id011 - operation: delete - -- name: Configure BGP with AS 64496 and a router-id - become: true - register: result - arista.eos.eos_bgp: &id001 - operation: merge - config: - bgp_as: 64496 - router_id: 192.0.2.2 - -- name: Assertion - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'router-id 192.0.2.2' in result.commands" - -- name: Configure BGP with AS 64496 and a router-id (idempotent) - become: true - register: result - arista.eos.eos_bgp: *id001 - -- name: Assertion - ansible.builtin.assert: - that: - - result.changed == false - -- name: Configure BGP neighbors - become: true - register: result - arista.eos.eos_bgp: &id002 - operation: merge - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.10 - remote_as: 64496 - description: IBGP_NBR_1 - ebgp_multihop: 100 - timers: - keepalive: 300 - holdtime: 360 - - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - -- ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'neighbor 192.0.2.10 remote-as 64496' in result.commands" - - "'neighbor 192.0.2.10 description IBGP_NBR_1' in result.commands" - - "'neighbor 192.0.2.10 ebgp-multihop 100' in result.commands" - - "'neighbor 192.0.2.10 timers 300 360' in result.commands" - - "'neighbor 192.0.2.15 remote-as 64496' in result.commands" - - "'neighbor 192.0.2.15 description IBGP_NBR_2' in result.commands" - - "'neighbor 192.0.2.15 ebgp-multihop 150' in result.commands" - -- name: Configure BGP neighbors (idempotent) - become: true - register: result - arista.eos.eos_bgp: *id002 - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Configure BGP neighbors with operation replace - become: true - register: result - arista.eos.eos_bgp: &id003 - operation: replace - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - - - neighbor: 203.0.113.10 - remote_as: 64511 - description: EBGP_NBR_1 - -- ansible.builtin.assert: - that: - - result.changed == true - - "'neighbor 203.0.113.10 remote-as 64511' in result.commands" - - "'neighbor 203.0.113.10 description EBGP_NBR_1' in result.commands" - - "'no neighbor 192.0.2.10' in result.commands" - -- name: Configure BGP neighbors with operation replace (idempotent) - become: true - register: result - arista.eos.eos_bgp: *id003 - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Configure root-level networks for BGP - become: true - register: result - arista.eos.eos_bgp: &id004 - operation: merge - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - - prefix: 203.0.113.32 - masklen: 27 - route_map: RMAP_2 - -- ansible.builtin.assert: - that: - - result.changed == True - - "'router bgp 64496' in result.commands" - - "'network 203.0.113.0/27 route-map RMAP_1' in result.commands" - - "'network 203.0.113.32/27 route-map RMAP_2' in result.commands" - -- name: Configure root-level networks for BGP (idempotent) - become: true - register: result - arista.eos.eos_bgp: *id004 - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Configure root-level networks for BGP with operation replace - become: true - register: result - arista.eos.eos_bgp: &id005 - operation: replace - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - - prefix: 198.51.100.16 - masklen: 28 - -- ansible.builtin.assert: - that: - - result.changed == True - - "'router bgp 64496' in result.commands" - - "'network 198.51.100.16/28' in result.commands" - - "'no network 203.0.113.32/27' in result.commands" - -- name: Configure root-level networks for BGP with operation replace (idempotent) - become: true - register: result - arista.eos.eos_bgp: *id005 - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Configure BGP route redistribute information - become: true - register: result - arista.eos.eos_bgp: &id006 - operation: merge - config: - bgp_as: 64496 - redistribute: - - protocol: ospf - route_map: RMAP_1 - - - protocol: rip - -- ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'redistribute ospf route-map RMAP_1' in result.commands" - - "'redistribute rip' in result.commands" - -- name: Configure BGP route redistribute information (idempotent) - become: true - register: result - arista.eos.eos_bgp: *id006 - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Configure BGP route redistribute information with operation replace - become: true - register: result - arista.eos.eos_bgp: &id007 - operation: replace - config: - bgp_as: 64496 - redistribute: - - protocol: ospf - route_map: RMAP_1 - - - protocol: static - route_map: RMAP_2 - -- ansible.builtin.assert: - that: - - result.changed == true - - "'redistribute static route-map RMAP_2' in result.commands" - - "'no redistribute rip' in result.commands" - -- name: Configure BGP route redistribute information with operation replace (idempotent) - become: true - register: result - arista.eos.eos_bgp: *id007 - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Configure BGP neighbors under address family mode - become: true - register: result - arista.eos.eos_bgp: &id008 - operation: merge - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - neighbors: - - neighbor: 203.0.113.10 - activate: true - default_originate: true - - - neighbor: 192.0.2.15 - activate: true - graceful_restart: false - -- ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'address-family ipv4' in result.commands" - - "'neighbor 203.0.113.10 activate' in result.commands" - - "'neighbor 203.0.113.10 default-originate' in result.commands" - - "'neighbor 192.0.2.15 activate' in result.commands" - - "'no neighbor 192.0.2.15 graceful-restart' in result.commands" - -- name: Configure BGP neighbors under address family mode (idempotent) - become: true - register: result - arista.eos.eos_bgp: *id008 - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Configure networks under address family - become: true - register: result - arista.eos.eos_bgp: &id009 - operation: merge - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - networks: - - prefix: 198.51.100.48 - masklen: 28 - route_map: RMAP_1 - - - prefix: 192.0.2.64 - masklen: 27 - - - prefix: 203.0.113.160 - masklen: 27 - route_map: RMAP_2 - - - afi: ipv6 - networks: - - prefix: "2001:db8::" - masklen: 33 - -- ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'address-family ipv4' in result.commands" - - "'network 198.51.100.48/28 route-map RMAP_1' in result.commands" - - "'network 192.0.2.64/27' in result.commands" - - "'network 203.0.113.160/27 route-map RMAP_2' in result.commands" - - "'address-family ipv6' in result.commands" - - "'network 2001:db8::/33' in result.commands" - -- name: Configure networks under address family (idempotent) - become: true - register: result - arista.eos.eos_bgp: *id009 - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Configure networks under address family with operation replace - become: true - register: result - arista.eos.eos_bgp: &id010 - operation: replace - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - networks: - - prefix: 198.51.100.80 - masklen: 28 - - - prefix: 192.0.2.64 - masklen: 27 - - - prefix: 203.0.113.192 - masklen: 27 - - - afi: ipv6 - networks: - - prefix: "2001:db8:1000::" - masklen: 37 - -- ansible.builtin.assert: - that: - - result.changed == true - - '"router bgp 64496" in result.commands' - - '"address-family ipv4" in result.commands' - - '"network 198.51.100.80/28" in result.commands' - - '"network 203.0.113.192/27" in result.commands' - - '"no network 198.51.100.48/28" in result.commands' - - '"no network 203.0.113.160/27" in result.commands' - - '"address-family ipv6" in result.commands' - - '"network 2001:db8:1000::/37" in result.commands' - - '"no network 2001:db8::/33" in result.commands' - -- name: Configure networks under address family with operation replace (idempotent) - become: true - register: result - arista.eos.eos_bgp: *id010 - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Override all the exisiting BGP config - become: true - register: result - arista.eos.eos_bgp: - operation: override - config: - bgp_as: 64497 - router_id: 192.0.2.10 - log_neighbor_changes: true - -- ansible.builtin.assert: - that: - - result.changed == true - - "'no router bgp 64496' in result.commands" - - "'router bgp 64497' in result.commands" - - "'router-id 192.0.2.10' in result.commands" - - "'bgp log-neighbor-changes' in result.commands" - -- name: Teardown - become: true - register: result - arista.eos.eos_bgp: *id011 - -- ansible.builtin.assert: - that: - - result.changed == true - - "'no router bgp 64497' in result.commands" - -- name: Teardown again (idempotent) - become: true - register: result - arista.eos.eos_bgp: *id011 - -- ansible.builtin.assert: - that: - - result.changed == false - -- ansible.builtin.debug: msg="END eos cli/eos_bgp.yaml on connection={{ ansible_connection }}" diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/config.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/config.yaml index 892b7f1e7..0b1dbc134 100644 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/config.yaml +++ b/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/config.yaml @@ -17,13 +17,13 @@ become: true register: result arista.eos.eos_config: - lines: hostname foo + lines: hostname int_tests config: "{{ config.stdout[0] }}" - ansible.builtin.assert: that: - result.changed == true - - "'hostname foo' in result.updates" + - "'hostname int_tests' in result.updates" - name: get current running-config become: true @@ -35,7 +35,7 @@ become: true register: result arista.eos.eos_config: - lines: hostname foo + lines: hostname int_tests config: "{{ config.stdout[0] }}" - ansible.builtin.assert: diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel.yaml index e3a950986..ab8b29997 100644 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel.yaml +++ b/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel.yaml @@ -1,6 +1,12 @@ --- - ansible.builtin.debug: msg="START cli/toplevel.yaml on connection={{ ansible_connection }}" +- name: setup + become: true + arista.eos.eos_config: + lines: + - no hostname + - name: setup become: true arista.eos.eos_config: diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel_after.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel_after.yaml index 66a60c0ae..2a3a304dc 100644 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel_after.yaml +++ b/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel_after.yaml @@ -3,6 +3,12 @@ msg="START cli/toplevel_after.yaml on connection={{ ansible_connection }}" +- name: setup + become: true + arista.eos.eos_config: + lines: + - no hostname + - name: setup become: true arista.eos.eos_config: diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel_before.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel_before.yaml index 949767b2e..33f1a813d 100644 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel_before.yaml +++ b/ansible_collections/arista/eos/tests/integration/targets/eos_config/tests/cli/toplevel_before.yaml @@ -3,6 +3,12 @@ msg="START cli/toplevel_before.yaml on connection={{ ansible_connection }}" +- name: setup + become: true + arista.eos.eos_config: + lines: + - no hostname + - name: setup become: true arista.eos.eos_config: diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/cli/network_facts b/ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/cli/network_facts new file mode 100644 index 000000000..32c715cf9 --- /dev/null +++ b/ansible_collections/arista/eos/tests/integration/targets/eos_facts/tests/cli/network_facts @@ -0,0 +1,15 @@ +--- +- ansible.builtin.debug: msg="START cli/network_resource_facts.yaml on connection={{ ansible_connection }}" + +- name: Gather arista network resource facts + arista.eos.eos_facts: + gather_subset: config + gather_network_resources: + - 'static_routes' + register: result + +- name: Assert that facts gathered was correctly generated + ansible.builtin.assert: + that: + - "result['ansible_facts']['ansible_network_resources']['static_routes'] == []" +- ansible.builtin.debug: msg="END cli/network_resource_facts.yaml on connection={{ ansible_connection }}" diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/defaults/main.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_logging/defaults/main.yaml deleted file mode 100644 index 5f709c5aa..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/meta/main.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_logging/meta/main.yaml deleted file mode 100644 index d29186fe0..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/meta/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -dependencies: - - prepare_eos_tests diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/cli.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/cli.yaml deleted file mode 100644 index 57bedc474..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/cli.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -- name: Collect all cli test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - delegate_to: localhost - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases (connection=ansible.netcommon.network_cli) - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - vars: - ansible_connection: ansible.netcommon.network_cli diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/eapi.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/eapi.yaml deleted file mode 100644 index a5cc3bac9..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/eapi.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -- name: Collect all eapi test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/eapi" - patterns: "{{ testcase }}.yaml" - delegate_to: localhost - register: test_cases - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases (connection=ansible.netcommon.httpapi) - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - vars: - ansible_connection: ansible.netcommon.httpapi diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/main.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/main.yaml deleted file mode 100644 index a821bf6be..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tasks/main.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -- name: Invoke cli - ansible.builtin.include_tasks: cli.yaml - tags: - - network_cli - -- name: Invoke eapi - ansible.builtin.include_tasks: eapi.yaml - tags: - - httpapi diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/cli/basic.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/cli/basic.yaml deleted file mode 100644 index 56083e8ba..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/cli/basic.yaml +++ /dev/null @@ -1,154 +0,0 @@ ---- -- ansible.builtin.debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}" - -- name: Set up host logging - become: true - register: result - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging host 172.16.0.1" in result.commands' - -- name: Set up host logging again (idempotent) - become: true - register: result - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: present - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Delete/disable host logging - become: true - register: result - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: absent - -- ansible.builtin.assert: - that: - - result.changed == true - - '"no logging host 172.16.0.1" in result.commands' - -- name: Delete/disable host logging (idempotent) - become: true - register: result - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: absent - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Console logging with level warnings - become: true - register: result - arista.eos.eos_logging: - dest: console - level: warnings - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging console warnings" in result.commands' - -- name: Configure buffer size - become: true - register: result - arista.eos.eos_logging: - dest: buffered - size: 480000 - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging buffered 480000" in result.commands' - -- name: Set up logging destination and facility at the same time - become: true - register: result - arista.eos.eos_logging: - dest: buffered - size: 4096 - facility: local7 - level: informational - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging buffered 4096 informational" in result.commands' - - '"logging facility local7" in result.commands' - -- name: Set up logging destination and facility at the same time again (idempotent) - become: true - register: result - arista.eos.eos_logging: - dest: buffered - size: 4096 - facility: local7 - level: informational - state: present - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Set up logging facility alone - become: true - register: result - arista.eos.eos_logging: - facility: local2 - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging facility local2" in result.commands' - -- name: Set up logging facility (idempotent) - become: true - register: result - arista.eos.eos_logging: - facility: local2 - state: present - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: remove logging as collection tearDown - become: true - register: result - arista.eos.eos_logging: - aggregate: - - dest: console - level: warnings - state: absent - - - dest: buffered - level: informational - size: 4096 - state: absent - - - facility: local2 - state: absent - -- ansible.builtin.assert: - that: - - result.changed == true - - '"no logging console" in result.commands' - - '"no logging buffered" in result.commands' - - '"no logging facility local2" in result.commands' diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/eapi/basic.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/eapi/basic.yaml deleted file mode 100644 index ef1cade8c..000000000 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_logging/tests/eapi/basic.yaml +++ /dev/null @@ -1,96 +0,0 @@ ---- -- ansible.builtin.debug: msg="START eapi/basic.yaml on connection={{ ansible_connection }}" - -- name: Set up host logging - become: true - register: result - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging host 172.16.0.1" in result.commands' - -- name: Set up host logging again (idempotent) - become: true - register: result - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: present - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Delete/disable host logging - become: true - register: result - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: absent - -- ansible.builtin.assert: - that: - - result.changed == true - - '"no logging host 172.16.0.1" in result.commands' - -- name: Delete/disable host logging (idempotent) - become: true - register: result - arista.eos.eos_logging: - dest: host - name: 172.16.0.1 - state: absent - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Console logging with level warnings - become: true - register: result - arista.eos.eos_logging: - dest: console - level: warnings - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging console warnings" in result.commands' - -- name: Configure buffer size - become: true - register: result - arista.eos.eos_logging: - dest: buffered - size: 480000 - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging buffered 480000" in result.commands' - -- name: remove logging as collection tearDown - become: true - register: result - arista.eos.eos_logging: - aggregate: - - dest: console - level: warnings - state: absent - - - dest: buffered - size: 480000 - state: absent - -- ansible.builtin.assert: - that: - - result.changed == true - - '"no logging console" in result.commands' - - '"no logging buffered" in result.commands' diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_ospfv3/tests/common/merged.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_ospfv3/tests/common/merged.yaml index 430ac7b4c..77b4774b7 100644 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_ospfv3/tests/common/merged.yaml +++ b/ansible_collections/arista/eos/tests/integration/targets/eos_ospfv3/tests/common/merged.yaml @@ -109,7 +109,7 @@ - result.commands|length == 0 - result.changed == false - - name: merge given ospfv3 configuration with timers.throttle option (expect warning). + - name: merge given ospfv3 configuration with timers option. become: true register: result arista.eos.eos_ospfv3: @@ -142,19 +142,11 @@ fips_restrictions: true timers: pacing: 7 - throttle: - spf: true - initial: 56 - max: 56 - min: 56 vrf: "default" - - ansible.builtin.assert: - that: "'The \\'timers\\' argument has been changed to have separate \\'lsa\\' and \\'spf\\' keys and \\'throttle\\' has been deprecated.' in result.warnings[0]" - - ansible.builtin.include_tasks: _remove_config.yaml - - name: merge given ospfv3 configuration with timers.lsa option (expect warning). + - name: merge given ospfv3 configuration with timers.lsa option. become: true register: result arista.eos.eos_ospfv3: @@ -174,7 +166,6 @@ - ansible.builtin.assert: that: - - "'\\'timers lsa arrival\\' has changed to \\'timers lsa rx min interval\\'' in result.warnings[0]" - '"timers lsa rx min interval 33" in result["commands"]' always: diff --git a/ansible_collections/arista/eos/tests/integration/targets/eos_user/tests/cli/auth.yaml b/ansible_collections/arista/eos/tests/integration/targets/eos_user/tests/cli/auth.yaml index 12f6bfe65..339a2b77e 100644 --- a/ansible_collections/arista/eos/tests/integration/targets/eos_user/tests/cli/auth.yaml +++ b/ansible_collections/arista/eos/tests/integration/targets/eos_user/tests/cli/auth.yaml @@ -16,6 +16,7 @@ -o StrictHostKeyChecking=no show version responses: (?i)password: pass123 + ignore_errors: true - name: test login with invalid password (should fail) expect: diff --git a/ansible_collections/arista/eos/tests/sanity/ignore-2.18.txt b/ansible_collections/arista/eos/tests/sanity/ignore-2.18.txt new file mode 100644 index 000000000..4acb4eaa2 --- /dev/null +++ b/ansible_collections/arista/eos/tests/sanity/ignore-2.18.txt @@ -0,0 +1 @@ +plugins/action/eos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` diff --git a/ansible_collections/arista/eos/tests/unit/compat/__init__.py b/ansible_collections/arista/eos/tests/unit/compat/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/arista/eos/tests/unit/compat/mock.py b/ansible_collections/arista/eos/tests/unit/compat/mock.py deleted file mode 100644 index e4ce72b34..000000000 --- a/ansible_collections/arista/eos/tests/unit/compat/mock.py +++ /dev/null @@ -1,129 +0,0 @@ -# (c) 2014, Toshio Kuratomi -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -""" -Compat module for Python3.x's unittest.mock module -""" -import sys - -import _io - - -# Python 2.7 - -# Note: Could use the pypi mock library on python3.x as well as python2.x. It -# is the same as the python3 stdlib mock library - -try: - # Allow wildcard import because we really do want to import all of mock's - # symbols into this compat shim - # pylint: disable=wildcard-import,unused-wildcard-import - from unittest.mock import * -except ImportError: - # Python 2 - # pylint: disable=wildcard-import,unused-wildcard-import - try: - from mock import * - except ImportError: - print("You need the mock library installed on python2.x to run tests") - - -# Prior to 3.4.4, mock_open cannot handle binary read_data -if sys.version_info >= (3,) and sys.version_info < (3, 4, 4): - file_spec = None - - def _iterate_read_data(read_data): - # Helper for mock_open: - # Retrieve lines from read_data via a generator so that separate calls to - # readline, read, and readlines are properly interleaved - sep = b"\n" if isinstance(read_data, bytes) else "\n" - data_as_list = [l + sep for l in read_data.split(sep)] - - if data_as_list[-1] == sep: - # If the last line ended in a newline, the list comprehension will have an - # extra entry that's just a newline. Remove this. - data_as_list = data_as_list[:-1] - else: - # If there wasn't an extra newline by itself, then the file being - # emulated doesn't have a newline to end the last line remove the - # newline that our naive format() added - data_as_list[-1] = data_as_list[-1][:-1] - - for line in data_as_list: - yield line - - def mock_open(mock=None, read_data=""): - """ - A helper function to create a mock to replace the use of `open`. It works - for `open` called directly or used as a context manager. - - The `mock` argument is the mock object to configure. If `None` (the - default) then a `MagicMock` will be created for you, with the API limited - to methods or attributes available on standard file handles. - - `read_data` is a string for the `read` methoddline`, and `readlines` of the - file handle to return. This is an empty string by default. - """ - - def _readlines_side_effect(*args, **kwargs): - if handle.readlines.return_value is not None: - return handle.readlines.return_value - return list(_data) - - def _read_side_effect(*args, **kwargs): - if handle.read.return_value is not None: - return handle.read.return_value - return type(read_data)().join(_data) - - def _readline_side_effect(): - if handle.readline.return_value is not None: - while True: - yield handle.readline.return_value - for line in _data: - yield line - - global file_spec - if file_spec is None: - file_spec = list( - set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO))), - ) - - if mock is None: - mock = MagicMock(name="open", spec=open) - - handle = MagicMock(spec=file_spec) - handle.__enter__.return_value = handle - - _data = _iterate_read_data(read_data) - - handle.write.return_value = None - handle.read.return_value = None - handle.readline.return_value = None - handle.readlines.return_value = None - - handle.read.side_effect = _read_side_effect - handle.readline.side_effect = _readline_side_effect() - handle.readlines.side_effect = _readlines_side_effect - - mock.return_value = handle - return mock diff --git a/ansible_collections/arista/eos/tests/unit/compat/unittest.py b/ansible_collections/arista/eos/tests/unit/compat/unittest.py deleted file mode 100644 index df4266ec9..000000000 --- a/ansible_collections/arista/eos/tests/unit/compat/unittest.py +++ /dev/null @@ -1,41 +0,0 @@ -# (c) 2014, Toshio Kuratomi -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -""" -Compat module for Python2.7's unittest module -""" - -import sys - - -# Allow wildcard import because we really do want to import all of -# unittests's symbols into this compat shim -# pylint: disable=wildcard-import,unused-wildcard-import -if sys.version_info < (2, 7): - try: - # Need unittest2 on python2.6 - from unittest2 import * - except ImportError: - print("You need unittest2 installed on python2.6.x to run tests") -else: - from unittest import * diff --git a/ansible_collections/arista/eos/tests/unit/mock/path.py b/ansible_collections/arista/eos/tests/unit/mock/path.py index fe27d505f..7d287a5fb 100644 --- a/ansible_collections/arista/eos/tests/unit/mock/path.py +++ b/ansible_collections/arista/eos/tests/unit/mock/path.py @@ -2,9 +2,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible.utils.path import unfrackpath +from unittest.mock import MagicMock -from ansible_collections.arista.eos.tests.unit.compat.mock import MagicMock +from ansible.utils.path import unfrackpath mock_unfrackpath_noop = MagicMock( diff --git a/ansible_collections/arista/eos/tests/unit/mock/procenv.py b/ansible_collections/arista/eos/tests/unit/mock/procenv.py index e7a0080f0..e6e09464b 100644 --- a/ansible_collections/arista/eos/tests/unit/mock/procenv.py +++ b/ansible_collections/arista/eos/tests/unit/mock/procenv.py @@ -27,12 +27,11 @@ import sys from contextlib import contextmanager from io import BytesIO, StringIO +from unittest import TestCase from ansible.module_utils._text import to_bytes from ansible.module_utils.six import PY3 -from ansible_collections.arista.eos.tests.unit.compat import unittest - @contextmanager def swap_stdin_and_argv(stdin_data="", argv_data=tuple()): @@ -78,7 +77,7 @@ def swap_stdout(): sys.stdout = old_stdout -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self, module_args=None): if module_args is None: module_args = { diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acl_interfaces.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acl_interfaces.py index f7904bd40..0e554420d 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acl_interfaces.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acl_interfaces.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_acl_interfaces -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acls.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acls.py index 4896d28b9..24ece5eff 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acls.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_acls.py @@ -10,11 +10,12 @@ __metaclass__ = type import itertools +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.module_utils.network.eos.config.acls.acls import ( add_commands, ) from ansible_collections.arista.eos.plugins.modules import eos_acls -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_banner.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_banner.py index 31cf2668d..ef174acf3 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_banner.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_banner.py @@ -19,8 +19,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_banner -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp.py deleted file mode 100644 index 7c7dc86c8..000000000 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp.py +++ /dev/null @@ -1,400 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, inc -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# - -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -from ansible_collections.arista.eos.plugins.module_utils.network.eos.providers.cli.config.bgp.process import ( - Provider, -) -from ansible_collections.arista.eos.plugins.modules import eos_bgp - -from .eos_module import TestEosModule, load_fixture - - -class TestFrrBgpModule(TestEosModule): - module = eos_bgp - - def setUp(self): - super(TestFrrBgpModule, self).setUp() - self._bgp_config = load_fixture("eos_bgp_config.cfg") - - def test_eos_bgp(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - router_id="192.0.2.2", - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual( - commands, - ["router bgp 64496", "router-id 192.0.2.2", "exit"], - ) - - def test_eos_bgp_idempotent(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - router_id="192.0.2.1", - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_eos_bgp_remove(self): - obj = Provider( - params=dict( - config=dict(bgp_as=64496, networks=None, address_family=None), - operation="delete", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, ["no router bgp 64496"]) - - def test_eos_bgp_neighbor(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - neighbors=[ - dict(neighbor="198.51.100.12", remote_as=64498), - ], - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual( - commands, - [ - "router bgp 64496", - "neighbor 198.51.100.12 remote-as 64498", - "exit", - ], - ) - - def test_eos_bgp_neighbor_idempotent(self): - neighbors = [ - dict( - neighbor="198.51.100.102", - remote_as=64498, - timers=dict(keepalive=300, holdtime=360), - ), - dict(neighbor="203.0.113.5", remote_as=64511, maximum_prefix=500), - ] - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - neighbors=neighbors, - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_eos_bgp_network(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - networks=[ - dict( - prefix="203.0.113.0", - masklen=24, - route_map="RMAP_1", - ), - ], - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual( - sorted(commands), - sorted( - [ - "router bgp 64496", - "network 203.0.113.0/24 route-map RMAP_1", - "exit", - ], - ), - ) - - def test_eos_bgp_network_idempotent(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - networks=[ - dict( - prefix="192.0.2.0", - masklen=27, - route_map="RMAP_1", - ), - dict( - prefix="198.51.100.0", - masklen=24, - route_map="RMAP_2", - ), - ], - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_eos_bgp_redistribute(self): - rd_1 = dict(protocol="rip", route_map="RMAP_1") - - config = dict( - bgp_as=64496, - redistribute=[rd_1], - networks=None, - address_family=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - cmd = ["router bgp 64496", "redistribute rip route-map RMAP_1", "exit"] - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_eos_bgp_redistribute_idempotent(self): - rd_1 = dict(protocol="ospf", route_map="RMAP_1") - config = dict( - bgp_as=64496, - redistribute=[rd_1], - networks=None, - address_family=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_eos_bgp_address_family_neighbors(self): - af_nbr_1 = dict( - neighbor="198.51.100.104", - default_originate=True, - activate=True, - ) - af_nbr_2 = dict( - neighbor="198.51.100.105", - activate=True, - weight=30, - graceful_restart=True, - ) - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", neighbors=[af_nbr_1, af_nbr_2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - cmd = [ - "router bgp 64496", - "address-family ipv4", - "neighbor 198.51.100.104 activate", - "neighbor 198.51.100.104 default-originate", - "neighbor 198.51.100.105 weight 30", - "neighbor 198.51.100.105 activate", - "neighbor 198.51.100.105 graceful-restart", - "exit", - "exit", - ] - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_eos_bgp_address_family_neighbors_idempotent(self): - af_nbr_1 = dict( - neighbor="198.51.100.102", - activate=True, - graceful_restart=True, - default_originate=True, - weight=25, - ) - af_nbr_2 = dict( - neighbor="192.0.2.111", - activate=True, - default_originate=True, - ) - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", neighbors=[af_nbr_1, af_nbr_2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_eos_bgp_address_family_networks(self): - net = dict(prefix="203.0.113.128", masklen=26, route_map="RMAP_1") - net2 = dict(prefix="203.0.113.192", masklen=26, route_map="RMAP_2") - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", networks=[net, net2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - cmd = [ - "router bgp 64496", - "address-family ipv4", - "network 203.0.113.128/26 route-map RMAP_1", - "network 203.0.113.192/26 route-map RMAP_2", - "exit", - "exit", - ] - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_eos_bgp_address_family_networks_idempotent(self): - net = dict(prefix="2001:db8:8000::", masklen=34, route_map=None) - net2 = dict(prefix="2001:db8:c000::", masklen=34, route_map=None) - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv6", networks=[net, net2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_eos_bgp_operation_override(self): - net_1 = dict(prefix="2001:0db8:0800::", masklen=38, route_map="RMAP_1") - net_2 = dict(prefix="2001:0db8:1c00::", masklen=38, route_map="RMAP_2") - nbr_1 = dict( - neighbor="203.0.113.111", - remote_as=64511, - update_source="Ethernet2", - ) - nbr_2 = dict( - neighbor="203.0.113.120", - remote_as=64511, - timers=dict(keepalive=300, holdtime=360), - ) - af_nbr_1 = dict(neighbor="203.0.113.111", activate=True) - af_nbr_2 = dict( - neighbor="203.0.113.120", - activate=True, - default_originate=True, - ) - - af_1 = dict(afi="ipv4", neighbors=[af_nbr_1, af_nbr_2]) - af_2 = dict(afi="ipv6", networks=[net_1, net_2]) - config = dict( - bgp_as=64496, - neighbors=[nbr_1, nbr_2], - address_family=[af_1, af_2], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="override")) - commands = obj.render(self._bgp_config) - - cmd = [ - "no router bgp 64496", - "router bgp 64496", - "neighbor 203.0.113.111 remote-as 64511", - "neighbor 203.0.113.111 update-source Ethernet2", - "neighbor 203.0.113.120 remote-as 64511", - "neighbor 203.0.113.120 timers 300 360", - "address-family ipv4", - "neighbor 203.0.113.111 activate", - "neighbor 203.0.113.120 default-originate", - "neighbor 203.0.113.120 activate", - "exit", - "address-family ipv6", - "network 2001:0db8:0800::/38 route-map RMAP_1", - "network 2001:0db8:1c00::/38 route-map RMAP_2", - "exit", - "exit", - ] - - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_eos_bgp_operation_replace(self): - net = dict(prefix="203.0.113.0", masklen=27, route_map="RMAP_1") - net2 = dict(prefix="192.0.2.32", masklen=29, route_map="RMAP_2") - net_3 = dict(prefix="2001:db8:8000::", masklen=34, route_map=None) - net_4 = dict(prefix="2001:db8:c000::", masklen=34, route_map=None) - - af_1 = dict(afi="ipv4", networks=[net, net2]) - af_2 = dict(afi="ipv6", networks=[net_3, net_4]) - - config = dict(bgp_as=64496, address_family=[af_1, af_2], networks=None) - obj = Provider(params=dict(config=config, operation="replace")) - commands = obj.render(self._bgp_config) - - cmd = [ - "router bgp 64496", - "address-family ipv4", - "network 203.0.113.0/27 route-map RMAP_1", - "network 192.0.2.32/29 route-map RMAP_2", - "no network 192.0.2.0/27", - "no network 198.51.100.0/24", - "exit", - "exit", - ] - - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_eos_bgp_operation_replace_with_new_as(self): - nbr = dict( - neighbor="203.0.113.124", - remote_as=64496, - update_source="Ethernet3", - ) - - config = dict( - bgp_as=64497, - neighbors=[nbr], - networks=None, - address_family=None, - ) - obj = Provider(params=dict(config=config, operation="replace")) - commands = obj.render(self._bgp_config) - - cmd = [ - "no router bgp 64496", - "router bgp 64497", - "neighbor 203.0.113.124 remote-as 64496", - "neighbor 203.0.113.124 update-source Ethernet3", - "exit", - ] - - self.assertEqual(sorted(commands), sorted(cmd)) diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_address_family.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_address_family.py index c6a4c673f..4409e7ab2 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_address_family.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_address_family.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_bgp_address_family -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_global.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_global.py index 154814ed9..ef07006bb 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_global.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_bgp_global.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_bgp_global -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_command.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_command.py index 7d3043dd8..a263dcf84 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_command.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_command.py @@ -23,8 +23,9 @@ __metaclass__ = type import json +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_command -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_config.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_config.py index 3a28710ee..3d42e2f54 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_config.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_config.py @@ -21,9 +21,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import MagicMock, patch + from ansible_collections.arista.eos.plugins.cliconf.eos import Cliconf from ansible_collections.arista.eos.plugins.modules import eos_config -from ansible_collections.arista.eos.tests.unit.compat.mock import MagicMock, patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_eapi.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_eapi.py index c25582704..221a4ed5f 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_eapi.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_eapi.py @@ -21,8 +21,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_eapi -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_hostname.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_hostname.py index b586a83c3..e08422cee 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_hostname.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_hostname.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_hostname -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_interfaces.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_interfaces.py index ce53f2470..18fb2d3f7 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_interfaces.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_interfaces.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_interfaces -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_l2_interfaces.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_l2_interfaces.py index 53828688f..0d5e167b2 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_l2_interfaces.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_l2_interfaces.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_l2_interfaces -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_l3_interfaces.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_l3_interfaces.py index a7970455e..e65609695 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_l3_interfaces.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_l3_interfaces.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_l3_interfaces -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp.py index 7f8ed6071..e91191301 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp.py @@ -7,8 +7,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_lacp -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp_interfaces.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp_interfaces.py index 4fded7026..c155c684c 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp_interfaces.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lacp_interfaces.py @@ -7,8 +7,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_lacp_interfaces -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lag_interfaces.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lag_interfaces.py index 0c4c9a8f8..20be883a9 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lag_interfaces.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lag_interfaces.py @@ -7,8 +7,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_lag_interfaces -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lldp_global.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lldp_global.py index c87f27ad8..18142cedf 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lldp_global.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_lldp_global.py @@ -7,8 +7,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_lldp_global -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging.py deleted file mode 100644 index 1e166008f..000000000 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging.py +++ /dev/null @@ -1,112 +0,0 @@ -# (c) 2016 Red Hat Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -from ansible_collections.arista.eos.plugins.modules import eos_logging -from ansible_collections.arista.eos.tests.unit.compat.mock import patch -from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args - -from .eos_module import TestEosModule, load_fixture - - -class TestEosLoggingModule(TestEosModule): - module = eos_logging - - def setUp(self): - super(TestEosLoggingModule, self).setUp() - self._log_config = load_fixture("eos_logging_config.cfg") - - self.mock_get_config = patch( - "ansible_collections.arista.eos.plugins.modules.eos_logging.get_config", - ) - self.get_config = self.mock_get_config.start() - - self.mock_load_config = patch( - "ansible_collections.arista.eos.plugins.modules.eos_logging.load_config", - ) - self.load_config = self.mock_load_config.start() - - def tearDown(self): - super(TestEosLoggingModule, self).tearDown() - - self.mock_get_config.stop() - self.mock_load_config.stop() - - def load_fixtures(self, commands=None, transport="cli"): - self.get_config.return_value = load_fixture("eos_logging_config.cfg") - self.load_config.return_value = dict(diff=None, session="session") - - def test_eos_setup_host_logging_idempotenet(self): - set_module_args(dict(dest="host", name="175.16.0.10", state="present")) - self.execute_module(changed=False, commands=[]) - - def test_eos_setup_host_logging(self): - set_module_args(dict(dest="host", name="175.16.0.1", state="present")) - commands = ["logging host 175.16.0.1"] - self.execute_module(changed=True, commands=commands) - - def test_eos_buffer_size_outofrange(self): - set_module_args(dict(dest="buffered", size=5)) - result = self.execute_module(failed=True) - self.assertEqual( - result["msg"], - "size must be between 10 and 2147483647", - ) - - def test_eos_buffer_size_datatype(self): - set_module_args(dict(dest="buffered", size="ten")) - result = self.execute_module(failed=True) - self.assertIn("we were unable to convert to int", result["msg"]) - - def test_eos_buffer_size(self): - set_module_args(dict(dest="buffered", size=5000)) - commands = ["logging buffered 5000"] - self.execute_module(changed=True, commands=commands) - - def test_eos_buffer_size_idempotent(self): - set_module_args( - dict(dest="buffered", size=50000, level="informational"), - ) - self.execute_module(changed=False, commands=[]) - - def test_eos_facilty(self): - set_module_args(dict(facility="local2")) - commands = ["logging facility local2"] - self.execute_module(changed=True, commands=commands) - - def test_eos_facility_idempotent(self): - set_module_args(dict(facility="local7")) - self.execute_module(changed=False, commands=[]) - - def test_eos_level(self): - set_module_args(dict(dest="console", level="critical")) - commands = ["logging console critical"] - self.execute_module(changed=True, commands=commands) - - def test_eos_level_idempotent(self): - set_module_args(dict(dest="console", level="warnings")) - self.execute_module(changed=False, commands=[]) - - def test_eos_logging_state_absent(self): - set_module_args(dict(dest="host", name="175.16.0.10", state="absent")) - commands = ["no logging host 175.16.0.10"] - self.execute_module(changed=True, commands=commands) diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging_global.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging_global.py index 2bf476395..c705d513c 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging_global.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_logging_global.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_logging_global -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ntp_global.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ntp_global.py index 0296a1500..c2ca363b0 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ntp_global.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ntp_global.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_ntp_global -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospf_interfaces.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospf_interfaces.py index 65ec34c2f..701c0c9f9 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospf_interfaces.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospf_interfaces.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_ospf_interfaces -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospfv2.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospfv2.py index 8d3f3f746..42a1f6c3c 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospfv2.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospfv2.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_ospfv2 -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospfv3.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospfv3.py index eaa44f725..67e5188f4 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospfv3.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_ospfv3.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_ospfv3 -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_prefix_lists.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_prefix_lists.py index c130b313f..81b96ab71 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_prefix_lists.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_prefix_lists.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_prefix_lists -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_route_maps.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_route_maps.py index 7ee0915b3..63e8678e2 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_route_maps.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_route_maps.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_route_maps -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_snmp_server.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_snmp_server.py index 6475b666f..812e5ac06 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_snmp_server.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_snmp_server.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_snmp_server -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture @@ -400,7 +401,7 @@ class TestEosSnmp_ServerModule(TestEosModule): "no snmp-server group group2 v3 priv write view2 notify view1", "no snmp-server host host01 version 3 priv user01 udp-port 23", "no snmp-server host host02 version 2c user01 udp-port 23", - "snmp-server user user01 grp01 remote 1.1.1.1 udp-port 100 v3 md5 password123 priv aes abcdef", + "snmp-server user user01 grp01 remote 1.1.1.1 udp-port 100 v3 auth md5 password123 priv aes abcdef", "no snmp-server vrf vrf01 local-interface Ethernet1", "snmp-server vrf replacevrf", "snmp-server chassis-id 123456", @@ -450,7 +451,7 @@ class TestEosSnmp_ServerModule(TestEosModule): "no snmp-server group group2 v3 priv write view2 notify view1", "no snmp-server host host01 version 3 priv user01 udp-port 23", "no snmp-server host host02 version 2c user01 udp-port 23", - "snmp-server user user01 grp01 remote 1.1.1.1 udp-port 100 v3 localized abcdef md5 password123 priv aes abcdef", + "snmp-server user user01 grp01 remote 1.1.1.1 udp-port 100 v3 localized abcdef auth md5 password123 priv aes abcdef", "snmp-server view view1 mib1 excluded", "no snmp-server vrf vrf01 local-interface Ethernet1", "snmp-server transport tcp", diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_static_routes.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_static_routes.py index 9150ee77b..4b95d1ea7 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_static_routes.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_static_routes.py @@ -10,11 +10,12 @@ __metaclass__ = type import itertools +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.module_utils.network.eos.config.static_routes.static_routes import ( add_commands, ) from ansible_collections.arista.eos.plugins.modules import eos_static_routes -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_system.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_system.py index 14334bb48..dd7bfef04 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_system.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_system.py @@ -21,8 +21,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_system -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_user.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_user.py index fa4ccac0a..eefa6f386 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_user.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_user.py @@ -19,8 +19,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_user -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_vlans.py b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_vlans.py index f707c88c4..4951329dd 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_vlans.py +++ b/ansible_collections/arista/eos/tests/unit/modules/network/eos/test_eos_vlans.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.arista.eos.plugins.modules import eos_vlans -from ansible_collections.arista.eos.tests.unit.compat.mock import patch from ansible_collections.arista.eos.tests.unit.modules.utils import set_module_args from .eos_module import TestEosModule, load_fixture diff --git a/ansible_collections/arista/eos/tests/unit/modules/utils.py b/ansible_collections/arista/eos/tests/unit/modules/utils.py index 10ea1509d..87be9cf8e 100644 --- a/ansible_collections/arista/eos/tests/unit/modules/utils.py +++ b/ansible_collections/arista/eos/tests/unit/modules/utils.py @@ -4,12 +4,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import json +from unittest import TestCase +from unittest.mock import patch + from ansible.module_utils import basic from ansible.module_utils._text import to_bytes -from ansible_collections.arista.eos.tests.unit.compat import unittest -from ansible_collections.arista.eos.tests.unit.compat.mock import patch - def set_module_args(args): if "_ansible_remote_tmp" not in args: @@ -40,7 +40,7 @@ def fail_json(*args, **kwargs): raise AnsibleFailJson(kwargs) -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self): self.mock_module = patch.multiple( basic.AnsibleModule, diff --git a/ansible_collections/arista/eos/tox-ansible.ini b/ansible_collections/arista/eos/tox-ansible.ini new file mode 100644 index 000000000..5e1f4b36a --- /dev/null +++ b/ansible_collections/arista/eos/tox-ansible.ini @@ -0,0 +1,10 @@ +[ansible] + +skip = + py3.7 + py3.8 + 2.9 + 2.10 + 2.11 + 2.12 + 2.13 diff --git a/ansible_collections/arista/eos/tox.ini b/ansible_collections/arista/eos/tox.ini deleted file mode 100644 index 41fd127f7..000000000 --- a/ansible_collections/arista/eos/tox.ini +++ /dev/null @@ -1,32 +0,0 @@ -[tox] -minversion = 1.4.2 -envlist = linters -skipsdist = True - -[testenv] -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -[testenv:black] -install_command = pip install {opts} {packages} -commands = - black -v {toxinidir} - -[testenv:linters] -install_command = pip install {opts} {packages} -commands = - black -v --diff --check {toxinidir} - flake8 {posargs} - yamllint -s . - -[testenv:venv] -commands = {posargs} - -[flake8] -# E123, E125 skipped as they are invalid PEP-8. - -show-source = True -ignore = E123,E125,E203,E402,E501,E741,F401,F811,F841,W503, W504 -max-line-length = 160 -builtins = _ -exclude = .git,.tox,tests/unit/compat/ diff --git a/ansible_collections/awx/awx/FILES.json b/ansible_collections/awx/awx/FILES.json index 9fba1d572..c006332f0 100644 --- a/ansible_collections/awx/awx/FILES.json +++ b/ansible_collections/awx/awx/FILES.json @@ -8,31 +8,59 @@ "format": 1 }, { - "name": "README.md", + "name": "COPYING", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41997bded547ba6a168ee41fd5379a44f20dcd155979067564b79d14af6e3fd3", + "chksum_sha256": "7c50cd9b85e2b7eebaea2b5618b402862b01d5a66befff8e41401ef3f14e471a", "format": 1 }, { - "name": "meta", + "name": "TESTING.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4691e79c8038d8e985610fb613cd2f4799d4740b0a6ca1b72d3266528088a272", + "format": 1 + }, + { + "name": "bindep.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7205dda85d2cd5501b3344e9f18e4acd09583056aab5e8a05554ba29a3b8fad8", + "format": 1 + }, + { + "name": "images", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "meta/runtime.yml", + "name": "images/completeness_test_output.png", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c63b75e8e4c9b744914c111d3ff8b54f0e973b78ce444815acfb4aa254a9ad6", + "chksum_sha256": "6367684c4b5edd3e1e8fdcb9270d68ca54040d5d17108734f3d3a2b9df5878ba", "format": 1 }, { - "name": "bindep.txt", + "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7205dda85d2cd5501b3344e9f18e4acd09583056aab5e8a05554ba29a3b8fad8", + "chksum_sha256": "2eb11923e1347afc5075a7871e206a8f15a68471c90012f7386e9db0875e70bf", + "format": 1 + }, + { + "name": "meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "meta/runtime.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3bf2312f22f63103185491d64c013cc23cb829f9600b8e6876c98a16e7d4a0c1", "format": 1 }, { @@ -50,10 +78,10 @@ "format": 1 }, { - "name": "plugins/doc_fragments/auth_plugin.py", + "name": "plugins/doc_fragments/auth_legacy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f1c61a9880edca852582f58c635c32264b0d1b3218ebdeb9db9d23081267c070", + "chksum_sha256": "c2f10b81ecb89088c7c295430d4a71de26e3700b26e8344cdc7950908a738fd3", "format": 1 }, { @@ -64,10 +92,10 @@ "format": 1 }, { - "name": "plugins/doc_fragments/auth_legacy.py", + "name": "plugins/doc_fragments/auth_plugin.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c2f10b81ecb89088c7c295430d4a71de26e3700b26e8344cdc7950908a738fd3", + "chksum_sha256": "f1c61a9880edca852582f58c635c32264b0d1b3218ebdeb9db9d23081267c070", "format": 1 }, { @@ -85,59 +113,73 @@ "format": 1 }, { - "name": "plugins/modules", + "name": "plugins/lookup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/job_cancel.py", + "name": "plugins/lookup/controller_api.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d64f698909919b05c9c47a65f24c861c3cabe33c039944f6120d49a2ac7d40da", + "chksum_sha256": "5e79f19c9dee4fa0c3a88126a630fa6163249c332d73a44370f64836e22d4b27", "format": 1 }, { - "name": "plugins/modules/ad_hoc_command_cancel.py", + "name": "plugins/lookup/schedule_rrule.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3338e10af9ccd0e4178b8e1ec1e7064b00ab90e64665f846a2123f10d9d151f4", + "chksum_sha256": "c3ec7b8f134eca3a9f04156213b584792fc4e3397e3b9f82b5044e9ec662c7a2", "format": 1 }, { - "name": "plugins/modules/workflow_approval.py", + "name": "plugins/lookup/schedule_rruleset.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "533e52fc20ca99e935154f5ba3ec30c2055f42d1c51c3bc2cf1570af7f951c33", + "chksum_sha256": "0141249f5cbe0651f96d3ba0a627a4d7e7376bd0e5b2b29e63ef44f9c243feb3", "format": 1 }, { - "name": "plugins/modules/job_list.py", + "name": "plugins/module_utils", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/awxkit.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ea8024bfc9612c005745a13a508c40d320b4c204bf18fcd495f72789d9adb40", + "chksum_sha256": "8b2398e4e7893f203b26f6c85d510cc4c41a79c53e1937710807233e62e35f58", "format": 1 }, { - "name": "plugins/modules/bulk_host_delete.py", + "name": "plugins/module_utils/controller_api.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "546fb1eb2104db87c1d608144590e38d361af2ba734caa62fc61586e49a124ad", + "chksum_sha256": "a5b5a041efc42a832ebef422bac6283da1e846a7d6f3d8dcdcd5ad797de50747", "format": 1 }, { - "name": "plugins/modules/inventory_source_update.py", + "name": "plugins/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0b79d76d7d9f817f709a8dacbcb2a105a214c33e63449decaec65adebac6d74", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/workflow_launch.py", + "name": "plugins/modules/ad_hoc_command_wait.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3aff0ecdf76b65df3e17f7c8a34eddae8a1bc4d35c304619f7c2054927584d35", + "chksum_sha256": "67bc716ec04dfc77cb751cda6013ee54fa0cd3ed3afabc5ba0d146cc9712c996", "format": 1 }, { @@ -148,129 +190,150 @@ "format": 1 }, { - "name": "plugins/modules/credential.py", + "name": "plugins/modules/import.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6d52d95b7e59a41b5d3715c3b55857c1b70baf7a0e8e44e9cc66db67b87685f", + "chksum_sha256": "a7a03186251ef644ba03c49e7e23a799f8046abddb9ea20fff68dd09fe759680", "format": 1 }, { - "name": "plugins/modules/team.py", + "name": "plugins/modules/job_cancel.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e53a544c12fc2de705bce163e3babf6d95fae6d088f1415a61debeb07d60f991", + "chksum_sha256": "d64f698909919b05c9c47a65f24c861c3cabe33c039944f6120d49a2ac7d40da", "format": 1 }, { - "name": "plugins/modules/host.py", + "name": "plugins/modules/job_list.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b973c5f3790dc0c084e97a6f6b0c87209632f1ff348bc36466cc13392e774c79", + "chksum_sha256": "2ea8024bfc9612c005745a13a508c40d320b4c204bf18fcd495f72789d9adb40", "format": 1 }, { - "name": "plugins/modules/job_launch.py", + "name": "plugins/modules/job_wait.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c26e876232d5658537b9d041879f93e024e52c901551b5e6ad89354d6023d71", + "chksum_sha256": "7e7459abf351f6c172401eec4ba579dc8566f8a55fd022cc8eec9fa5a3399067", "format": 1 }, { - "name": "plugins/modules/credential_input_source.py", + "name": "plugins/modules/workflow_node_wait.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78ce109c0cc51aa8d66f0146ac9f448559b186cc2b155ee2a8ed96cebe65909d", + "chksum_sha256": "5b19778b005fbaa3e0a3abc645a6d6452bc0ad52e89fe04141d051f6ddafbb73", "format": 1 }, { - "name": "plugins/modules/instance_group.py", + "name": "plugins/modules/ad_hoc_command_cancel.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14c7f97d44a266a9d73d8ef1fc85f8c15ecbab611ff8133026ef943e211ba7c2", + "chksum_sha256": "3338e10af9ccd0e4178b8e1ec1e7064b00ab90e64665f846a2123f10d9d151f4", "format": 1 }, { - "name": "plugins/modules/inventory_source.py", + "name": "plugins/modules/subscriptions.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "279efe4103630b4961baeb468c43f9d75c657c0beb36ece73982d31080931403", + "chksum_sha256": "f497ab9ada8f89650422bf85deef386e32b774dfff9e1de07b387fba32d890a8", "format": 1 }, { - "name": "plugins/modules/application.py", + "name": "plugins/modules/workflow_approval.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1b39c7cd3d608245b7d419547d6582fca5143bf8f72ff39fa89cb67d4ee8ac0", + "chksum_sha256": "533e52fc20ca99e935154f5ba3ec30c2055f42d1c51c3bc2cf1570af7f951c33", "format": 1 }, { - "name": "plugins/modules/role.py", + "name": "plugins/modules/bulk_host_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31aebaae562881a3a9ecea61f5d26747559cbed69dcf45fbe21d9a65412ea56c", + "chksum_sha256": "9398fec791845d1ddb304cd344d308127f89ce6ed5a8341f2c6047b4e2d22ed4", "format": 1 }, { - "name": "plugins/modules/token.py", + "name": "plugins/modules/bulk_job_launch.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc35a007403827d4994793d9bb4a5d573d9b532c605feee6d97b119037ead203", + "chksum_sha256": "f19617e62f57b0a81fb9ebbf209583fbd9c74d3e2b85ca0102b2fd1b2bd77b81", "format": 1 }, { - "name": "plugins/modules/export.py", + "name": "plugins/modules/credential_input_source.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b62aa153c8a819461f3bcbd27a4de731e477dffc4d05def8829687901b71aec9", + "chksum_sha256": "78ce109c0cc51aa8d66f0146ac9f448559b186cc2b155ee2a8ed96cebe65909d", "format": 1 }, { - "name": "plugins/modules/import.py", + "name": "plugins/modules/credential_type.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a7a03186251ef644ba03c49e7e23a799f8046abddb9ea20fff68dd09fe759680", + "chksum_sha256": "1867c68c3b43c0f27a8e87dcbb66b22fdfc1cd659cc1747a6686573f6a7d6be9", "format": 1 }, { - "name": "plugins/modules/credential_type.py", + "name": "plugins/modules/group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1867c68c3b43c0f27a8e87dcbb66b22fdfc1cd659cc1747a6686573f6a7d6be9", + "chksum_sha256": "7dc98af3cbdfc5ea0cf4cffe0c86c846837dfebe15c16939ed863b730cb05578", "format": 1 }, { - "name": "plugins/modules/workflow_job_template_node.py", + "name": "plugins/modules/host.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "023e170fb1db59ec4d4acecee21befc2aa03199110368d4bd0682ad4adf84092", + "chksum_sha256": "b973c5f3790dc0c084e97a6f6b0c87209632f1ff348bc36466cc13392e774c79", "format": 1 }, { - "name": "plugins/modules/job_wait.py", + "name": "plugins/modules/instance_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7e7459abf351f6c172401eec4ba579dc8566f8a55fd022cc8eec9fa5a3399067", + "chksum_sha256": "14c7f97d44a266a9d73d8ef1fc85f8c15ecbab611ff8133026ef943e211ba7c2", "format": 1 }, { - "name": "plugins/modules/execution_environment.py", + "name": "plugins/modules/inventory.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e00a63a1ddccfef4ad20725799ba67dbdfd8b9c720d9f04a92f05683bf7dc4e1", + "chksum_sha256": "1a430ae0b6371f884c14a9022552846f5174100ef02601a6ece649cb45a9e7e9", "format": 1 }, { - "name": "plugins/modules/instance.py", + "name": "plugins/modules/inventory_source.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fb4467c11809837fee04ed77ddcf154414070a0b0458742e8d6dcb3be045a9f3", + "chksum_sha256": "279efe4103630b4961baeb468c43f9d75c657c0beb36ece73982d31080931403", "format": 1 }, { - "name": "plugins/modules/organization.py", + "name": "plugins/modules/inventory_source_update.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c46808d096cba86747d9e9d69da660d44341c885fb966e4ffad8499b7d8d055", + "chksum_sha256": "e0b79d76d7d9f817f709a8dacbcb2a105a214c33e63449decaec65adebac6d74", + "format": 1 + }, + { + "name": "plugins/modules/job_launch.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1c26e876232d5658537b9d041879f93e024e52c901551b5e6ad89354d6023d71", + "format": 1 + }, + { + "name": "plugins/modules/job_template.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "77a9774f8baae9a417aa3f7170f4866307ea3e7f29fbe93a00df98f33e8c99b0", + "format": 1 + }, + { + "name": "plugins/modules/label.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f3bde75b41fd4c92037f759ae00e9ebd76f27c91ab54857f167715db1930b0a8", "format": 1 }, { @@ -281,80 +344,80 @@ "format": 1 }, { - "name": "plugins/modules/group.py", + "name": "plugins/modules/notification_template.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7dc98af3cbdfc5ea0cf4cffe0c86c846837dfebe15c16939ed863b730cb05578", + "chksum_sha256": "638dbb75383b11b1227b2120424ee4f9f37861747c9aa5fca6df0665fe97fc86", "format": 1 }, { - "name": "plugins/modules/subscriptions.py", + "name": "plugins/modules/organization.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f497ab9ada8f89650422bf85deef386e32b774dfff9e1de07b387fba32d890a8", + "chksum_sha256": "0c46808d096cba86747d9e9d69da660d44341c885fb966e4ffad8499b7d8d055", "format": 1 }, { - "name": "plugins/modules/workflow_node_wait.py", + "name": "plugins/modules/project.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b19778b005fbaa3e0a3abc645a6d6452bc0ad52e89fe04141d051f6ddafbb73", + "chksum_sha256": "d65ade1efc240c94eadc37d984cfec8094c655ed4d162243d170e947bad4b425", "format": 1 }, { - "name": "plugins/modules/label.py", + "name": "plugins/modules/project_update.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f3bde75b41fd4c92037f759ae00e9ebd76f27c91ab54857f167715db1930b0a8", + "chksum_sha256": "952bedbca07dba7de277849b45eb258f51420ed8e814fa35acd47dc5e5f8f82f", "format": 1 }, { - "name": "plugins/modules/workflow_job_template.py", + "name": "plugins/modules/role.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18fa1ae60ba7c409cd3baf67215ebf3b8d680e10a1402ca66f362166ab668cb4", + "chksum_sha256": "31aebaae562881a3a9ecea61f5d26747559cbed69dcf45fbe21d9a65412ea56c", "format": 1 }, { - "name": "plugins/modules/bulk_host_create.py", + "name": "plugins/modules/schedule.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9398fec791845d1ddb304cd344d308127f89ce6ed5a8341f2c6047b4e2d22ed4", + "chksum_sha256": "517c76a73dae1fadc7c47c0c8544ae00c6f88daff7a3e72c67aa9501265177ac", "format": 1 }, { - "name": "plugins/modules/project.py", + "name": "plugins/modules/team.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d65ade1efc240c94eadc37d984cfec8094c655ed4d162243d170e947bad4b425", + "chksum_sha256": "e53a544c12fc2de705bce163e3babf6d95fae6d088f1415a61debeb07d60f991", "format": 1 }, { - "name": "plugins/modules/__init__.py", + "name": "plugins/modules/token.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cc35a007403827d4994793d9bb4a5d573d9b532c605feee6d97b119037ead203", "format": 1 }, { - "name": "plugins/modules/settings.py", + "name": "plugins/modules/user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c62170baca6d9ecf0be7a68d148daa75569e87a6ddffb92a39f3bc4ea08e9e0a", + "chksum_sha256": "cd3cc005d12434b3cac4238b3dfc0d2976f53f0c2e8c0dafc02953ad1393e377", "format": 1 }, { - "name": "plugins/modules/project_update.py", + "name": "plugins/modules/workflow_job_template.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "952bedbca07dba7de277849b45eb258f51420ed8e814fa35acd47dc5e5f8f82f", + "chksum_sha256": "18fa1ae60ba7c409cd3baf67215ebf3b8d680e10a1402ca66f362166ab668cb4", "format": 1 }, { - "name": "plugins/modules/ad_hoc_command_wait.py", + "name": "plugins/modules/workflow_job_template_node.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "67bc716ec04dfc77cb751cda6013ee54fa0cd3ed3afabc5ba0d146cc9712c996", + "chksum_sha256": "023e170fb1db59ec4d4acecee21befc2aa03199110368d4bd0682ad4adf84092", "format": 1 }, { @@ -365,388 +428,423 @@ "format": 1 }, { - "name": "plugins/modules/schedule.py", + "name": "plugins/modules/execution_environment.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "517c76a73dae1fadc7c47c0c8544ae00c6f88daff7a3e72c67aa9501265177ac", + "chksum_sha256": "e00a63a1ddccfef4ad20725799ba67dbdfd8b9c720d9f04a92f05683bf7dc4e1", "format": 1 }, { - "name": "plugins/modules/inventory.py", + "name": "plugins/modules/export.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a430ae0b6371f884c14a9022552846f5174100ef02601a6ece649cb45a9e7e9", + "chksum_sha256": "b62aa153c8a819461f3bcbd27a4de731e477dffc4d05def8829687901b71aec9", "format": 1 }, { - "name": "plugins/modules/user.py", + "name": "plugins/modules/settings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd3cc005d12434b3cac4238b3dfc0d2976f53f0c2e8c0dafc02953ad1393e377", + "chksum_sha256": "c62170baca6d9ecf0be7a68d148daa75569e87a6ddffb92a39f3bc4ea08e9e0a", "format": 1 }, { - "name": "plugins/modules/notification_template.py", + "name": "plugins/modules/application.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "638dbb75383b11b1227b2120424ee4f9f37861747c9aa5fca6df0665fe97fc86", + "chksum_sha256": "b79e9f80c4ef79fbacd134d4239f6eae08971838c3a57b79143e57a08bd836d9", "format": 1 }, { - "name": "plugins/modules/job_template.py", + "name": "plugins/modules/bulk_host_delete.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "77a9774f8baae9a417aa3f7170f4866307ea3e7f29fbe93a00df98f33e8c99b0", + "chksum_sha256": "546fb1eb2104db87c1d608144590e38d361af2ba734caa62fc61586e49a124ad", "format": 1 }, { - "name": "plugins/modules/bulk_job_launch.py", + "name": "plugins/modules/credential.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f19617e62f57b0a81fb9ebbf209583fbd9c74d3e2b85ca0102b2fd1b2bd77b81", + "chksum_sha256": "e6d52d95b7e59a41b5d3715c3b55857c1b70baf7a0e8e44e9cc66db67b87685f", "format": 1 }, { - "name": "plugins/module_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/instance.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fb4467c11809837fee04ed77ddcf154414070a0b0458742e8d6dcb3be045a9f3", "format": 1 }, { - "name": "plugins/module_utils/awxkit.py", + "name": "plugins/modules/role_definition.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b2398e4e7893f203b26f6c85d510cc4c41a79c53e1937710807233e62e35f58", + "chksum_sha256": "e8a1eada7ef01e9cb72c38a45c42334960cac6fc5bfce1304103a332f8e99537", "format": 1 }, { - "name": "plugins/module_utils/controller_api.py", + "name": "plugins/modules/role_team_assignment.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "424dfd5dbc14adedb59d26cfa67bbc46e1c5197859c473c9cdb288bb2ef26db9", + "chksum_sha256": "a0c07c5132ab9f02701357d5ec0e0bb2ee2d75c36aded59edf8fb422aa868aa1", "format": 1 }, { - "name": "plugins/lookup", + "name": "plugins/modules/role_user_assignment.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "06a4bf55937ea3b80cb2b418a8f6d858b861cd8391e4f7fe5e6765ff7eb0ab9b", + "format": 1 + }, + { + "name": "plugins/modules/workflow_launch.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "da79dfcb79b50f7c4f998723734d3931a0749dee0fbe59bf62463dc7909d496c", + "format": 1 + }, + { + "name": "test", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/lookup/controller_api.py", + "name": "test/awx", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "test/awx/test_ad_hoc_wait.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e79f19c9dee4fa0c3a88126a630fa6163249c332d73a44370f64836e22d4b27", + "chksum_sha256": "daed2a74d3f64fd0300255050dc8c732158db401323f44da66ccb4bf84b59633", "format": 1 }, { - "name": "plugins/lookup/schedule_rruleset.py", + "name": "test/awx/test_application.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0141249f5cbe0651f96d3ba0a627a4d7e7376bd0e5b2b29e63ef44f9c243feb3", + "chksum_sha256": "a106d5fbffbe1eaec36d8247979ca637ee733a29abf94d955c48be8d2fd16842", "format": 1 }, { - "name": "plugins/lookup/schedule_rrule.py", + "name": "test/awx/test_credential_input_source.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3ec7b8f134eca3a9f04156213b584792fc4e3397e3b9f82b5044e9ec662c7a2", + "chksum_sha256": "9637a418c0b0e59261ec0d1c206ff2d3574a41a8a169068bbf74588e3a4214b2", "format": 1 }, { - "name": "COPYING", + "name": "test/awx/test_credential_type.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c50cd9b85e2b7eebaea2b5618b402862b01d5a66befff8e41401ef3f14e471a", + "chksum_sha256": "1fe388a0c19f08006c7718766d5faa79540dd3b14547ced43b5a237a2c2fd877", "format": 1 }, { - "name": "tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_group.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1ecf188e82d4c848de64c8f7fd7af2d4adb6887c6a448771ff51bb43c4fa8128", "format": 1 }, { - "name": "tests/config.yml", + "name": "test/awx/test_instance_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4cb8bf065737689916cda6a2856fcfb8bc27f49224a4b2c2fde842e3b0e76fbb", + "chksum_sha256": "9ce22bf5e6baa63ab096c9377478f8a3af33624def33e52753342e435924e573", "format": 1 }, { - "name": "tests/sanity", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_inventory.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "70eac0cf78806e37406137fcfb97e5a249fd6b091b1f18e812278573049a4111", "format": 1 }, { - "name": "tests/sanity/ignore-2.15.txt", + "name": "test/awx/test_job.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6dce33e05558d94ecc8ebacc8a5011e9defc1b197fcc13c4335868b6d6c4952", + "chksum_sha256": "76ba45e14438425f7511d196613928d64253e1912a45b71ea842b1cb2c3ca335", "format": 1 }, { - "name": "tests/sanity/ignore-2.14.txt", + "name": "test/awx/test_label.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05b621f6ff40c091ab1c07947c43d817ed37af7acfc0f8bef7b1453eb03b3aa7", + "chksum_sha256": "cd957d0b0cab6dd51539baf3fb27b659b91a8e57b20aae4c5cce7eaec9cec494", "format": 1 }, { - "name": "tests/sanity/ignore-2.16.txt", + "name": "test/awx/test_settings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6dce33e05558d94ecc8ebacc8a5011e9defc1b197fcc13c4335868b6d6c4952", + "chksum_sha256": "436c13933936e7b80dd26c61ea1dbf492c13974f2922f1543c4fe6e6b0fab0dd", "format": 1 }, { - "name": "tests/integration", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_team.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cbbdbdb3be0b0d80dcfcf337ed0095774cf73ef0e937d3e8dc5abab21739db5d", "format": 1 }, { - "name": "tests/integration/targets", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_token.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "118145cdd5f6a03df7a7a608d5f9e510236b2a54f9bcd456f4294ba69f0f4fad", "format": 1 }, { - "name": "tests/integration/targets/job_list", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_user.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f9520b058e16e4e4800d3a5f70cd28650a365fa357afa1d41a8c63bf3354027e", "format": 1 }, { - "name": "tests/integration/targets/job_list/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_workflow_job_template_node.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0806356bfd91b28153baa63ca8cbf8f7da1125dd5150e38e73aa37c65e236f6b", "format": 1 }, { - "name": "tests/integration/targets/job_list/tasks/main.yml", + "name": "test/awx/test_inventory_source.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "668f25abe2486218893b6137f5b765301229f649ed3a779a6756496c14f42595", + "chksum_sha256": "a14f69db1bf6cec594e64c2963b415560b78eac1f9cbe7d4c09586b494e11bde", "format": 1 }, { - "name": "tests/integration/targets/credential_type", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_module_utils.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a5118e383f1370175dc7900ec3abae2ee53bd77ecf8853ca333ffcbf625b216f", "format": 1 }, { - "name": "tests/integration/targets/credential_type/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_project.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fbb93e524df51b788f12746ffb52bf5105f67b3ae6b89403bed51ed1f2da9c12", "format": 1 }, { - "name": "tests/integration/targets/credential_type/tasks/main.yml", + "name": "test/awx/test_schedule.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d5026a4ca77513f73aa620ea14b74e0248c0dde7b5d75b318970154d7f4bf56", + "chksum_sha256": "dadfd1c19c4c828dd84128ca484b837c6a904a09e92bcee12cb7cda408562c81", "format": 1 }, { - "name": "tests/integration/targets/job_wait", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_credential.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c1bfcf99f4de13b3cc4a76c7f33fa3a51fde175afff5730b4743695cbeb69643", "format": 1 }, { - "name": "tests/integration/targets/job_wait/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_job_template.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2f0e924d79cd0b2bccbe4664e27ec07cb96a274d289229d80be09687f099171e", "format": 1 }, { - "name": "tests/integration/targets/job_wait/tasks/main.yml", + "name": "test/awx/test_organization.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "76cf3f8c1cfac81eaaf0f5b76494fc3b7605a15eeb73f6fc83efbbe28a4073b3", + "chksum_sha256": "091d48906e4bf5ffaceead8f49281e05184cefce1546f387ce29a232d6694ec9", "format": 1 }, { - "name": "tests/integration/targets/workflow_approval", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_notification_template.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f40d5b65fbc78d12570f37799c8e240cfb90d9948421d3db82af6427fd14854f", "format": 1 }, { - "name": "tests/integration/targets/workflow_approval/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/conftest.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9627cca4a40d87832000ec2335ab68888394f6f3bc1d04358147ec6971a69ea2", "format": 1 }, { - "name": "tests/integration/targets/workflow_approval/tasks/main.yml", + "name": "test/awx/test_bulk.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ccc6f9f0aafef620896c56a32e1dd07f2f83f61c6b8c4d4bbaa6a220495b91d", + "chksum_sha256": "a10cc6ca47f1cd560e5adff57f88b4628b6ff3ec20874a751ae57d7474cfb7d5", "format": 1 }, { - "name": "tests/integration/targets/application", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_completeness.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "56bc8d4297a9c7c4fdb712fd838803cc9233023288f5555f3e3d229117604eee", "format": 1 }, { - "name": "tests/integration/targets/application/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_export.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c24a35265af8ff90f6456d39d0cc84cc9ce765d9fc3d45a4a8ac945e2538ff6b", + "format": 1 + }, + { + "name": "test/awx/test_instance.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2b60fecf79c63341b0eece0d9941a655dfeac89b3565e78f5bb39c5ec77b91af", + "format": 1 + }, + { + "name": "test/awx/test_role.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9d4aec4ecb6a4429c08125de3c7b1161db794a2ed32cebd9e593d14fd90375d4", "format": 1 }, { - "name": "tests/integration/targets/application/tasks/main.yml", + "name": "test/awx/test_role_definition.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42675b283f15715cccd1bba3f3d6be8d9d84e1bcf7c1e06e33a281ab4eb5c64f", + "chksum_sha256": "da3d110330ea7f35d99701fb748e71ada4bc458b6c5f66be5a317c433e3976ea", "format": 1 }, { - "name": "tests/integration/targets/instance_group", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_role_team_assignment.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f3ac9236893e4737e6eb32b3a3d217d13d520de63ecd6050debdf157a968ec7a", "format": 1 }, { - "name": "tests/integration/targets/instance_group/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "test/awx/test_role_user_assignment.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "62e76a504873f12b631f99a7275a6673e98964258f0775606860a28d7e3efc73", "format": 1 }, { - "name": "tests/integration/targets/instance_group/tasks/main.yml", + "name": "test/awx/test_workflow_job_template.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d38320dd4563f17fffd12b510a91dd26e40bfd5f408f75f96b930a38fcfd135", + "chksum_sha256": "9e23b2e1055900a86dc2fb42165ca567936b319b69d3000c36434df28c6ae007", "format": 1 }, { - "name": "tests/integration/targets/settings", + "name": "tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/settings/tasks", + "name": "tests/integration", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/settings/tasks/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "93262aa7be1aec73bcd5e36b1fadd663bed21eab8863f797dd17f20de80db7ba", + "name": "tests/integration/targets", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/project", + "name": "tests/integration/targets/ad_hoc_command", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/project/tasks", + "name": "tests/integration/targets/ad_hoc_command/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/project/tasks/main.yml", + "name": "tests/integration/targets/ad_hoc_command/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c2f8af4ca361cc63c465d7b0895ef2ad7a3741f36e30133b5c33696ba2cf7474", + "chksum_sha256": "87ec6c33a66b6dd969c6ed08693a02a51fc43c21b3980a81a5edd29d644050aa", "format": 1 }, { - "name": "tests/integration/targets/inventory_source", + "name": "tests/integration/targets/ad_hoc_command_cancel", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory_source/tasks", + "name": "tests/integration/targets/ad_hoc_command_cancel/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory_source/tasks/main.yml", + "name": "tests/integration/targets/ad_hoc_command_cancel/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7e581c4634196ff64cee14278c55b2292534605006e5a20edadcfe17e778caa9", + "chksum_sha256": "655ba448d6b451adbb4006c964c3ca21c7303787b3c336bd946752122bdb8d94", "format": 1 }, { - "name": "tests/integration/targets/group", + "name": "tests/integration/targets/ad_hoc_command_wait", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/group/tasks", + "name": "tests/integration/targets/ad_hoc_command_wait/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/group/tasks/main.yml", + "name": "tests/integration/targets/ad_hoc_command_wait/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe499cf6b248289df031a4d32328dbe45184f4fe7d92423522b1705715010904", + "chksum_sha256": "1e5ced853c1d15d2db163bd5dbb56b1ca419363327dc32bd6a1448560e194c2f", "format": 1 }, { - "name": "tests/integration/targets/demo_data", + "name": "tests/integration/targets/application", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/demo_data/tasks", + "name": "tests/integration/targets/application/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/demo_data/tasks/main.yml", + "name": "tests/integration/targets/application/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "619e28fefe26c4854b15b8c739693b1da85f69b1cf9792c84f40db544dda5f8b", + "chksum_sha256": "f71a6ffe7df8f995600cd7e2ea3e0de9db733fe71b20be4a55da3f7b966937af", "format": 1 }, { @@ -771,374 +869,374 @@ "format": 1 }, { - "name": "tests/integration/targets/schedule", + "name": "tests/integration/targets/credential_input_source", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/schedule/tasks", + "name": "tests/integration/targets/credential_input_source/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/schedule/tasks/main.yml", + "name": "tests/integration/targets/credential_input_source/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7419baf00681606be0a250140ace5f7d07804f8b650ecb5f0937147064e307f0", + "chksum_sha256": "83dae6f438515cce80bf4b25d24d472de42feafe46b9f8faacaa7cdf18c1eb16", "format": 1 }, { - "name": "tests/integration/targets/organization", + "name": "tests/integration/targets/credential_type", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/organization/tasks", + "name": "tests/integration/targets/credential_type/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/organization/tasks/main.yml", + "name": "tests/integration/targets/credential_type/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e18cbff8118f617a9b594f630739356922030c2d802a0eb92df0ddbe4f1e1fe", + "chksum_sha256": "6d5026a4ca77513f73aa620ea14b74e0248c0dde7b5d75b318970154d7f4bf56", "format": 1 }, { - "name": "tests/integration/targets/inventory_source_update", + "name": "tests/integration/targets/demo_data", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory_source_update/tasks", + "name": "tests/integration/targets/demo_data/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory_source_update/tasks/main.yml", + "name": "tests/integration/targets/demo_data/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "06a737371470d7a996e2eb092d820fe536dac73f3abcec56acf002da62fe05d9", + "chksum_sha256": "619e28fefe26c4854b15b8c739693b1da85f69b1cf9792c84f40db544dda5f8b", "format": 1 }, { - "name": "tests/integration/targets/lookup_api_plugin", + "name": "tests/integration/targets/execution_environment", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/lookup_api_plugin/tasks", + "name": "tests/integration/targets/execution_environment/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/lookup_api_plugin/tasks/main.yml", + "name": "tests/integration/targets/execution_environment/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d2206729f900ec7f71e77edf782eff6e68160ccb0124fb2bf22f0f371abb9271", + "chksum_sha256": "950122a04ad3b7406fa9a140e02ab190a0f7f53dfec791fdcb1fb2781ebae54d", "format": 1 }, { - "name": "tests/integration/targets/import", + "name": "tests/integration/targets/export", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/import/aliases", + "name": "tests/integration/targets/export/aliases", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "52e1315ef042495cdf2b0ce22d8ba47f726dce15b968e301a795be1f69045f20", "format": 1 }, { - "name": "tests/integration/targets/import/tasks", + "name": "tests/integration/targets/export/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/import/tasks/main.yml", + "name": "tests/integration/targets/export/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59c0ace95e680d9874fe15c76889c1b4beb38d2d3c66a11499581b0f328ec25a", + "chksum_sha256": "e66e796b995b7c9ae612e00b393ccd75d9747d2d94ea3fbbaf90832e5b3e9e3f", "format": 1 }, { - "name": "tests/integration/targets/job_cancel", + "name": "tests/integration/targets/group", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/job_cancel/tasks", + "name": "tests/integration/targets/group/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/job_cancel/tasks/main.yml", + "name": "tests/integration/targets/group/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c8b9d511b1ce96b7d5a359b1043ffc18004c5d3c23052b82423512b46ecd7b4", + "chksum_sha256": "fe499cf6b248289df031a4d32328dbe45184f4fe7d92423522b1705715010904", "format": 1 }, { - "name": "tests/integration/targets/ad_hoc_command", + "name": "tests/integration/targets/host", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ad_hoc_command/tasks", + "name": "tests/integration/targets/host/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ad_hoc_command/tasks/main.yml", + "name": "tests/integration/targets/host/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87ec6c33a66b6dd969c6ed08693a02a51fc43c21b3980a81a5edd29d644050aa", + "chksum_sha256": "bc0849abd5d11fe3fa3039ed0ae93d4e812d915e66c47488f91cc4309b2d7d77", "format": 1 }, { - "name": "tests/integration/targets/inventory", + "name": "tests/integration/targets/import", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory/tasks", + "name": "tests/integration/targets/import/aliases", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "52e1315ef042495cdf2b0ce22d8ba47f726dce15b968e301a795be1f69045f20", + "format": 1 + }, + { + "name": "tests/integration/targets/import/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory/tasks/main.yml", + "name": "tests/integration/targets/import/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21f6d6fa5e76c8578949fd204edef4cdb77b5bff310b681bcd75ac1873a67f18", + "chksum_sha256": "59c0ace95e680d9874fe15c76889c1b4beb38d2d3c66a11499581b0f328ec25a", "format": 1 }, { - "name": "tests/integration/targets/role", + "name": "tests/integration/targets/instance_group", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/role/tasks", + "name": "tests/integration/targets/instance_group/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/role/tasks/main.yml", + "name": "tests/integration/targets/instance_group/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24e699037b51baceceb9f18e1e43464608766127f5eeb4df1fed5991a35aea7f", + "chksum_sha256": "5d38320dd4563f17fffd12b510a91dd26e40bfd5f408f75f96b930a38fcfd135", "format": 1 }, { - "name": "tests/integration/targets/execution_environment", + "name": "tests/integration/targets/inventory", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/execution_environment/tasks", + "name": "tests/integration/targets/inventory/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/execution_environment/tasks/main.yml", + "name": "tests/integration/targets/inventory/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "950122a04ad3b7406fa9a140e02ab190a0f7f53dfec791fdcb1fb2781ebae54d", + "chksum_sha256": "21f6d6fa5e76c8578949fd204edef4cdb77b5bff310b681bcd75ac1873a67f18", "format": 1 }, { - "name": "tests/integration/targets/lookup_rruleset", + "name": "tests/integration/targets/inventory_source", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/lookup_rruleset/tasks", + "name": "tests/integration/targets/inventory_source/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/lookup_rruleset/tasks/main.yml", + "name": "tests/integration/targets/inventory_source/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "30edd075f50be0fbf9c57c9d7db10ae7086749d78817e8a24b680301ba339cb5", + "chksum_sha256": "7e581c4634196ff64cee14278c55b2292534605006e5a20edadcfe17e778caa9", "format": 1 }, { - "name": "tests/integration/targets/ad_hoc_command_wait", + "name": "tests/integration/targets/inventory_source_update", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ad_hoc_command_wait/tasks", + "name": "tests/integration/targets/inventory_source_update/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ad_hoc_command_wait/tasks/main.yml", + "name": "tests/integration/targets/inventory_source_update/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e5ced853c1d15d2db163bd5dbb56b1ca419363327dc32bd6a1448560e194c2f", + "chksum_sha256": "06a737371470d7a996e2eb092d820fe536dac73f3abcec56acf002da62fe05d9", "format": 1 }, { - "name": "tests/integration/targets/job_template", + "name": "tests/integration/targets/job_cancel", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/job_template/tasks", + "name": "tests/integration/targets/job_cancel/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/job_template/tasks/main.yml", + "name": "tests/integration/targets/job_cancel/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b1232f2cc28b0ff4ff742c2c5847a649d3d9fcc716d3611a938b277088a0e30b", + "chksum_sha256": "0c8b9d511b1ce96b7d5a359b1043ffc18004c5d3c23052b82423512b46ecd7b4", "format": 1 }, { - "name": "tests/integration/targets/token", + "name": "tests/integration/targets/job_launch", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/token/tasks", + "name": "tests/integration/targets/job_launch/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/token/tasks/main.yml", + "name": "tests/integration/targets/job_launch/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7245f5039915d720baba505b4ab74421c7db138bb45b50917942f3eb05799af", + "chksum_sha256": "fbb658e8212fcb120200db84212f6b469fff700c1fd233b486ec82a816572323", "format": 1 }, { - "name": "tests/integration/targets/export", + "name": "tests/integration/targets/job_list", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/export/aliases", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "52e1315ef042495cdf2b0ce22d8ba47f726dce15b968e301a795be1f69045f20", - "format": 1 - }, - { - "name": "tests/integration/targets/export/tasks", + "name": "tests/integration/targets/job_list/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/export/tasks/main.yml", + "name": "tests/integration/targets/job_list/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e66e796b995b7c9ae612e00b393ccd75d9747d2d94ea3fbbaf90832e5b3e9e3f", + "chksum_sha256": "668f25abe2486218893b6137f5b765301229f649ed3a779a6756496c14f42595", "format": 1 }, { - "name": "tests/integration/targets/host", + "name": "tests/integration/targets/job_template", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/host/tasks", + "name": "tests/integration/targets/job_template/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/host/tasks/main.yml", + "name": "tests/integration/targets/job_template/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bc0849abd5d11fe3fa3039ed0ae93d4e812d915e66c47488f91cc4309b2d7d77", + "chksum_sha256": "b1232f2cc28b0ff4ff742c2c5847a649d3d9fcc716d3611a938b277088a0e30b", "format": 1 }, { - "name": "tests/integration/targets/schedule_rrule", + "name": "tests/integration/targets/job_wait", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/schedule_rrule/tasks", + "name": "tests/integration/targets/job_wait/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/schedule_rrule/tasks/main.yml", + "name": "tests/integration/targets/job_wait/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8732015804e039989986f1ebfc82da8d426c7d8ab21a7602b101ed16d4c33e8", + "chksum_sha256": "76cf3f8c1cfac81eaaf0f5b76494fc3b7605a15eeb73f6fc83efbbe28a4073b3", "format": 1 }, { @@ -1163,283 +1261,297 @@ "format": 1 }, { - "name": "tests/integration/targets/credential_input_source", + "name": "tests/integration/targets/lookup_api_plugin", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/credential_input_source/tasks", + "name": "tests/integration/targets/lookup_api_plugin/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/credential_input_source/tasks/main.yml", + "name": "tests/integration/targets/lookup_api_plugin/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83dae6f438515cce80bf4b25d24d472de42feafe46b9f8faacaa7cdf18c1eb16", + "chksum_sha256": "48c0f03d42f73933cc99e584057db0ca9720c280d4fe8a414795ee1f30da68a1", "format": 1 }, { - "name": "tests/integration/targets/project_update", + "name": "tests/integration/targets/lookup_rruleset", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/project_update/tasks", + "name": "tests/integration/targets/lookup_rruleset/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/project_update/tasks/main.yml", + "name": "tests/integration/targets/lookup_rruleset/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6fd0d5b30de4d13f2d2e5fb7497c0fbbc13fa92a31fc43d4a21b19d3f53249ce", + "chksum_sha256": "30edd075f50be0fbf9c57c9d7db10ae7086749d78817e8a24b680301ba339cb5", "format": 1 }, { - "name": "tests/integration/targets/module_utils", + "name": "tests/integration/targets/notification_template", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/module_utils/tasks", + "name": "tests/integration/targets/notification_template/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/module_utils/tasks/test_named_reference.yml", + "name": "tests/integration/targets/notification_template/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0e1babbc9e57e06629675f6d2b0d4fe891880b177a572d355391753e670c5156", + "chksum_sha256": "9d4d3cef57b6e950d9af710bb519050823ef67fd6aa1c6b60c6f2fc33387dc67", "format": 1 }, { - "name": "tests/integration/targets/module_utils/tasks/main.yml", + "name": "tests/integration/targets/organization", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/organization/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/organization/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2fb7f33e9695e68ec87d2b9bc52ad2196c2d542bccb7d5b185ebc8e54a8cc237", + "chksum_sha256": "6e18cbff8118f617a9b594f630739356922030c2d802a0eb92df0ddbe4f1e1fe", "format": 1 }, { - "name": "tests/integration/targets/user", + "name": "tests/integration/targets/project", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/user/tasks", + "name": "tests/integration/targets/project/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/user/tasks/main.yml", + "name": "tests/integration/targets/project/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "76733e6cbaba31ccf3510bea4ec1166c93195d5ef385035bb773fba854db3659", + "chksum_sha256": "c2f8af4ca361cc63c465d7b0895ef2ad7a3741f36e30133b5c33696ba2cf7474", "format": 1 }, { - "name": "tests/integration/targets/notification_template", + "name": "tests/integration/targets/project_update", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/notification_template/tasks", + "name": "tests/integration/targets/project_update/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/notification_template/tasks/main.yml", + "name": "tests/integration/targets/project_update/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d4d3cef57b6e950d9af710bb519050823ef67fd6aa1c6b60c6f2fc33387dc67", + "chksum_sha256": "6fd0d5b30de4d13f2d2e5fb7497c0fbbc13fa92a31fc43d4a21b19d3f53249ce", "format": 1 }, { - "name": "tests/integration/targets/ad_hoc_command_cancel", + "name": "tests/integration/targets/role", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ad_hoc_command_cancel/tasks", + "name": "tests/integration/targets/role/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ad_hoc_command_cancel/tasks/main.yml", + "name": "tests/integration/targets/role/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1d276bf3b4ada55707a1e8a00284ab15a5c8f9a6bbe0a49f7d03160cda21d3c1", + "chksum_sha256": "24e699037b51baceceb9f18e1e43464608766127f5eeb4df1fed5991a35aea7f", "format": 1 }, { - "name": "tests/integration/targets/instance", + "name": "tests/integration/targets/schedule", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/instance/tasks", + "name": "tests/integration/targets/schedule/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/instance/tasks/main.yml", + "name": "tests/integration/targets/schedule/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ccd821e64446cc63715163fa16014f10e76c66d58be119bfe1dc1a3b11637c97", + "chksum_sha256": "7419baf00681606be0a250140ace5f7d07804f8b650ecb5f0937147064e307f0", "format": 1 }, { - "name": "tests/integration/targets/team", + "name": "tests/integration/targets/schedule_rrule", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/team/tasks", + "name": "tests/integration/targets/schedule_rrule/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/team/tasks/main.yml", + "name": "tests/integration/targets/schedule_rrule/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f59433918d9495fd5a3b296a0a70963f539571e742e3c790e5d88912eec8e2ef", + "chksum_sha256": "d17ccb32f5b43b887164df4a328a6e70ab222a295b916ac5f46770543f8d4019", "format": 1 }, { - "name": "tests/integration/targets/workflow_job_template", + "name": "tests/integration/targets/settings", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/workflow_job_template/tasks", + "name": "tests/integration/targets/settings/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/workflow_job_template/tasks/main.yml", + "name": "tests/integration/targets/settings/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "872f3cd4d0d7656ddf7f9239c1139351af6341e5e40e0ac2981ed152fff26a5b", + "chksum_sha256": "f781f919fb476162d13503c6a6aa952b46fd61fc60b38988f161d0025bbbd900", "format": 1 }, { - "name": "tests/integration/targets/job_launch", + "name": "tests/integration/targets/team", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/job_launch/tasks", + "name": "tests/integration/targets/team/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/job_launch/tasks/main.yml", + "name": "tests/integration/targets/team/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fbb658e8212fcb120200db84212f6b469fff700c1fd233b486ec82a816572323", + "chksum_sha256": "f59433918d9495fd5a3b296a0a70963f539571e742e3c790e5d88912eec8e2ef", "format": 1 }, { - "name": "tests/integration/targets/bulk_host_delete", + "name": "tests/integration/targets/token", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/bulk_host_delete/tasks", + "name": "tests/integration/targets/token/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/bulk_host_delete/tasks/main.yml", + "name": "tests/integration/targets/token/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a55e10b05593a8ad6f5e2325c3d51f76b5ef040a81990dc3c7a4adaeebcf545", + "chksum_sha256": "e7245f5039915d720baba505b4ab74421c7db138bb45b50917942f3eb05799af", "format": 1 }, { - "name": "tests/integration/targets/bulk_host_create", + "name": "tests/integration/targets/user", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/bulk_host_create/tasks", + "name": "tests/integration/targets/user/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/bulk_host_create/tasks/main.yml", + "name": "tests/integration/targets/user/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39be6c097c03152ec1873732d8e09e34639464acad4f9d42ef3e13b6f87d47d1", + "chksum_sha256": "76733e6cbaba31ccf3510bea4ec1166c93195d5ef385035bb773fba854db3659", "format": 1 }, { - "name": "tests/integration/targets/bulk_job_launch", + "name": "tests/integration/targets/workflow_job_template", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/bulk_job_launch/tasks", + "name": "tests/integration/targets/workflow_job_template/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/bulk_job_launch/tasks/main.yml", + "name": "tests/integration/targets/workflow_job_template/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bbb7480d55d9d2261e22d0c55de3a0bada691608a6542385b234633f0493be75", + "chksum_sha256": "872f3cd4d0d7656ddf7f9239c1139351af6341e5e40e0ac2981ed152fff26a5b", "format": 1 }, { @@ -1464,248 +1576,241 @@ "format": 1 }, { - "name": "requirements.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2eb11923e1347afc5075a7871e206a8f15a68471c90012f7386e9db0875e70bf", + "name": "tests/integration/targets/instance", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "images", + "name": "tests/integration/targets/instance/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "images/completeness_test_output.png", + "name": "tests/integration/targets/instance/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6367684c4b5edd3e1e8fdcb9270d68ca54040d5d17108734f3d3a2b9df5878ba", + "chksum_sha256": "dfa2174eba47b8edb3a65912224adc7d5e9fd9d180d0da5db2e05dab7f3520a5", "format": 1 }, { - "name": "test", + "name": "tests/integration/targets/workflow_approval", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "test/awx", + "name": "tests/integration/targets/workflow_approval/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_ad_hoc_wait.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "daed2a74d3f64fd0300255050dc8c732158db401323f44da66ccb4bf84b59633", - "format": 1 - }, - { - "name": "test/awx/test_notification_template.py", + "name": "tests/integration/targets/workflow_approval/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e9aee01e9d7d3c3662b6204422d907b78323440ebdc836b69f933336ec36b0f", + "chksum_sha256": "2ccc6f9f0aafef620896c56a32e1dd07f2f83f61c6b8c4d4bbaa6a220495b91d", "format": 1 }, { - "name": "test/awx/test_label.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cd957d0b0cab6dd51539baf3fb27b659b91a8e57b20aae4c5cce7eaec9cec494", + "name": "tests/integration/targets/bulk_host_create", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_export.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c24a35265af8ff90f6456d39d0cc84cc9ce765d9fc3d45a4a8ac945e2538ff6b", + "name": "tests/integration/targets/bulk_host_create/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_module_utils.py", + "name": "tests/integration/targets/bulk_host_create/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a5118e383f1370175dc7900ec3abae2ee53bd77ecf8853ca333ffcbf625b216f", + "chksum_sha256": "39be6c097c03152ec1873732d8e09e34639464acad4f9d42ef3e13b6f87d47d1", "format": 1 }, { - "name": "test/awx/test_completeness.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "56bc8d4297a9c7c4fdb712fd838803cc9233023288f5555f3e3d229117604eee", + "name": "tests/integration/targets/bulk_job_launch", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_user.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f9520b058e16e4e4800d3a5f70cd28650a365fa357afa1d41a8c63bf3354027e", + "name": "tests/integration/targets/bulk_job_launch/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_inventory_source.py", + "name": "tests/integration/targets/bulk_job_launch/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a14f69db1bf6cec594e64c2963b415560b78eac1f9cbe7d4c09586b494e11bde", + "chksum_sha256": "bbb7480d55d9d2261e22d0c55de3a0bada691608a6542385b234633f0493be75", "format": 1 }, { - "name": "test/awx/test_group.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1ecf188e82d4c848de64c8f7fd7af2d4adb6887c6a448771ff51bb43c4fa8128", + "name": "tests/integration/targets/module_utils", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_project.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fbb93e524df51b788f12746ffb52bf5105f67b3ae6b89403bed51ed1f2da9c12", + "name": "tests/integration/targets/module_utils/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_job.py", + "name": "tests/integration/targets/module_utils/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "76ba45e14438425f7511d196613928d64253e1912a45b71ea842b1cb2c3ca335", + "chksum_sha256": "2fb7f33e9695e68ec87d2b9bc52ad2196c2d542bccb7d5b185ebc8e54a8cc237", "format": 1 }, { - "name": "test/awx/test_job_template.py", + "name": "tests/integration/targets/module_utils/tasks/test_named_reference.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f0e924d79cd0b2bccbe4664e27ec07cb96a274d289229d80be09687f099171e", + "chksum_sha256": "0e1babbc9e57e06629675f6d2b0d4fe891880b177a572d355391753e670c5156", "format": 1 }, { - "name": "test/awx/test_bulk.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a10cc6ca47f1cd560e5adff57f88b4628b6ff3ec20874a751ae57d7474cfb7d5", + "name": "tests/integration/targets/bulk_host_delete", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_role.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8f0340f77fd1465cf6e267b301e44ae86c5238b05aa89bd7fff145726a83ebb4", + "name": "tests/integration/targets/bulk_host_delete/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_token.py", + "name": "tests/integration/targets/bulk_host_delete/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "118145cdd5f6a03df7a7a608d5f9e510236b2a54f9bcd456f4294ba69f0f4fad", + "chksum_sha256": "2a55e10b05593a8ad6f5e2325c3d51f76b5ef040a81990dc3c7a4adaeebcf545", "format": 1 }, { - "name": "test/awx/test_workflow_job_template_node.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0806356bfd91b28153baa63ca8cbf8f7da1125dd5150e38e73aa37c65e236f6b", + "name": "tests/integration/targets/role_definition", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_instance.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2b60fecf79c63341b0eece0d9941a655dfeac89b3565e78f5bb39c5ec77b91af", + "name": "tests/integration/targets/role_definition/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_credential.py", + "name": "tests/integration/targets/role_definition/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1bfcf99f4de13b3cc4a76c7f33fa3a51fde175afff5730b4743695cbeb69643", + "chksum_sha256": "53d19702349573c129db2e53baf99602bb846787490aab19e2f8f29c892f5735", "format": 1 }, { - "name": "test/awx/test_credential_type.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1fe388a0c19f08006c7718766d5faa79540dd3b14547ced43b5a237a2c2fd877", + "name": "tests/integration/targets/role_team_assignment", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_credential_input_source.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9637a418c0b0e59261ec0d1c206ff2d3574a41a8a169068bbf74588e3a4214b2", + "name": "tests/integration/targets/role_team_assignment/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_instance_group.py", + "name": "tests/integration/targets/role_team_assignment/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ce22bf5e6baa63ab096c9377478f8a3af33624def33e52753342e435924e573", + "chksum_sha256": "f5fd6177577695507040f8a0654b0a0fbb2198f3c880788db054d6a4a13ecdcf", "format": 1 }, { - "name": "test/awx/test_organization.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "091d48906e4bf5ffaceead8f49281e05184cefce1546f387ce29a232d6694ec9", + "name": "tests/integration/targets/role_user_assignment", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_workflow_job_template.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "16c8ebc74606940f6ee1f51a191f22b497c176a46e770e886bbf94bdf0c25842", + "name": "tests/integration/targets/role_user_assignment/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/conftest.py", + "name": "tests/integration/targets/role_user_assignment/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8eb2d805f88e99f1c63aeb256ef1ac720831191d17a81b5b3bb2f9c06b29544e", + "chksum_sha256": "288362d519c2a8b9fbf83be627abb4b3d3eb9f7cb89a65cbdabd2039fdcab988", "format": 1 }, { - "name": "test/awx/test_settings.py", + "name": "tests/config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "436c13933936e7b80dd26c61ea1dbf492c13974f2922f1543c4fe6e6b0fab0dd", + "chksum_sha256": "4cb8bf065737689916cda6a2856fcfb8bc27f49224a4b2c2fde842e3b0e76fbb", "format": 1 }, { - "name": "test/awx/test_team.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cbbdbdb3be0b0d80dcfcf337ed0095774cf73ef0e937d3e8dc5abab21739db5d", + "name": "tests/sanity", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "test/awx/test_application.py", + "name": "tests/sanity/ignore-2.14.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a106d5fbffbe1eaec36d8247979ca637ee733a29abf94d955c48be8d2fd16842", + "chksum_sha256": "05b621f6ff40c091ab1c07947c43d817ed37af7acfc0f8bef7b1453eb03b3aa7", "format": 1 }, { - "name": "test/awx/test_schedule.py", + "name": "tests/sanity/ignore-2.15.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dadfd1c19c4c828dd84128ca484b837c6a904a09e92bcee12cb7cda408562c81", + "chksum_sha256": "f6dce33e05558d94ecc8ebacc8a5011e9defc1b197fcc13c4335868b6d6c4952", "format": 1 }, { - "name": "test/awx/test_inventory.py", + "name": "tests/sanity/ignore-2.16.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70eac0cf78806e37406137fcfb97e5a249fd6b091b1f18e812278573049a4111", + "chksum_sha256": "f6dce33e05558d94ecc8ebacc8a5011e9defc1b197fcc13c4335868b6d6c4952", "format": 1 }, { - "name": "TESTING.md", + "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4691e79c8038d8e985610fb613cd2f4799d4740b0a6ca1b72d3266528088a272", + "chksum_sha256": "41997bded547ba6a168ee41fd5379a44f20dcd155979067564b79d14af6e3fd3", "format": 1 } ], diff --git a/ansible_collections/awx/awx/MANIFEST.json b/ansible_collections/awx/awx/MANIFEST.json index 9480679a6..4c999edb6 100644 --- a/ansible_collections/awx/awx/MANIFEST.json +++ b/ansible_collections/awx/awx/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "awx", "name": "awx", - "version": "23.9.0", + "version": "24.3.1", "authors": [ "AWX Project Contributors " ], @@ -29,7 +29,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b47d01dc90de9b4af46e366ac75ac9d533d4abfcc93a81b6956b098d2989f587", + "chksum_sha256": "c65f7b80630613726dd21cd3d4a41265ca38ec6b254150d0f7c59be171fc27ee", "format": 1 }, "format": 1 diff --git a/ansible_collections/awx/awx/meta/runtime.yml b/ansible_collections/awx/awx/meta/runtime.yml index 18fa4b592..7ffdbce16 100644 --- a/ansible_collections/awx/awx/meta/runtime.yml +++ b/ansible_collections/awx/awx/meta/runtime.yml @@ -35,6 +35,9 @@ action_groups: - project - project_update - role + - role_definition + - role_team_assignment + - role_user_assignment - schedule - settings - subscriptions diff --git a/ansible_collections/awx/awx/plugins/module_utils/controller_api.py b/ansible_collections/awx/awx/plugins/module_utils/controller_api.py index 8bc3955ce..0f48fc2df 100644 --- a/ansible_collections/awx/awx/plugins/module_utils/controller_api.py +++ b/ansible_collections/awx/awx/plugins/module_utils/controller_api.py @@ -291,7 +291,7 @@ class ControllerModule(AnsibleModule): class ControllerAPIModule(ControllerModule): # TODO: Move the collection version check into controller_module.py # This gets set by the make process so whatever is in here is irrelevant - _COLLECTION_VERSION = "23.9.0" + _COLLECTION_VERSION = "0.0.1-devel" _COLLECTION_TYPE = "awx" # This maps the collections type (awx/tower) to the values returned by the API # Those values can be found in awx/api/generics.py line 204 @@ -652,7 +652,7 @@ class ControllerAPIModule(ControllerModule): # If we have neither of these, then we can try un-authenticated access self.authenticated = True - def delete_if_needed(self, existing_item, on_delete=None, auto_exit=True): + def delete_if_needed(self, existing_item, item_type=None, on_delete=None, auto_exit=True): # This will exit from the module on its own. # If the method successfully deletes an item and on_delete param is defined, # the on_delete parameter will be called as a method pasing in this object and the json from the response @@ -664,8 +664,9 @@ class ControllerAPIModule(ControllerModule): # If we have an item, we can try to delete it try: item_url = existing_item['url'] - item_type = existing_item['type'] item_id = existing_item['id'] + if not item_type: + item_type = existing_item['type'] item_name = self.get_item_name(existing_item, allow_unknown=True) except KeyError as ke: self.fail_json(msg="Unable to process delete of item due to missing data {0}".format(ke)) @@ -907,7 +908,7 @@ class ControllerAPIModule(ControllerModule): return True return False - def update_if_needed(self, existing_item, new_item, on_update=None, auto_exit=True, associations=None): + def update_if_needed(self, existing_item, new_item, item_type=None, on_update=None, auto_exit=True, associations=None): # This will exit from the module on its own # If the method successfully updates an item and on_update param is defined, # the on_update parameter will be called as a method pasing in this object and the json from the response @@ -921,7 +922,8 @@ class ControllerAPIModule(ControllerModule): # If we have an item, we can see if it needs an update try: item_url = existing_item['url'] - item_type = existing_item['type'] + if not item_type: + item_type = existing_item['type'] if item_type == 'user': item_name = existing_item['username'] elif item_type == 'workflow_job_template_node': @@ -990,7 +992,7 @@ class ControllerAPIModule(ControllerModule): new_item.pop(key) if existing_item: - return self.update_if_needed(existing_item, new_item, on_update=on_update, auto_exit=auto_exit, associations=associations) + return self.update_if_needed(existing_item, new_item, item_type=item_type, on_update=on_update, auto_exit=auto_exit, associations=associations) else: return self.create_if_needed( existing_item, new_item, endpoint, on_create=on_create, item_type=item_type, auto_exit=auto_exit, associations=associations @@ -1036,7 +1038,10 @@ class ControllerAPIModule(ControllerModule): # Grab our start time to compare against for the timeout start = time.time() result = self.get_endpoint(url) - while not result['json']['finished']: + wait_on_field = 'event_processing_finished' + if wait_on_field not in result['json']: + wait_on_field = 'finished' + while not result['json'][wait_on_field]: # If we are past our time out fail with a message if timeout and timeout < time.time() - start: # Account for Legacy messages diff --git a/ansible_collections/awx/awx/plugins/modules/application.py b/ansible_collections/awx/awx/plugins/modules/application.py index 7a31522a0..1933143af 100644 --- a/ansible_collections/awx/awx/plugins/modules/application.py +++ b/ansible_collections/awx/awx/plugins/modules/application.py @@ -147,8 +147,12 @@ def main(): if redirect_uris is not None: application_fields['redirect_uris'] = ' '.join(redirect_uris) - # If the state was present and we can let the module build or update the existing application, this will return on its own - module.create_or_update_if_needed(application, application_fields, endpoint='applications', item_type='application') + response = module.create_or_update_if_needed(application, application_fields, endpoint='applications', item_type='application', auto_exit=False) + if 'client_id' in response: + module.json_output['client_id'] = response['client_id'] + if 'client_secret' in response: + module.json_output['client_secret'] = response['client_secret'] + module.exit_json(**module.json_output) if __name__ == '__main__': diff --git a/ansible_collections/awx/awx/plugins/modules/role_definition.py b/ansible_collections/awx/awx/plugins/modules/role_definition.py new file mode 100644 index 000000000..e226be99a --- /dev/null +++ b/ansible_collections/awx/awx/plugins/modules/role_definition.py @@ -0,0 +1,114 @@ +#!/usr/bin/python +# coding: utf-8 -*- + +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community'} + + +DOCUMENTATION = ''' +--- +module: role_definition +author: "Seth Foster (@fosterseth)" +short_description: Add role definition to Automation Platform Controller +description: + - Contains a list of permissions and a resource type that can then be assigned to users or teams. +options: + name: + description: + - Name of this role definition. + required: True + type: str + permissions: + description: + - List of permissions to include in the role definition. + required: True + type: list + elements: str + content_type: + description: + - The type of resource this applies to. + required: True + type: str + description: + description: + - Optional description of this role definition. + type: str + state: + description: + - The desired state of the role definition. + default: present + choices: + - present + - absent + type: str +extends_documentation_fragment: awx.awx.auth +''' + + +EXAMPLES = ''' +- name: Create Role Definition + role_definition: + name: test_view_jt + permissions: + - awx.view_jobtemplate + - awx.execute_jobtemplate + content_type: awx.jobtemplate + description: role definition to view and execute jt + state: present +''' + +from ..module_utils.controller_api import ControllerAPIModule + + +def main(): + # Any additional arguments that are not fields of the item can be added here + argument_spec = dict( + name=dict(required=True, type='str'), + permissions=dict(required=True, type='list', elements='str'), + content_type=dict(required=True, type='str'), + description=dict(required=False, type='str'), + state=dict(default='present', choices=['present', 'absent']), + ) + + module = ControllerAPIModule(argument_spec=argument_spec) + + name = module.params.get('name') + permissions = module.params.get('permissions') + content_type = module.params.get('content_type') + description = module.params.get('description') + state = module.params.get('state') + if description is None: + description = '' + + role_definition = module.get_one('role_definitions', name_or_id=name) + + if state == 'absent': + module.delete_if_needed( + role_definition, + item_type='role_definition', + ) + + post_kwargs = { + 'name': name, + 'permissions': permissions, + 'content_type': content_type, + 'description': description + } + + if state == 'present': + module.create_or_update_if_needed( + role_definition, + post_kwargs, + endpoint='role_definitions', + item_type='role_definition', + ) + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/awx/awx/plugins/modules/role_team_assignment.py b/ansible_collections/awx/awx/plugins/modules/role_team_assignment.py new file mode 100644 index 000000000..a9d8c62b6 --- /dev/null +++ b/ansible_collections/awx/awx/plugins/modules/role_team_assignment.py @@ -0,0 +1,123 @@ +#!/usr/bin/python +# coding: utf-8 -*- + +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community'} + + +DOCUMENTATION = ''' +--- +module: role_team_assignment +author: "Seth Foster (@fosterseth)" +short_description: Gives a team permission to a resource or an organization. +description: + - Use this endpoint to give a team permission to a resource or an organization. + - After creation, the assignment cannot be edited, but can be deleted to remove those permissions. +options: + role_definition: + description: + - The name or id of the role definition to assign to the team. + required: True + type: str + object_id: + description: + - Primary key of the object this assignment applies to. + required: True + type: int + team: + description: + - The name or id of the team to assign to the object. + required: False + type: str + object_ansible_id: + description: + - Resource id of the object this role applies to. Alternative to the object_id field. + required: False + type: int + team_ansible_id: + description: + - Resource id of the team who will receive permissions from this assignment. Alternative to team field. + required: False + type: int + state: + description: + - The desired state of the role definition. + default: present + choices: + - present + - absent + type: str +extends_documentation_fragment: awx.awx.auth +''' + + +EXAMPLES = ''' +- name: Give Team A JT permissions + role_team_assignment: + role_definition: launch JT + object_id: 1 + team: Team A + state: present +''' + +from ..module_utils.controller_api import ControllerAPIModule + + +def main(): + # Any additional arguments that are not fields of the item can be added here + argument_spec = dict( + team=dict(required=False, type='str'), + object_id=dict(required=True, type='int'), + role_definition=dict(required=True, type='str'), + object_ansible_id=dict(required=False, type='int'), + team_ansible_id=dict(required=False, type='int'), + state=dict(default='present', choices=['present', 'absent']), + ) + + module = ControllerAPIModule(argument_spec=argument_spec) + + team = module.params.get('team') + object_id = module.params.get('object_id') + role_definition_str = module.params.get('role_definition') + object_ansible_id = module.params.get('object_ansible_id') + team_ansible_id = module.params.get('team_ansible_id') + state = module.params.get('state') + + role_definition = module.get_one('role_definitions', allow_none=False, name_or_id=role_definition_str) + team = module.get_one('teams', allow_none=False, name_or_id=team) + + kwargs = { + 'role_definition': role_definition['id'], + 'object_id': object_id, + 'team': team['id'], + 'object_ansible_id': object_ansible_id, + 'team_ansible_id': team_ansible_id, + } + + # get rid of None type values + kwargs = {k: v for k, v in kwargs.items() if v is not None} + role_team_assignment = module.get_one('role_team_assignments', **{'data': kwargs}) + + if state == 'absent': + module.delete_if_needed( + role_team_assignment, + item_type='role_team_assignment', + ) + + if state == 'present': + module.create_if_needed( + role_team_assignment, + kwargs, + endpoint='role_team_assignments', + item_type='role_team_assignment', + ) + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/awx/awx/plugins/modules/role_user_assignment.py b/ansible_collections/awx/awx/plugins/modules/role_user_assignment.py new file mode 100644 index 000000000..222db14df --- /dev/null +++ b/ansible_collections/awx/awx/plugins/modules/role_user_assignment.py @@ -0,0 +1,124 @@ +#!/usr/bin/python +# coding: utf-8 -*- + +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community'} + + +DOCUMENTATION = ''' +--- +module: role_user_assignment +author: "Seth Foster (@fosterseth)" +short_description: Gives a user permission to a resource or an organization. +description: + - Use this endpoint to give a user permission to a resource or an organization. + - After creation, the assignment cannot be edited, but can be deleted to remove those permissions. +options: + role_definition: + description: + - The name or id of the role definition to assign to the user. + required: True + type: str + object_id: + description: + - Primary key of the object this assignment applies to. + required: True + type: int + user: + description: + - The name or id of the user to assign to the object. + required: False + type: str + object_ansible_id: + description: + - Resource id of the object this role applies to. Alternative to the object_id field. + required: False + type: int + user_ansible_id: + description: + - Resource id of the user who will receive permissions from this assignment. Alternative to user field. + required: False + type: int + state: + description: + - The desired state of the role definition. + default: present + choices: + - present + - absent + type: str +extends_documentation_fragment: awx.awx.auth +''' + + +EXAMPLES = ''' +- name: Give Bob JT permissions + role_user_assignment: + role_definition: launch JT + object_id: 1 + user: bob + state: present +''' + +from ..module_utils.controller_api import ControllerAPIModule + + +def main(): + # Any additional arguments that are not fields of the item can be added here + argument_spec = dict( + user=dict(required=False, type='str'), + object_id=dict(required=True, type='int'), + role_definition=dict(required=True, type='str'), + object_ansible_id=dict(required=False, type='int'), + user_ansible_id=dict(required=False, type='int'), + state=dict(default='present', choices=['present', 'absent']), + ) + + module = ControllerAPIModule(argument_spec=argument_spec) + + user = module.params.get('user') + object_id = module.params.get('object_id') + role_definition_str = module.params.get('role_definition') + object_ansible_id = module.params.get('object_ansible_id') + user_ansible_id = module.params.get('user_ansible_id') + state = module.params.get('state') + + role_definition = module.get_one('role_definitions', allow_none=False, name_or_id=role_definition_str) + user = module.get_one('users', allow_none=False, name_or_id=user) + + kwargs = { + 'role_definition': role_definition['id'], + 'object_id': object_id, + 'user': user['id'], + 'object_ansible_id': object_ansible_id, + 'user_ansible_id': user_ansible_id, + } + + # get rid of None type values + kwargs = {k: v for k, v in kwargs.items() if v is not None} + + role_user_assignment = module.get_one('role_user_assignments', **{'data': kwargs}) + + if state == 'absent': + module.delete_if_needed( + role_user_assignment, + item_type='role_user_assignment', + ) + + if state == 'present': + module.create_if_needed( + role_user_assignment, + kwargs, + endpoint='role_user_assignments', + item_type='role_user_assignment', + ) + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/awx/awx/plugins/modules/workflow_launch.py b/ansible_collections/awx/awx/plugins/modules/workflow_launch.py index c06841098..ae2114b87 100644 --- a/ansible_collections/awx/awx/plugins/modules/workflow_launch.py +++ b/ansible_collections/awx/awx/plugins/modules/workflow_launch.py @@ -39,6 +39,16 @@ options: description: - Limit to use for the I(job_template). type: str + tags: + description: + - Specific tags to apply from the I(job_template). + type: list + elements: str + skip_tags: + description: + - Specific tags to skip from the I(job_template). + type: list + elements: str scm_branch: description: - A specific branch of the SCM project to run the template on. @@ -100,6 +110,8 @@ def main(): organization=dict(), inventory=dict(), limit=dict(), + tags=dict(type='list', elements='str'), + skip_tags=dict(type='list', elements='str'), scm_branch=dict(), extra_vars=dict(type='dict'), wait=dict(required=False, default=True, type='bool'), @@ -128,6 +140,14 @@ def main(): if field_val is not None: optional_args[field_name] = field_val + # Special treatment of tags parameters + job_tags = module.params.get('tags') + if job_tags is not None: + optional_args['job_tags'] = ",".join(job_tags) + skip_tags = module.params.get('skip_tags') + if skip_tags is not None: + optional_args['skip_tags'] = ",".join(skip_tags) + # Create a datastructure to pass into our job launch post_data = {} for arg_name, arg_value in optional_args.items(): @@ -152,6 +172,8 @@ def main(): check_vars_to_prompts = { 'inventory': 'ask_inventory_on_launch', 'limit': 'ask_limit_on_launch', + 'job_tags': 'ask_tags_on_launch', + 'skip_tags': 'ask_skip_tags_on_launch', 'scm_branch': 'ask_scm_branch_on_launch', } diff --git a/ansible_collections/awx/awx/test/awx/conftest.py b/ansible_collections/awx/awx/test/awx/conftest.py index 5bf288ba6..b7fb6333d 100644 --- a/ansible_collections/awx/awx/test/awx/conftest.py +++ b/ansible_collections/awx/awx/test/awx/conftest.py @@ -17,6 +17,7 @@ import pytest from ansible.module_utils.six import raise_from +from ansible_base.rbac.models import RoleDefinition, DABPermission from awx.main.tests.functional.conftest import _request from awx.main.tests.functional.conftest import credentialtype_scm, credentialtype_ssh # noqa: F401; pylint: disable=unused-variable from awx.main.models import ( @@ -31,9 +32,11 @@ from awx.main.models import ( WorkflowJobTemplate, NotificationTemplate, Schedule, + Team, ) from django.db import transaction +from django.contrib.contenttypes.models import ContentType HAS_TOWER_CLI = False @@ -258,6 +261,11 @@ def job_template(project, inventory): return JobTemplate.objects.create(name='test-jt', project=project, inventory=inventory, playbook='helloworld.yml') +@pytest.fixture +def team(organization): + return Team.objects.create(name='test-team', organization=organization) + + @pytest.fixture def machine_credential(credentialtype_ssh, organization): # noqa: F811 return Credential.objects.create(credential_type=credentialtype_ssh, name='machine-cred', inputs={'username': 'test_user', 'password': 'pas4word'}) @@ -331,6 +339,15 @@ def notification_template(organization): ) +@pytest.fixture +def job_template_role_definition(): + rd = RoleDefinition.objects.create(name='test_view_jt', content_type=ContentType.objects.get_for_model(JobTemplate)) + permission_codenames = ['view_jobtemplate', 'execute_jobtemplate'] + permissions = DABPermission.objects.filter(codename__in=permission_codenames) + rd.permissions.add(*permissions) + return rd + + @pytest.fixture def scm_credential(credentialtype_scm, organization): # noqa: F811 return Credential.objects.create( diff --git a/ansible_collections/awx/awx/test/awx/test_notification_template.py b/ansible_collections/awx/awx/test/awx/test_notification_template.py index 346ac4105..8bd2647b0 100644 --- a/ansible_collections/awx/awx/test/awx/test_notification_template.py +++ b/ansible_collections/awx/awx/test/awx/test_notification_template.py @@ -155,4 +155,4 @@ def test_build_notification_message_undefined(run_module, admin_user, organizati nt = NotificationTemplate.objects.get(id=result['id']) body = job.build_notification_message(nt, 'running') - assert 'The template rendering return a blank body' in body[1] + assert '{"started_by": "My Placeholder"}' in body[1] diff --git a/ansible_collections/awx/awx/test/awx/test_role.py b/ansible_collections/awx/awx/test/awx/test_role.py index f5cc5ceec..519d1f87b 100644 --- a/ansible_collections/awx/awx/test/awx/test_role.py +++ b/ansible_collections/awx/awx/test/awx/test_role.py @@ -18,9 +18,9 @@ def test_grant_organization_permission(run_module, admin_user, organization, sta assert not result.get('failed', False), result.get('msg', result) if state == 'present': - assert rando in organization.execute_role + assert rando in organization.admin_role else: - assert rando not in organization.execute_role + assert rando not in organization.admin_role @pytest.mark.django_db diff --git a/ansible_collections/awx/awx/test/awx/test_role_definition.py b/ansible_collections/awx/awx/test/awx/test_role_definition.py new file mode 100644 index 000000000..b65d0259b --- /dev/null +++ b/ansible_collections/awx/awx/test/awx/test_role_definition.py @@ -0,0 +1,122 @@ +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +import pytest + +from ansible_base.rbac.models import RoleDefinition + + +@pytest.mark.django_db +def test_create_new(run_module, admin_user): + result = run_module( + 'role_definition', + { + 'name': 'test_view_jt', + 'permissions': ['awx.view_jobtemplate', 'awx.execute_jobtemplate'], + 'content_type': 'awx.jobtemplate', + }, + admin_user) + assert result['changed'] + + role_definition = RoleDefinition.objects.get(name='test_view_jt') + assert role_definition + permission_codenames = [p.codename for p in role_definition.permissions.all()] + assert set(permission_codenames) == set(['view_jobtemplate', 'execute_jobtemplate']) + assert role_definition.content_type.model == 'jobtemplate' + + +@pytest.mark.django_db +def test_update_existing(run_module, admin_user): + result = run_module( + 'role_definition', + { + 'name': 'test_view_jt', + 'permissions': ['awx.view_jobtemplate'], + 'content_type': 'awx.jobtemplate', + }, + admin_user) + + assert result['changed'] + + role_definition = RoleDefinition.objects.get(name='test_view_jt') + permission_codenames = [p.codename for p in role_definition.permissions.all()] + assert set(permission_codenames) == set(['view_jobtemplate']) + assert role_definition.content_type.model == 'jobtemplate' + + result = run_module( + 'role_definition', + { + 'name': 'test_view_jt', + 'permissions': ['awx.view_jobtemplate', 'awx.execute_jobtemplate'], + 'content_type': 'awx.jobtemplate', + }, + admin_user) + + assert result['changed'] + + role_definition.refresh_from_db() + permission_codenames = [p.codename for p in role_definition.permissions.all()] + assert set(permission_codenames) == set(['view_jobtemplate', 'execute_jobtemplate']) + assert role_definition.content_type.model == 'jobtemplate' + + +@pytest.mark.django_db +def test_delete_existing(run_module, admin_user): + result = run_module( + 'role_definition', + { + 'name': 'test_view_jt', + 'permissions': ['awx.view_jobtemplate', 'awx.execute_jobtemplate'], + 'content_type': 'awx.jobtemplate', + }, + admin_user) + + assert result['changed'] + + role_definition = RoleDefinition.objects.get(name='test_view_jt') + assert role_definition + + result = run_module( + 'role_definition', + { + 'name': 'test_view_jt', + 'permissions': ['awx.view_jobtemplate', 'awx.execute_jobtemplate'], + 'content_type': 'awx.jobtemplate', + 'state': 'absent', + }, + admin_user) + + assert result['changed'] + + with pytest.raises(RoleDefinition.DoesNotExist): + role_definition.refresh_from_db() + + +@pytest.mark.django_db +def test_idempotence(run_module, admin_user): + result = run_module( + 'role_definition', + { + 'name': 'test_view_jt', + 'permissions': ['awx.view_jobtemplate', 'awx.execute_jobtemplate'], + 'content_type': 'awx.jobtemplate', + }, + admin_user) + + assert result['changed'] + + result = run_module( + 'role_definition', + { + 'name': 'test_view_jt', + 'permissions': ['awx.view_jobtemplate', 'awx.execute_jobtemplate'], + 'content_type': 'awx.jobtemplate', + }, + admin_user) + + assert not result['changed'] + + role_definition = RoleDefinition.objects.get(name='test_view_jt') + permission_codenames = [p.codename for p in role_definition.permissions.all()] + assert set(permission_codenames) == set(['view_jobtemplate', 'execute_jobtemplate']) diff --git a/ansible_collections/awx/awx/test/awx/test_role_team_assignment.py b/ansible_collections/awx/awx/test/awx/test_role_team_assignment.py new file mode 100644 index 000000000..a20e7261e --- /dev/null +++ b/ansible_collections/awx/awx/test/awx/test_role_team_assignment.py @@ -0,0 +1,70 @@ +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +import pytest + +from ansible_base.rbac.models import RoleTeamAssignment + + +@pytest.mark.django_db +def test_create_new(run_module, admin_user, team, job_template, job_template_role_definition): + result = run_module( + 'role_team_assignment', + { + 'team': team.name, + 'object_id': job_template.id, + 'role_definition': job_template_role_definition.name, + }, + admin_user) + assert result['changed'] + assert RoleTeamAssignment.objects.filter(team=team, object_id=job_template.id, role_definition=job_template_role_definition).exists() + + +@pytest.mark.django_db +def test_idempotence(run_module, admin_user, team, job_template, job_template_role_definition): + result = run_module( + 'role_team_assignment', + { + 'team': team.name, + 'object_id': job_template.id, + 'role_definition': job_template_role_definition.name, + }, + admin_user) + assert result['changed'] + + result = run_module( + 'role_team_assignment', + { + 'team': team.name, + 'object_id': job_template.id, + 'role_definition': job_template_role_definition.name, + }, + admin_user) + assert not result['changed'] + + +@pytest.mark.django_db +def test_delete_existing(run_module, admin_user, team, job_template, job_template_role_definition): + result = run_module( + 'role_team_assignment', + { + 'team': team.name, + 'object_id': job_template.id, + 'role_definition': job_template_role_definition.name, + }, + admin_user) + assert result['changed'] + assert RoleTeamAssignment.objects.filter(team=team, object_id=job_template.id, role_definition=job_template_role_definition).exists() + + result = run_module( + 'role_team_assignment', + { + 'team': team.name, + 'object_id': job_template.id, + 'role_definition': job_template_role_definition.name, + 'state': 'absent' + }, + admin_user) + assert result['changed'] + assert not RoleTeamAssignment.objects.filter(team=team, object_id=job_template.id, role_definition=job_template_role_definition).exists() diff --git a/ansible_collections/awx/awx/test/awx/test_role_user_assignment.py b/ansible_collections/awx/awx/test/awx/test_role_user_assignment.py new file mode 100644 index 000000000..878aa0b58 --- /dev/null +++ b/ansible_collections/awx/awx/test/awx/test_role_user_assignment.py @@ -0,0 +1,70 @@ +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +import pytest + +from ansible_base.rbac.models import RoleUserAssignment + + +@pytest.mark.django_db +def test_create_new(run_module, admin_user, job_template, job_template_role_definition): + result = run_module( + 'role_user_assignment', + { + 'user': admin_user.username, + 'object_id': job_template.id, + 'role_definition': job_template_role_definition.name, + }, + admin_user) + assert result['changed'] + assert RoleUserAssignment.objects.filter(user=admin_user, object_id=job_template.id, role_definition=job_template_role_definition).exists() + + +@pytest.mark.django_db +def test_idempotence(run_module, admin_user, job_template, job_template_role_definition): + result = run_module( + 'role_user_assignment', + { + 'user': admin_user.username, + 'object_id': job_template.id, + 'role_definition': job_template_role_definition.name, + }, + admin_user) + assert result['changed'] + + result = run_module( + 'role_user_assignment', + { + 'user': admin_user.username, + 'object_id': job_template.id, + 'role_definition': job_template_role_definition.name, + }, + admin_user) + assert not result['changed'] + + +@pytest.mark.django_db +def test_delete_existing(run_module, admin_user, job_template, job_template_role_definition): + result = run_module( + 'role_user_assignment', + { + 'user': admin_user.username, + 'object_id': job_template.id, + 'role_definition': job_template_role_definition.name, + }, + admin_user) + assert result['changed'] + assert RoleUserAssignment.objects.filter(user=admin_user, object_id=job_template.id, role_definition=job_template_role_definition).exists() + + result = run_module( + 'role_user_assignment', + { + 'user': admin_user.username, + 'object_id': job_template.id, + 'role_definition': job_template_role_definition.name, + 'state': 'absent' + }, + admin_user) + assert result['changed'] + assert not RoleUserAssignment.objects.filter(user=admin_user, object_id=job_template.id, role_definition=job_template_role_definition).exists() diff --git a/ansible_collections/awx/awx/test/awx/test_workflow_job_template.py b/ansible_collections/awx/awx/test/awx/test_workflow_job_template.py index 60a4fff7c..58a9f1f4d 100644 --- a/ansible_collections/awx/awx/test/awx/test_workflow_job_template.py +++ b/ansible_collections/awx/awx/test/awx/test_workflow_job_template.py @@ -4,7 +4,7 @@ __metaclass__ = type import pytest -from awx.main.models import WorkflowJobTemplate, NotificationTemplate +from awx.main.models import WorkflowJobTemplate, WorkflowJob, NotificationTemplate @pytest.mark.django_db @@ -135,6 +135,37 @@ def test_associate_only_on_success(run_module, admin_user, organization, project assert list(wfjt.notification_templates_error.values_list('id', flat=True)) == [nt1.id] +@pytest.mark.django_db +def test_workflow_launch_with_prompting(run_module, admin_user, organization, inventory): + WorkflowJobTemplate.objects.create( + name='foo-workflow-launch-test', + organization=organization, + ask_variables_on_launch=True, + ask_inventory_on_launch=True, + ask_tags_on_launch=True, + ask_skip_tags_on_launch=True, + ) + result = run_module( + 'workflow_launch', + dict( + name='foo-workflow-launch-test', + inventory=inventory.name, + wait=False, + extra_vars={"var1": "My First Variable", "var2": "My Second Variable", "var3": "My Third Variable"}, + tags=["my_tag"], + skip_tags=["your_tag", "their_tag"], + ), + admin_user, + ) + assert result.get('changed', True), result + + job = WorkflowJob.objects.get(id=result['id']) + assert job.extra_vars == '{"var1": "My First Variable", "var2": "My Second Variable", "var3": "My Third Variable"}' + assert job.inventory == inventory + assert job.job_tags == "my_tag" + assert job.skip_tags == "your_tag,their_tag" + + @pytest.mark.django_db def test_delete_with_spec(run_module, admin_user, organization, survey_spec): WorkflowJobTemplate.objects.create(organization=organization, name='foo-workflow', survey_enabled=True, survey_spec=survey_spec) diff --git a/ansible_collections/awx/awx/tests/integration/targets/ad_hoc_command_cancel/tasks/main.yml b/ansible_collections/awx/awx/tests/integration/targets/ad_hoc_command_cancel/tasks/main.yml index 55c1803db..909e12db1 100644 --- a/ansible_collections/awx/awx/tests/integration/targets/ad_hoc_command_cancel/tasks/main.yml +++ b/ansible_collections/awx/awx/tests/integration/targets/ad_hoc_command_cancel/tasks/main.yml @@ -1,63 +1,63 @@ --- - name: Generate a random string for test - set_fact: + ansible.builtin.set_fact: test_id: "{{ lookup('password', '/dev/null chars=ascii_letters length=16') }}" when: test_id is not defined - name: Generate names - set_fact: + ansible.builtin.set_fact: inv_name: "AWX-Collection-tests-ad_hoc_command_cancel-inventory-{{ test_id }}" ssh_cred_name: "AWX-Collection-tests-ad_hoc_command_cancel-ssh-cred-{{ test_id }}" org_name: "AWX-Collection-tests-ad_hoc_command_cancel-org-{{ test_id }}" - name: Create a New Organization - organization: + awx.awx.organization: name: "{{ org_name }}" - name: Create an Inventory - inventory: + awx.awx.inventory: name: "{{ inv_name }}" organization: "{{ org_name }}" state: present - name: Add localhost to the Inventory - host: + awx.awx.host: name: localhost inventory: "{{ inv_name }}" variables: ansible_connection: local - name: Create a Credential - credential: + awx.awx.credential: name: "{{ ssh_cred_name }}" organization: "{{ org_name }}" credential_type: 'Machine' state: present - name: Launch an Ad Hoc Command - ad_hoc_command: + awx.awx.ad_hoc_command: inventory: "{{ inv_name }}" credential: "{{ ssh_cred_name }}" module_name: "command" module_args: "sleep 100" register: command -- assert: +- ansible.builtin.assert: that: - "command is changed" - name: Cancel the command - ad_hoc_command_cancel: + awx.awx.ad_hoc_command_cancel: command_id: "{{ command.id }}" request_timeout: 60 register: results -- assert: +- ansible.builtin.assert: that: - results is changed - name: "Wait for up to a minute until the job enters the can_cancel: False state" - debug: + ansible.builtin.debug: msg: "The job can_cancel status has transitioned into False, we can proceed with testing" until: not job_status retries: 6 @@ -66,51 +66,51 @@ job_status: "{{ lookup('awx.awx.controller_api', 'ad_hoc_commands/'+ command.id | string +'/cancel')['can_cancel'] }}" - name: Cancel the command with hard error if it's not running - ad_hoc_command_cancel: + awx.awx.ad_hoc_command_cancel: command_id: "{{ command.id }}" fail_if_not_running: true register: results ignore_errors: true -- assert: +- ansible.builtin.assert: that: - results is failed - name: Cancel an already canceled command (assert failure) - ad_hoc_command_cancel: + awx.awx.ad_hoc_command_cancel: command_id: "{{ command.id }}" fail_if_not_running: true register: results ignore_errors: true -- assert: +- ansible.builtin.assert: that: - results is failed - name: Check module fails with correct msg - ad_hoc_command_cancel: + awx.awx.ad_hoc_command_cancel: command_id: 9999999999 register: result ignore_errors: true -- assert: +- ansible.builtin.assert: that: - "result.msg == 'Unable to find command with id 9999999999'" - name: Delete the Credential - credential: + awx.awx.credential: name: "{{ ssh_cred_name }}" organization: "{{ org_name }}" credential_type: 'Machine' state: absent - name: Delete the Inventory - inventory: + awx.awx.inventory: name: "{{ inv_name }}" organization: "{{ org_name }}" state: absent - name: Remove the Organization - organization: + awx.awx.organization: name: "{{ org_name }}" state: absent diff --git a/ansible_collections/awx/awx/tests/integration/targets/application/tasks/main.yml b/ansible_collections/awx/awx/tests/integration/targets/application/tasks/main.yml index 864d4d0ac..e2e82eab8 100644 --- a/ansible_collections/awx/awx/tests/integration/targets/application/tasks/main.yml +++ b/ansible_collections/awx/awx/tests/integration/targets/application/tasks/main.yml @@ -103,6 +103,7 @@ - assert: that: - "result is changed" + - "'client_secret' in result" - name: Rename an inventory application: diff --git a/ansible_collections/awx/awx/tests/integration/targets/instance/tasks/main.yml b/ansible_collections/awx/awx/tests/integration/targets/instance/tasks/main.yml index 045567b50..e35ff20e5 100644 --- a/ansible_collections/awx/awx/tests/integration/targets/instance/tasks/main.yml +++ b/ansible_collections/awx/awx/tests/integration/targets/instance/tasks/main.yml @@ -1,23 +1,23 @@ --- - name: Generate a test ID - set_fact: + ansible.builtin.set_fact: test_id: "{{ lookup('password', '/dev/null chars=ascii_letters length=16') }}" when: test_id is not defined - name: Generate hostnames - set_fact: + ansible.builtin.set_fact: hostname1: "AWX-Collection-tests-instance1.{{ test_id }}.example.com" hostname2: "AWX-Collection-tests-instance2.{{ test_id }}.example.com" hostname3: "AWX-Collection-tests-instance3.{{ test_id }}.example.com" register: facts - name: Get the k8s setting - set_fact: + ansible.builtin.set_fact: IS_K8S: "{{ controller_settings['IS_K8S'] | default(False) }}" vars: controller_settings: "{{ lookup('awx.awx.controller_api', 'settings/all') }}" -- debug: +- ansible.builtin.debug: msg: "Skipping instance test since this is instance is not running on a K8s platform" when: not IS_K8S @@ -32,7 +32,7 @@ - "{{ hostname2 }}" register: result - - assert: + - ansible.builtin.assert: that: - result is changed @@ -44,7 +44,7 @@ capacity_adjustment: 0.4 register: result - - assert: + - ansible.builtin.assert: that: - result is changed @@ -54,7 +54,7 @@ capacity_adjustment: 0.7 register: result - - assert: + - ansible.builtin.assert: that: - result is changed @@ -78,7 +78,7 @@ node_state: installed register: result - - assert: + - ansible.builtin.assert: that: - result is changed @@ -89,7 +89,7 @@ node_state: installed register: result - - assert: + - ansible.builtin.assert: that: - result is changed @@ -103,7 +103,7 @@ - "{{ hostname2 }}" register: result - - assert: + - ansible.builtin.assert: that: - result is changed @@ -115,7 +115,7 @@ peers: [] register: result - - assert: + - ansible.builtin.assert: that: - result is changed diff --git a/ansible_collections/awx/awx/tests/integration/targets/lookup_api_plugin/tasks/main.yml b/ansible_collections/awx/awx/tests/integration/targets/lookup_api_plugin/tasks/main.yml index 6fac5a0bc..44d54a9dc 100644 --- a/ansible_collections/awx/awx/tests/integration/targets/lookup_api_plugin/tasks/main.yml +++ b/ansible_collections/awx/awx/tests/integration/targets/lookup_api_plugin/tasks/main.yml @@ -1,11 +1,11 @@ --- - name: Generate a random string for test - set_fact: + ansible.builtin.set_fact: test_id: "{{ lookup('password', '/dev/null chars=ascii_letters length=16') }}" when: test_id is not defined - name: Generate usernames - set_fact: + ansible.builtin.set_fact: usernames: - "AWX-Collection-tests-api_lookup-user1-{{ test_id }}" - "AWX-Collection-tests-api_lookup-user2-{{ test_id }}" @@ -20,7 +20,7 @@ register: controller_meta - name: Generate the name of our plugin - set_fact: + ansible.builtin.set_fact: plugin_name: "{{ controller_meta.prefix }}.controller_api" - name: Create all of our users @@ -38,7 +38,7 @@ register: results ignore_errors: true - - assert: + - ansible.builtin.assert: that: - "'dne' in (results.msg | lower)" @@ -49,48 +49,48 @@ loop: "{{ hosts }}" - name: Test too many params (failure from validation of terms) - set_fact: + ansible.builtin.set_fact: junk: "{{ query(plugin_name, 'users', 'teams', query_params={}, ) }}" ignore_errors: true register: result - - assert: + - ansible.builtin.assert: that: - result is failed - "'You must pass exactly one endpoint to query' in result.msg" - name: Try to load invalid endpoint - set_fact: + ansible.builtin.set_fact: junk: "{{ query(plugin_name, 'john', query_params={}, ) }}" ignore_errors: true register: result - - assert: + - ansible.builtin.assert: that: - result is failed - "'The requested object could not be found at' in result.msg" - name: Load user of a specific name without promoting objects - set_fact: + ansible.builtin.set_fact: users_list: "{{ lookup(plugin_name, 'users', query_params={ 'username' : user_creation_results['results'][0]['item'] }, return_objects=False) }}" - - assert: + - ansible.builtin.assert: that: - users_list['results'] | length() == 1 - users_list['count'] == 1 - users_list['results'][0]['id'] == user_creation_results['results'][0]['id'] - name: Load user of a specific name with promoting objects - set_fact: + ansible.builtin.set_fact: user_objects: "{{ query(plugin_name, 'users', query_params={ 'username' : user_creation_results['results'][0]['item'] }, return_objects=True ) }}" - - assert: + - ansible.builtin.assert: that: - user_objects | length() == 1 - users_list['results'][0]['id'] == user_objects[0]['id'] - name: Loop over one user with the loop syntax - assert: + ansible.builtin.assert: that: - item['id'] == user_creation_results['results'][0]['id'] loop: "{{ query(plugin_name, 'users', query_params={ 'username' : user_creation_results['results'][0]['item'] } ) }}" @@ -98,91 +98,91 @@ label: "{{ item.id }}" - name: Get a page of users as just ids - set_fact: + ansible.builtin.set_fact: users: "{{ query(plugin_name, 'users', query_params={ 'username__endswith': test_id, 'page_size': 2 }, return_ids=True ) }}" - debug: msg: "{{ users }}" - - name: Assert that user list has 2 ids only and that they are strings, not ints - assert: + - name: assert that user list has 2 ids only and that they are strings, not ints + ansible.builtin.assert: that: - users | length() == 2 - user_creation_results['results'][0]['id'] not in users - user_creation_results['results'][0]['id'] | string in users - name: Get all users of a system through next attribute - set_fact: + ansible.builtin.set_fact: users: "{{ query(plugin_name, 'users', query_params={ 'username__endswith': test_id, 'page_size': 1 }, return_all=true ) }}" - - assert: + - ansible.builtin.assert: that: - users | length() >= 3 - name: Get all of the users created with a max_objects of 1 - set_fact: + ansible.builtin.set_fact: users: "{{ lookup(plugin_name, 'users', query_params={ 'username__endswith': test_id, 'page_size': 1 }, return_all=true, max_objects=1 ) }}" ignore_errors: true register: max_user_errors - - assert: + - ansible.builtin.assert: that: - max_user_errors is failed - "'List view at users returned 3 objects, which is more than the maximum allowed by max_objects' in max_user_errors.msg" - name: Get the ID of the first user created and verify that it is correct - assert: + ansible.builtin.assert: that: "query(plugin_name, 'users', query_params={ 'username' : user_creation_results['results'][0]['item'] }, return_ids=True)[0] == user_creation_results['results'][0]['id'] | string" - name: Try to get an ID of someone who does not exist - set_fact: + ansible.builtin.set_fact: failed_user_id: "{{ query(plugin_name, 'users', query_params={ 'username': 'john jacob jingleheimer schmidt' }, expect_one=True) }}" register: result ignore_errors: true - - assert: + - ansible.builtin.assert: that: - result is failed - "'Expected one object from endpoint users' in result['msg']" - name: Lookup too many users - set_fact: + ansible.builtin.set_fact: too_many_user_ids: " {{ query(plugin_name, 'users', query_params={ 'username__endswith': test_id }, expect_one=True) }}" register: results ignore_errors: true - - assert: + - ansible.builtin.assert: that: - results is failed - "'Expected one object from endpoint users, but obtained 3' in results['msg']" - name: Get the ping page - set_fact: + ansible.builtin.set_fact: ping_data: "{{ lookup(plugin_name, 'ping' ) }}" register: results - - assert: + - ansible.builtin.assert: that: - results is succeeded - "'active_node' in ping_data" - name: "Make sure that expect_objects fails on an API page" - set_fact: + ansible.builtin.set_fact: my_var: "{{ lookup(plugin_name, 'settings/ui', expect_objects=True) }}" ignore_errors: true register: results - - assert: + - ansible.builtin.assert: that: - results is failed - "'Did not obtain a list or detail view at settings/ui, and expect_objects or expect_one is set to True' in results.msg" # DOCS Example Tests - name: Load the UI settings - set_fact: + ansible.builtin.set_fact: controller_settings: "{{ lookup('awx.awx.controller_api', 'settings/ui') }}" - - assert: + - ansible.builtin.assert: that: - "'CUSTOM_LOGO' in controller_settings" @@ -191,7 +191,7 @@ msg: "Admin users: {{ query('awx.awx.controller_api', 'users', query_params={ 'is_superuser': true }) | map(attribute='username') | join(', ') }}" register: results - - assert: + - ansible.builtin.assert: that: - "'admin' in results.msg" @@ -211,7 +211,7 @@ register: role_revoke when: "query('awx.awx.controller_api', 'users', query_params={ 'username': 'DNE_TESTING' }) | length == 1" - - assert: + - ansible.builtin.assert: that: - role_revoke is skipped @@ -227,7 +227,7 @@ ) | map(attribute='name') | list }} register: group_creation - - assert: + - ansible.builtin.assert: that: group_creation is changed always: diff --git a/ansible_collections/awx/awx/tests/integration/targets/role_definition/tasks/main.yml b/ansible_collections/awx/awx/tests/integration/targets/role_definition/tasks/main.yml new file mode 100644 index 000000000..637566f20 --- /dev/null +++ b/ansible_collections/awx/awx/tests/integration/targets/role_definition/tasks/main.yml @@ -0,0 +1,30 @@ +--- +- name: Create Role Definition + role_definition: + name: test_view_jt + permissions: + - awx.view_jobtemplate + - awx.execute_jobtemplate + content_type: awx.jobtemplate + description: role definition to launch job + state: present + register: result + +- assert: + that: + - result is changed + +- name: Delete Role Definition + role_definition: + name: test_view_jt + permissions: + - awx.view_jobtemplate + - awx.execute_jobtemplate + content_type: awx.jobtemplate + description: role definition to launch job + state: absent + register: result + +- assert: + that: + - result is changed diff --git a/ansible_collections/awx/awx/tests/integration/targets/role_team_assignment/tasks/main.yml b/ansible_collections/awx/awx/tests/integration/targets/role_team_assignment/tasks/main.yml new file mode 100644 index 000000000..85ed76d8e --- /dev/null +++ b/ansible_collections/awx/awx/tests/integration/targets/role_team_assignment/tasks/main.yml @@ -0,0 +1,62 @@ +--- +- name: Create Team + team: + name: All Stars + organization: Default + +- name: Create Job Template + job_template: + name: Demo Job Template + job_type: run + inventory: Demo Inventory + project: Demo Project + playbook: hello_world.yml + register: job_template + +- name: Create Role Definition + role_definition: + name: test_view_jt + permissions: + - awx.view_jobtemplate + - awx.execute_jobtemplate + content_type: awx.jobtemplate + description: role definition to launch job + +- name: Create Role Team Assignment + role_team_assignment: + role_definition: test_view_jt + team: All Stars + object_id: "{{ job_template.id }}" + register: result + +- assert: + that: + - result is changed + +- name: Delete Role Team Assigment + role_team_assignment: + role_definition: test_view_jt + team: All Stars + object_id: "{{ job_template.id }}" + state: absent + register: result + +- assert: + that: + - result is changed + +- name: Create Role Definition + role_definition: + name: test_view_jt + permissions: + - awx.view_jobtemplate + - awx.execute_jobtemplate + content_type: awx.jobtemplate + description: role definition to launch job + state: absent + +- name: Delete Team + team: + name: All Stars + organization: Default + state: absent diff --git a/ansible_collections/awx/awx/tests/integration/targets/role_user_assignment/tasks/main.yml b/ansible_collections/awx/awx/tests/integration/targets/role_user_assignment/tasks/main.yml new file mode 100644 index 000000000..897a0ce15 --- /dev/null +++ b/ansible_collections/awx/awx/tests/integration/targets/role_user_assignment/tasks/main.yml @@ -0,0 +1,63 @@ +--- +- name: Create User + user: + username: testing_user + first_name: testing + last_name: user + password: password + +- name: Create Job Template + job_template: + name: Demo Job Template + job_type: run + inventory: Demo Inventory + project: Demo Project + playbook: hello_world.yml + register: job_template + +- name: Create Role Definition + role_definition: + name: test_view_jt + permissions: + - awx.view_jobtemplate + - awx.execute_jobtemplate + content_type: awx.jobtemplate + description: role definition to launch job + +- name: Create Role User Assignment + role_user_assignment: + role_definition: test_view_jt + user: testing_user + object_id: "{{ job_template.id }}" + register: result + +- assert: + that: + - result is changed + +- name: Delete Role User Assigment + role_user_assignment: + role_definition: test_view_jt + user: testing_user + object_id: "{{ job_template.id }}" + state: absent + register: result + +- assert: + that: + - result is changed + +- name: Create Role Definition + role_definition: + name: test_view_jt + permissions: + - awx.view_jobtemplate + - awx.execute_jobtemplate + content_type: awx.jobtemplate + description: role definition to launch job + state: absent + +- name: Delete User + user: + username: testing_user + state: absent diff --git a/ansible_collections/awx/awx/tests/integration/targets/schedule_rrule/tasks/main.yml b/ansible_collections/awx/awx/tests/integration/targets/schedule_rrule/tasks/main.yml index af2d95300..a8ecbcaef 100644 --- a/ansible_collections/awx/awx/tests/integration/targets/schedule_rrule/tasks/main.yml +++ b/ansible_collections/awx/awx/tests/integration/targets/schedule_rrule/tasks/main.yml @@ -1,50 +1,50 @@ --- - name: Get our collection package - controller_meta: + awx.awx.controller_meta: register: controller_meta - name: Generate the name of our plugin - set_fact: + ansible.builtin.set_fact: plugin_name: "{{ controller_meta.prefix }}.schedule_rrule" - name: Test too many params (failure from validation of terms) - debug: + ansible.builtin.debug: msg: "{{ query(plugin_name | string, 'none', 'weekly', start_date='2020-4-16 03:45:07') }}" ignore_errors: true register: result -- assert: +- ansible.builtin.assert: that: - result is failed - "'You may only pass one schedule type in at a time' in result.msg" - name: Test invalid frequency (failure from validation of term) - debug: + ansible.builtin.debug: msg: "{{ query(plugin_name, 'john', start_date='2020-4-16 03:45:07') }}" ignore_errors: true register: result -- assert: +- ansible.builtin.assert: that: - result is failed - "'Frequency of john is invalid' in result.msg" - name: Test an invalid start date (generic failure case from get_rrule) - debug: + ansible.builtin.debug: msg: "{{ query(plugin_name, 'none', start_date='invalid') }}" ignore_errors: true register: result -- assert: +- ansible.builtin.assert: that: - result is failed - "'Parameter start_date must be in the format YYYY-MM-DD' in result.msg" - name: Test end_on as count (generic success case) - debug: + ansible.builtin.debug: msg: "{{ query(plugin_name, 'minute', start_date='2020-4-16 03:45:07', end_on='2') }}" register: result -- assert: +- ansible.builtin.assert: that: - result.msg == 'DTSTART;TZID=America/New_York:20200416T034507 RRULE:FREQ=MINUTELY;COUNT=2;INTERVAL=1' diff --git a/ansible_collections/awx/awx/tests/integration/targets/settings/tasks/main.yml b/ansible_collections/awx/awx/tests/integration/targets/settings/tasks/main.yml index 5feb9ee80..71f1a8c93 100644 --- a/ansible_collections/awx/awx/tests/integration/targets/settings/tasks/main.yml +++ b/ansible_collections/awx/awx/tests/integration/targets/settings/tasks/main.yml @@ -11,7 +11,7 @@ register: result - name: Changing setting to true should have changed the value - assert: + ansible.builtin.assert: that: - "result is changed" @@ -22,7 +22,7 @@ register: result - name: Changing setting to true again should not change the value - assert: + ansible.builtin.assert: that: - "result is not changed" @@ -33,17 +33,17 @@ register: result - name: Changing setting back to false should have changed the value - assert: + ansible.builtin.assert: that: - "result is changed" - name: Set the value of AWX_ISOLATION_SHOW_PATHS to a baseline - settings: + awx.awx.settings: name: AWX_ISOLATION_SHOW_PATHS value: '["/var/lib/awx/projects/"]' - name: Set the value of AWX_ISOLATION_SHOW_PATHS to get an error back from the controller - settings: + awx.awx.settings: settings: AWX_ISOLATION_SHOW_PATHS: 'not': 'a valid' @@ -51,75 +51,75 @@ register: result ignore_errors: true -- assert: +- ansible.builtin.assert: that: - "result is failed" - name: Set the value of AWX_ISOLATION_SHOW_PATHS - settings: + awx.awx.settings: name: AWX_ISOLATION_SHOW_PATHS value: '["/var/lib/awx/projects/", "/tmp"]' register: result -- assert: +- ansible.builtin.assert: that: - "result is changed" - name: Attempt to set the value of AWX_ISOLATION_BASE_PATH to what it already is - settings: + awx.awx.settings: name: AWX_ISOLATION_BASE_PATH value: /tmp register: result -- debug: +- ansible.builtin.debug: msg: "{{ result }}" -- assert: +- ansible.builtin.assert: that: - "result is not changed" - name: Apply a single setting via settings - settings: + awx.awx.settings: name: AWX_ISOLATION_SHOW_PATHS value: '["/var/lib/awx/projects/", "/var/tmp"]' register: result -- assert: +- ansible.builtin.assert: that: - "result is changed" - name: Apply multiple setting via settings with no change - settings: + awx.awx.settings: settings: AWX_ISOLATION_BASE_PATH: /tmp AWX_ISOLATION_SHOW_PATHS: ["/var/lib/awx/projects/", "/var/tmp"] register: result -- debug: +- ansible.builtin.debug: msg: "{{ result }}" -- assert: +- ansible.builtin.assert: that: - "result is not changed" - name: Apply multiple setting via settings with change - settings: + awx.awx.settings: settings: AWX_ISOLATION_BASE_PATH: /tmp AWX_ISOLATION_SHOW_PATHS: [] register: result -- assert: +- ansible.builtin.assert: that: - "result is changed" - name: Handle an omit value - settings: + awx.awx.settings: name: AWX_ISOLATION_BASE_PATH value: '{{ junk_var | default(omit) }}' register: result ignore_errors: true -- assert: +- ansible.builtin.assert: that: - "'Unable to update settings' in result.msg" diff --git a/ansible_collections/azure/azcollection/.gitignore b/ansible_collections/azure/azcollection/.gitignore index a5e318764..f92aa6737 100644 --- a/ansible_collections/azure/azcollection/.gitignore +++ b/ansible_collections/azure/azcollection/.gitignore @@ -7,3 +7,4 @@ venv* .vscode ansible_collections/ .idea/ +tests/integration/inventory diff --git a/ansible_collections/azure/azcollection/.idea/.gitignore b/ansible_collections/azure/azcollection/.idea/.gitignore deleted file mode 100644 index 1c2fda565..000000000 --- a/ansible_collections/azure/azcollection/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/ansible_collections/azure/azcollection/.idea/azcollection.iml b/ansible_collections/azure/azcollection/.idea/azcollection.iml deleted file mode 100644 index 6db416ffe..000000000 --- a/ansible_collections/azure/azcollection/.idea/azcollection.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/ansible_collections/azure/azcollection/.idea/inspectionProfiles/profiles_settings.xml b/ansible_collections/azure/azcollection/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2da2..000000000 --- a/ansible_collections/azure/azcollection/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/ansible_collections/azure/azcollection/.idea/misc.xml b/ansible_collections/azure/azcollection/.idea/misc.xml deleted file mode 100644 index ecadf7f30..000000000 --- a/ansible_collections/azure/azcollection/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ansible_collections/azure/azcollection/.idea/modules.xml b/ansible_collections/azure/azcollection/.idea/modules.xml deleted file mode 100644 index 2701c413f..000000000 --- a/ansible_collections/azure/azcollection/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/ansible_collections/azure/azcollection/.idea/vcs.xml b/ansible_collections/azure/azcollection/.idea/vcs.xml deleted file mode 100644 index c8397c94c..000000000 --- a/ansible_collections/azure/azcollection/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ansible_collections/azure/azcollection/.idea/workspace.xml b/ansible_collections/azure/azcollection/.idea/workspace.xml deleted file mode 100644 index 88ec9a9b1..000000000 --- a/ansible_collections/azure/azcollection/.idea/workspace.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - { - "associatedIndex": 3 -} - - - - { - "keyToString": { - "RunOnceActivity.OpenProjectViewOnStart": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "WebServerToolWindowFactoryState": "false", - "git-widget-placeholder": "f/msgraph__beta", - "last_opened_file_path": "//wsl$/Ubuntu-22.04/home/eric/workspace/ansible-workspace/azcollection", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable", - "vue.rearranger.settings.migration": "true" - } -} - - - - - 1693959760639 - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ansible_collections/azure/azcollection/CHANGELOG.md b/ansible_collections/azure/azcollection/CHANGELOG.md index e25da8d72..f271fc377 100644 --- a/ansible_collections/azure/azcollection/CHANGELOG.md +++ b/ansible_collections/azure/azcollection/CHANGELOG.md @@ -1,5 +1,212 @@ # Change Log +## v2.3.0 (2024-03-27) + +### NEW MODULES + - azure_rm_akscredentials_info: Support to obtain Azure Kubernetes Service Credentials ([#1484](https://github.com/ansible-collections/azure/pull/1484)) + +### FEATURE ENHANCEMENT + - sanity-requirements-azure.txt: + - Bump cryptography from 41.0.6 to 42.0.2 ([#1450](https://github.com/ansible-collections/azure/pull/1450)) + - Bump cryptography from 42.0.2 to 42.0.4 ([#1458](https://github.com/ansible-collections/azure/pull/1458)) + - azure_rm_networkinterface_info: Return the subnet ID ([#1462](https://github.com/ansible-collections/azure/pull/1462)) + - azure_rm_appgateway: Add support for `port` and `match` in `probes` ([#1470](https://github.com/ansible-collections/azure/pull/1470)) + - azure_rm_common.py: + - Add support for import new version `azure-mgmt-recoveryservicesbackup` modules ([#1469](https://github.com/ansible-collections/azure/pull/1469)) + - Add support for `disable_instance_discovery` ([#1442](https://github.com/ansible-collections/azure/pull/1442)) + - Respect `AZURE_CLIENT_ID`, `ANSIBLE_AZURE_AUTH_SOURCE` on inventory plugin ([#713](https://github.com/ansible-collections/azure/pull/713)) + - azure_rm_aksversion_info: Add support for `allow_preview` ([#1456](https://github.com/ansible-collections/azure/pull/1456)) + - azure_rm_adgroup: Add Support for `description` ([#1492](https://github.com/ansible-collections/azure/pull/1492)) + - azure_rm_adgroup_info: Add support for `description` ([#1492](https://github.com/ansible-collections/azure/pull/1492)) + - azure_rm_wbapp: Support to create Web App with Java11/Java17/Java21 ([#1495](https://github.com/ansible-collections/azure/pull/1495)) + - azure_rm_adapplication: Add support for `spa_redirect_urls` and `public_client_redirect_urls` ([#1494](https://github.com/ansible-collections/azure/pull/1494)) + - azure_rm_adapplication_info: Add support for `spa_redirect_urls` and `public_client_redirect_urls` ([#1494](https://github.com/ansible-collections/azure/pull/1494)) + - azure_rm_galleryimage: Add support for `architecture` ([#1493](https://github.com/ansible-collections/azure/pull/1493)) + - azure_rm_keyvaultsecret: Support recover/purge deleted secrets ([#1489](https://github.com/ansible-collections/azure/pull/1489)) + - azure_rm_keyvaultsecret_info: Support recover/purge deleted secrets ([#1489](https://github.com/ansible-collections/azure/pull/1489)) + - azure_rm_recoveryservicesvault_info: Support listing the vaults in same resource group ([#1487](https://github.com/ansible-collections/azure/pull/1487)) + - azure_rm_resource_info: Add support for `tags` ([#1498](https://github.com/ansible-collections/azure/pull/1498)) + - azure_rm_aduser: Add support for `company_name` ([#1504](https://github.com/ansible-collections/azure/pull/1504)) + - azure_rm_aduser_info: Add support for `company_name` ([#1504](https://github.com/ansible-collections/azure/pull/1504)) + - azure_rm_aks: Support manage pod identities in managed Kubernetes cluster ([#1497](https://github.com/ansible-collections/azure/pull/1497)) + - azure_rm_adserviceprincipal_info: Fix listing all service principals ([#1482](https://github.com/ansible-collections/azure/pull/1482)) + - azure_rm_virtualmachie: Add support for swap OS disk ([#1435](https://github.com/ansible-collections/azure/pull/1435)) + +### BUG FIXING + - azure_rm_adgroup: Fix unsupported header in azure_rm_adgroup ([#1467](https://github.com/ansible-collections/azure/pull/1467)) + - azure_rm_keyvaultkey_info: Typos fix ([#1468](https://github.com/ansible-collections/azure/pull/1468)) + - azure_rm_sqlmanagedinstance: Typos fix ([#1468](https://github.com/ansible-collections/azure/pull/1468)) + - azure_rm_sqlmanagedinstance_info: Typos fix ([#1468](https://github.com/ansible-collections/azure/pull/1468)) + - azure_rm_virtualmachine: Typos fix ([#1468](https://github.com/ansible-collections/azure/pull/1468)) + - ../azure_rm_storageaccount/tasks/main.yml: Removing leftover storage account from test ([#1449](https://github.com/ansible-collections/azure/pull/1449)) + - azure_rm_aduser_info: Parse paginated replies for listing all users/groups ([#1448](https://github.com/ansible-collections/azure/pull/1448)) + - azure_rm_adgroup_info: Parse paginated replies for listing all users/groups ([#1448](https://github.com/ansible-collections/azure/pull/1448)) + - azure_rm.py: Allow for template expressions in some parameters ([#1446](https://github.com/ansible-collections/azure/pull/1446)) + - azure_rm_galleryimageversion_info: Check the return value ([#1436](https://github.com/ansible-collections/azure/pull/1436)) + - azure_rm_servicebus_info: Fixed return value format error ([#1503](https://github.com/ansible-collections/azure/pull/1503)) + - azure_rm_appgateway: Ensure `enable_http2` works when targeting existing Application Gateways ([#1439](https://github.com/ansible-collections/azure/pull/1439)) + - azure_rm_datalakestore: Disable testings due to the Azure Data Lake Store Gen1 retired ([#1501](https://github.com/ansible-collections/azure/pull/1501)) + - azure_rm_datalakestore_info: Disable testings due to the Azure Data Lake Store Gen1 retired ([#1501](https://github.com/ansible-collections/azure/pull/1501)) + - azure_rm_gallery_info: Detects the return value and returns None if the return value is empty ([#1483](https://github.com/ansible-collections/azure/pull/1483)) + - azure_rm_account_info: Change the default value of `is_ad_resource` to True ([#1510](https://github.com/ansible-collections/azure/pull/1510)) + + +## v2.2.0 (2024-02-04) + +### NEW MODULES + - azure_rm_publicipprefix ([#1403](https://github.com/ansible-collections/azure/pull/1403)) + - azure_rm_publicipprefix_info ([#1403](https://github.com/ansible-collections/azure/pull/1403)) + - azure_rm_sshpublickey ([#1190](https://github.com/ansible-collections/azure/pull/1190)) + - azure_rm_sshpublickey_info ([#1190](https://github.com/ansible-collections/azure/pull/1190)) + - azure_rm_postgresqlflexibleserver ([1192](https://github.com/ansible-collections/azure/pull/1192)) + - azure_rm_postgresqlflexibleserver_info ([1192](https://github.com/ansible-collections/azure/pull/1192)) + - azure_rm_postgresqlflexibleconfiguration_info ([1192](https://github.com/ansible-collections/azure/pull/1192)) + - azure_rm_postgresqlflexibledatabase ([1192](https://github.com/ansible-collections/azure/pull/1192)) + - azure_rm_postgresqlflexibledatabase_info ([1192](https://github.com/ansible-collections/azure/pull/1192)) + - azure_rm_postgresqlflexiblefirewallrule ([1192](https://github.com/ansible-collections/azure/pull/1192)) + - azure_rm_postgresqlflexiblefirewallrule_info ([1192](https://github.com/ansible-collections/azure/pull/1192)) + +### FEATURE ENHANCEMENT + - azure_rm_adapplication: Add support for `sign_in_audience` ([#1401](https://github.com/ansible-collections/azure/pull/1401)) + - plugins/inventory/azure_rm.py: + - Add support for export `lincense_type` ([#1411](https://github.com/ansible-collections/azure/pull/1411)) + - Set `andible_host` to Public IP Address, use Private IP Address if not exist ([#1406](https://github.com/ansible-collections/azure/pull/1406)) + - Add support for export `subnet` ([#1422](https://github.com/ansible-collections/azure/pull/1422)) + - azure_rm_virtualmachine: Add support for `additional_capabilities` ([#1399](https://github.com/ansible-collections/azure/pull/1399)) + - azure_rm_storageaccount: Add support for `enable_nfs_v3` ([#1346](https://github.com/ansible-collections/azure/pull/1346)) + - azure_rm_subnet: Add `Microsoft.ContainerService/managedClusters` to subnet delegations ([#1414](https://github.com/ansible-collections/azure/pull/1414)) + - azure_rm_adapplication_info: + - Searching by tenant returns all AD applications ([#1420](https://github.com/ansible-collections/azure/pull/1420)) + - Enhance search for application by `app_display_name` ([#1420](https://github.com/ansible-collections/azure/pull/1420)) + - azure_rm_appgateway: Add support `tags` ([#1373](https://github.com/ansible-collections/azure/pull/1373)) + +### BUG FIXING + - azure_rm_common.py: + - Fix missing `client_id` in payload error when using only username/password ([#1409](https://github.com/ansible-collections/azure/pull/1409)) + - Add missing Azure API Profiles ([#1395](https://github.com/ansible-collections/azure/pull/1395)) + - Fix MSI authorization credentials ([#1393](https://github.com/ansible-collections/azure/pull/1393)) + - Fix the `client_id` value ([#1421](https://github.com/ansible-collections/azure/pull/1421)) + - azure_rm_virtualmachine: + - Fix `os_profile` error [#1397](https://github.com/ansible-collections/azure/pull/1397)) + - Fixed disk mount error ([#1407](https://github.com/ansible-collections/azure/pull/1407)) + - Fixed properties mapping error ([#1410](https://github.com/ansible-collections/azure/pull/1410)) + - Detect the VM's `powerstate` value ([#1412](https://github.com/ansible-collections/azure/pull/1412)) + - Limit zones to at most one ([#1392](https://github.com/ansible-collections/azure/pull/1392)) + - azure_rm_*: Deprecate custom properties ([#1388](https://github.com/ansible-collections/azure/pull/1388)) + - azure_rm_networkinterface: Fixed `subscription_id` not used ([#1416](https://github.com/ansible-collections/azure/pull/1416)) + - azure_rm_adgroup: + - Update test cases to use `object_id` ([#1418](https://github.com/ansible-collections/azure/pull/1418)) + - Fix test case ([#1426](https://github.com/ansible-collections/azure/pull/1426)) + - azure_rm_adapplication: Fix test case ([#1425](https://github.com/ansible-collections/azure/pull/1425)) + + +## v2.1.1 (2023-12-19) + +### FEATURE ENHANCEMENT + - **/task/main.yml: Remove unneeded waits in test cases ([#1374](https://github.com/ansible-collections/azure/pull/1374)) + - azure_rm_securitygroup: Add upper letter protocol to security group ([#1381](https://github.com/ansible-collections/azure/pull/1381)) + - Update min Ansible core version to v2.14 - Ansible v2.13 EOF Nov.6 2023 ([#1382](https://github.com/ansible-collections/azure/pull/1382)) + +### BUG FIXING + - plugins/inventory/azure_rm.py: Restore the return of `public_ipv4_address` and fix the bug that the VM does not have a public IP address ([#1379](https://github.com/ansible-collections/azure/pull/1379)) + + +## v2.1.0 (2023-12-13) + +### NEW MODULES + - azure_rm_accesstoken_info ([#1318](https://github.com/ansible-collections/azure/pull/1318)) + - azure_rm_openshiftmanagedclusterkubeconfig_info ([#1238](https://github.com/ansible-collections/azure/pull/1238)) + - azure_rm_sshpublickey ([#1190](https://github.com/ansible-collections/azure/pull/1190)) + - azure_rm_sshpublickey_info ([#1190](https://github.com/ansible-collections/azure/pull/1190)) + +### FEATURE ENHANCEMENT + - azure_rm_storageaccount: Add support for `large_file_shares_state` ([#1210](https://github.com/ansible-collections/azure/pull/1210)) + - azure_rm_storageaccount_info: Add support for `large_file_shares_state`([#1210](https://github.com/ansible-collections/azure/pull/1210)) + - azure_rm(`inventory`): + - Add support for `include_host_filters` ([#1347](https://github.com/ansible-collections/azure/pull/1347)) + - Enhance inventory name checking ([#1348](https://github.com/ansible-collections/azure/pull/1348)) + - azure_rm_webapp : Add support for `http20_enabled` ([#1360](https://github.com/ansible-collections/azure/pull/1360)) + - azure_rm_webapp_info : Add support for `http20_enabled` ([#1360](https://github.com/ansible-collections/azure/pull/1360)) + - azure_rm_virtualmachine : Add retry logic for VM state synchronization ([#1354](https://github.com/ansible-collections/azure/pull/1354)) + - azure_rm_virtualmachinescaleset : Add retry logic for VM state synchronization ([#1354](https://github.com/ansible-collections/azure/pull/1354)) + - azure_keyvault_secret: Added support for `use_msi`(disable MSI autodiscover feature in `azure_keyvault_secret` lookup plugin) ([#1353](https://github.com/ansible-collections/azure/pull/1353)) + - sanity-requirements-azure.txt: Bump cryptography from `41.0.4` to `41.0.6` ([#1349](https://github.com/ansible-collections/azure/pull/1349)) + +### BUG FIXING + - AD resources : Fix get resource with CLI credentials ([#1364](https://github.com/ansible-collections/azure/pull/1364)) + - azure_rm_iotdevice: Fixed the issue of failed to obtain alias parameters ([#1278](https://github.com/ansible-collections/azure/pull/1278)) + - azure_rm_iotdevicemodule: Fixed the issue of failed to obtain alias parameters ([#1278](https://github.com/ansible-collections/azure/pull/1278)) + - azure_rm_virtualmachine: Support update `proximity_placement_group` ([#1329](https://github.com/ansible-collections/azure/pull/1329)) + - azure_rm_common: Fix the CLI authorization obtain token error ([#1340](https://github.com/ansible-collections/azure/pull/1340)) + - azure_rm_adapplication: Fix get application error ([#1345](https://github.com/ansible-collections/azure/pull/1345)) + - azure_rm_adapplication_info: Fix get application error ([#1345](https://github.com/ansible-collections/azure/pull/1345)) + - azure_rm_manageddisk: Support unmount disk from VMs in different resource group ([#1201](https://github.com/ansible-collections/azure/pull/1201)) + - azure_rm_resource: Fix failure on response for non-json body ([#1341](https://github.com/ansible-collections/azure/pull/1341)) + - azure_rm_deployment: Fix delete the whole resource group when state is `absent` ([#1231](https://github.com/ansible-collections/azure/pull/1231)) + - azure_rm_adgroup: Fix get group error ([#1355](https://github.com/ansible-collections/azure/pull/1355)) + - azure_rm_adgroup_info: Fix get group error ([#1355](https://github.com/ansible-collections/azure/pull/1355)) + - azure_rm_aduser_info: Fix get user error ([#1355](https://github.com/ansible-collections/azure/pull/1355)) + - azure_rm(`inventory`): Fix dynamic VM fetch failure when `batch_fetch=true` ([#1344](https://github.com/ansible-collections/azure/pull/1344)) + - azure_rm_adapplication: Fix parameter error ([#1369](https://github.com/ansible-collections/azure/pull/1369)) + +### BREAKING CHANGE + - azure_rm: Rename `public_ipv4_addresses` to `public_ip_address`and change type to list ([#1214](https://github.com/ansible-collections/azure/pull/1214)) + +## v2.0.0 (2023-11-17) + +### FEATURE ENHANCEMENT + - azure_rm_storageblob: Add support for `auth_mode` ([#1315](https://github.com/ansible-collections/azure/pull/1315)) + - azure_rm_galleryimageversion: Add support for `encryption` ([#1311](https://github.com/ansible-collections/azure/pull/1311)) + - azure_rm_galleryimage: Add support for `features` ([#1310](https://github.com/ansible-collections/azure/pull/1310)) + - azure_rm_apimanagement: Bump API version to `v2022-08-01` ([#1327](https://github.com/ansible-collections/azure/pull/1327)) + + - azure_rm_apimanagement_info: Bump API version to `v2022-08-01` ([#1327](https://github.com/ansible-collections/azure/pull/1327)) + - azure_rm_apimanagementservice: Bump API version to `v2022-08-01` ([#1327](https://github.com/ansible-collections/azure/pull/1327)) + - azure_rm_apimanagementservice_info: Bump API version to `v2022-08-01` ([#1327](https://github.com/ansible-collections/azure/pull/1327)) + - azure_rm_*: Add `hasattr` method to verify return value ([#1307](https://github.com/ansible-collections/azure/pull/1307)) + - azure_rm_virtualmachine_info: Add `vm_agent_version` to output ([#1289](https://github.com/ansible-collections/azure/pull/1289)) + - azure_rm_virtualmachine: + - Add support for `os_disk_encryption_set` ([#1306](https://github.com/ansible-collections/azure/pull/1306)) + - Add `disk_encryption_set` for data disks ([#1309](https://github.com/ansible-collections/azure/pull/1309)) + - azure_service_principal_attribute: Move `azure_service_principal_attribute.py` to azure-collecitons lookup file ([#1326](https://github.com/ansible-collections/azure/pull/1326) + - azure_rm_account_info: Migrate from ADGraph to MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adapplication: Migrate from ADGraph to MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adapplication_info: Migrate from ADGraph to MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adgroup: Migrate from ADGraph to MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adgroup_info: Migrate from ADGraph to MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adpassword: + - Migrate from ADGraph to MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - Add support for `display_name` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adpassword_info: Migrate from ADGraph to MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adserviceprincipal: Migrate from ADGraph to MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adserviceprincipal_info: Migrate from ADGraph to MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_aduser: Migrate from ADGraph to MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_aduser_info: Migrate from ADGraph to MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - pr-pipelines.yml: + - Add ansible-core v2.16 ([#1305](https://github.com/ansible-collections/azure/pull/1305)) + - Update PR validation pipeline timeout to 180 minutes ([#1334](https://github.com/ansible-collections/azure/pull/1334)) + +### BUG FIXING + - main.yml: Ansible `is match` does not need a `^` ([#1321](https://github.com/ansible-collections/azure/pull/1321)) + - azure_rm_virtualmachine: Fix caching choices ([#1324](https://github.com/ansible-collections/azure/pull/1324)) + +### BREAKING CHANGE + - azure_rm_virtualmachinescaleset: `orchestration_mode` defaults to `Flexible` ([#1331](https://github.com/ansible-collections/azure/pull/1331)) + - azure_rm_adapplication: + - Deprecate `tenant` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - Deprecate `allow_guests_sign_in` as not supported in MSGraph ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adapplication_info: - Deprecate `tenant` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adgroup: Deprecate `tenant` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adgroup_info: Deprecate `tenant` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adpassword: + - Deprecate `tenant` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - Deprecate `value` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adpassword_info: Deprecate `tenant` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adserviceprincipal: Deprecate `tenant` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_adserviceprincipal_info: Deprecate `tenant` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_aduser: Deprecate `tenant` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + - azure_rm_aduser_info: Deprecate `tenant` ([#1325](https://github.com/ansible-collections/azure/pull/1325)) + ## v1.19.0 (2023-11-6) ### FEATURE ENHANCEMENT diff --git a/ansible_collections/azure/azcollection/FILES.json b/ansible_collections/azure/azcollection/FILES.json index 3ef548ee8..57fe6593a 100644 --- a/ansible_collections/azure/azcollection/FILES.json +++ b/ansible_collections/azure/azcollection/FILES.json @@ -8,7269 +8,7409 @@ "format": 1 }, { - "name": "README.md", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5c2cfcffcf93c51cab4c38238a262431adacb67bd106fd484e730cc8cd17679c", + "name": "meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "shippable.yml", + "name": "meta/execution-environment.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "515333579eea59619360d72e38cc2c5c9a8b43ff59cd3ddcc12c5b0172553b4a", + "chksum_sha256": "4ed6d806d5b0456d5d6ab6e46d68bdbe7b46b10b4352a80ae8b8487220337742", "format": 1 }, { - "name": "requirements-azure.txt", + "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "575dc8b28a49511996ebd91849dc2d61bc5789bf68d2e1c28c9309a7d2ddc887", + "chksum_sha256": "d034d1f9a361fef10f399b0a9e563b6b08df2a190432b69aced0323849298fcf", "format": 1 }, { - "name": "meta", + "name": "tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "meta/runtime.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f348a65f8d5a078d41b7f9608bef523b5a63d577cea802bb31755bd21c62fd01", - "format": 1 - }, - { - "name": "meta/execution-environment.yml", + "name": "tests/config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ed6d806d5b0456d5d6ab6e46d68bdbe7b46b10b4352a80ae8b8487220337742", + "chksum_sha256": "410698cc625c851ec21f2ef8ea020cf7a353590d10a995a3c57eb52d4d8065fb", "format": 1 }, { - "name": "pr-pipelines.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b58b22a0b119202301503af60a15be12426baa3a8c9c82928bea87c9706b2979", + "name": "tests/lint", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "CredScanSuppressions.json", + "name": "tests/lint/ignore-lint.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "98c0ee6a0b7a115787cf109a8c0e2ea4a61df6751ecda37915b22ffb44a1128d", + "chksum_sha256": "bea1480e79bf52af44c7d7b2b112aead789a54696c6ef6469f2dcd710ad2a47f", "format": 1 }, { - "name": "plugins", + "name": "tests/utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/lookup", + "name": "tests/utils/ado", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/lookup/azure_keyvault_secret.py", + "name": "tests/utils/ado/ado.sh", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6f20418149499651d651da69502e509ad913074c5da1d4005a37b86b96eda0ce", + "chksum_sha256": "6e74c310ccc00f71866dc1cd4bc73a66de6a38b2d8dceb2aef6d8bf2a20908f9", "format": 1 }, { - "name": "plugins/doc_fragments", + "name": "tests/utils/shippable", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/doc_fragments/azure_rm.py", + "name": "tests/utils/shippable/sanity.sh", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e19514cc0040e3b896fe05729dc6d5c5bc22698aff5bfa12d85e5195fb019634", + "chksum_sha256": "1cd365c5bad1facb7e98cad97a20e34231f49fca169653ccd7d34bd955bd88f6", "format": 1 }, { - "name": "plugins/doc_fragments/azure_tags.py", + "name": "tests/utils/shippable/timing.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8c9d720dbc7605d3ee66799e8e81d0886e404c9a07b6b9b8edc844e0646de64", + "chksum_sha256": "8236af7a7c739bbc2309ae15e1b59b46274fae86e6d925271562b4dc445833af", "format": 1 }, { - "name": "plugins/doc_fragments/azure.py", + "name": "tests/utils/shippable/azure.sh", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "57355ef9f93df996e93a187c7625073757b8a33df701383f756b3829457adae9", + "chksum_sha256": "99db6946e47cf9e49ab2fccbe0aca8ffc9aaa0918fdc9e3ef543601c55a98713", "format": 1 }, { - "name": "plugins/module_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/utils/shippable/timing.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f3f3cc03a997cdba719b0542fe668fc612451841cbe840ab36865f30aa54a1bd", "format": 1 }, { - "name": "plugins/module_utils/azure_rm_common_ext.py", + "name": "tests/utils/shippable/shippable.sh", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ebf7c0c6f4ad7a05a04d740ca989a05cc4b22728acbd6390d9aa90931eca1647", + "chksum_sha256": "829380ef8b40f42a82696ada1168318856596f4e943bbb9a4f5cd6130bbce2af", "format": 1 }, { - "name": "plugins/module_utils/azure_rm_common_rest.py", + "name": "tests/utils/shippable/cloud.sh", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81845c1924ae3be8f567d3d1eac2c01ddb1ae2a6bf72d41197423b4f37e59253", + "chksum_sha256": "99db6946e47cf9e49ab2fccbe0aca8ffc9aaa0918fdc9e3ef543601c55a98713", "format": 1 }, { - "name": "plugins/module_utils/azure_rm_common.py", + "name": "tests/utils/shippable/check_matrix.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54a254f8975e14c17a5e60c7727ff1eb540e3027b1622066197184d5cb449267", + "chksum_sha256": "49ae66e3ec8931f5f534a038ede5b3c5c95d57eb2e96945458fcb718f6e5b2d5", "format": 1 }, { - "name": "plugins/inventory", + "name": "tests/integration", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/inventory/azure_rm.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bed3077d86f3b8db29b588d99a2f8899e8b1c1a745727d85719ad9a1d264b71a", + "name": "tests/integration/targets", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules", + "name": "tests/integration/targets/azure_rm_notificationhub", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabartifactsource_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "53f584ee94c091e0879eb336194eaef6b94504dfe999f493bd1d029e30d03127", + "name": "tests/integration/targets/azure_rm_notificationhub/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_gallery_info.py", + "name": "tests/integration/targets/azure_rm_notificationhub/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1b22cd1253e69c51442a1e402ef64fbdccaa8ce61b05839041fd7c35a5a44ab", + "chksum_sha256": "a66dc9e034ad04e167bd52df4f75f2bea4499b25349fc42b3c8de9e2fe806996", "format": 1 }, { - "name": "plugins/modules/azure_rm_automationaccount_info.py", + "name": "tests/integration/targets/azure_rm_notificationhub/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "048a0c9b532196427437575202beaf31f8314efb70c67aa86733e6cccc14a98c", + "chksum_sha256": "1be076424fbf717d678e202250426e9b368688f8d3029f0c5dc262b97df819af", "format": 1 }, { - "name": "plugins/modules/azure_rm_privateendpointdnszonegroup_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "70582f1fa2c40f77e166f00242bd6bff2e7c018368beaa2ac960328c341faa77", + "name": "tests/integration/targets/azure_rm_notificationhub/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualnetwork_info.py", + "name": "tests/integration/targets/azure_rm_notificationhub/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39cbe4ccb66acb4dd36b893c9cb000846535c0726b8960e541a47f576fa2ed6f", + "chksum_sha256": "7f519a0026da2e72a6633b7e82a4c2ae581c50b918a5291b3b4737360211276b", "format": 1 }, { - "name": "plugins/modules/azure_rm_rediscache.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2323900cb0386fdd65ca6edada0a669ae12d6d87a9c08afb9bc92e150612a36d", + "name": "tests/integration/targets/azure_rm_acs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_privatednszone_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d1ed854fff931a8a0295b9a4f82235bb9ed8cf5bb947377c51931bcf94dc4c9f", + "name": "tests/integration/targets/azure_rm_acs/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_mysqlconfiguration.py", + "name": "tests/integration/targets/azure_rm_acs/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fff34c89e959affced009f321ef5cd6b6ad9955e711d69306f339ca4c15392e0", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_loadbalancer_info.py", + "name": "tests/integration/targets/azure_rm_acs/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6b508842cc40fd4310a90e2bbad7733a50b7c43e29dc73dbccb304940b0f53c", + "chksum_sha256": "2f7e954a810d0341b1aed1d34e5684bc502980bb6ebbe6a46fb03163ed0e11db", "format": 1 }, { - "name": "plugins/modules/azure_rm_ddosprotectionplan_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9ea0ae1f2bcab647085f83b8223d763abf123afe3996d0aeb0f304fc8d4fc7d3", + "name": "tests/integration/targets/azure_rm_acs/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_hostgroup.py", + "name": "tests/integration/targets/azure_rm_acs/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f3b26f577bb53702d0ed884da4c0c587dc6a186b7bdf9b87d3765c7dadcd89f", + "chksum_sha256": "ecad2cdce0986a34a8f64d2bcbcbd742d99a0083d4e2773cc6a5482a5d529b9c", "format": 1 }, { - "name": "plugins/modules/azure_rm_datafactory.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5e54eadbb395d175730960b6e089b78c76cefeebe08dca0ab1ae80e4d34e78fb", + "name": "tests/integration/targets/azure_rm_webapp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachineextension_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f845763404b68b32efe0187e0224cf30b7c71366531b4de508089df01f4849a3", + "name": "tests/integration/targets/azure_rm_webapp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_dnszone_info.py", + "name": "tests/integration/targets/azure_rm_webapp/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "15da62156897e9dc73a74650198e57b4d6dce5bb761b1e0b0c86d19be31f1cce", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_rediscache_info.py", + "name": "tests/integration/targets/azure_rm_webapp/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af3900d503ca2de80407fa58b2a09e2835a2087315d12a6ae70145f738a71120", + "chksum_sha256": "75b6fa7694979e088e4b068016381f37a603045a395e3b8c660032f4008257d5", "format": 1 }, { - "name": "plugins/modules/azure_rm_iothub.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "aee9f30afbc1989ff7cfe64101c59d842dc635e59b34411d4045c428f1109b1d", + "name": "tests/integration/targets/azure_rm_webapp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_mysqlconfiguration_info.py", + "name": "tests/integration/targets/azure_rm_webapp/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d9e284a3a0c4c2ec47a44ac4a7419358ab7d897488fa29de3ae616cfed56ec4d", + "chksum_sha256": "9774c1a314a6b5fef489d9405550a1395b9468bbea779af6ca95ae47af6386a9", "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabvirtualmachine.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b851e89e72b71469d5eeefb555948de70ae6372728745fa25761ab952164ae08", + "name": "tests/integration/targets/azure_rm_postgresqlserver", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_backuppolicy_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f16cb70c198028b5273e9d89ad554ed6a8e40217284a1fafb9658121c415b4b0", + "name": "tests/integration/targets/azure_rm_postgresqlserver/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_batchaccount.py", + "name": "tests/integration/targets/azure_rm_postgresqlserver/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1010400ee7ceae601c41e97f30336b2732cdab7edf899ab95edf706f1470f0da", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_cognitivesearch_info.py", + "name": "tests/integration/targets/azure_rm_postgresqlserver/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e5e926aea80ecc40b2a0c06745ed85287f4f6f83692af2ad78e7ea641c8d463", + "chksum_sha256": "212c2162821130244834f49afd3460bb037d426eac902fc88de51afbe6bab522", "format": 1 }, { - "name": "plugins/modules/azure_rm_managementgroup_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "728bb535e8dbf3211e4a79123dfa981434dc51423efb046e2bfa6cb35c5949f6", + "name": "tests/integration/targets/azure_rm_postgresqlserver/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_lock_info.py", + "name": "tests/integration/targets/azure_rm_postgresqlserver/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a176ee61fc34ddb3afb0a07d267ce819f0b85f1e271ae4f52f51004869014d21", + "chksum_sha256": "957431198f2f2412d381532922a380b37d3a2941dce8f6fbcda89284fa7d3ca5", "format": 1 }, { - "name": "plugins/modules/azure_rm_containerregistrytag.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9b6a6b029d0bff63cc6fd9cbbbc92f44337fd23d460747b942a4caf32731ad05", + "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_proximityplacementgroup_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3e049bd091a4b88b2d68b6462d3cc15d740fcc65f5d3e310496513be40a83661", + "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachinesize_info.py", + "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24e4730a6256f17cd27877328ed90580bcd2ac93c1b3718b70e18d8c574769a5", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_vpnsite_info.py", + "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "63c87ba7508bb5c7e2f4968c4975b8e85e27260474dcb6f7d558295f9c56a946", + "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3", "format": 1 }, { - "name": "plugins/modules/azure_rm_keyvault_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "42dc1992f6870d92fb0c00e196491d148037561a16f1a3980da71a450d8d1150", + "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualwan_info.py", + "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e7d2fdf7181de1499b68196f176080a9563767764ee9bb27bf3e3411cb87a75", + "chksum_sha256": "4c185b22edc1017409894f57875fe5db2c986c6d741cbd86dc78aa01b36a9fc9", "format": 1 }, { - "name": "plugins/modules/azure_rm_registrationassignment_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ebee000acc1f85898adb717c015209d78a231d7a4130d20293c103c1e01dc57f", + "name": "tests/integration/targets/azure_rm_subnet", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_sqlelasticpool.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a127cd3108b9eff43c793296f6239ee10df0810222dae4c44b380e45c01e36eb", - "format": 1 + "name": "tests/integration/targets/azure_rm_subnet/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 }, { - "name": "plugins/modules/azure_rm_routetable_info.py", + "name": "tests/integration/targets/azure_rm_subnet/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e849400c3b71a0bb6652ab1d40e919288b3dccb94314230273850f31259de8b", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_diskencryptionset.py", + "name": "tests/integration/targets/azure_rm_subnet/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d4f85b7a7c7da95b7fbd3a084a15af87fd037134c527056a14f48ae1e58b9a9f", + "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", "format": 1 }, { - "name": "plugins/modules/azure_rm_storageshare.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d70dd044b1bf421773c6438c7c9020906810f7e1e74523e8855133a8fae9360d", + "name": "tests/integration/targets/azure_rm_subnet/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_mariadbconfiguration.py", + "name": "tests/integration/targets/azure_rm_subnet/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f54c337f3d115d08dcac88d6e4fe16ef1db3d9dec1833b033928f227d89ea11b", + "chksum_sha256": "6da3c97478624fb4d675d4787caedba75a8b159228bc39d6fccdd3db6a333c78", "format": 1 }, { - "name": "plugins/modules/azure_rm_eventhub.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "aeadcc0ec44f966ae318556be223ecbbe4198c412c9d34d1360d724aa919ce0e", + "name": "tests/integration/targets/azure_rm_subscription", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_mariadbconfiguration_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "783f344263d15fef8444cab2f98286515b584c64945f759d1c45ab3363ae1304", + "name": "tests/integration/targets/azure_rm_subscription/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_subnet_info.py", + "name": "tests/integration/targets/azure_rm_subscription/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "781c564f40087d071942dab53c627fed093764c5a244744874e2226ec174bee8", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_functionapp_info.py", + "name": "tests/integration/targets/azure_rm_subscription/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e0f3de0ed340f2e1a5cb2b5b4cb8b7cc9c6c8eafe4483cdb38b58878482b589", + "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", "format": 1 }, { - "name": "plugins/modules/azure_rm_iothub_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5ceef9d30aeb4826188b1c96a6d955955e99ae90a1e8b9ff437859f82a3cdd5a", + "name": "tests/integration/targets/azure_rm_subscription/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_batchaccount_info.py", + "name": "tests/integration/targets/azure_rm_subscription/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b823cdf2a1c2c41c40d0db12e5bd637598f388db9beb0eb2e79e1c940aed39d6", + "chksum_sha256": "cb18a11b4b6b14912f9fcc0131c232c9d3525d14a8d43ee4b2606cc2d3f7249c", "format": 1 }, { - "name": "plugins/modules/azure_rm_aks.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3da4a613aad9785a4d3b764ef386699d796167b12c9291019fb17a204fbd9db5", + "name": "tests/integration/targets/azure_rm_appgateway", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_networkinterface.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7216e23eac5fe34435ac3f8cb111b6c68cab283ec4dba61a4c9efc805221e8df", + "name": "tests/integration/targets/azure_rm_appgateway/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_subnet.py", + "name": "tests/integration/targets/azure_rm_appgateway/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b0cf9127582749f7d680b30cf94545c7ccf6b2a1d28903387ea3bae45e14ef7", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_cdnprofile.py", + "name": "tests/integration/targets/azure_rm_appgateway/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8051fcf46e6ef1061831461ded14aa4fad1a59c7a5dfdfd3d90d6816db8df475", + "chksum_sha256": "21442459796e3c03ab3c6461c8251810f5545ff2320c4c814cce8b8c520e615c", "format": 1 }, { - "name": "plugins/modules/azure_rm_azurefirewall_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6d62301f903c8d8e1075bb7d29412f91b65136344d0fb915eb5017f8936142d9", + "name": "tests/integration/targets/azure_rm_appgateway/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_roleassignment_info.py", + "name": "tests/integration/targets/azure_rm_appgateway/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3287b7ad7063115ef66dc443b05f4ceb6bd22d46cd8fcec1350c6e9e64289b3f", + "chksum_sha256": "7d8ffa4ec62e8b5bcf85c4c36004a71daf4b8bf455238a1b6a8a1749fd64bd4d", "format": 1 }, { - "name": "plugins/modules/azure_rm_adserviceprincipal_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6ec6a6ab5cd644af2cc67b32e41258e058a5e7cad8b9d45a25eb7865edceda0e", + "name": "tests/integration/targets/azure_rm_appgateway/files", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_webappvnetconnection.py", + "name": "tests/integration/targets/azure_rm_appgateway/files/cert3b64.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f823a8fd9802af336c53b103f05d687a20989e92334d7bc122f7ccb62a6a410", + "chksum_sha256": "1375dc6f493fb760c6087c4cdd62c4ea898887070ad17dc84196b3d6ed0545ec", "format": 1 }, { - "name": "plugins/modules/azure_rm_hdinsightcluster_info.py", + "name": "tests/integration/targets/azure_rm_appgateway/files/cert2.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9531f6f0a60132fb1ab9b2e49ab271ba1a630f75682b44197f61632daacb1a0b", + "chksum_sha256": "e4dc34faa2e8e94cd385be73c33a849f452dd57d061a8aec118e6d391e46bbc0", "format": 1 }, { - "name": "plugins/modules/azure_rm_securitygroup_info.py", + "name": "tests/integration/targets/azure_rm_appgateway/files/cert1.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "961d9d5ad4d46ff1acf101c19ebd88813d5251f89ec7e1f4ea809827cc3b5392", + "chksum_sha256": "7637ce7f36cca366294688f612f6456714088cca19583ae7e9475e572d85f4f5", "format": 1 }, { - "name": "plugins/modules/azure_rm_servicebus_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "56677b7274f63fe629975901c0c3f2239a58b3b44d6f42d5e8327e283c49cf22", + "name": "tests/integration/targets/azure_rm_privatednszone", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_natgateway_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "05d862d157fc493cab345fea70f17c3913624364407562a9a2d884377f69f586", + "name": "tests/integration/targets/azure_rm_privatednszone/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_deployment.py", + "name": "tests/integration/targets/azure_rm_privatednszone/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a51562a752c8d9f77ea8afa4ab966ece92c6d868f7eb939a9adcc28c800fbc2f", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_adgroup_info.py", + "name": "tests/integration/targets/azure_rm_privatednszone/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e06b65183c867879b4f34b3b65c24e1d77d6fa1007b90c7f433e658b418d9cf", + "chksum_sha256": "e131092efb0e9d778baeb38471a15da9b4f8ab9e3425ec4f37aaece309220d47", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachine_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "371f0c2e8c15271dcede607bb8cfc52469b506a12b2e3f74adcb7d8beabff4b9", + "name": "tests/integration/targets/azure_rm_privatednszone/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_privateendpointdnszonegroup.py", + "name": "tests/integration/targets/azure_rm_privatednszone/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d516440379341b68c65581c8d9da78f6a204845502e408c48875851c58229241", + "chksum_sha256": "b2de5836a16a64f95f0494dd53d54cd82716c1133e7707c0c2680d9502dfef5c", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachineextension.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "09bd02e50c12aa9e602e8ac7b4312b2619be27b656114309625c9aa39fbcb97a", + "name": "tests/integration/targets/azure_rm_accesstoken_info", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_roledefinition_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "20f17bd7a42d8ebe0d377d9c81754be478f94591e038c65850658c3be6b88422", + "name": "tests/integration/targets/azure_rm_accesstoken_info/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_privatednsrecordset_info.py", + "name": "tests/integration/targets/azure_rm_accesstoken_info/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca64fe771c93ee29952634b1acd63d8ae35c0f36b4ef3a33f6ac1ef0994e2e42", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_roledefinition.py", + "name": "tests/integration/targets/azure_rm_accesstoken_info/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2916e92b6ed98170b35ff1c4bbd3a970ffa11323b2bbb01e37271110072ed33d", + "chksum_sha256": "d57abe6f8fb0cbfb8ac22431c09126cd48bb4d2836a6d151faf92fb6fbecc6aa", "format": 1 }, { - "name": "plugins/modules/azure_rm_proximityplacementgroup.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c39137e4926c1749a04adc516a027a08e7cf2ebe2b21e7a95675fd0a546777b9", + "name": "tests/integration/targets/azure_rm_accesstoken_info/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualhubconnection.py", + "name": "tests/integration/targets/azure_rm_accesstoken_info/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b3ba5bbf31b9e64c4e0978fa92768ce9115fe39450f5dd8085c775fe4ed2716", + "chksum_sha256": "89df9eb85892a54536cf07ef674d75b60c910eee66147eefb074aef8c23108d4", "format": 1 }, { - "name": "plugins/modules/azure_rm_eventhub_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "840c5f5441849b9ae7c489f04bb2fd065cc4192ca4a8143c1fc052c2845e002f", + "name": "tests/integration/targets/azure_rm_recoveryservicesvault", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_sqldatabase.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4ad23bc0505f7a62a03434a0c94c2eaf90ed06c4d5e4ccbf05f169de465fd693", + "name": "tests/integration/targets/azure_rm_recoveryservicesvault/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_webappvnetconnection_info.py", + "name": "tests/integration/targets/azure_rm_recoveryservicesvault/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cbb81f50bdad8e9d738f6a8ff9566898df41fec03e92e3b03383228de5607fff", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_servicebustopic.py", + "name": "tests/integration/targets/azure_rm_recoveryservicesvault/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3061e6f04b67b71c3c7d09566a35916f130745ffc7dd1b472385d78587140da3", + "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420", "format": 1 }, { - "name": "plugins/modules/azure_rm_resource.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "546c902f77832ea142cffe5b07b7babab61081094e713733857f4efaaf71aa63", + "name": "tests/integration/targets/azure_rm_recoveryservicesvault/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_firewallpolicy_info.py", + "name": "tests/integration/targets/azure_rm_recoveryservicesvault/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e1cebf4f29a286751549a9a5ccf06451bfb9648151d54ca813646f1289dc8b9", + "chksum_sha256": "6e841ad32da809ed4a9782a8ce178f2c8399d98a56be2406142e898afffb65c0", "format": 1 }, { - "name": "plugins/modules/azure_rm_containerinstance.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b3c13189f840de2aa3047eeb145d3f1680c40a999a45b92325f70a92ff950296", + "name": "tests/integration/targets/azure_rm_iothub", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_adpassword_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6cc6cf20421203712d3890dbe04dcf4c96d7ba99f3eff6d700d03addabeb93fa", + "name": "tests/integration/targets/azure_rm_iothub/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_postgresqlconfiguration.py", + "name": "tests/integration/targets/azure_rm_iothub/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5a5c9f631bc9ef1eb1d64acd039457dc38a52c84e5246589b9f42df904aa37a", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_mariadbdatabase_info.py", + "name": "tests/integration/targets/azure_rm_iothub/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "abe1fd7778f01c877a7c8d74170c74a26e39de0d5295b3e856adcc39fc7367e8", + "chksum_sha256": "8d4097a5a2543084f3eea11259e299ba87ade8dc8995e5745358931356bee79f", "format": 1 }, { - "name": "plugins/modules/azure_rm_backupazurevm_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4e25e335897973b2afb89187cbd96429e89fe688347be78a73dc4049c3dc3986", + "name": "tests/integration/targets/azure_rm_iothub/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_cdnprofile_info.py", + "name": "tests/integration/targets/azure_rm_iothub/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11acb43afaee020e3b3c252d5c1d3e9669ddcef8f3941635b1bce4d411b9c12e", + "chksum_sha256": "1e5e67ce46e6ae0d5e38dbc0526e3140c3f1f3d978883736c4c84e0732042dbf", "format": 1 }, { - "name": "plugins/modules/azure_rm_backupazurevm.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b1d8a252ccfac8973cf591771b6d7149c2bbf4f788366e1dc2b16fef8d52cc61", + "name": "tests/integration/targets/azure_rm_aksagentpool", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_resourcegroup.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "20900d4b10ee5f7032fc409be2eaafc00521f8799c56559d8ac88fce00e4b2eb", + "name": "tests/integration/targets/azure_rm_aksagentpool/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_datafactory_info.py", + "name": "tests/integration/targets/azure_rm_aksagentpool/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97332f814785d6c0aad03a37f0126454115c0f219379529fefa421bf9ea20b53", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachine.py", + "name": "tests/integration/targets/azure_rm_aksagentpool/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a71e48a19a1f43d47a46951e936b6cf187ea87170d247326449f9a6fbdd1bc79", + "chksum_sha256": "783d6dbd1b9cc4b0543d6e96d15206283018e0c291764a2a4106e860d41cb210", "format": 1 }, { - "name": "plugins/modules/azure_rm_gallery.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d75d837aeb5b9292babe25fd49f7b24e516c4ae3ac3707afeab09bf801cdc711", + "name": "tests/integration/targets/azure_rm_aksagentpool/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabenvironment_info.py", + "name": "tests/integration/targets/azure_rm_aksagentpool/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a33bd3a6e60f1153b611e1f45fc4c99b01b9ff2342e92171e823bd8016b2be0c", + "chksum_sha256": "88959c5262b2f543793b47314b9bce24d267e32f9c3f419f71a242dbbccadf12", "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabvirtualnetwork.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4c52da65b8749ffc924d5206dc8a4f29406dd208cefd20ca78cd5f30c9184e77", + "name": "tests/integration/targets/azure_rm_virtualmachine", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_containerinstance_info.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/runme.sh", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab1aa37508addc2bf616e2c13664f2a1e5e0235af91db2bb84542449d01fc67b", + "chksum_sha256": "8d9a70f8c75d9a856cd529ae8ccb6e589c0db9494da4bb08cead6963e98d9dd5", "format": 1 }, { - "name": "plugins/modules/azure_rm_cosmosdbaccount.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6c644934b50c99c8839405f78cae5aea90c0f6b2a9ae4f74a9f761467ea7cd1", + "chksum_sha256": "deefc8fe8e3699aa1e8852f316f52c0037219050b5b5d07919fa24d06ac14ed5", "format": 1 }, { - "name": "plugins/modules/azure_rm_mariadbfirewallrule_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7a2b125c6e0ed19d1fe70703e24ed9e4257713c492e927785fe35cdf789afcc2", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabartifactsource.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_no_public_ip.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b3f24465ae9f40d6adc4e61d6e1f34d78345b5ee88c5c5958ed401b3146b79d", + "chksum_sha256": "a7f201260799a21031f75d3ecbd6cc372007c3a2c5ef7a6c9d35053129b868cd", "format": 1 }, { - "name": "plugins/modules/azure_rm_keyvaultkey_info.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_minimal_manageddisk.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23eaf4510c03b121fc24ba8a116b26e35563af5ee9875d7210557caf2e6ce9b2", + "chksum_sha256": "e10179f3c286b53a8347a1cd7d3672cc80e9184589dc7ea292489279fcc67ede", "format": 1 }, { - "name": "plugins/modules/azure_rm_trafficmanagerendpoint.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_dual_nic.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "48772694d9d17d8d0f6b0e6d44c4359dbb35861116c38fa933b0db93981f7a76", + "chksum_sha256": "270c196e70cd74c25954f6e5e2acd136aef9e3892f36051663ff6a96d5f984c8", "format": 1 }, { - "name": "plugins/modules/azure_rm_mysqlserver.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/setup.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f7cb3ce5875e72550cd314cc3df490cbbce0292265c927038897d026b573514", + "chksum_sha256": "1af862edc4a550cf631bcaa7a082d23451a3e7eacd0a248e4688bcc8dc6ef604", "format": 1 }, { - "name": "plugins/modules/azure_rm_mysqlserver_info.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_public_ip.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "595b1221845b1ff1d61c133eabb34930f9e9d0b59cd2ee853cddc487b182c57b", + "chksum_sha256": "fc7a86147194125bacfe94a37a05af001ff6d68b6ee5b759d6561ceea51b6b33", "format": 1 }, { - "name": "plugins/modules/azure_rm_cdnendpoint.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_spot.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7e105391561b1552efc4ea6e587d5a9dc60c61c6e7847ea036481b5923a10f26", + "chksum_sha256": "40cfa7a636a0741e3f17deb1c7b965fbc42074f3fb7a50503dc93b9c2515a2e4", "format": 1 }, { - "name": "plugins/modules/azure_rm_vpnsitelink_info.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_minimal.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c12058e056680201ef2358025ed148b9338a50eebace5b8784cc9acdc525093f", + "chksum_sha256": "6ec63fe982d7ce8d65dadd74eb7e5c3678fa88e008ddfeaa43b1d3b77e094583", "format": 1 }, { - "name": "plugins/modules/azure_rm_multiplemanageddisks.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/setup_des.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "95a1386da7e22dc74338466668e3542f37584f4272481fc56b298ee95053d23e", + "chksum_sha256": "78451a10252f870ed0dffd1c7ef008265abf0573b7748d6518ced071c6a15df7", "format": 1 }, { - "name": "plugins/modules/azure_rm_iotdevicemodule.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_image_latest.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8bc59ae66ec54ff0773dfe858b91a946df973f93e06c12b571b20d16a2142e6", + "chksum_sha256": "1d3000da1ae66217ff40113749e77538bee7ebf49e1808ad36488ca33d89761f", "format": 1 }, { - "name": "plugins/modules/azure_rm_azurefirewall.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_image_specific.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da90ad6d785772e86a709e378eca2143faf638bfe60f3d362d578ec54302a0ac", + "chksum_sha256": "41a71c6515836e0c1c764ae83a0c999403e1fb774a55c5ab7912bdf7f1e2fc89", "format": 1 }, { - "name": "plugins/modules/azure_rm_loadbalancer.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_vm_identity.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40bcb2a088750276d350e5170a7993a5e92117948835d6bd30dcf5989db2cf11", + "chksum_sha256": "a7b73bb1af0583758961a25336d5faa2eb76fe6e84b3b9698b1bc5e53fbe4f9c", "format": 1 }, { - "name": "plugins/modules/azure_rm_trafficmanager.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_encrypted.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9aba8d8ba13076c53f797b5c999af3dbc951849450ca138ce6572804eed67a22", + "chksum_sha256": "75d1bcac216eed0c0d847c74ad9f5b79b0f7bfbe7a34f08c3918a9baeaeac106", "format": 1 }, { - "name": "plugins/modules/azure_rm_registrationassignment.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_no_nsg.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "075669114ff7606dbf4aa144d0e7fc51441b7ec8230c36f2951884d40ea502b7", + "chksum_sha256": "97017436c84bdbc87de46cee90cfab5edd108685b439253083f141cd5fd52a78", "format": 1 }, { - "name": "plugins/modules/azure_rm_galleryimageversion.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_invalid.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dfdc102dca75eaba97460f3f9a47a0ae0eb375714b030959a3781c9e12d675e2", + "chksum_sha256": "055893c82ae8b817fbcd3287b7435ae35ba8d6825ad3cb9545048ac599f9dd56", "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlab.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_ephemeral_os.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e45418f49d7b45ab7a6c29f17bc6f12cc0607a21179fce4a4f428d1419b1abc1", + "chksum_sha256": "a7ecfe0131bd01e748de4f813746530f25a2bcd906e582767d0417827d784937", "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabcustomimage.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_deallocate.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4398962a6b78efc7b3faabd07af0cf4c31eafe25ec2fc23430a7385fd3c2050a", + "chksum_sha256": "6eb8b380f4e4e8f2dde24fe08098219bd067bf4b362e647df83b91d3e9133666", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualnetworkpeering_info.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/inventory.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70b548cc3d9362d2c6a3c0ddedbded5ec61be98334bb43d0c59cad8a95065898", + "chksum_sha256": "dbfa6b4c9d720fa3c687dfb4c1101701708593184aaf0950ea66cca1f7bf63eb", "format": 1 }, { - "name": "plugins/modules/azure_rm_hostgroup_info.py", + "name": "tests/integration/targets/azure_rm_virtualmachine/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05d3069e290c810fe454923e22f4aae4932aa8924b12d872039904d87b779a07", + "chksum_sha256": "49c03342521da6b25da0d4df975ee81e10e8b1e7ebd1bdabeba797463bceddbe", "format": 1 }, { - "name": "plugins/modules/azure_rm_openshiftmanagedcluster_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "061e20df32528b861d5ccdabd7b7e8bd5abdcf0ea2c3c973f561e656223ce0b4", + "name": "tests/integration/targets/azure_rm_functionapp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_appgateway.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "04b1dd5413cdc81f642e470db6cdd1ae1ffa77d2b9b42e845b4bbf111235b650", + "name": "tests/integration/targets/azure_rm_functionapp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachinescaleset_info.py", + "name": "tests/integration/targets/azure_rm_functionapp/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5925fb4d64f27c1460dc96e40aaa1eabda5612174aa598a717856b2861540662", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_galleryimage_info.py", + "name": "tests/integration/targets/azure_rm_functionapp/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89a14ee3f36038d0da78d7f7b586361e5acab82f1cd66c1c8278d840e12e2023", + "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", "format": 1 }, { - "name": "plugins/modules/azure_rm_cdnendpoint_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6d355f726042e8bb6f9729fbfe486980b2a88813cff5a9f92017a0df75ab2f48", + "name": "tests/integration/targets/azure_rm_functionapp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_route_info.py", + "name": "tests/integration/targets/azure_rm_functionapp/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec951f25bdc8b4944f43e054e44fc1887fbdb8cfaf892f5ce57174cf251b442e", + "chksum_sha256": "a5d18ded0b871348c349b69152916bc7b243670fdc7ec9a2f8ab479ce589e390", "format": 1 }, { - "name": "plugins/modules/azure_rm_automationaccount.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5dd5fd70d816d33733de4bd4eb9f7569038760a5d13f9f932d7cc94b8077bbf4", + "name": "tests/integration/targets/azure_rm_account_info", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_keyvaultkey.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d9e0b37c1eb77dc2d8efe7a97a0715f2d381a59937cc6ff5ed8a7ce769ab558b", + "name": "tests/integration/targets/azure_rm_account_info/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachinescalesetextension.py", + "name": "tests/integration/targets/azure_rm_account_info/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8ef46432cfcc51726f0e9d1ce8003a5e9820432a253d897b420c8423c178f74", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_mariadbserver.py", + "name": "tests/integration/targets/azure_rm_account_info/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c671f81b7aff21b252b4844b16135a8fef889b340f66337e394d87e249e4a28", + "chksum_sha256": "a58bdac3b7068e244f2cf71f0a1a0bf136bc8785d2a8947fecbafdd97313adb7", "format": 1 }, { - "name": "plugins/modules/azure_rm_firewallpolicy.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "58980ae98ef0f3eb07237bd685eaf312369a68a484aaebef40037697d83cdec1", + "name": "tests/integration/targets/azure_rm_account_info/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_deployment_info.py", + "name": "tests/integration/targets/azure_rm_account_info/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b2f239c18ae7533a69c8a3e380840171bedc20dc4330ffb0b0f14c9cc5bda25", + "chksum_sha256": "4a18344a391206dc34d9e73134c7e2a2815ae3cdc36cf9b6791ac19e1bc07d6a", "format": 1 }, { - "name": "plugins/modules/azure_rm_publicipaddress_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7c60893a6d181b60254e2b8e2dca0aae0c83c1f98bf2e1a6f2ab6206a222112f", + "name": "tests/integration/targets/azure_rm_managementgroup", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_keyvault.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4689bcd312be6a35cf796ddbb8a5594232054f9a27c638b6e843c2adaa6b55ee", + "name": "tests/integration/targets/azure_rm_managementgroup/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_postgresqlserver_info.py", + "name": "tests/integration/targets/azure_rm_managementgroup/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41eccd6933ff71ce9f0bbfe939057aeea30beaf4c6e475887a7bf21df6a48f67", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabvirtualnetwork_info.py", + "name": "tests/integration/targets/azure_rm_managementgroup/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e8336f66de22809f5693b7c84af84f768d51992685a1daa3ef42f1416eff4ce", + "chksum_sha256": "e7fc1f0b30d75ba7b3a8f5a9a45a7703c06585edc0f3ce9231a9b2ca7a649864", "format": 1 }, { - "name": "plugins/modules/azure_rm_manageddisk.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7fae72b490febd8d03292056a034e797aa68fb3fd52d9a849bebf3ac7b67d6d2", + "name": "tests/integration/targets/azure_rm_managementgroup/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_trafficmanagerendpoint_info.py", + "name": "tests/integration/targets/azure_rm_managementgroup/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19fa3f18fc08a32e65b2dfb6c0b74a7a4827a2afcb36409214de9887899e754e", + "chksum_sha256": "52b6ea89da7341d8977b8f1ac1fb530b48eba4831b6c5224b2c136c9bfa91ad7", "format": 1 }, { - "name": "plugins/modules/azure_rm_keyvaultsecret_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "82a8e53b9e615d6d82467cb28b4572b1dfcb128f9a4b19ccd98c613465504c48", + "name": "tests/integration/targets/azure_rm_storageaccount", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_adapplication.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1169c9823bdf7024c552003dfbbdf1067eac2186883bf5cd7904be5d49b99352", + "name": "tests/integration/targets/azure_rm_storageaccount/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabschedule_info.py", + "name": "tests/integration/targets/azure_rm_storageaccount/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "775594a1c43e4e67957e6f1ef498b2fc8e04fd2d60d8215d1471084f19f9b0f6", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_applicationsecuritygroup_info.py", + "name": "tests/integration/targets/azure_rm_storageaccount/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "805be7606a6145a9b4c942f63a9aa46ffc10366b8e3bf2af0c64b8009d0ac9eb", + "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", "format": 1 }, { - "name": "plugins/modules/azure_rm_webappslot.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d7c28a3338c7a7ecfa0da50def079ab83286aa1750aa52d13944fbac4fbf2399", + "name": "tests/integration/targets/azure_rm_storageaccount/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_vmssnetworkinterface_info.py", + "name": "tests/integration/targets/azure_rm_storageaccount/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "968c1e5781fdca422d62eeea87dd9ac45132e5f03c7e3a91ca6b15d0683eb944", + "chksum_sha256": "8d2c09bca13c2239c843af20b93b033b24b5abe133d4d8f9dcf08a9d1f6ad0df", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualhub.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "be9396630b6c0d0cc7dae7688cd87421f4770dbba2ed92b2712761ff722ae8a5", + "name": "tests/integration/targets/azure_rm_aks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_cognitivesearch.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8665ce3ff083d18608c7ed9b5fb778d6248e9cfcc096b464535d041457d9af00", + "name": "tests/integration/targets/azure_rm_aks/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_iotdevice.py", + "name": "tests/integration/targets/azure_rm_aks/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d0f2a6f2f913e9d1f9547a9b601d42f5462c867480915f6ab2cc54674e6f2ec", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualwan.py", + "name": "tests/integration/targets/azure_rm_aks/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4bf8e8dc2b63ad03eed2d1f50fc68f3026e00528651b132570b009e8d93232a5", + "chksum_sha256": "783d6dbd1b9cc4b0543d6e96d15206283018e0c291764a2a4106e860d41cb210", "format": 1 }, { - "name": "plugins/modules/azure_rm_openshiftmanagedcluster.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1af54e81954603964c195560b80f5ae452877b564f5a86443f65b3d0f70a9e24", + "name": "tests/integration/targets/azure_rm_aks/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_aksupgrade_info.py", + "name": "tests/integration/targets/azure_rm_aks/tasks/minimal-cluster.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e40923a0ba91ba10ec91ccd2960c60501d5e60c0287ab2578c66d756b865409f", + "chksum_sha256": "2b2be2027bb762b22ccf731a32baf3fa8b2675369c08b76c1499b3ea10902add", "format": 1 }, { - "name": "plugins/modules/azure_rm_privatelinkservice_info.py", + "name": "tests/integration/targets/azure_rm_aks/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02a72af00f3442e3cb5a19ba01bffc4cb2d47f646abf1a5ae0a125e80a8313ba", + "chksum_sha256": "683619ec3541848983b2f513eae4d885c97d3040ac188d252aec7304c3440c0b", "format": 1 }, { - "name": "plugins/modules/azure_rm_adpassword.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0dca5c21f80f4d60aba58dadbfb2581c5488ce7e1c6a9c2b2bfcc03d33863689", + "name": "tests/integration/targets/azure_rm_autoscale", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_vmbackuppolicy_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "23626d1e4710adefaddcad8cfa9f427ad1e2a9bcaff28b61004dd35b50c72e72", + "name": "tests/integration/targets/azure_rm_autoscale/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_natgateway.py", + "name": "tests/integration/targets/azure_rm_autoscale/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe420872335d019070072b7541d79579eba9887f0d80e96d195ed1aaa051aea5", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_automationrunbook_info.py", + "name": "tests/integration/targets/azure_rm_autoscale/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf2d4439d7ef7f6b0f0ec04b345e5919fef980d15b6fb3fda111c2df53c18d16", + "chksum_sha256": "2019d6f29a1dbe1242200ff0a0485722bc57431db8265a741c5e501cd5a920dd", "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabschedule.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "183397504be9789656fe18261844a247d3ff49eb267693819ce1f265c8d6d6d6", + "name": "tests/integration/targets/azure_rm_autoscale/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_securitygroup.py", + "name": "tests/integration/targets/azure_rm_autoscale/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85ff31a12227b44cdb6c43ca52addfbfed8eeeb192f7d1747d2e66e828731c0c", + "chksum_sha256": "f7573c9960bd35c764fcdea5dc4542eaa1666c48dcbc33aef0c6b8e46caa23f5", "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlab_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "84e99ed4f611c9c6d9551c77b83f0d056b68b7eb188b269860eebad6230ff299", + "name": "tests/integration/targets/azure_rm_webappvnetconnection", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_bastionhost.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ade78abbea1c467a8bf4787d227a0a96979482b15d05e3dea2ede57f91ff6f7c", + "name": "tests/integration/targets/azure_rm_webappvnetconnection/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_registrationdefinition_info.py", + "name": "tests/integration/targets/azure_rm_webappvnetconnection/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c6615dbd5f7a904854e0dffad5b8ac364059a4fd93e86529a7257577423aaa6", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_containerregistrytag_info.py", + "name": "tests/integration/targets/azure_rm_webappvnetconnection/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99cde6ea4e4b3f5216131583a7f2ce0dc1777e836d93089733da276895c65b44", + "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", "format": 1 }, { - "name": "plugins/modules/azure_rm_sqlelasticpool_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "05959ef86783c8274fe64c2c1cec19208c37b3d038e6556ffb3a20b51813375c", + "name": "tests/integration/targets/azure_rm_webappvnetconnection/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_dnsrecordset_info.py", + "name": "tests/integration/targets/azure_rm_webappvnetconnection/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce13d83217e276a01bc5763cdfbd131090b35c64607738dc052b7ef9d25a3068", + "chksum_sha256": "fe11d34bfc4836a138318153cd0df0bb89f64d2d6d64f9dc7843704f1bd60760", "format": 1 }, { - "name": "plugins/modules/azure_rm_backuppolicy.py", + "name": "tests/integration/targets/azure_rm_apimanagementservice", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_apimanagementservice/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_apimanagementservice/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37cfea022ca13c6ea40025ae4ec9d00f9e962fba506e1a5708bc00dcfcdc9116", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_webappaccessrestriction_info.py", + "name": "tests/integration/targets/azure_rm_apimanagementservice/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c72ded459dbd8c58642c77aba5cfab56a86782f4e19958ded25f9754a32c1591", + "chksum_sha256": "528893af1cac01f38ab277aec0138b83c74b2576464d96eb7f3da330784edaff", "format": 1 }, { - "name": "plugins/modules/azure_rm_aksversion_info.py", + "name": "tests/integration/targets/azure_rm_apimanagementservice/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_apimanagementservice/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1bba9dd6d78f0d87c751b71c9ff5a29ae856cf4a3326813d8b07d9607e3af2db", + "chksum_sha256": "db17a45674ec599ab8fb1890903d3bc49b3ded000197dd55cc82c3017a962565", "format": 1 }, { - "name": "plugins/modules/azure_rm_mariadbfirewallrule.py", + "name": "tests/integration/targets/azure_rm_availabilityset", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_availabilityset/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_availabilityset/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c028f0fdd933b4a02b6c92f20432fc3617072d8828898f628e02554d25c31e3", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_roleassignment.py", + "name": "tests/integration/targets/azure_rm_availabilityset/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "981eea70440c35499110fa7a97cc7259e7cac1ed2f790ffcb1c247a51bfa6fe3", + "chksum_sha256": "5647901b6198849a4dd58b7fb51aee85b889220f80acde88cea67bffff453d8d", "format": 1 }, { - "name": "plugins/modules/azure_rm_containerregistrywebhook_info.py", + "name": "tests/integration/targets/azure_rm_availabilityset/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_availabilityset/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18b7a6844956e67318fe818bdafd0c94d6631657ec33d529e721e6e21b18ed89", + "chksum_sha256": "0d096b5b5000fd2c1c259adae048dd6ac824c2441db10e6fe352282c8bb77b8a", "format": 1 }, { - "name": "plugins/modules/azure_rm_adgroup.py", + "name": "tests/integration/targets/azure_rm_monitorlogprofile", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_monitorlogprofile/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_monitorlogprofile/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1117a3b1c468a121dc8a76aea672cb7c839dcb094a2a7fa331f925029699666", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_keyvaultsecret.py", + "name": "tests/integration/targets/azure_rm_monitorlogprofile/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ace3f948b102b233b72d82b67a5b9c74d9cf650b4c04d397e427ddc15f3d45e3", + "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3", "format": 1 }, { - "name": "plugins/modules/azure_rm_loganalyticsworkspace_info.py", + "name": "tests/integration/targets/azure_rm_monitorlogprofile/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_monitorlogprofile/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2ea8f5bf029879cd6b7367c7c07d1f638453ff39e0c9f64c04db9afa3a57f8b", + "chksum_sha256": "71fa19924e9ae73ca408e1fccec2a768f3b2fc113158c5718b7b870c081189f1", "format": 1 }, { - "name": "plugins/modules/azure_rm_mariadbserver_info.py", + "name": "tests/integration/targets/azure_rm_ddosprotectionplan", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_ddosprotectionplan/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_ddosprotectionplan/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b836969fea8c255c6aeddca297111eef43141755a9b61677661dd581bb2f1a4", + "chksum_sha256": "a66dc9e034ad04e167bd52df4f75f2bea4499b25349fc42b3c8de9e2fe806996", "format": 1 }, { - "name": "plugins/modules/azure_rm_sqlmanagedinstance.py", + "name": "tests/integration/targets/azure_rm_ddosprotectionplan/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f022f6e315be9d163c042e9253682d15faea83c067917cba012202532f84f955", + "chksum_sha256": "1be076424fbf717d678e202250426e9b368688f8d3029f0c5dc262b97df819af", "format": 1 }, { - "name": "plugins/modules/azure_rm_managementgroup.py", + "name": "tests/integration/targets/azure_rm_ddosprotectionplan/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_ddosprotectionplan/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d0c2f5410b682701b672207c321041af369dfc116f79b5531c8942f573882eb8", + "chksum_sha256": "cac8f7d2a8403213ad252934698c6c5eef6edc0ccd0eb6c5794990e6c30f05b0", "format": 1 }, { - "name": "plugins/modules/azure_rm_galleryimageversion_info.py", + "name": "tests/integration/targets/azure_rm_eventhub", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_eventhub/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_eventhub/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04410811676cb31554c731e12e6803c9e24e238645d16332971573645d01d396", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_privatednszonelink_info.py", + "name": "tests/integration/targets/azure_rm_eventhub/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93d488b4238c4631765dff43c9a6978f3bef9d8ff35294dba4f34772a85a4284", + "chksum_sha256": "1be076424fbf717d678e202250426e9b368688f8d3029f0c5dc262b97df819af", "format": 1 }, { - "name": "plugins/modules/azure_rm_privatednsrecordset.py", + "name": "tests/integration/targets/azure_rm_eventhub/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_eventhub/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b2eceb8e654a1bc257a065f5ef324c69dd6f5b1e9b0126ffd49afa77ff51367", + "chksum_sha256": "c4ef2c774f92b1d1c61c070407cb15cec4492593f03dfc095031136a6fc315e4", "format": 1 }, { - "name": "plugins/modules/azure_rm_containerregistryreplication.py", + "name": "tests/integration/targets/azure_rm_virtualnetworkpeering", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "94d2e1237ef94377586760a091785272818db4bddc6a54d24badee82d7697437", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_trafficmanagerprofile_info.py", + "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b99d27f1679a3d1fafdec74448bfdf2977930e8cef05f0b6d720971b4f6b8c8d", + "chksum_sha256": "ee3b904aa8ab8d0a7e47983927157b420c195fe1d8606de015158339e7824a43", "format": 1 }, { - "name": "plugins/modules/azure_rm_privateendpointconnection_info.py", + "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a1c9260c99294e6c9f4579310504bf656d46b2ed16d22188859945cc53563fc0", + "chksum_sha256": "2fb7b589b1c4bd6ed3778e220fe5be14d351534db03c1473e45f03fd181cf0ac", "format": 1 }, { - "name": "plugins/modules/azure_rm_postgresqlfirewallrule_info.py", + "name": "tests/integration/targets/azure_rm_resource", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_resource/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_resource/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53187b006213c221bd5391b2b45734080afcd9e63280f4181f6355b5db7258dc", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_route.py", + "name": "tests/integration/targets/azure_rm_resource/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f290a0e704d3225c8689ac3a7a9523facc263adace73b8193906cb5ee94bffbd", + "chksum_sha256": "b9685232ad3eab40ee59426a3dd04a8f71719dbfa1d6becb498bb416c8d1ff1c", + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_resource/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_apimanagement_info.py", + "name": "tests/integration/targets/azure_rm_resource/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c6da107654adcf08a5e6cf5f49473ea21b5dd86db46d4e2ff10868449108a02", + "chksum_sha256": "e51cbf401d0da7fb038fade492b102a3493b57c0c0e4f9ca927d726db890c4df", "format": 1 }, { - "name": "plugins/modules/azure_rm_image_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c6dfd163560a3389f0d12d364e61a5a6e6bb87f50b2fc08965b19285002b600d", + "name": "tests/integration/targets/azure_rm_sqlmanagedinstance", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_apimanagementservice.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ff029a940b4e0f844a8623115c7b6fdcda06b8f9e192e20216f4b42d5093550a", + "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_ipgroup_info.py", + "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dcb8c2107767aeeae8dad3a39e68b5a1c475d9eb91e0a9c72b3276461fe0f4cd", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_servicebus.py", + "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7379123759b383d1c9b39442ddff6beb7910e1bb6c68ba570a8d59eed2c6e95", + "chksum_sha256": "d19280a8d5d5c2523536ea5aed2c5a14d1b19cc49f3f21974ca3e9a9921bb7cd", "format": 1 }, { - "name": "plugins/modules/azure_rm_privatelinkservice.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5c56fae085180b9c34424f1cb9fce62adaac67e7107f556702f1a8b9ae00025a", + "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_sqlserver.py", + "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b0f2f7674cdb4641de9a2b8b50cb74e91e36ce0a07e0c3a13330592574bee71", + "chksum_sha256": "561193b252168d2eca301ab2c0f673e1a99acc2c807b9f9e8679f1e3b7058d5e", "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabcustomimage_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "39b5c1b0361bdbb8e5782066ba0593c4e4fbcdc52243e1b2ac05e6fa8451920a", + "name": "tests/integration/targets/azure_rm_servicebus", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_servicebusqueue.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5ba3c26da0e1437c64c3a7d945886563965b08c9fef67f099e97990ef5f50290", + "name": "tests/integration/targets/azure_rm_servicebus/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_appserviceplan.py", + "name": "tests/integration/targets/azure_rm_servicebus/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4230691a8fb4f96611ff509e19f598304daf58104bd7c4e01b0d3e90311a2a93", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_privateendpoint_info.py", + "name": "tests/integration/targets/azure_rm_servicebus/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b34126d4fac558a5077869099cf1327fbecfeab36e6e34b30c4fe809d59b92de", + "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420", "format": 1 }, { - "name": "plugins/modules/azure_rm_manageddisk_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3b7b7131b77965c67a34ae4c9ddb9def5c3d30a5a76498c51580486063693f71", + "name": "tests/integration/targets/azure_rm_servicebus/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_mysqldatabase_info.py", + "name": "tests/integration/targets/azure_rm_servicebus/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dad732afe34bb2972eb39f7fea721d46f644e46383da754563295ebe767e4c43", + "chksum_sha256": "a0528bf0af2a590fe46bced0ca843722543d5f10626604a887a7c278e97c38d2", "format": 1 }, { - "name": "plugins/modules/azure_rm_resource_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f893b49f22424b9a2d18d9e27cf088eda9e6afa89606a337ad6771ae728be1b8", + "name": "tests/integration/targets/azure_rm_dnszone", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachineimage_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "81e679d55f2d54420d960d51e6f0318cec3b781dd37a062df0b0ff9e1756797e", + "name": "tests/integration/targets/azure_rm_dnszone/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_autoscale_info.py", + "name": "tests/integration/targets/azure_rm_dnszone/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7494564289cd93cb8e34bf724deff6fd4fb7ea335233703e1aa2a930860e1d40", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_privatednszonelink.py", + "name": "tests/integration/targets/azure_rm_dnszone/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4166cc9a7e671531be63455046c657896ef9ec1e35a84f7c9bf5bc39cd50bf11", + "chksum_sha256": "1af368a225674fcae08ea809c4dc605f03bc0334b44a9b17dfab0dfe49d93ac6", "format": 1 }, { - "name": "plugins/modules/azure_rm_containerregistryreplication_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b88adc68c275d1c2608313a8bca60f7805a473e33df0ff3b75b3ea0deb915195", + "name": "tests/integration/targets/azure_rm_dnszone/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_subscription_info.py", + "name": "tests/integration/targets/azure_rm_dnszone/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "27171c677f1e2b5337edce509b64021d2bb2708d2b476137b3e4ac96df1631af", + "chksum_sha256": "b03603dc5bddfda055b5dfa51d9c769881822cd95a0953dfe82ef9afd446926a", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachinescalesetinstance.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dcc42ecdde859c43817703218fc0582a4e44750f21b9e8ff33131266c2422916", + "name": "tests/integration/targets/azure_rm_adgroup", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_webappaccessrestriction.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a31793686f398ccb3ea7c32aad8341b808e06449bfe5ed468303d74a5406cf2a", + "name": "tests/integration/targets/azure_rm_adgroup/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_hdinsightcluster.py", + "name": "tests/integration/targets/azure_rm_adgroup/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c7386b43f9f3278b17baf8b6e69bc3800389b1d84c34e49ca9e3f407d30a1eb", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_sqlmanagedinstance_info.py", + "name": "tests/integration/targets/azure_rm_adgroup/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b99b1ab21f96e28642c56ee1519c5a9189bc3c0b7c3beb40c11c471012dbe8d", + "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40", "format": 1 }, { - "name": "plugins/modules/azure_rm_snapshot.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "11c8c5143b3a5229dbf2615d75f3b121b4ee6f008945607d5b7656de2b0ac861", + "name": "tests/integration/targets/azure_rm_adgroup/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualhub_info.py", + "name": "tests/integration/targets/azure_rm_adgroup/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3a9de2d79f400506887f8b86b4a8bbfffb0e0558eae4ce954d8410beff977af4", + "chksum_sha256": "716f9e691c4959caef10575abf4bf7b89fbfe795d4fb144fe4f5949fcd74f94f", "format": 1 }, { - "name": "plugins/modules/azure_rm_storageblob.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4c7ef09d4dd98bf61d0036a34e1d4e9f0df45c91b3d94c030e17dffa7cd91644", + "name": "tests/integration/targets/azure_rm_backupazurevm", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_sqlserver_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "31710e981ec3af5a7ab221d4679e06e7d7baad4e1cca7a1e9809536cf07c8899", + "name": "tests/integration/targets/azure_rm_backupazurevm/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualnetworkpeering.py", + "name": "tests/integration/targets/azure_rm_backupazurevm/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f0ee463d7cbde4f3c704542e0ff6e8220b22f436b1014b15a355e8c832845ffd", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_sqlfirewallrule.py", + "name": "tests/integration/targets/azure_rm_backupazurevm/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf215ff5460bd7561374c1013e93dd13406286bedf9bb34fe5c63a423d65b996", + "chksum_sha256": "91c612e6c7b96f80e7e1cede3dc0ef7431a2900356b7e85a7521e2679bfcfa49", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualnetwork.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d1f54cd77a98a82bbc32959ec20f38af893dc0a41c442c995ed64d42c53ceedc", + "name": "tests/integration/targets/azure_rm_backupazurevm/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_privateendpointconnection.py", + "name": "tests/integration/targets/azure_rm_backupazurevm/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ecc4f6823fed8b227500c7714851dcc9f398424d5774bf89f8dafca9afcbef3", + "chksum_sha256": "4ac0d2995ac62544c567223a1e45c1b1fc568b840b645d5b42a0b41fd4df1661", "format": 1 }, { - "name": "plugins/modules/azure_rm_webapp_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ea1c14d6f336c8e2a1fd62056450a013f912f7fa3a186921548ff7ff8fb59d29", + "name": "tests/integration/targets/azure_rm_virtualnetworkgateway", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_image.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a4648f6095259498761c468442ee994954306f5a112c89ed427e4381dd1b9447", + "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_routetable.py", + "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "903a9d84fb9a4c7aac19a8c54c32e414e364570fe6d02b56427b8c9a8263e979", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabenvironment.py", + "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3900fff1e5d5b5bf9c80ac7261f044f6b0de361eb7e31f1f48d741bfab9b00a", + "chksum_sha256": "4f59a6f1fc64a79191d0110c2f203adee747fd1bb69ad631a279efa7d370eaec", "format": 1 }, { - "name": "plugins/modules/azure_rm_recoveryservicesvault_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0f58e9dc7ce66f1695f5038e3e9bba321e93a1e5dfd98d9a37c8d8963587078e", + "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_aduser_info.py", + "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1d2353c2a497cc22bf6e3cd4fe2f8c52f60f4f556645ada99f014423005a0937", + "chksum_sha256": "271094dd7a4e013c0da515000e4e6257bb716cf030c89dbe37af7ca74902841d", "format": 1 }, { - "name": "plugins/modules/azure_rm_account_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ec36327053b86b179229d47231e614d5555b32d1c8bd6368f913743f07fa7f84", + "name": "tests/integration/targets/azure_rm_privateendpoint", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_mysqldatabase.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "69e4485770b2c839f24749ec8c5aa3ee693f8afd7ff6bd01c62c0df79275c8d6", + "name": "tests/integration/targets/azure_rm_privateendpoint/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_notificationhub_info.py", + "name": "tests/integration/targets/azure_rm_privateendpoint/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "07c91492398c62e54b267d583d55287c485fbe4ca5112305e0c0cb0883500e89", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_adapplication_info.py", + "name": "tests/integration/targets/azure_rm_privateendpoint/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6a61a1e98531303dc5b6a44bd86ee60bb9c45aee7569a9ce92ca34e5965724af", + "chksum_sha256": "11c35de489a3da87eb40a2ce00a80a9992fc89c3b3fdee710301ba9faacd332d", "format": 1 }, { - "name": "plugins/modules/azure_rm_iotdevice_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "87e22ba60e4ab700ee3bfad366690b044125b0f66091c88bc346dcc88e722262", + "name": "tests/integration/targets/azure_rm_privateendpoint/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_mariadbdatabase.py", + "name": "tests/integration/targets/azure_rm_privateendpoint/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8dc569f2de810f80a09d827c276f44fd85dc254766b82bed9769846f41008b6", + "chksum_sha256": "f5c8cc29641d123e237b894acc5d13e306e61d6cc553d15561730a42e63e55fc", "format": 1 }, { - "name": "plugins/modules/azure_rm_containerregistry_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b176c5d28ade7bb04fb50a82ea0c59987cc004136fcfc37a50cfa240d8c29cc3", + "name": "tests/integration/targets/azure_rm_devtestlab", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_postgresqlfirewallrule.py", + "name": "tests/integration/targets/azure_rm_devtestlab/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_devtestlab/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6a0ef8e59ec7d273bd94d6e8e40f6ffe8e0a313f8e8d912b9ecb71c5db6ea662", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_recoveryservicesvault.py", + "name": "tests/integration/targets/azure_rm_devtestlab/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e465a4c809eda3d9360a644350366ab9fd430da1720a2aa9df9407dd8e49621", + "chksum_sha256": "435162ac2df7aa373bc2d191a07d79c283d3891a1278b0277f85e6112b96fc03", "format": 1 }, { - "name": "plugins/modules/azure_rm_storageaccount.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ccc3bf0ae991b6d1312489d910c777727be7c266f2c9f0c69f114ac73be0bdae", + "name": "tests/integration/targets/azure_rm_devtestlab/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_postgresqldatabase_info.py", + "name": "tests/integration/targets/azure_rm_devtestlab/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c896791d9f215a0ab5c7cb5315bcc302392ba07eea4081b4c68cf392c7013c2", + "chksum_sha256": "17fd6c08f41838809e461f199a62e373c8bf28c5d90199bf09340ae9762dd252", "format": 1 }, { - "name": "plugins/modules/azure_rm_applicationsecuritygroup.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "58f5338441960bf8824f1ed9eec52bd6c5c2ec9d8c6ab02e8a5872afd388ed39", + "name": "tests/integration/targets/azure_rm_registrationassignment", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_expressroute_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5e302a549f10b209ec9b8d61051f3ddf478eea0e4d99d8eb9af1db568975994f", + "name": "tests/integration/targets/azure_rm_registrationassignment/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_servicebustopicsubscription.py", + "name": "tests/integration/targets/azure_rm_registrationassignment/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7ffbac3a815640add669c05c8c29d78ac433ccd8e9762540746eef25457f6829", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_availabilityset.py", + "name": "tests/integration/targets/azure_rm_registrationassignment/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "685bb7c2dfeaac6f1042b164d014064dcad6b8865cbe764da3ea9ab5f23a9a76", + "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualhubconnection_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "948b85322d1c84b4eee3709f69f2de166232472a675dd26e125c099ce13517cc", + "name": "tests/integration/targets/azure_rm_registrationassignment/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_automationrunbook.py", + "name": "tests/integration/targets/azure_rm_registrationassignment/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c257d3afae0b00ae9b09d6d5f04373def1e678ea99cd8d5778c8425d64ea0058", + "chksum_sha256": "93912c71ac63373e058c38b29f7342b6350247484a190476098c6f8c33bdae53", "format": 1 }, { - "name": "plugins/modules/azure_rm_storageaccount_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "27c35c2191216b55c0af4ed133c20d78f95450cfb3d7bb3605268e7db1119ad0", + "name": "tests/integration/targets/azure_rm_bastionhost", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_vmbackuppolicy.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3f0d9e125fb25e8e1fe6e575c4b4f2a51a6a16c601d52003802d6836c5215ba2", + "name": "tests/integration/targets/azure_rm_bastionhost/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_postgresqlconfiguration_info.py", + "name": "tests/integration/targets/azure_rm_bastionhost/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61b7807ec717db7657e825a2c1bbd815ede63112b9ce0bd4811e1c486ef01fd3", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_functionapp.py", + "name": "tests/integration/targets/azure_rm_bastionhost/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b36955b4ade5a066cf353dc80387fb9e7419fabf07664db38510b29c6931282b", + "chksum_sha256": "d57abe6f8fb0cbfb8ac22431c09126cd48bb4d2836a6d151faf92fb6fbecc6aa", "format": 1 }, { - "name": "plugins/modules/azure_rm_postgresqlserver.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "665e6153c4700277d41a5b0b83a65601d71b3088868f8e8f93229b91a3d660b1", + "name": "tests/integration/targets/azure_rm_bastionhost/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_sqldatabase_info.py", + "name": "tests/integration/targets/azure_rm_bastionhost/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d97f650c2b9d89769f4089c17e2d64c1ee066e5295e757119f270be7be10b25a", + "chksum_sha256": "1f4b63feed40dce0104c38b6ad43cb9e2709b25ae6642031888fcd9e6103d351", "format": 1 }, { - "name": "plugins/modules/azure_rm_apimanagement.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c56dab10921ea4cf7c3244ca5a1f0f24074b3927f0d5f42e0fd82dfd2b305fa9", + "name": "tests/integration/targets/azure_rm_virtualmachineextension", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_webapp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5d6121e5cc0c2e61329fcade74dc3092db8e6d47db080d6734b6f20e9384d50f", + "name": "tests/integration/targets/azure_rm_virtualmachineextension/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabartifact_info.py", + "name": "tests/integration/targets/azure_rm_virtualmachineextension/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3e22ef863e1e999fce8e6dd95bda54e1f140e0c55de17fee5ebf40a51d35b53", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_registrationdefinition.py", + "name": "tests/integration/targets/azure_rm_virtualmachineextension/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f987c3e5b1b9ad19919ebe6b60ef05e8bb1d14980c25931d505994f07dcb4bb", + "chksum_sha256": "0fdd66037c00d326e8724db280f591414ae437954cdedeeebb4b455784fcb4d3", "format": 1 }, { - "name": "plugins/modules/azure_rm_publicipaddress.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e2ddc75d7edca49904c6025a1e1418c0ada1ed45fd56963a8e315cf7b2074362", + "name": "tests/integration/targets/azure_rm_virtualmachineextension/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachinescalesetinstance_info.py", + "name": "tests/integration/targets/azure_rm_virtualmachineextension/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb85cde7c504168c0013e50472526bf8170839212efce46c1ddb1a781fe1dc7c", + "chksum_sha256": "9e3cb1009bcddcf4db403356c71a3862d40d9978395362480795d87961229f8d", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachinescalesetextension_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0c32b71b14bbb8c0609f20d2c522792ad6f6e5bd3b8477dfadae9bb34ae61cc2", + "name": "tests/integration/targets/azure_rm_virtualmachineextension/files", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_aduser.py", + "name": "tests/integration/targets/azure_rm_virtualmachineextension/files/test-protected-settings.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "de250268540b1d1b14e772c77d8860a5d4942ddf58557f1858a2043be8958df2", + "chksum_sha256": "436711afe43e0c31f515a016fa56e64c70f1df35502725327b8c703773d4823b", "format": 1 }, { - "name": "plugins/modules/azure_rm_aksagentpool.py", + "name": "tests/integration/targets/azure_rm_virtualmachineextension/files/test-public-settings.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "35eede66b4539d8ebfabaeba04dc70f75614d3bc94b2d19a721b527269e44404", + "chksum_sha256": "1063a36dc41ca530af7839c69ec22f2b92447be4c3b41e90429c970b23d9116b", "format": 1 }, { - "name": "plugins/modules/azure_rm_dnsrecordset.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c542f52ae53544606bc2c9e1c75ad25ebd0c8ce2d00485a43024aaa39e803adf", + "name": "tests/integration/targets/azure_rm_webappaccessrestriction", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabpolicy_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f22d2afaf43d8b7a581c4f05f060829090d7294d19b6824ca59e86ccae69379d", + "name": "tests/integration/targets/azure_rm_webappaccessrestriction/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_aksagentpoolversion_info.py", + "name": "tests/integration/targets/azure_rm_webappaccessrestriction/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "69fd5ecafb1b4dee2cbcb17f9b767f3fff6a9d717ca8548dec4f9735f3d213d6", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_expressroute.py", + "name": "tests/integration/targets/azure_rm_webappaccessrestriction/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b7a0f0dd5862dbb3fc72329ed7c6790cc18a79e279a3e3f85896c075dda2ab1c", + "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", "format": 1 }, { - "name": "plugins/modules/azure_rm_resourcegroup_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3336b070c7a607adde16279cdeaefe260b75c683a0ab0028b4ae6f262ebd32d8", + "name": "tests/integration/targets/azure_rm_webappaccessrestriction/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabvirtualmachine_info.py", + "name": "tests/integration/targets/azure_rm_webappaccessrestriction/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae5aa0ceace675df82f2a76e4f852a222bc892f4e406d33745d97ce848b53a4a", + "chksum_sha256": "23178ef47e9dbb43a51984becf44d72972a399952958fd2a76d71d6338864252", "format": 1 }, { - "name": "plugins/modules/azure_rm_cosmosdbaccount_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "80461bffd0ad681f97b3eaafe9db453a700658748c02114d3128b8f87f7b79f2", + "name": "tests/integration/targets/setup_azure", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_sqlfirewallrule_info.py", + "name": "tests/integration/targets/setup_azure/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "71e6d450073de8c90623f4048d44bd6eabaa39c36031a9beba28171a53b302cd", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/azure_rm_availabilityset_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5210c3fbf5fd2f5b702cd82ba5cf7b44604231bebbe9f00a71ee71616a8e2e6b", + "name": "tests/integration/targets/azure_rm_mysqlserver", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_monitordiagnosticsetting.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a87a1032899109683876d6a6ce5eba1ee931f2c64442c0910d69242a05560b26", + "name": "tests/integration/targets/azure_rm_mysqlserver/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_autoscale.py", + "name": "tests/integration/targets/azure_rm_mysqlserver/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d70f6911bb558f59f68dcc61f42155c1f108526ed47e7ad3bd8f653ade1a4f8f", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabarmtemplate_info.py", + "name": "tests/integration/targets/azure_rm_mysqlserver/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8f48a0242d1d4246afa2a6c856e43023daee49ffbae58db30591733304d4c9c1", + "chksum_sha256": "2c74420c4bc9cc5d8af14406a1d97ea762c6b8afa4de8728a4a833b2e742cf41", "format": 1 }, { - "name": "plugins/modules/azure_rm_servicebussaspolicy.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "10d85532d9875ac3da016f15add256df6cf2cbb8a88d4a57ad316bce7df7a45c", + "name": "tests/integration/targets/azure_rm_mysqlserver/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_galleryimage.py", + "name": "tests/integration/targets/azure_rm_mysqlserver/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dff66513503b09036068848c5cc716f0047d15cafa59d063f833574948739db1", + "chksum_sha256": "743277ee9a1eda331e62acae9a94ba4820d4bef31de88a77008d62fdda27874c", "format": 1 }, { - "name": "plugins/modules/azure_rm_dnszone.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a9974fc3f305a83840b041b02158be7162a6c87c8fb3a3b909a2ac6255390668", + "name": "tests/integration/targets/azure_rm_adserviceprincipal", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_datalakestore.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "41a04e1e6cfc80c11eedcb66b8dd36d84a7484cd698a9e8ddc8354ecaf3a6ce7", + "name": "tests/integration/targets/azure_rm_adserviceprincipal/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_ipgroup.py", + "name": "tests/integration/targets/azure_rm_adserviceprincipal/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2aaffe067e785adc4ccb4a78a2a2d665ee6e2bd5a28b79f75e2be4695a1ce115", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_containerregistrywebhook.py", + "name": "tests/integration/targets/azure_rm_adserviceprincipal/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b911199637d90fb213eaf63e586745cfb8ab889af2f199340d0d4df59138362a", + "chksum_sha256": "528893af1cac01f38ab277aec0138b83c74b2576464d96eb7f3da330784edaff", "format": 1 }, { - "name": "plugins/modules/azure_rm_vpnsite.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6d818f5250f12c9dee0a78f01f853640c25a583e022f8358355e78076c5b49b8", + "name": "tests/integration/targets/azure_rm_adserviceprincipal/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_privateendpoint.py", + "name": "tests/integration/targets/azure_rm_adserviceprincipal/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9cf71bc67a11a058b6eac5f7c06c3a003ecce968f6fe09285f43dbd81f91fdf9", + "chksum_sha256": "bb43a07ea959812c8beca68d9e127bd236fbe5b7a32b984b8e715c7d97126860", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualnetworkgateway.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "59e1d99084af0027d2c970a9e6ab6088546f4768d151a045b70615cff47b05c3", + "name": "tests/integration/targets/azure_rm_containerregistry", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_postgresqldatabase.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e1d1f0a296460cb6a411cc926cff5476be07b16ced01f7b9a95e64802dacf9e2", + "name": "tests/integration/targets/azure_rm_containerregistry/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_iothubconsumergroup.py", + "name": "tests/integration/targets/azure_rm_containerregistry/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d6fc8dba8ecd841d908a4b1226fa0a186c270a9eb3e8a5a054692e56c621876", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_mysqlfirewallrule.py", + "name": "tests/integration/targets/azure_rm_containerregistry/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d012c884bd3e4f7880fee699b3b6c8210a1cc00c98a2166c68c8b7e6a052bc2", + "chksum_sha256": "ec1ff0ecb096def7880d4a1aab74cae1ee3e46dbdba9df7f476b7311ee64f2ab", "format": 1 }, { - "name": "plugins/modules/azure_rm_storageshare_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c30615415440ade0b39196ccd619a923cfce2162548c18c7edaec635f46e84e3", + "name": "tests/integration/targets/azure_rm_containerregistry/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_datalakestore_info.py", + "name": "tests/integration/targets/azure_rm_containerregistry/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97d431f9a54962aa76ee516a8d3f0e51215e832509dc605a6bca1ede20ec9cfb", + "chksum_sha256": "7eab7dde3b4ad416e882a673e1b671770c760c1d2ff97f9c21606a24bb3a7540", "format": 1 }, { - "name": "plugins/modules/azure_rm_rediscachefirewallrule.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1dd3dd187f650d1083a42a7576b7f9a9ba1b8b5960804a0dc71e33470b2c2d73", + "name": "tests/integration/targets/azure_rm_keyvault", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_containerregistry.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "781782bcf6811e28b975d35abb3892b96dbf168421891a06e352d02ac4c00569", + "name": "tests/integration/targets/azure_rm_keyvault/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_mysqlfirewallrule_info.py", + "name": "tests/integration/targets/azure_rm_keyvault/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c98b91e48ddf042f3fd0847c42b7d880fc00ed807437aa70d35ae1107ba1407", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_trafficmanagerprofile.py", + "name": "tests/integration/targets/azure_rm_keyvault/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4df5198ca3361e221f283b8d1cc1d26dbb3ea265422c76ebb8d6357ab6b4d4b6", + "chksum_sha256": "726101a2dd7238a8ff7f94fec489e5fcfd8bb0db10ecd074fa0686b2eb9d6d24", "format": 1 }, { - "name": "plugins/modules/azure_rm_apimanagementservice_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5447d18ab74149d3c2b05b5cc516392d367b11e71d059d29207f9a749a334f89", + "name": "tests/integration/targets/azure_rm_keyvault/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_aks_info.py", + "name": "tests/integration/targets/azure_rm_keyvault/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39e0afd38650dd8c802f4f405aa4f3469ddb0a741210b2c56ffe663fef2ce62c", + "chksum_sha256": "de8f88e9575ad797145737f6116de12c7443c09d4b9d6488a0d8a77747d564cf", "format": 1 }, { - "name": "plugins/modules/azure_rm_aksagentpool_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "92c6e3a0f537164ae87f3cf64dd071238a5c8349d7ca84a16826720fc5b82e44", + "name": "tests/integration/targets/azure_rm_virtualnetwork", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_notificationhub.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "025163a4ad192ec7b4ec14e8faf49b01e29a8a8f38cd8231aaddec9726f460bb", + "name": "tests/integration/targets/azure_rm_virtualnetwork/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_ddosprotectionplan.py", + "name": "tests/integration/targets/azure_rm_virtualnetwork/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5eb8ad5fe5b146e7b79f083f2f9747b1bc64432bc55660ac682e97e8235f023", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_lock.py", + "name": "tests/integration/targets/azure_rm_virtualnetwork/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "858b4a4357dd80fbefb9c62265d91f31019794c9077526f6703c95b5d7c077a3", + "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", "format": 1 }, { - "name": "plugins/modules/azure_rm_networkinterface_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "22a876dccd098bc68511e639f50b08e8a50ffd1dfa24704907beb9f0a96c3029", + "name": "tests/integration/targets/azure_rm_virtualnetwork/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_adserviceprincipal.py", + "name": "tests/integration/targets/azure_rm_virtualnetwork/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e141818fea5c223278d4709af5c6ae47cf4841aa0e7e823d84be8949b085d1c3", + "chksum_sha256": "e46b1abb1ab82874622d1821b564cee555be16ced454a9723f3cff45dcb5948c", "format": 1 }, { - "name": "plugins/modules/azure_rm_appserviceplan_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2feccbb74790330b291a4ab0f8bcf3d4ba44f5bd2c18490aff02c92f3d043e09", + "name": "tests/integration/targets/azure_rm_sqlserver", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_appgateway_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fbe1b90752ce94a33ab1c3e6771f90e4fe87d676e99819e15da631fe5fe2cea5", + "name": "tests/integration/targets/azure_rm_sqlserver/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_bastionhost_info.py", + "name": "tests/integration/targets/azure_rm_sqlserver/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dcdf18934767abd5f6912ce0bb9cbbff6954c79fab3998fdf9ea3c75f5f9d604", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_virtualmachinescaleset.py", + "name": "tests/integration/targets/azure_rm_sqlserver/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "425563f892c11a2e14fe22276c308af85268b2ef1a3c2b94e779a9e18dfe7786", + "chksum_sha256": "b497f92848d198221058a5f5aa42e37dc513f9d2a64f54b2ddc9029b80ab7219", "format": 1 }, { - "name": "plugins/modules/azure_rm_loganalyticsworkspace.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5f5d8fa3f00c30d80ce2427ccb7c9d8a00e78c255ecfc67fb1de5f37256c3418", + "name": "tests/integration/targets/azure_rm_sqlserver/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_monitorlogprofile.py", + "name": "tests/integration/targets/azure_rm_sqlserver/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0951e10121e28230e99e7a3143ce444c9bc4cbf8b7858033c6dd5d071e1ac579", + "chksum_sha256": "4b9b3011d1cd399cf58fc8749d467300f6a19f2105a9455c6cc385c2468c1b02", "format": 1 }, { - "name": "plugins/modules/azure_rm_privatednszone.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c4def272c347cc85f0e108b4392b69eabd6e9caf432cbb84b2acc902bd8a3f34", + "name": "tests/integration/targets/azure_rm_roledefinition", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_diskencryptionset_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "586109c40b10714b5280368db2802fca8d4fc87f797e2b0d5084bb5e7a4df3df", + "name": "tests/integration/targets/azure_rm_roledefinition/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/azure_rm_devtestlabpolicy.py", + "name": "tests/integration/targets/azure_rm_roledefinition/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0146075d793b46427030cb705c7db55a93b6402afe9401b04dfe56a1434dee26", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "plugins/modules/azure_rm_monitordiagnosticsetting_info.py", + "name": "tests/integration/targets/azure_rm_roledefinition/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3fa25b176b8c073c9435901c2c8455577e64a998c71b5c6a472ae1044f48bed9", + "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3", "format": 1 }, { - "name": "azure-pipelines.yml", + "name": "tests/integration/targets/azure_rm_roledefinition/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_roledefinition/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1f55cf75a25502f8322df2fc8640e52f85fed4459b8c26fee3c75295f9c45552", + "chksum_sha256": "821801ed627b59f6418e9073527531be7f66a7e6069cfd50df025e197af04485", "format": 1 }, { - "name": "tests", + "name": "tests/integration/targets/azure_rm_securitygroup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/utils", + "name": "tests/integration/targets/azure_rm_securitygroup/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/utils/ado", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/azure_rm_securitygroup/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/utils/ado/ado.sh", + "name": "tests/integration/targets/azure_rm_securitygroup/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d43591bdea6cbc13771abd458687415cadeb81242b5c706356e4554fb445e32", + "chksum_sha256": "a390a5b729f05cbb0f6d91d7d663389c81a571a34bd2e931dc56fcdaee025754", "format": 1 }, { - "name": "tests/utils/shippable", + "name": "tests/integration/targets/azure_rm_securitygroup/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/utils/shippable/timing.py", + "name": "tests/integration/targets/azure_rm_securitygroup/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e4906097dcc02406930229bf0a026f667327fbe11ea6b9763bc76b4c3e98be29", + "chksum_sha256": "09c95d217158fb888e0794bbfa0c39a501ace1c0686f0ee4c320bb0687e71bee", "format": 1 }, { - "name": "tests/utils/shippable/timing.sh", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f3f3cc03a997cdba719b0542fe668fc612451841cbe840ab36865f30aa54a1bd", + "name": "tests/integration/targets/azure_rm_backuppolicy", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/utils/shippable/check_matrix.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f4a38ad2db66b272075c37e9cca352fc7d5b69fe19e32adec0cdd74f91586fe6", + "name": "tests/integration/targets/azure_rm_backuppolicy/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/utils/shippable/sanity.sh", + "name": "tests/integration/targets/azure_rm_backuppolicy/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cd365c5bad1facb7e98cad97a20e34231f49fca169653ccd7d34bd955bd88f6", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/utils/shippable/cloud.sh", + "name": "tests/integration/targets/azure_rm_backuppolicy/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99db6946e47cf9e49ab2fccbe0aca8ffc9aaa0918fdc9e3ef543601c55a98713", + "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", "format": 1 }, { - "name": "tests/utils/shippable/shippable.sh", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "829380ef8b40f42a82696ada1168318856596f4e943bbb9a4f5cd6130bbce2af", + "name": "tests/integration/targets/azure_rm_backuppolicy/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/utils/shippable/azure.sh", + "name": "tests/integration/targets/azure_rm_backuppolicy/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99db6946e47cf9e49ab2fccbe0aca8ffc9aaa0918fdc9e3ef543601c55a98713", + "chksum_sha256": "26b1ed48d843898e1dc63a09a119c74ee83613ed2f0066e2971f3056eda0ee88", "format": 1 }, { - "name": "tests/config.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "410698cc625c851ec21f2ef8ea020cf7a353590d10a995a3c57eb52d4d8065fb", + "name": "tests/integration/targets/azure_rm_sshpublickey", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/lint", + "name": "tests/integration/targets/azure_rm_sshpublickey/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/lint/ignore-lint.txt", + "name": "tests/integration/targets/azure_rm_sshpublickey/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bea1480e79bf52af44c7d7b2b112aead789a54696c6ef6469f2dcd710ad2a47f", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/azure_rm_sshpublickey/aliases", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets", + "name": "tests/integration/targets/azure_rm_sshpublickey/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlserver", + "name": "tests/integration/targets/azure_rm_sshpublickey/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "56333300b98e7c24a4c8361ae59287062db7667a8d70fa9d9982fae2f6bb145c", + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlserver/meta", + "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlserver/meta/main.yml", + "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlserver/aliases", + "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b497f92848d198221058a5f5aa42e37dc513f9d2a64f54b2ddc9029b80ab7219", + "chksum_sha256": "11c35de489a3da87eb40a2ce00a80a9992fc89c3b3fdee710301ba9faacd332d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlserver/tasks", + "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlserver/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4b9b3011d1cd399cf58fc8749d467300f6a19f2105a9455c6cc385c2468c1b02", + "chksum_sha256": "5118cdd6e0f6afa96aec75b0208d11b45f3c8c533c77df13ab117b5292331094", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_image", + "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_image/meta", + "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_image/meta/main.yml", + "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_image/aliases", + "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fca45b39c1e6a21b8fb8e1b6c8f5954d8accf0bc6fa436361d75b014b36a8fd6", + "chksum_sha256": "20ed61d096d02ba8d900ce019b1762e22889c502a78e1d8716fe4a78ed8c5315", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_image/tasks", + "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_image/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f15012224b91b0dcb340a2dfcd3d360a36bf2ed291b88a4206914ac5db295466", + "chksum_sha256": "efdfeffba2b8c08435fb50245a8c29ee7ac7273a20a631abf82729ae5741e6ed", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_managementgroup", + "name": "tests/integration/targets/azure_rm_appserviceplan", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_managementgroup/meta", + "name": "tests/integration/targets/azure_rm_appserviceplan/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_managementgroup/meta/main.yml", + "name": "tests/integration/targets/azure_rm_appserviceplan/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_managementgroup/aliases", + "name": "tests/integration/targets/azure_rm_appserviceplan/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7fc1f0b30d75ba7b3a8f5a9a45a7703c06585edc0f3ce9231a9b2ca7a649864", + "chksum_sha256": "3d8b505b037b869206fe23e768d9d42e48dc8db7c83ac3023ec1be689261f907", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_managementgroup/tasks", + "name": "tests/integration/targets/azure_rm_appserviceplan/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_managementgroup/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_appserviceplan/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52b6ea89da7341d8977b8f1ac1fb530b48eba4831b6c5224b2c136c9bfa91ad7", + "chksum_sha256": "f3fd1981d472300a8b2044ffbd73e928a089c2d81b3c09d7d5dff19c5d6cd544", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszonelink", + "name": "tests/integration/targets/azure_rm_apimanagement", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszonelink/meta", + "name": "tests/integration/targets/azure_rm_apimanagement/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszonelink/meta/main.yml", + "name": "tests/integration/targets/azure_rm_apimanagement/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszonelink/aliases", + "name": "tests/integration/targets/azure_rm_apimanagement/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", + "chksum_sha256": "592e63285615e1fe4768ff5027ae6a96e4dea5c875e1127e14c393cfacbc44fb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszonelink/tasks", + "name": "tests/integration/targets/azure_rm_apimanagement/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszonelink/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_apimanagement/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe73403f7245a8d8d762b068cc62624999c45eea47a08d7c370685370d73a216", + "chksum_sha256": "169f954c7d4a5a375a80f3d3ddd3d224713bc9dd61d2d732247c752d1bc4297f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_deployment", + "name": "tests/integration/targets/azure_rm_adpassword", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_deployment/meta", + "name": "tests/integration/targets/azure_rm_adpassword/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_deployment/meta/main.yml", + "name": "tests/integration/targets/azure_rm_adpassword/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_deployment/aliases", + "name": "tests/integration/targets/azure_rm_adpassword/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11d8df93f7c7fb0bd35df23550ce55cea64300cbd7b3a1282927d49c53f53951", + "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_deployment/tasks", + "name": "tests/integration/targets/azure_rm_adpassword/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_deployment/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_adpassword/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d55d04096bc98a7e4b9423ce7a67bd90ff057d8f2597489e018095d8c7747b0", + "chksum_sha256": "b611592114d3a2e8e6da4246fb2408dd7e24ebf1950e63916af2fc2c7d1b8ffb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hostgroup", + "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hostgroup/meta", + "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hostgroup/meta/main.yml", + "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hostgroup/aliases", + "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver/aliases", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hostgroup/tasks", + "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hostgroup/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_postgresqlflexibleserver/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a11e09783bbddbc59c9ddb098a44d5e17aaac05fec0334ef225dd2d301651e17", + "chksum_sha256": "b6fa3f158220b7cd8d38e7a773ee15e4f9781e627df4e3a209142f6c430414f1", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adapplication", + "name": "tests/integration/targets/azure_rm_virtualmachineimage_info", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adapplication/meta", + "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adapplication/meta/main.yml", + "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adapplication/aliases", + "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40", + "chksum_sha256": "8eb6da86566844e8278692f99177c27f5e17dfc808484e9168d842ce4ea822b2", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adapplication/tasks", + "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adapplication/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b35d1ada403add1e0a23a265f11a6395959c863e48579a060b40ed7f4e2b8b66", + "chksum_sha256": "c1027dcaf3ce2f749a07c7b78ee56ff713901f0fa792e08ebfc2c31671426a1c", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitorlogprofile", + "name": "tests/integration/targets/azure_rm_containerregistrytag", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitorlogprofile/meta", + "name": "tests/integration/targets/azure_rm_containerregistrytag/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitorlogprofile/meta/main.yml", + "name": "tests/integration/targets/azure_rm_containerregistrytag/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitorlogprofile/aliases", + "name": "tests/integration/targets/azure_rm_containerregistrytag/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3", + "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitorlogprofile/tasks", + "name": "tests/integration/targets/azure_rm_containerregistrytag/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitorlogprofile/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_containerregistrytag/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "71fa19924e9ae73ca408e1fccec2a768f3b2fc113158c5718b7b870c081189f1", + "chksum_sha256": "c3f1c91c39a8986e9aaaaf4e0f2bd84796f20ede51d7868e74a37a7839d1759d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineextension", + "name": "tests/integration/targets/azure_rm_mariadbserver", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineextension/meta", + "name": "tests/integration/targets/azure_rm_mariadbserver/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineextension/meta/main.yml", + "name": "tests/integration/targets/azure_rm_mariadbserver/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineextension/aliases", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0fdd66037c00d326e8724db280f591414ae437954cdedeeebb4b455784fcb4d3", - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_virtualmachineextension/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_virtualmachineextension/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_mariadbserver/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e3cb1009bcddcf4db403356c71a3862d40d9978395362480795d87961229f8d", + "chksum_sha256": "0f1123b3696957f55774d4316a4461182998975a0db1f960ef289b20b5e926c7", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineextension/files", + "name": "tests/integration/targets/azure_rm_mariadbserver/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineextension/files/test-public-settings.json", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1063a36dc41ca530af7839c69ec22f2b92447be4c3b41e90429c970b23d9116b", - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_virtualmachineextension/files/test-protected-settings.json", + "name": "tests/integration/targets/azure_rm_mariadbserver/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "436711afe43e0c31f515a016fa56e64c70f1df35502725327b8c703773d4823b", + "chksum_sha256": "b829d34d571be3c848284902c00755a940e2a629115fbbd3a78af1ce018a0ede", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationrunbook", + "name": "tests/integration/targets/azure_rm_hdinsightcluster", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationrunbook/meta", + "name": "tests/integration/targets/azure_rm_hdinsightcluster/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationrunbook/meta/main.yml", + "name": "tests/integration/targets/azure_rm_hdinsightcluster/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationrunbook/aliases", + "name": "tests/integration/targets/azure_rm_hdinsightcluster/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "522c2e1148926193596b31fa7cf086b9f57e17c7028abc638a2b6f5bb9269850", + "chksum_sha256": "dffdf5ca6061cf1a43744d6b7e0bb18a4020eed3f693702082b2314f982c65a6", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationrunbook/tasks", + "name": "tests/integration/targets/azure_rm_hdinsightcluster/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationrunbook/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_hdinsightcluster/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a1368da2abfb774ea5e3fd1a9238e9fbadbbc6fb1a93c00685bdc1d966e401b4", + "chksum_sha256": "2a0464f133b840983fad3fa552279ac8aca4a07023877e84bd273e8bde440f65", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_iothub", + "name": "tests/integration/targets/azure_rm_routetable", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_iothub/meta", + "name": "tests/integration/targets/azure_rm_routetable/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_iothub/meta/main.yml", + "name": "tests/integration/targets/azure_rm_routetable/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_iothub/aliases", + "name": "tests/integration/targets/azure_rm_routetable/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d4097a5a2543084f3eea11259e299ba87ade8dc8995e5745358931356bee79f", + "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_iothub/tasks", + "name": "tests/integration/targets/azure_rm_routetable/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_iothub/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_routetable/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e5e67ce46e6ae0d5e38dbc0526e3140c3f1f3d978883736c4c84e0732042dbf", + "chksum_sha256": "fc81f5b6e7fae63d14a55e7c1c749a4a3d153b41a855118e814b3f2643904c14", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultkey", + "name": "tests/integration/targets/azure_rm_vmbackuppolicy", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultkey/meta", + "name": "tests/integration/targets/azure_rm_vmbackuppolicy/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultkey/meta/main.yml", + "name": "tests/integration/targets/azure_rm_vmbackuppolicy/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultkey/aliases", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "36614727374728e26b5686e9fac66641e5b9c268b6945f2dcd1b4a9c4d2232c3", - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_keyvaultkey/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_keyvaultkey/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_vmbackuppolicy/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a2de112faff356ffd7328876a499692420544b0558695813205740517ddda32", + "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultkey/lookup_plugins", + "name": "tests/integration/targets/azure_rm_vmbackuppolicy/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultkey/lookup_plugins/azure_service_principal_attribute.py", + "name": "tests/integration/targets/azure_rm_vmbackuppolicy/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ecf5403290d75ebf93dd07c1a0d1ec251482cde7952d5fc4c1f51ecde936e804", + "chksum_sha256": "e990393d47f344ab98b507415273d6ec89117b52b4feba04783ab07d792e7243", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnszone", + "name": "tests/integration/targets/azure_rm_rediscache", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnszone/meta", + "name": "tests/integration/targets/azure_rm_rediscache/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnszone/meta/main.yml", + "name": "tests/integration/targets/azure_rm_rediscache/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnszone/aliases", + "name": "tests/integration/targets/azure_rm_rediscache/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1af368a225674fcae08ea809c4dc605f03bc0334b44a9b17dfab0dfe49d93ac6", + "chksum_sha256": "5ba0bf8a7bf29813d54b53fd7c3e65698ee5f802eb2ccf76c1707680acc07f17", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnszone/tasks", + "name": "tests/integration/targets/azure_rm_rediscache/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnszone/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_rediscache/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b03603dc5bddfda055b5dfa51d9c769881822cd95a0953dfe82ef9afd446926a", + "chksum_sha256": "60978e58b15da724fb1f16447071e7b33add290150dfbdd4173900c4edda9a91", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_routetable", + "name": "tests/integration/targets/azure_rm_cognitivesearch", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_routetable/meta", + "name": "tests/integration/targets/azure_rm_cognitivesearch/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_routetable/meta/main.yml", + "name": "tests/integration/targets/azure_rm_cognitivesearch/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_routetable/aliases", + "name": "tests/integration/targets/azure_rm_cognitivesearch/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", + "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_routetable/tasks", + "name": "tests/integration/targets/azure_rm_cognitivesearch/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_routetable/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_cognitivesearch/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc81f5b6e7fae63d14a55e7c1c749a4a3d153b41a855118e814b3f2643904c14", + "chksum_sha256": "e3712847b582b6a3a3f461055963ce51034e160b1e174d06b8b8f6eeecd4bc19", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roledefinition", + "name": "tests/integration/targets/azure_rm_virtualmachinesize_info", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roledefinition/meta", + "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roledefinition/meta/main.yml", + "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roledefinition/aliases", + "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3", + "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roledefinition/tasks", + "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roledefinition/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "821801ed627b59f6418e9073527531be7f66a7e6069cfd50df025e197af04485", + "chksum_sha256": "6684f96227d75c363a588e1be85cc7ce53025d7e13844638d100781003901db6", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhubconnection", + "name": "tests/integration/targets/azure_rm_cosmosdbaccount", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhubconnection/meta", + "name": "tests/integration/targets/azure_rm_cosmosdbaccount/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhubconnection/meta/main.yml", + "name": "tests/integration/targets/azure_rm_cosmosdbaccount/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhubconnection/aliases", + "name": "tests/integration/targets/azure_rm_cosmosdbaccount/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", + "chksum_sha256": "d9b370414fbcd599ba1e1fa7adb52887e0df75d2ffce2a609bd5af743b02f600", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhubconnection/tasks", + "name": "tests/integration/targets/azure_rm_cosmosdbaccount/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhubconnection/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_cosmosdbaccount/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d37e8ad199f86a0ff21d8af2a5eb5555b9cc8f8f2ecd7b6597b0c9645696050", + "chksum_sha256": "e44d0c16980fee5a6cca7dc10c26e4bb487b761eb6aa87c5cee17e527c37453d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_azurefirewall", + "name": "tests/integration/targets/azure_rm_publicipaddress", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_azurefirewall/meta", + "name": "tests/integration/targets/azure_rm_publicipaddress/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_azurefirewall/meta/main.yml", + "name": "tests/integration/targets/azure_rm_publicipaddress/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_azurefirewall/aliases", + "name": "tests/integration/targets/azure_rm_publicipaddress/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c00350cca0b02532fa9ae31b5fdf0d5b963615b521197b71ac4cc024aac9d037", + "chksum_sha256": "ed3159c0b56e6e42548ed58456e5304d48aea0b4e3a0999591f863ae79b225ba", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_azurefirewall/tasks", + "name": "tests/integration/targets/azure_rm_publicipaddress/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_azurefirewall/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_publicipaddress/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99e09441ca9bb38a0844a3421ebdd6d6e496690d6aa853f111ec79d73108bef1", + "chksum_sha256": "0240ae96de6dabce7cd47a7793fb7a263717ea1b2e28423f47ba0c75333ed8cd", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webapp", + "name": "tests/integration/targets/azure_rm_privatelinkservice", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webapp/meta", + "name": "tests/integration/targets/azure_rm_privatelinkservice/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webapp/meta/main.yml", + "name": "tests/integration/targets/azure_rm_privatelinkservice/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webapp/aliases", + "name": "tests/integration/targets/azure_rm_privatelinkservice/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b6fa7694979e088e4b068016381f37a603045a395e3b8c660032f4008257d5", + "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webapp/tasks", + "name": "tests/integration/targets/azure_rm_privatelinkservice/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webapp/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_privatelinkservice/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c075ffff039ce42e02bf19ae7081bbfaa590fe56d36c10fe5552ade5e8d9964", + "chksum_sha256": "26d7dc158898d9dbc017b66108ef335ff0b4a5ba01d2566cecbec6ad767763be", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aduser", + "name": "tests/integration/targets/azure_rm_storageshare", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aduser/meta", + "name": "tests/integration/targets/azure_rm_storageshare/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aduser/meta/main.yml", + "name": "tests/integration/targets/azure_rm_storageshare/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aduser/aliases", + "name": "tests/integration/targets/azure_rm_storageshare/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1658975f0508387cde4cda499d7eb9524e31bc2f02cc49d6483d7e210d991234", + "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aduser/tasks", + "name": "tests/integration/targets/azure_rm_storageshare/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aduser/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_storageshare/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d5d5fecd3bd106cc7e4ea4412f28e287297cbd7f7c5699f4ed5e27c60d25610", + "chksum_sha256": "8428a40d80a569d0c5ac929641e4befc59b86cf7c7cc4da72add3b5eb4570202", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkpeering", + "name": "tests/integration/targets/azure_rm_loadbalancer", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/meta", + "name": "tests/integration/targets/azure_rm_loadbalancer/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/meta/main.yml", + "name": "tests/integration/targets/azure_rm_loadbalancer/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/aliases", + "name": "tests/integration/targets/azure_rm_loadbalancer/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ee3b904aa8ab8d0a7e47983927157b420c195fe1d8606de015158339e7824a43", + "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/tasks", + "name": "tests/integration/targets/azure_rm_loadbalancer/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkpeering/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_loadbalancer/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2fb7b589b1c4bd6ed3778e220fe5be14d351534db03c1473e45f03fd181cf0ac", + "chksum_sha256": "6b6dc390a0291155225b4305560c255bf3a36be60542213e2ad2fcc6fb9daf94", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cosmosdbaccount", + "name": "tests/integration/targets/azure_rm_virtualhubconnection", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cosmosdbaccount/meta", + "name": "tests/integration/targets/azure_rm_virtualhubconnection/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cosmosdbaccount/meta/main.yml", + "name": "tests/integration/targets/azure_rm_virtualhubconnection/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cosmosdbaccount/aliases", + "name": "tests/integration/targets/azure_rm_virtualhubconnection/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d9b370414fbcd599ba1e1fa7adb52887e0df75d2ffce2a609bd5af743b02f600", + "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cosmosdbaccount/tasks", + "name": "tests/integration/targets/azure_rm_virtualhubconnection/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cosmosdbaccount/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_virtualhubconnection/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e44d0c16980fee5a6cca7dc10c26e4bb487b761eb6aa87c5cee17e527c37453d", + "chksum_sha256": "2d37e8ad199f86a0ff21d8af2a5eb5555b9cc8f8f2ecd7b6597b0c9645696050", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loadbalancer", + "name": "tests/integration/targets/azure_rm_privatednszonelink", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loadbalancer/meta", + "name": "tests/integration/targets/azure_rm_privatednszonelink/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loadbalancer/meta/main.yml", + "name": "tests/integration/targets/azure_rm_privatednszonelink/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loadbalancer/aliases", + "name": "tests/integration/targets/azure_rm_privatednszonelink/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420", + "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loadbalancer/tasks", + "name": "tests/integration/targets/azure_rm_privatednszonelink/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loadbalancer/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_privatednszonelink/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6b6dc390a0291155225b4305560c255bf3a36be60542213e2ad2fcc6fb9daf94", + "chksum_sha256": "fe73403f7245a8d8d762b068cc62624999c45eea47a08d7c370685370d73a216", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks", + "name": "tests/integration/targets/azure_rm_virtualmachinescaleset", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks/meta", + "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks/meta/main.yml", + "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks/aliases", + "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea124e6a615561c87b4dd84d829b1eb1d2bd1658d1caf6211019eeda3ffc8136", + "chksum_sha256": "5510a946bf7e1d1ad196eaa73474176b122ae491702a99f9160ad1d554fc08bf", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks/tasks", + "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks/tasks/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8e23e36b5f9691d484992b8472b963aa9265f9e12c2b5eace4da7b532d66c3db", - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks/tasks/test_async.yml", + "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7047ff5651f3faf6ac16b87e5434fd16dae5a620b45ed55723a208b27b9d4bc", + "chksum_sha256": "2b560766f54992fab349101fb4528f9bf12022337f573ad7f8bc3a9b80e9dff7", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks/tasks/test_shared.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "347f0eb7c19d4e9cb7070d4eff76a456f649df4792a590d75b0258643d1c4282", + "name": "tests/integration/targets/azure_rm_natgateway", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks/defaults", + "name": "tests/integration/targets/azure_rm_natgateway/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks/defaults/main.yml", + "name": "tests/integration/targets/azure_rm_natgateway/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e74506a8cfbf91887befefae0b179455f0071b5d904b30c00b67897373123b23", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks/templates", + "name": "tests/integration/targets/azure_rm_natgateway/aliases", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "21442459796e3c03ab3c6461c8251810f5545ff2320c4c814cce8b8c520e615c", + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_natgateway/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_multiplemanageddisks/templates/disk_config.j2", + "name": "tests/integration/targets/azure_rm_natgateway/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d52e27205862487e08375c08ac7c8aa27c059db63c3fb83ebb8dd8eb0e7e11f6", + "chksum_sha256": "b0c6592fbe22d552060e636b988771db2fe2e14e50462d4ab5589a8f3f4f8e9f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualwan", + "name": "tests/integration/targets/azure_rm_deployment", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualwan/meta", + "name": "tests/integration/targets/azure_rm_deployment/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualwan/meta/main.yml", + "name": "tests/integration/targets/azure_rm_deployment/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualwan/aliases", + "name": "tests/integration/targets/azure_rm_deployment/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", + "chksum_sha256": "11d8df93f7c7fb0bd35df23550ce55cea64300cbd7b3a1282927d49c53f53951", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualwan/tasks", + "name": "tests/integration/targets/azure_rm_deployment/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualwan/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_deployment/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ab3ddca93908d5c847cccd627d21e6dd17c1d4c24cfe0f06331431717be8bfd", + "chksum_sha256": "7d55d04096bc98a7e4b9423ce7a67bd90ff057d8f2597489e018095d8c7747b0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster", + "name": "tests/integration/targets/azure_rm_containerinstance", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/meta", + "name": "tests/integration/targets/azure_rm_containerinstance/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/meta/main.yml", + "name": "tests/integration/targets/azure_rm_containerinstance/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/aliases", + "name": "tests/integration/targets/azure_rm_containerinstance/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "20ed61d096d02ba8d900ce019b1762e22889c502a78e1d8716fe4a78ed8c5315", + "chksum_sha256": "059ec72ab54682d34b109880aa48f5b5b702d120042153371442c7293c011f31", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/tasks", + "name": "tests/integration/targets/azure_rm_containerinstance/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_openshiftmanagedcluster/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_containerinstance/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3265ddca3e6f3be968be4b2d516c453c1c305f010ef7f1ab4deb0d9d70bb03eb", + "chksum_sha256": "d5d577eb39a4533fea27bd3240b4ffaa278f64b5f56b5c6375c0d1e73b7ba382", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_trafficmanagerprofile", + "name": "tests/integration/targets/azure_rm_virtualwan", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/meta", + "name": "tests/integration/targets/azure_rm_virtualwan/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/meta/main.yml", + "name": "tests/integration/targets/azure_rm_virtualwan/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/aliases", + "name": "tests/integration/targets/azure_rm_virtualwan/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b34b028873420b7fdba3b5e4f0b3a1283d3879fcf1ee2d91dbe8a732651ca04a", + "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/tasks", + "name": "tests/integration/targets/azure_rm_virtualwan/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_virtualwan/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d48b39bfcd3c3f106af3c9eedcc4005c40eb6642ce232ae4f834c93875ee74e9", + "chksum_sha256": "9ab3ddca93908d5c847cccd627d21e6dd17c1d4c24cfe0f06331431717be8bfd", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_natgateway", + "name": "tests/integration/targets/inventory_azure", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_natgateway/meta", + "name": "tests/integration/targets/inventory_azure/playbooks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_natgateway/meta/main.yml", + "name": "tests/integration/targets/inventory_azure/playbooks/vars.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "23fff20fb969471888915a24760b7a90723a30e3e0e6b7c7745864470c898027", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_natgateway/aliases", + "name": "tests/integration/targets/inventory_azure/playbooks/create_inventory_config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21442459796e3c03ab3c6461c8251810f5545ff2320c4c814cce8b8c520e615c", + "chksum_sha256": "96709396441733bc7e0001d045f1f825170489df8eae9cfdb677722f70e034be", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_natgateway/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/inventory_azure/playbooks/setup.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e95740d1317dda6c7a610a482d33b29e2035293ff74e10a2bcc0f2997ba85430", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_natgateway/tasks/main.yml", + "name": "tests/integration/targets/inventory_azure/playbooks/test_inventory.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b0c6592fbe22d552060e636b988771db2fe2e14e50462d4ab5589a8f3f4f8e9f", + "chksum_sha256": "ec64466973b4afce9659407d0b56ac133028b3965a06bc27ebbe227cd5da8b11", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appgateway", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/inventory_azure/playbooks/empty_inventory_config.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "86545d143dd65f74a63218943018bfad054837e6c813fd396442957c89e87a62", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appgateway/meta", + "name": "tests/integration/targets/inventory_azure/playbooks/teardown.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1f44c8ef223d0219855c453cd859b44b7cd4b2fa10fb1f8cacac75e020975fc8", + "format": 1 + }, + { + "name": "tests/integration/targets/inventory_azure/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appgateway/meta/main.yml", + "name": "tests/integration/targets/inventory_azure/templates/basic.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "3f99d3d1c0b4f896b1f43477667fc744c2cd2d38471c5bbc9287773b57682628", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appgateway/aliases", + "name": "tests/integration/targets/inventory_azure/templates/basic2.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21442459796e3c03ab3c6461c8251810f5545ff2320c4c814cce8b8c520e615c", + "chksum_sha256": "758f6dfaa158a3601eb9cd986357f1a40a04071ad62f3ba613002ffde00d6018", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appgateway/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/inventory_azure/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "203fe16581a305486f7d5a2feafad324ed5515a96c26b4f4d84ab34a1cdcb6a3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appgateway/tasks/main.yml", + "name": "tests/integration/targets/inventory_azure/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d8ffa4ec62e8b5bcf85c4c36004a71daf4b8bf455238a1b6a8a1749fd64bd4d", + "chksum_sha256": "e2e2f39006f1e6b83660c469a9c29e1dfb17b99cca9caa124626e14cd0658a0b", + "format": 1 + }, + { + "name": "tests/integration/targets/inventory_azure/test.azure_rm.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_trafficmanagerprofile", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appgateway/files", + "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appgateway/files/cert3b64.txt", + "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1375dc6f493fb760c6087c4cdd62c4ea898887070ad17dc84196b3d6ed0545ec", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appgateway/files/cert1.txt", + "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7637ce7f36cca366294688f612f6456714088cca19583ae7e9475e572d85f4f5", + "chksum_sha256": "b34b028873420b7fdba3b5e4f0b3a1283d3879fcf1ee2d91dbe8a732651ca04a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appgateway/files/cert2.txt", + "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_trafficmanagerprofile/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e4dc34faa2e8e94cd385be73c33a849f452dd57d061a8aec118e6d391e46bbc0", + "chksum_sha256": "65beb0620dd28c47587519e4bb5eed48d9e4b66979521bc9cc88153702829b5e", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinescaleset", + "name": "tests/integration/targets/azure_rm_image", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/meta", + "name": "tests/integration/targets/azure_rm_image/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/meta/main.yml", + "name": "tests/integration/targets/azure_rm_image/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/aliases", + "name": "tests/integration/targets/azure_rm_image/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5510a946bf7e1d1ad196eaa73474176b122ae491702a99f9160ad1d554fc08bf", + "chksum_sha256": "fca45b39c1e6a21b8fb8e1b6c8f5954d8accf0bc6fa436361d75b014b36a8fd6", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/tasks", + "name": "tests/integration/targets/azure_rm_image/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinescaleset/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_image/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "088fc01b37760ce34fafbf49d9cad124a44df1c8390c23c58480447c275bb9a5", + "chksum_sha256": "f15012224b91b0dcb340a2dfcd3d360a36bf2ed291b88a4206914ac5db295466", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_datalakestore", + "name": "tests/integration/targets/azure_rm_multiplemanageddisks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_datalakestore/meta", + "name": "tests/integration/targets/azure_rm_multiplemanageddisks/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_datalakestore/meta/main.yml", + "name": "tests/integration/targets/azure_rm_multiplemanageddisks/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_datalakestore/aliases", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_datalakestore/tasks", + "name": "tests/integration/targets/azure_rm_multiplemanageddisks/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_datalakestore/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_multiplemanageddisks/templates/disk_config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d7c9df4757ded6e5d8fdb419854a55eb85d7782884e81548d299a795998daa6", + "chksum_sha256": "d52e27205862487e08375c08ac7c8aa27c059db63c3fb83ebb8dd8eb0e7e11f6", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_functionapp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/azure_rm_multiplemanageddisks/aliases", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ea124e6a615561c87b4dd84d829b1eb1d2bd1658d1caf6211019eeda3ffc8136", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_functionapp/meta", + "name": "tests/integration/targets/azure_rm_multiplemanageddisks/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_functionapp/meta/main.yml", + "name": "tests/integration/targets/azure_rm_multiplemanageddisks/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "e74506a8cfbf91887befefae0b179455f0071b5d904b30c00b67897373123b23", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_functionapp/aliases", + "name": "tests/integration/targets/azure_rm_multiplemanageddisks/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_multiplemanageddisks/tasks/test_shared.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", + "chksum_sha256": "347f0eb7c19d4e9cb7070d4eff76a456f649df4792a590d75b0258643d1c4282", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_functionapp/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/azure_rm_multiplemanageddisks/tasks/test_async.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c7047ff5651f3faf6ac16b87e5434fd16dae5a620b45ed55723a208b27b9d4bc", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_functionapp/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_multiplemanageddisks/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a5d18ded0b871348c349b69152916bc7b243670fdc7ec9a2f8ab479ce589e390", + "chksum_sha256": "8e23e36b5f9691d484992b8472b963aa9265f9e12c2b5eace4da7b532d66c3db", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subnet", + "name": "tests/integration/targets/azure_rm_manageddisk", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subnet/meta", + "name": "tests/integration/targets/azure_rm_manageddisk/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subnet/meta/main.yml", + "name": "tests/integration/targets/azure_rm_manageddisk/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subnet/aliases", + "name": "tests/integration/targets/azure_rm_manageddisk/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", + "chksum_sha256": "b79d487ac5f66f90cfba1e03eb40daf31086e77447861b1cf4aeceee77d9745b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subnet/tasks", + "name": "tests/integration/targets/azure_rm_manageddisk/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subnet/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_manageddisk/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6da3c97478624fb4d675d4787caedba75a8b159228bc39d6fccdd3db6a333c78", + "chksum_sha256": "c8decdddddd8660e19da01320399ff9e5216c7733d9c755a9f812f81068f7ca5", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ipgroup", + "name": "tests/integration/targets/azure_rm_hostgroup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ipgroup/meta", + "name": "tests/integration/targets/azure_rm_hostgroup/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ipgroup/meta/main.yml", + "name": "tests/integration/targets/azure_rm_hostgroup/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ipgroup/aliases", + "name": "tests/integration/targets/azure_rm_hostgroup/aliases", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ipgroup/tasks", + "name": "tests/integration/targets/azure_rm_hostgroup/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ipgroup/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_hostgroup/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2d66c35aafd2720cb487010156156302c28f3cd0e20fcfbed1a98d2ed42601f", + "chksum_sha256": "a11e09783bbddbc59c9ddb098a44d5e17aaac05fec0334ef225dd2d301651e17", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adserviceprincipal", + "name": "tests/integration/targets/azure_rm_azurefirewall", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adserviceprincipal/meta", + "name": "tests/integration/targets/azure_rm_azurefirewall/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adserviceprincipal/meta/main.yml", + "name": "tests/integration/targets/azure_rm_azurefirewall/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adserviceprincipal/aliases", + "name": "tests/integration/targets/azure_rm_azurefirewall/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "528893af1cac01f38ab277aec0138b83c74b2576464d96eb7f3da330784edaff", + "chksum_sha256": "c00350cca0b02532fa9ae31b5fdf0d5b963615b521197b71ac4cc024aac9d037", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adserviceprincipal/tasks", + "name": "tests/integration/targets/azure_rm_azurefirewall/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adserviceprincipal/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_azurefirewall/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a0a40666b1bd4ba719d5da58b623587b330007a776cac80dcd1d55df48a34ad", + "chksum_sha256": "99e09441ca9bb38a0844a3421ebdd6d6e496690d6aa853f111ec79d73108bef1", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatelinkservice", + "name": "tests/integration/targets/azure_rm_firewallpolicy", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatelinkservice/meta", + "name": "tests/integration/targets/azure_rm_firewallpolicy/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatelinkservice/meta/main.yml", + "name": "tests/integration/targets/azure_rm_firewallpolicy/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatelinkservice/aliases", + "name": "tests/integration/targets/azure_rm_firewallpolicy/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", + "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatelinkservice/tasks", + "name": "tests/integration/targets/azure_rm_firewallpolicy/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatelinkservice/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_firewallpolicy/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26d7dc158898d9dbc017b66108ef335ff0b4a5ba01d2566cecbec6ad767763be", + "chksum_sha256": "83fbfafaa9f1fc5fddcfa245b6911f0e659bbe7ec05431f59ed455b2b7b0298c", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_workspace", + "name": "tests/integration/targets/azure_rm_ipgroup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_workspace/meta", + "name": "tests/integration/targets/azure_rm_ipgroup/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_workspace/meta/main.yml", + "name": "tests/integration/targets/azure_rm_ipgroup/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_workspace/aliases", + "name": "tests/integration/targets/azure_rm_ipgroup/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08cf46c06f61ba50ecd182f45dfcf2ad7529f1df439d0ca713a8ceba58e14c99", + "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_workspace/tasks", + "name": "tests/integration/targets/azure_rm_ipgroup/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_workspace/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_ipgroup/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7ce589f76321d7c707ac86920720af5574f0d3e3685ef6c9aec9987393a09172", + "chksum_sha256": "b2d66c35aafd2720cb487010156156302c28f3cd0e20fcfbed1a98d2ed42601f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlmanagedinstance", + "name": "tests/integration/targets/azure_rm_cdnprofile", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/meta", + "name": "tests/integration/targets/azure_rm_cdnprofile/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/meta/main.yml", + "name": "tests/integration/targets/azure_rm_cdnprofile/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/aliases", + "name": "tests/integration/targets/azure_rm_cdnprofile/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d19280a8d5d5c2523536ea5aed2c5a14d1b19cc49f3f21974ca3e9a9921bb7cd", + "chksum_sha256": "d922663ea733e96e4da9178ebcd4baa17435a011302f3d609f7391e651d119f9", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/tasks", + "name": "tests/integration/targets/azure_rm_cdnprofile/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_sqlmanagedinstance/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_cdnprofile/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "561193b252168d2eca301ab2c0f673e1a99acc2c807b9f9e8679f1e3b7058d5e", + "chksum_sha256": "b9116be95e99a7a4650f95f59f2832c4c71c3ef74ed2b6362afea6eb5c57438c", "format": 1 }, { - "name": "tests/integration/targets/inventory_azure", + "name": "tests/integration/targets/azure_rm_publicipprefix", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory_azure/runme.sh", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "203fe16581a305486f7d5a2feafad324ed5515a96c26b4f4d84ab34a1cdcb6a3", - "format": 1 - }, - { - "name": "tests/integration/targets/inventory_azure/playbooks", + "name": "tests/integration/targets/azure_rm_publicipprefix/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory_azure/playbooks/create_inventory_config.yml", + "name": "tests/integration/targets/azure_rm_publicipprefix/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96709396441733bc7e0001d045f1f825170489df8eae9cfdb677722f70e034be", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/inventory_azure/playbooks/empty_inventory_config.yml", + "name": "tests/integration/targets/azure_rm_publicipprefix/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86545d143dd65f74a63218943018bfad054837e6c813fd396442957c89e87a62", + "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", "format": 1 }, { - "name": "tests/integration/targets/inventory_azure/playbooks/teardown.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1f44c8ef223d0219855c453cd859b44b7cd4b2fa10fb1f8cacac75e020975fc8", + "name": "tests/integration/targets/azure_rm_publicipprefix/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory_azure/playbooks/setup.yml", + "name": "tests/integration/targets/azure_rm_publicipprefix/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e95740d1317dda6c7a610a482d33b29e2035293ff74e10a2bcc0f2997ba85430", + "chksum_sha256": "edf0f4922b32fc3156d9efabdd927eecb0dc8fbc826a0380e63b024b4e02c2fb", "format": 1 }, { - "name": "tests/integration/targets/inventory_azure/playbooks/vars.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "23fff20fb969471888915a24760b7a90723a30e3e0e6b7c7745864470c898027", + "name": "tests/integration/targets/azure_rm_gallery", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory_azure/playbooks/test_inventory.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "40807db8218dfb3bc6b2f926c7c0ee573ddd6f6ac5b7eb3aa4cd8d013195639b", + "name": "tests/integration/targets/azure_rm_gallery/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory_azure/test.azure_rm.yml", + "name": "tests/integration/targets/azure_rm_gallery/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/inventory_azure/aliases", + "name": "tests/integration/targets/azure_rm_gallery/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2e2f39006f1e6b83660c469a9c29e1dfb17b99cca9caa124626e14cd0658a0b", + "chksum_sha256": "e676d2331077a7a453c2694fef48b0b56195d00e5a1009e3f668a7e174abd16b", "format": 1 }, { - "name": "tests/integration/targets/inventory_azure/templates", + "name": "tests/integration/targets/azure_rm_gallery/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/inventory_azure/templates/basic.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3f99d3d1c0b4f896b1f43477667fc744c2cd2d38471c5bbc9287773b57682628", - "format": 1 - }, - { - "name": "tests/integration/targets/inventory_azure/templates/basic2.yml", + "name": "tests/integration/targets/azure_rm_gallery/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "758f6dfaa158a3601eb9cd986357f1a40a04071ad62f3ba613002ffde00d6018", + "chksum_sha256": "7d4ccb5c3257f92a672129322d603c601bcdde23ed2828b0a4e18a610545f17e", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vmbackuppolicy", + "name": "tests/integration/targets/azure_rm_registrationdefinition", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vmbackuppolicy/meta", + "name": "tests/integration/targets/azure_rm_registrationdefinition/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vmbackuppolicy/meta/main.yml", + "name": "tests/integration/targets/azure_rm_registrationdefinition/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vmbackuppolicy/aliases", + "name": "tests/integration/targets/azure_rm_registrationdefinition/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420", + "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vmbackuppolicy/tasks", + "name": "tests/integration/targets/azure_rm_registrationdefinition/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vmbackuppolicy/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_registrationdefinition/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e990393d47f344ab98b507415273d6ec89117b52b4feba04783ab07d792e7243", + "chksum_sha256": "b1eafe0d8ad74c931f977ad6bf378546181d7c65405504f2a68d515d453f465d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_firewallpolicy", + "name": "tests/integration/targets/azure_rm_dnsrecordset", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_firewallpolicy/meta", + "name": "tests/integration/targets/azure_rm_dnsrecordset/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_firewallpolicy/meta/main.yml", + "name": "tests/integration/targets/azure_rm_dnsrecordset/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_firewallpolicy/aliases", + "name": "tests/integration/targets/azure_rm_dnsrecordset/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", + "chksum_sha256": "36614727374728e26b5686e9fac66641e5b9c268b6945f2dcd1b4a9c4d2232c3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_firewallpolicy/tasks", + "name": "tests/integration/targets/azure_rm_dnsrecordset/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_firewallpolicy/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_dnsrecordset/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83fbfafaa9f1fc5fddcfa245b6911f0e659bbe7ec05431f59ed455b2b7b0298c", + "chksum_sha256": "9d766be151f93042b7018bd39ac79b987e66389613ce426a70d5683952b5a841", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resource", + "name": "tests/integration/targets/azure_rm_privatednsrecordset", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resource/meta", + "name": "tests/integration/targets/azure_rm_privatednsrecordset/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resource/meta/main.yml", + "name": "tests/integration/targets/azure_rm_privatednsrecordset/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resource/aliases", + "name": "tests/integration/targets/azure_rm_privatednsrecordset/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b9685232ad3eab40ee59426a3dd04a8f71719dbfa1d6becb498bb416c8d1ff1c", + "chksum_sha256": "36614727374728e26b5686e9fac66641e5b9c268b6945f2dcd1b4a9c4d2232c3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resource/tasks", + "name": "tests/integration/targets/azure_rm_privatednsrecordset/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resource/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_privatednsrecordset/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e51cbf401d0da7fb038fade492b102a3493b57c0c0e4f9ca927d726db890c4df", + "chksum_sha256": "1fc82f73aab3fbd25c62ca6e740a796a286df28c3de2cc6d084619cdb7fd12eb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adpassword", + "name": "tests/integration/targets/azure_rm_automationrunbook", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adpassword/meta", + "name": "tests/integration/targets/azure_rm_automationrunbook/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adpassword/meta/main.yml", + "name": "tests/integration/targets/azure_rm_automationrunbook/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adpassword/aliases", + "name": "tests/integration/targets/azure_rm_automationrunbook/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40", + "chksum_sha256": "522c2e1148926193596b31fa7cf086b9f57e17c7028abc638a2b6f5bb9269850", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adpassword/tasks", + "name": "tests/integration/targets/azure_rm_automationrunbook/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adpassword/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_automationrunbook/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "448a3e37f44ca7e199c6184fedaf40e24a648ed1b1b2763b40d5c34e2763adfc", + "chksum_sha256": "a1368da2abfb774ea5e3fd1a9238e9fbadbbc6fb1a93c00685bdc1d966e401b4", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_diskencryptionset", + "name": "tests/integration/targets/azure_rm_aduser", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_diskencryptionset/meta", + "name": "tests/integration/targets/azure_rm_aduser/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_diskencryptionset/meta/main.yml", + "name": "tests/integration/targets/azure_rm_aduser/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_diskencryptionset/aliases", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_diskencryptionset/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_diskencryptionset/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_aduser/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a0a7e26e52f22c56e37dcc3154036297160820fe9bfdc27f6b5fb5811e84e9b", + "chksum_sha256": "1658975f0508387cde4cda499d7eb9524e31bc2f02cc49d6483d7e210d991234", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_diskencryptionset/lookup_plugins", + "name": "tests/integration/targets/azure_rm_aduser/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_diskencryptionset/lookup_plugins/azure_service_principal_attribute.py", + "name": "tests/integration/targets/azure_rm_aduser/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ecf5403290d75ebf93dd07c1a0d1ec251482cde7952d5fc4c1f51ecde936e804", + "chksum_sha256": "978e84fe852bac2909bcf4d707ecd577b164e6bd25c694464403ff855562b369", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mariadbserver", + "name": "tests/integration/targets/azure_rm_automationaccount", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mariadbserver/meta", + "name": "tests/integration/targets/azure_rm_automationaccount/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mariadbserver/meta/main.yml", + "name": "tests/integration/targets/azure_rm_automationaccount/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mariadbserver/aliases", + "name": "tests/integration/targets/azure_rm_automationaccount/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0f1123b3696957f55774d4316a4461182998975a0db1f960ef289b20b5e926c7", + "chksum_sha256": "87c7ae7077faea9533bb827344f49dadfecfdbc5ea179058d72f7bad3ae81388", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mariadbserver/tasks", + "name": "tests/integration/targets/azure_rm_automationaccount/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mariadbserver/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_automationaccount/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b829d34d571be3c848284902c00755a940e2a629115fbbd3a78af1ce018a0ede", + "chksum_sha256": "c99286c45665b96d5deea95731688470a9a02c11d22f868cb0ba7a56b71c63c5", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_batchaccount", + "name": "tests/integration/targets/azure_rm_virtualhub", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_batchaccount/meta", + "name": "tests/integration/targets/azure_rm_virtualhub/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_batchaccount/meta/main.yml", + "name": "tests/integration/targets/azure_rm_virtualhub/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_batchaccount/aliases", + "name": "tests/integration/targets/azure_rm_virtualhub/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "049e0b8480c14a44ea8525b83848582417405cd5352a0afc5fc9bc3f1c0f3941", + "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_batchaccount/tasks", + "name": "tests/integration/targets/azure_rm_virtualhub/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_batchaccount/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_virtualhub/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f37479ad82f6ad6db65b64e25816f268071345bbfcd8f168ce2af930d0f99375", + "chksum_sha256": "8810084bf5132a43f31c425b77e96134af6d5855dcb4d4ab94ed2b691d555614", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_autoscale", + "name": "tests/integration/targets/azure_rm_batchaccount", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_autoscale/meta", + "name": "tests/integration/targets/azure_rm_batchaccount/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_autoscale/meta/main.yml", + "name": "tests/integration/targets/azure_rm_batchaccount/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_autoscale/aliases", + "name": "tests/integration/targets/azure_rm_batchaccount/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2019d6f29a1dbe1242200ff0a0485722bc57431db8265a741c5e501cd5a920dd", + "chksum_sha256": "049e0b8480c14a44ea8525b83848582417405cd5352a0afc5fc9bc3f1c0f3941", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_autoscale/tasks", + "name": "tests/integration/targets/azure_rm_batchaccount/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_autoscale/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_batchaccount/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5faa6f6e4e1a6f51493f745f616201b1ed3447db1ec85f60ae676b8ecd334a0", + "chksum_sha256": "f37479ad82f6ad6db65b64e25816f268071345bbfcd8f168ce2af930d0f99375", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineimage_info", + "name": "tests/integration/targets/azure_rm_keyvaultkey", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/meta", + "name": "tests/integration/targets/azure_rm_keyvaultkey/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/meta/main.yml", + "name": "tests/integration/targets/azure_rm_keyvaultkey/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/aliases", + "name": "tests/integration/targets/azure_rm_keyvaultkey/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8eb6da86566844e8278692f99177c27f5e17dfc808484e9168d842ce4ea822b2", + "chksum_sha256": "36614727374728e26b5686e9fac66641e5b9c268b6945f2dcd1b4a9c4d2232c3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/tasks", + "name": "tests/integration/targets/azure_rm_keyvaultkey/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachineimage_info/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_keyvaultkey/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1027dcaf3ce2f749a07c7b78ee56ff713901f0fa792e08ebfc2c31671426a1c", + "chksum_sha256": "06c0a1c5aa8570a5ada69eae73aecfaee636bcb8f958c7dfd170c39d69c4f69d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_rediscache", + "name": "tests/integration/targets/azure_rm_expressroute", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_rediscache/meta", + "name": "tests/integration/targets/azure_rm_expressroute/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_rediscache/meta/main.yml", + "name": "tests/integration/targets/azure_rm_expressroute/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_rediscache/aliases", + "name": "tests/integration/targets/azure_rm_expressroute/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5ba0bf8a7bf29813d54b53fd7c3e65698ee5f802eb2ccf76c1707680acc07f17", + "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_rediscache/tasks", + "name": "tests/integration/targets/azure_rm_expressroute/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_rediscache/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_expressroute/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "60978e58b15da724fb1f16447071e7b33add290150dfbdd4173900c4edda9a91", + "chksum_sha256": "0fee3fb92d49fcebdc6564a4becd35f638cfa294e5d893fc5adf2fff21ac072b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appserviceplan", + "name": "tests/integration/targets/azure_rm_datalakestore", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appserviceplan/meta", + "name": "tests/integration/targets/azure_rm_datalakestore/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appserviceplan/meta/main.yml", + "name": "tests/integration/targets/azure_rm_datalakestore/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appserviceplan/aliases", + "name": "tests/integration/targets/azure_rm_datalakestore/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d8b505b037b869206fe23e768d9d42e48dc8db7c83ac3023ec1be689261f907", + "chksum_sha256": "528893af1cac01f38ab277aec0138b83c74b2576464d96eb7f3da330784edaff", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appserviceplan/tasks", + "name": "tests/integration/targets/azure_rm_datalakestore/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_appserviceplan/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_datalakestore/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f3fd1981d472300a8b2044ffbd73e928a089c2d81b3c09d7d5dff19c5d6cd544", + "chksum_sha256": "0731e52280287102127653617210703eeb3bd7abf3125367f33df7fd8d0be818", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkgateway", + "name": "tests/integration/targets/azure_rm_resourcegroup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/meta", + "name": "tests/integration/targets/azure_rm_resourcegroup/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/meta/main.yml", + "name": "tests/integration/targets/azure_rm_resourcegroup/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/aliases", + "name": "tests/integration/targets/azure_rm_resourcegroup/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4f59a6f1fc64a79191d0110c2f203adee747fd1bb69ad631a279efa7d370eaec", + "chksum_sha256": "cd30933c00554775a36ee6421935b7d8baf776db7cb35d5a103be9e18b7d2486", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/tasks", + "name": "tests/integration/targets/azure_rm_resourcegroup/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetworkgateway/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_resourcegroup/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "271094dd7a4e013c0da515000e4e6257bb716cf030c89dbe37af7ca74902841d", + "chksum_sha256": "ccf92a54443b6b7b1df4139247acd0d9496fb6266d6a99defb4035fb76cb61a3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappaccessrestriction", + "name": "tests/integration/targets/azure_rm_networkinterface", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappaccessrestriction/meta", + "name": "tests/integration/targets/azure_rm_networkinterface/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappaccessrestriction/meta/main.yml", + "name": "tests/integration/targets/azure_rm_networkinterface/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappaccessrestriction/aliases", + "name": "tests/integration/targets/azure_rm_networkinterface/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", + "chksum_sha256": "79cafc6b10612f907e2e4a97bac50c9948ac0a0dd5030875a9465204a6323b48", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappaccessrestriction/tasks", + "name": "tests/integration/targets/azure_rm_networkinterface/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappaccessrestriction/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_networkinterface/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23178ef47e9dbb43a51984becf44d72972a399952958fd2a76d71d6338864252", + "chksum_sha256": "cd2b9fd7ff5b256d26839ba3646b9347fa95f8fd6b1104e7f2835e1d7b7b2624", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ddosprotectionplan", + "name": "tests/integration/targets/azure_rm_adapplication", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ddosprotectionplan/meta", + "name": "tests/integration/targets/azure_rm_adapplication/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ddosprotectionplan/meta/main.yml", + "name": "tests/integration/targets/azure_rm_adapplication/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a66dc9e034ad04e167bd52df4f75f2bea4499b25349fc42b3c8de9e2fe806996", + "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ddosprotectionplan/aliases", + "name": "tests/integration/targets/azure_rm_adapplication/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1be076424fbf717d678e202250426e9b368688f8d3029f0c5dc262b97df819af", + "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ddosprotectionplan/tasks", + "name": "tests/integration/targets/azure_rm_adapplication/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_ddosprotectionplan/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_adapplication/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cac8f7d2a8403213ad252934698c6c5eef6edc0ccd0eb6c5794990e6c30f05b0", + "chksum_sha256": "e7b04ba312d08b8fdee715292776842a8533aed97ad6aae4c25ebcba04c8ccf2", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_recoveryservicesvault", + "name": "tests/integration/targets/azure_rm_workspace", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_recoveryservicesvault/meta", + "name": "tests/integration/targets/azure_rm_workspace/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_recoveryservicesvault/meta/main.yml", + "name": "tests/integration/targets/azure_rm_workspace/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_recoveryservicesvault/aliases", + "name": "tests/integration/targets/azure_rm_workspace/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420", + "chksum_sha256": "08cf46c06f61ba50ecd182f45dfcf2ad7529f1df439d0ca713a8ceba58e14c99", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_recoveryservicesvault/tasks", + "name": "tests/integration/targets/azure_rm_workspace/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_recoveryservicesvault/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_workspace/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e841ad32da809ed4a9782a8ce178f2c8399d98a56be2406142e898afffb65c0", + "chksum_sha256": "7ce589f76321d7c707ac86920720af5574f0d3e3685ef6c9aec9987393a09172", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpoint", + "name": "tests/integration/targets/azure_rm_keyvaultsecret", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpoint/meta", + "name": "tests/integration/targets/azure_rm_keyvaultsecret/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpoint/meta/main.yml", + "name": "tests/integration/targets/azure_rm_keyvaultsecret/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpoint/aliases", + "name": "tests/integration/targets/azure_rm_keyvaultsecret/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11c35de489a3da87eb40a2ce00a80a9992fc89c3b3fdee710301ba9faacd332d", + "chksum_sha256": "c7bb4c8aa02376e55002499e1a01763a649ddf80c253e1da4556ab7719ed05ac", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpoint/tasks", + "name": "tests/integration/targets/azure_rm_keyvaultsecret/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpoint/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_keyvaultsecret/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f5c8cc29641d123e237b894acc5d13e306e61d6cc553d15561730a42e63e55fc", + "chksum_sha256": "e9a7c76b76aa6e2ec7471c617c9fca886aecd9f28eafb9442023426818771d7b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backuppolicy", + "name": "tests/integration/targets/azure_rm_loganalyticsworkspace", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backuppolicy/meta", + "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backuppolicy/meta/main.yml", + "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backuppolicy/aliases", + "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", + "chksum_sha256": "f6ab21fb1deaf7061dd270b8ca0bf7c6e585eac172153559349e997150abbcaf", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backuppolicy/tasks", + "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backuppolicy/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26b1ed48d843898e1dc63a09a119c74ee83613ed2f0066e2971f3056eda0ee88", + "chksum_sha256": "529ae2dab2d63d3af2eab9ff5fe9b466a9c2bf3bf600d0a5221126ddec9be288", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagement", + "name": "tests/integration/targets/azure_rm_datafactory", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagement/meta", + "name": "tests/integration/targets/azure_rm_datafactory/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagement/meta/main.yml", + "name": "tests/integration/targets/azure_rm_datafactory/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagement/aliases", + "name": "tests/integration/targets/azure_rm_datafactory/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "592e63285615e1fe4768ff5027ae6a96e4dea5c875e1127e14c393cfacbc44fb", + "chksum_sha256": "a74040b53394bd68b1885c350f1f62603740e721ca38e01609660895693a3858", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagement/tasks", + "name": "tests/integration/targets/azure_rm_datafactory/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagement/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_datafactory/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7be6584e05920691ae83bc434ef61feb54cf098cb187c6457e10234840ee6ff9", + "chksum_sha256": "eedba69010cd9dad1b57c7e0f7f18eacb0feb43359922cb53c3ba98479e8dfcc", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cognitivesearch", + "name": "tests/integration/targets/azure_rm_storageblob", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cognitivesearch/meta", + "name": "tests/integration/targets/azure_rm_storageblob/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cognitivesearch/meta/main.yml", + "name": "tests/integration/targets/azure_rm_storageblob/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cognitivesearch/aliases", + "name": "tests/integration/targets/azure_rm_storageblob/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", + "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cognitivesearch/tasks", + "name": "tests/integration/targets/azure_rm_storageblob/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cognitivesearch/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_storageblob/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3712847b582b6a3a3f461055963ce51034e160b1e174d06b8b8f6eeecd4bc19", + "chksum_sha256": "7175cd6cb47363104377b380cc011fa46f815bbc69b2d81cbd347786159bda9e", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinesize_info", + "name": "tests/integration/targets/azure_rm_storageblob/files", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/meta", + "name": "tests/integration/targets/azure_rm_storageblob/files/Ratings.png", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "20cdf86ae984fb64eefdc57a0e03f34c83cb8b27834b33c84768cc2b62cf9d68", + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_roleassignment", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/meta/main.yml", + "name": "tests/integration/targets/azure_rm_roleassignment/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/azure_rm_roleassignment/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/aliases", + "name": "tests/integration/targets/azure_rm_roleassignment/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", + "chksum_sha256": "51bfa0d69b7c8b7e94b28aa9c60c921ace3971f50a385673a66791c31749678a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/tasks", + "name": "tests/integration/targets/azure_rm_roleassignment/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachinesize_info/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_roleassignment/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6684f96227d75c363a588e1be85cc7ce53025d7e13844638d100781003901db6", + "chksum_sha256": "46a3ce70c6a099b76908d0787935c2fb80ab988391f5d91790e3157bec81a8c1", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagementservice", + "name": "tests/integration/targets/azure_rm_diskencryptionset", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagementservice/meta", + "name": "tests/integration/targets/azure_rm_diskencryptionset/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagementservice/meta/main.yml", + "name": "tests/integration/targets/azure_rm_diskencryptionset/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagementservice/aliases", + "name": "tests/integration/targets/azure_rm_diskencryptionset/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "528893af1cac01f38ab277aec0138b83c74b2576464d96eb7f3da330784edaff", + "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagementservice/tasks", + "name": "tests/integration/targets/azure_rm_diskencryptionset/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_apimanagementservice/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_diskencryptionset/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db17a45674ec599ab8fb1890903d3bc49b3ded000197dd55cc82c3017a962565", + "chksum_sha256": "a53089acc4661e0553413e5be4b73155cbe81c5774ffc33e53470b7f0a192709", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultsecret", + "name": "tests/integration/targets/azure_rm_proximityplacementgroup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultsecret/meta", + "name": "tests/integration/targets/azure_rm_proximityplacementgroup/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultsecret/meta/main.yml", + "name": "tests/integration/targets/azure_rm_proximityplacementgroup/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultsecret/aliases", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c7bb4c8aa02376e55002499e1a01763a649ddf80c253e1da4556ab7719ed05ac", - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_keyvaultsecret/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_keyvaultsecret/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_proximityplacementgroup/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c0ffa5a2e80c5c71996a8f4fe46816621d764b46f0f7bc23560b55e2072d5e7", + "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultsecret/lookup_plugins", + "name": "tests/integration/targets/azure_rm_proximityplacementgroup/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvaultsecret/lookup_plugins/azure_service_principal_attribute.py", + "name": "tests/integration/targets/azure_rm_proximityplacementgroup/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ecf5403290d75ebf93dd07c1a0d1ec251482cde7952d5fc4c1f51ecde936e804", + "chksum_sha256": "c5c88276931feb2e7c2b7386c1ed4885d19888d5f70cf8c76dd4088fa33fa79d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_eventhub", + "name": "tests/integration/targets/azure_rm_vpnsite", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_eventhub/meta", + "name": "tests/integration/targets/azure_rm_vpnsite/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_eventhub/meta/main.yml", + "name": "tests/integration/targets/azure_rm_vpnsite/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_eventhub/aliases", + "name": "tests/integration/targets/azure_rm_vpnsite/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1be076424fbf717d678e202250426e9b368688f8d3029f0c5dc262b97df819af", + "chksum_sha256": "51bfa0d69b7c8b7e94b28aa9c60c921ace3971f50a385673a66791c31749678a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_eventhub/tasks", + "name": "tests/integration/targets/azure_rm_vpnsite/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_eventhub/tasks/main.yml", + "name": "tests/integration/targets/azure_rm_vpnsite/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c4ef2c774f92b1d1c61c070407cb15cec4492593f03dfc095031136a6fc315e4", + "chksum_sha256": "bcfd0915de197ad7e6d01dd27e5ffe2a8f62d93303f19d5e4c09373a82dc7334", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_postgresqlserver", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "shippable.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "515333579eea59619360d72e38cc2c5c9a8b43ff59cd3ddcc12c5b0172553b4a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_postgresqlserver/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "addfda03504e77be9156f1d5a1dec8ec3d9f81d08498ac814e7f782adbdc0e21", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_postgresqlserver/meta/main.yml", + "name": "CHANGELOG.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "9968490b2917b41466fcf58ff804ea27213672db0b91ac0f55ce076246a69913", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_postgresqlserver/aliases", + "name": "requirements-azure.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "212c2162821130244834f49afd3460bb037d426eac902fc88de51afbe6bab522", + "chksum_sha256": "5ed84a767e40fa7e5bdb9dccd739cb355185b1414a1beab6892a1bb8d3e6062d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_postgresqlserver/tasks", + "name": "plugins", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_postgresqlserver/tasks/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "957431198f2f2412d381532922a380b37d3a2941dce8f6fbcda89284fa7d3ca5", - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_publicipaddress", + "name": "plugins/doc_fragments", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_publicipaddress/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/doc_fragments/azure_tags.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e8c9d720dbc7605d3ee66799e8e81d0886e404c9a07b6b9b8edc844e0646de64", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_publicipaddress/meta/main.yml", + "name": "plugins/doc_fragments/azure.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "f2146d8b6b05f3dc1571069061663ff89f7527880e36a7f4fc4ac2e87ef0ee68", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_publicipaddress/aliases", + "name": "plugins/doc_fragments/azure_rm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed3159c0b56e6e42548ed58456e5304d48aea0b4e3a0999591f863ae79b225ba", + "chksum_sha256": "0342c35022e2762f31a487c0434feda2cb4d74717e474c0f3ea6735266c36b6b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_publicipaddress/tasks", + "name": "plugins/module_utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_publicipaddress/tasks/main.yml", + "name": "plugins/module_utils/azure_rm_common_ext.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0240ae96de6dabce7cd47a7793fb7a263717ea1b2e28423f47ba0c75333ed8cd", + "chksum_sha256": "ebf7c0c6f4ad7a05a04d740ca989a05cc4b22728acbd6390d9aa90931eca1647", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_servicebus", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/azure_rm_common.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0f2d416d8b73431c47251128c3a0b7eee12c412cc63f951ffc64caace37920ac", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_servicebus/meta", + "name": "plugins/module_utils/azure_rm_common_rest.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a2ab0b372745c307c31073df9ff4c0d1858a996c6354fb28545ef3a529b40519", + "format": 1 + }, + { + "name": "plugins/modules", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/azure_rm_servicebus/meta/main.yml", + "name": "plugins/modules/azure_rm_autoscale_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "7494564289cd93cb8e34bf724deff6fd4fb7ea335233703e1aa2a930860e1d40", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_servicebus/aliases", + "name": "plugins/modules/azure_rm_storageshare.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "923b442d786cff06e0b7a3ea4232f7bfe10835e93fb73b8df6ee997380099420", - "format": 1 - }, - { - "name": "tests/integration/targets/azure_rm_servicebus/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "d70dd044b1bf421773c6438c7c9020906810f7e1e74523e8855133a8fae9360d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_servicebus/tasks/main.yml", + "name": "plugins/modules/azure_rm_batchaccount_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a0528bf0af2a590fe46bced0ca843722543d5f10626604a887a7c278e97c38d2", + "chksum_sha256": "570fba1885df5ea2f8bcfef3e8ed9b30ca958e08aebbf85ec81724df89b76afc", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_iotdevice_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "87e22ba60e4ab700ee3bfad366690b044125b0f66091c88bc346dcc88e722262", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_cdnprofile.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b23febe97f2dc337605573cd3dd1921435ae0fb89e5b765611fdbd69bec29878", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/meta/main.yml", + "name": "plugins/modules/azure_rm_privatednsrecordset.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "d2332100a1ca9ed31dbc1a41c229aabbd02015e4f516faf8cc3dbf739bc41966", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/aliases", + "name": "plugins/modules/azure_rm_iotdevicemodule.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc618d5714ddaae8f1482cf89dcf3327cf82fa378c16f6b5cf092339927261c3", + "chksum_sha256": "83d5ceb43eb948e8d5e766caa60e03a9978939ff7f0132ae5d71ad5622dad3bf", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_mysqlfirewallrule_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2c98b91e48ddf042f3fd0847c42b7d880fc00ed807437aa70d35ae1107ba1407", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_monitordiagnosticsetting/tasks/main.yml", + "name": "plugins/modules/azure_rm_vmbackuppolicy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c185b22edc1017409894f57875fe5db2c986c6d741cbd86dc78aa01b36a9fc9", + "chksum_sha256": "f5053078d5ae59f0b466044d135108197c119a34d79f826be509d57dc2a6e2ce", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aksagentpool", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_privateendpointdnszonegroup.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d516440379341b68c65581c8d9da78f6a204845502e408c48875851c58229241", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aksagentpool/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_privateendpointconnection.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9ecc4f6823fed8b227500c7714851dcc9f398424d5774bf89f8dafca9afcbef3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aksagentpool/meta/main.yml", + "name": "plugins/modules/azure_rm_adapplication_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "e04053b0c584772df10dcd46845772eefb57116b655ced27ee6786fff8334f12", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aksagentpool/aliases", + "name": "plugins/modules/azure_rm_containerinstance.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "783d6dbd1b9cc4b0543d6e96d15206283018e0c291764a2a4106e860d41cb210", + "chksum_sha256": "b3c13189f840de2aa3047eeb145d3f1680c40a999a45b92325f70a92ff950296", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aksagentpool/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_privatednszone_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d1ed854fff931a8a0295b9a4f82235bb9ed8cf5bb947377c51931bcf94dc4c9f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aksagentpool/tasks/main.yml", + "name": "plugins/modules/azure_rm_mariadbfirewallrule.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4bc2ac2faed9ceba28dfb24dffff6d996da42cf6aac09cb3a57c044a17bc046b", + "chksum_sha256": "6c028f0fdd933b4a02b6c92f20432fc3617072d8828898f628e02554d25c31e3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvault", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_subscription_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "27171c677f1e2b5337edce509b64021d2bb2708d2b476137b3e4ac96df1631af", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvault/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_privateendpointconnection_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a1c9260c99294e6c9f4579310504bf656d46b2ed16d22188859945cc53563fc0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvault/meta/main.yml", + "name": "plugins/modules/azure_rm_firewallpolicy_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "1e1cebf4f29a286751549a9a5ccf06451bfb9648151d54ca813646f1289dc8b9", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvault/aliases", + "name": "plugins/modules/azure_rm_automationrunbook.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "726101a2dd7238a8ff7f94fec489e5fcfd8bb0db10ecd074fa0686b2eb9d6d24", + "chksum_sha256": "c257d3afae0b00ae9b09d6d5f04373def1e678ea99cd8d5778c8425d64ea0058", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvault/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_keyvaultkey_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "90b03fb0478760694653e6c892acf951832ac5dc00aa4ef597507854f7d1439b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvault/tasks/main.yml", + "name": "plugins/modules/azure_rm_webapp_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85d1f060912261e42affe3f43fbe52750e62bc5d2fe7d9b55f604be778052033", + "chksum_sha256": "a420da6e6d479985a088e2f2c614bc462ad003d5814d81e4a6db489aef906a83", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvault/lookup_plugins", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_galleryimageversion_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dc2dffd74aa500eb855ecebf3abbec93da09ef7cf2805edb11a498ed33f46205", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_keyvault/lookup_plugins/azure_service_principal_attribute.py", + "name": "plugins/modules/azure_rm_iothub.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ecf5403290d75ebf93dd07c1a0d1ec251482cde7952d5fc4c1f51ecde936e804", + "chksum_sha256": "aee9f30afbc1989ff7cfe64101c59d842dc635e59b34411d4045c428f1109b1d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_bastionhost", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_cosmosdbaccount.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "71100c8b3ba6cf9fd59776ae0b50d9e9ba4e34036ef6a5ba3821a6cf7c907d17", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_bastionhost/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_roleassignment.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "981eea70440c35499110fa7a97cc7259e7cac1ed2f790ffcb1c247a51bfa6fe3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_bastionhost/meta/main.yml", + "name": "plugins/modules/azure_rm_akscredentials_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "6635a6c530e584f50ba8d60da72e9d6e6814cd45ef73d155e9a9999bde3e70f8", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_bastionhost/aliases", + "name": "plugins/modules/azure_rm_sqlfirewallrule_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d57abe6f8fb0cbfb8ac22431c09126cd48bb4d2836a6d151faf92fb6fbecc6aa", + "chksum_sha256": "71e6d450073de8c90623f4048d44bd6eabaa39c36031a9beba28171a53b302cd", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_bastionhost/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_adgroup.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "152a3792aa58f812d46db9dc8b8ebfd3c78abf0406297d4b4c274ba23b398a1e", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_bastionhost/tasks/main.yml", + "name": "plugins/modules/azure_rm_virtualhub.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2adf15d8a7ef9e0b56dba6b3ebe750f09192d86ec56df6076088fd4edd444e3", + "chksum_sha256": "be9396630b6c0d0cc7dae7688cd87421f4770dbba2ed92b2712761ff722ae8a5", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerinstance", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_firewallpolicy.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "58980ae98ef0f3eb07237bd685eaf312369a68a484aaebef40037697d83cdec1", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerinstance/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_apimanagementservice.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "02a98c1b1f61d2b4ff90bc1ac35710efc9590514b19f500cfae1698216cde019", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerinstance/meta/main.yml", + "name": "plugins/modules/azure_rm_publicipaddress.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "e2ddc75d7edca49904c6025a1e1418c0ada1ed45fd56963a8e315cf7b2074362", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerinstance/aliases", + "name": "plugins/modules/azure_rm_functionapp_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "059ec72ab54682d34b109880aa48f5b5b702d120042153371442c7293c011f31", + "chksum_sha256": "1e0f3de0ed340f2e1a5cb2b5b4cb8b7cc9c6c8eafe4483cdb38b58878482b589", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerinstance/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_webappaccessrestriction_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c72ded459dbd8c58642c77aba5cfab56a86782f4e19958ded25f9754a32c1591", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerinstance/tasks/main.yml", + "name": "plugins/modules/azure_rm_manageddisk.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5d577eb39a4533fea27bd3240b4ffaa278f64b5f56b5c6375c0d1e73b7ba382", + "chksum_sha256": "a4047fdb47da55f8bca9f6d0db734f6a74a0de61c644ca6ad98718f3eb808fe4", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationassignment", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_aks_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3498eef981aba56a6540bf90b9a34c194dceb70503d43483c8ba64f367b2ba83", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationassignment/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_dnszone_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "15da62156897e9dc73a74650198e57b4d6dce5bb761b1e0b0c86d19be31f1cce", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationassignment/meta/main.yml", + "name": "plugins/modules/azure_rm_ddosprotectionplan.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "b5eb8ad5fe5b146e7b79f083f2f9747b1bc64432bc55660ac682e97e8235f023", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationassignment/aliases", + "name": "plugins/modules/azure_rm_loadbalancer_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", + "chksum_sha256": "b6b508842cc40fd4310a90e2bbad7733a50b7c43e29dc73dbccb304940b0f53c", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationassignment/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_adserviceprincipal.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0eae69b33ff82053a9f3d85499ba935b13c84944f5ed3b355e606744b4de2ff2", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationassignment/tasks/main.yml", + "name": "plugins/modules/azure_rm_ipgroup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86581a9afe3f4c3e4f7021f214e089c84267a3b909312cba226a9011c223bc9b", + "chksum_sha256": "2aaffe067e785adc4ccb4a78a2a2d665ee6e2bd5a28b79f75e2be4695a1ce115", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adgroup", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_aduser_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "59f317a97611776b87dd9d822f4234368027d5de8b98730851ba644ee9259031", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adgroup/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_keyvaultkey.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "40084b9ca5f23d33a04cab04ec5719eae2f6c76cca3ea9d6741e3fa167b67577", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adgroup/meta/main.yml", + "name": "plugins/modules/azure_rm_mysqlserver.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "7f7cb3ce5875e72550cd314cc3df490cbbce0292265c927038897d026b573514", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adgroup/aliases", + "name": "plugins/modules/azure_rm_sqlelasticpool.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0e90b0bd13c40122b87176faa412a83730dcc85c0060dffa0d7b0450d559ed40", + "chksum_sha256": "a127cd3108b9eff43c793296f6239ee10df0810222dae4c44b380e45c01e36eb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adgroup/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_backuppolicy_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f16cb70c198028b5273e9d89ad554ed6a8e40217284a1fafb9658121c415b4b0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_adgroup/tasks/main.yml", + "name": "plugins/modules/azure_rm_bastionhost.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f4adb4bc8784bbb857a39fbe58f45a1a47853538f3207e987b8bd64b1704238b", + "chksum_sha256": "ade78abbea1c467a8bf4787d227a0a96979482b15d05e3dea2ede57f91ff6f7c", "format": 1 }, { - "name": "tests/integration/targets/setup_azure", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_mysqlfirewallrule.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8d012c884bd3e4f7880fee699b3b6c8210a1cc00c98a2166c68c8b7e6a052bc2", "format": 1 }, { - "name": "tests/integration/targets/setup_azure/aliases", + "name": "plugins/modules/azure_rm_trafficmanager.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9aba8d8ba13076c53f797b5c999af3dbc951849450ca138ce6572804eed67a22", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_sqlmanagedinstance_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6c643b009b8c783f2aada97bee8f08d75012ae7b57270fdc5542b39defe37cbf", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aks/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_diskencryptionset.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d4f85b7a7c7da95b7fbd3a084a15af87fd037134c527056a14f48ae1e58b9a9f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aks/meta/main.yml", + "name": "plugins/modules/azure_rm_recoveryservicesvault_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "0049b577406a917161abd36167c9008e99975dda492874c3ed46c20875408c12", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aks/aliases", + "name": "plugins/modules/azure_rm_mysqlconfiguration.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "783d6dbd1b9cc4b0543d6e96d15206283018e0c291764a2a4106e860d41cb210", + "chksum_sha256": "fff34c89e959affced009f321ef5cd6b6ad9955e711d69306f339ca4c15392e0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aks/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_rediscachefirewallrule.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "57d39a29b5d1e1241c24251018816439bb311f70311da75555af64edad9adbee", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aks/tasks/main.yml", + "name": "plugins/modules/azure_rm_routetable_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "683619ec3541848983b2f513eae4d885c97d3040ac188d252aec7304c3440c0b", + "chksum_sha256": "1e849400c3b71a0bb6652ab1d40e919288b3dccb94314230273850f31259de8b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_aks/tasks/minimal-cluster.yml", + "name": "plugins/modules/azure_rm_virtualnetwork_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b2be2027bb762b22ccf731a32baf3fa8b2675369c08b76c1499b3ea10902add", + "chksum_sha256": "39cbe4ccb66acb4dd36b893c9cb000846535c0726b8960e541a47f576fa2ed6f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistrytag", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_lock.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "858b4a4357dd80fbefb9c62265d91f31019794c9077526f6703c95b5d7c077a3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistrytag/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_networkinterface.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d6f2859a51857b23dd42dc71b71005de7a540c1b8f68178232237a4c0ac06e14", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistrytag/meta/main.yml", + "name": "plugins/modules/azure_rm_postgresqlfirewallrule_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "53187b006213c221bd5391b2b45734080afcd9e63280f4181f6355b5db7258dc", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistrytag/aliases", + "name": "plugins/modules/azure_rm_iothubconsumergroup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", + "chksum_sha256": "9d6fc8dba8ecd841d908a4b1226fa0a186c270a9eb3e8a5a054692e56c621876", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistrytag/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_servicebus_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1ce20b5639787edf674d44a5896e7258cec1855d04bc619f49da51740dcccf82", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistrytag/tasks/main.yml", + "name": "plugins/modules/azure_rm_dnszone.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3f1c91c39a8986e9aaaaf4e0f2bd84796f20ede51d7868e74a37a7839d1759d", + "chksum_sha256": "a9974fc3f305a83840b041b02158be7162a6c87c8fb3a3b909a2ac6255390668", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_notificationhub_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "07c91492398c62e54b267d583d55287c485fbe4ca5112305e0c0cb0883500e89", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_containerregistryreplication.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "94d2e1237ef94377586760a091785272818db4bddc6a54d24badee82d7697437", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/meta/main.yml", + "name": "plugins/modules/azure_rm_azurefirewall_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "c0c5832150dbe6fc7675980c7107ca532191e9c8b1b6885456bb3c954c45aaab", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/aliases", + "name": "plugins/modules/azure_rm_apimanagement.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11c35de489a3da87eb40a2ce00a80a9992fc89c3b3fdee710301ba9faacd332d", + "chksum_sha256": "d414f8a53136b821e89e6adabf4be8bffe9e38b49350d547f1c2e1900b48d1e2", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_rediscache.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c5363ae787f296df9b42f82727f81cfca5429ec971b67eac4132be52f6562400", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks/main.yml", + "name": "plugins/modules/azure_rm_monitordiagnosticsetting_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "408a60ac3331b6d89792e393613ca595886d842ab4ecc6825e6dc15bb02faf86", + "chksum_sha256": "3fa25b176b8c073c9435901c2c8455577e64a998c71b5c6a472ae1044f48bed9", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetwork", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_virtualnetworkgateway.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "59e1d99084af0027d2c970a9e6ab6088546f4768d151a045b70615cff47b05c3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetwork/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_securitygroup_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "961d9d5ad4d46ff1acf101c19ebd88813d5251f89ec7e1f4ea809827cc3b5392", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetwork/meta/main.yml", + "name": "plugins/modules/azure_rm_autoscale.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "d70f6911bb558f59f68dcc61f42155c1f108526ed47e7ad3bd8f653ade1a4f8f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetwork/aliases", + "name": "plugins/modules/azure_rm_proximityplacementgroup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", + "chksum_sha256": "c39137e4926c1749a04adc516a027a08e7cf2ebe2b21e7a95675fd0a546777b9", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetwork/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_route_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ec951f25bdc8b4944f43e054e44fc1887fbdb8cfaf892f5ce57174cf251b442e", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualnetwork/tasks/main.yml", + "name": "plugins/modules/azure_rm_subnet.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e46b1abb1ab82874622d1821b564cee555be16ced454a9723f3cff45dcb5948c", + "chksum_sha256": "356179dd240df193753fec302eae97fbf814fc4b8cd61868564449f9f8bd302b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cdnprofile", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_snapshot.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "375ef0d94cddabb5e18bcaaa773b34cfbf7bc3885745ee4ed1e6f291974db559", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cdnprofile/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_automationrunbook_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bf2d4439d7ef7f6b0f0ec04b345e5919fef980d15b6fb3fda111c2df53c18d16", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cdnprofile/meta/main.yml", + "name": "plugins/modules/azure_rm_resourcegroup_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "3336b070c7a607adde16279cdeaefe260b75c683a0ab0028b4ae6f262ebd32d8", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cdnprofile/aliases", + "name": "plugins/modules/azure_rm_natgateway.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d922663ea733e96e4da9178ebcd4baa17435a011302f3d609f7391e651d119f9", + "chksum_sha256": "fe420872335d019070072b7541d79579eba9887f0d80e96d195ed1aaa051aea5", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cdnprofile/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_mariadbdatabase_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "abe1fd7778f01c877a7c8d74170c74a26e39de0d5295b3e856adcc39fc7367e8", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_cdnprofile/tasks/main.yml", + "name": "plugins/modules/azure_rm_cognitivesearch.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b292a101e30c2cf1ddb3541d9d1827483b29baea9a909cdfa57dfb9a24827741", + "chksum_sha256": "8665ce3ff083d18608c7ed9b5fb778d6248e9cfcc096b464535d041457d9af00", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subscription", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_manageddisk_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3b7b7131b77965c67a34ae4c9ddb9def5c3d30a5a76498c51580486063693f71", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subscription/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_virtualhub_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3a9de2d79f400506887f8b86b4a8bbfffb0e0558eae4ce954d8410beff977af4", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subscription/meta/main.yml", + "name": "plugins/modules/azure_rm_appserviceplan.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "4230691a8fb4f96611ff509e19f598304daf58104bd7c4e01b0d3e90311a2a93", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subscription/aliases", + "name": "plugins/modules/azure_rm_virtualmachine.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", + "chksum_sha256": "b002dccc80c26c8960dc842680bbcce59ec55561a5678d73c5ab1eb248183ce0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subscription/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_backupazurevm.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "697611d8016ee00fdf81ee52c5d2174b670b3aa4a602498220cb4f1ffb455f9b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_subscription/tasks/main.yml", + "name": "plugins/modules/azure_rm_virtualmachineextension_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb18a11b4b6b14912f9fcc0131c232c9d3525d14a8d43ee4b2606cc2d3f7249c", + "chksum_sha256": "f845763404b68b32efe0187e0224cf30b7c71366531b4de508089df01f4849a3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_notificationhub", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_resourcegroup.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "20900d4b10ee5f7032fc409be2eaafc00521f8799c56559d8ac88fce00e4b2eb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_notificationhub/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_postgresqlflexibledatabase.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "60fe7ebe09af6adc823fcaf3015053ce6e958e114e20b1ebdfd7aee3564ea8ee", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_notificationhub/meta/main.yml", + "name": "plugins/modules/azure_rm_privateendpoint_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a66dc9e034ad04e167bd52df4f75f2bea4499b25349fc42b3c8de9e2fe806996", + "chksum_sha256": "b34126d4fac558a5077869099cf1327fbecfeab36e6e34b30c4fe809d59b92de", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_notificationhub/aliases", + "name": "plugins/modules/azure_rm_azurefirewall.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1be076424fbf717d678e202250426e9b368688f8d3029f0c5dc262b97df819af", + "chksum_sha256": "b4ca4d0d3c53b3b1cae912d609f7c50ad64e60ef826de3ea07ba2976a625f8dd", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_notificationhub/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_iotdevice.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9e408c7a58814207bff9d92faf6725b49be428ddb10feffdcd311617c0ae2b8f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_notificationhub/tasks/main.yml", + "name": "plugins/modules/azure_rm_applicationsecuritygroup_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f519a0026da2e72a6633b7e82a4c2ae581c50b918a5291b3b4737360211276b", + "chksum_sha256": "805be7606a6145a9b4c942f63a9aa46ffc10366b8e3bf2af0c64b8009d0ac9eb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationaccount", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_dnsrecordset_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ce13d83217e276a01bc5763cdfbd131090b35c64607738dc052b7ef9d25a3068", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationaccount/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_notificationhub.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "025163a4ad192ec7b4ec14e8faf49b01e29a8a8f38cd8231aaddec9726f460bb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationaccount/meta/main.yml", + "name": "plugins/modules/azure_rm_cdnprofile_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "f860571746ea4763e349ddef498e678e62fbe5fb0af156aecd458c3b90801e96", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationaccount/aliases", + "name": "plugins/modules/azure_rm_storageblob.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87c7ae7077faea9533bb827344f49dadfecfdbc5ea179058d72f7bad3ae81388", + "chksum_sha256": "25c3fe01b0eabad043577ed544d29f7014af8e68a2482ddda72830ef900ae7df", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationaccount/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_sqlserver.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9b0f2f7674cdb4641de9a2b8b50cb74e91e36ce0a07e0c3a13330592574bee71", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_automationaccount/tasks/main.yml", + "name": "plugins/modules/azure_rm_mysqldatabase.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c99286c45665b96d5deea95731688470a9a02c11d22f868cb0ba7a56b71c63c5", + "chksum_sha256": "84c32c802f65e5ee577ec3e25aaab5d6d260376ddfd32368370b74ac08a24b6d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_account_info", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_containerregistryreplication_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b88adc68c275d1c2608313a8bca60f7805a473e33df0ff3b75b3ea0deb915195", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_account_info/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_adpassword.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "08837d90c0de64193acde245d3f3db12dac3e3fd548ee18275b7a847092c0698", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_account_info/meta/main.yml", + "name": "plugins/modules/azure_rm_roledefinition_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "0763daab445d3b0ce948955295bbe7a33f6aed80ffa01f86aa6d2b9808b9b6ae", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_account_info/aliases", + "name": "plugins/modules/azure_rm_cdnendpoint.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a58bdac3b7068e244f2cf71f0a1a0bf136bc8785d2a8947fecbafdd97313adb7", + "chksum_sha256": "e42d48c18eb6e54441bb4ca6f973876cd88b083883e5a28bb634c1b39a049f6f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_account_info/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_privatelinkservice_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "02a72af00f3442e3cb5a19ba01bffc4cb2d47f646abf1a5ae0a125e80a8313ba", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_account_info/tasks/main.yml", + "name": "plugins/modules/azure_rm_devtestlabartifact_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a18344a391206dc34d9e73134c7e2a2815ae3cdc36cf9b6791ac19e1bc07d6a", + "chksum_sha256": "714452d937c197d48b0197b3b5ed5b576cda49ffd49092581715d95f0436a4ff", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_virtualmachinescaleset.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "98357220f8f1ad4fd4ecb6ac3d542487cd2e62abf7ad4e068f83c3d6797fe4fd", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/runme.sh", + "name": "plugins/modules/azure_rm_gallery_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d9a70f8c75d9a856cd529ae8ccb6e589c0db9494da4bb08cead6963e98d9dd5", + "chksum_sha256": "13939381263c0bcd756261bcd5727bd7f33123f49dc1da05e88c652b468e66d9", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/main.yml", + "name": "plugins/modules/azure_rm_applicationsecuritygroup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49c03342521da6b25da0d4df975ee81e10e8b1e7ebd1bdabeba797463bceddbe", + "chksum_sha256": "58f5338441960bf8824f1ed9eec52bd6c5c2ec9d8c6ab02e8a5872afd388ed39", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/aliases", + "name": "plugins/modules/azure_rm_roleassignment_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "deefc8fe8e3699aa1e8852f316f52c0037219050b5b5d07919fa24d06ac14ed5", + "chksum_sha256": "3287b7ad7063115ef66dc443b05f4ceb6bd22d46cd8fcec1350c6e9e64289b3f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/inventory.yml", + "name": "plugins/modules/azure_rm_postgresqlflexibleserver.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "979c1f5123e61d083ca0ddb9816bd3381e6c2f830ae2a96648f2d4dd720a0f8d", + "chksum_sha256": "ea3b2ce15955406227c0367da00cebae6c44e18b9ef0c47720367e4fdd9397fc", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_cosmosdbaccount_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b26c589e01d813fd752e5563ca77f5ed254c4b57699e23780d1d4ba23780b09f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_dual_nic.yml", + "name": "plugins/modules/azure_rm_postgresqlconfiguration.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ee1ca82e2f43899c6dc17f2bd4710229f33c31aec6beb8ad9093e436d2df5b1f", + "chksum_sha256": "c5a5c9f631bc9ef1eb1d64acd039457dc38a52c84e5246589b9f42df904aa37a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_spot.yml", + "name": "plugins/modules/azure_rm_virtualhubconnection_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40cfa7a636a0741e3f17deb1c7b965fbc42074f3fb7a50503dc93b9c2515a2e4", + "chksum_sha256": "948b85322d1c84b4eee3709f69f2de166232472a675dd26e125c099ce13517cc", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_public_ip.yml", + "name": "plugins/modules/azure_rm_automationaccount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5dbfe466ae3aa493f04b91016c88318774d3e974304b90d882ed60c7ae8e2a93", + "chksum_sha256": "5dd5fd70d816d33733de4bd4eb9f7569038760a5d13f9f932d7cc94b8077bbf4", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_vm_identity.yml", + "name": "plugins/modules/azure_rm_virtualmachinescalesetextension_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a7b73bb1af0583758961a25336d5faa2eb76fe6e84b3b9698b1bc5e53fbe4f9c", + "chksum_sha256": "0c32b71b14bbb8c0609f20d2c522792ad6f6e5bd3b8477dfadae9bb34ae61cc2", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_invalid.yml", + "name": "plugins/modules/azure_rm_datafactory_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "055893c82ae8b817fbcd3287b7435ae35ba8d6825ad3cb9545048ac599f9dd56", + "chksum_sha256": "97332f814785d6c0aad03a37f0126454115c0f219379529fefa421bf9ea20b53", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_minimal.yml", + "name": "plugins/modules/azure_rm_devtestlabartifactsource.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ec63fe982d7ce8d65dadd74eb7e5c3678fa88e008ddfeaa43b1d3b77e094583", + "chksum_sha256": "948df3ff5d5d5716e2fb15644bbf6fbacefbd51b422cbf99d7155c661216a700", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_image_specific.yml", + "name": "plugins/modules/azure_rm_openshiftmanagedcluster.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41a71c6515836e0c1c764ae83a0c999403e1fb774a55c5ab7912bdf7f1e2fc89", + "chksum_sha256": "90da0b66cfa28d2a546a44d0e21e9b28c3165db49ded31034537b4785a4d37a5", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/setup.yml", + "name": "plugins/modules/azure_rm_devtestlabpolicy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1af862edc4a550cf631bcaa7a082d23451a3e7eacd0a248e4688bcc8dc6ef604", + "chksum_sha256": "fc13943e64dc93aed3f76eff9b1715d5b95c5f528dbcfdf3214e4d69d29f2acc", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_ephemeral_os.yml", + "name": "plugins/modules/azure_rm_privateendpointdnszonegroup_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f3d3633f808a35e23202cc9be4436f7ee590314694016377f7d40b357e4d00d", + "chksum_sha256": "70582f1fa2c40f77e166f00242bd6bff2e7c018368beaa2ac960328c341faa77", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_no_public_ip.yml", + "name": "plugins/modules/azure_rm_keyvaultsecret_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a7f201260799a21031f75d3ecbd6cc372007c3a2c5ef7a6c9d35053129b868cd", + "chksum_sha256": "545d2ced807066e6a1d44b20bba6e589cc022654f099ef9087865b18759bc73d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_image_latest.yml", + "name": "plugins/modules/azure_rm_ddosprotectionplan_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1d3000da1ae66217ff40113749e77538bee7ebf49e1808ad36488ca33d89761f", + "chksum_sha256": "9ea0ae1f2bcab647085f83b8223d763abf123afe3996d0aeb0f304fc8d4fc7d3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_deallocate.yml", + "name": "plugins/modules/azure_rm_subnet_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc53572c2732984518157aaff50942ab77426127a14f2e81faddfd45dd039e4c", + "chksum_sha256": "781c564f40087d071942dab53c627fed093764c5a244744874e2226ec174bee8", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_minimal_manageddisk.yml", + "name": "plugins/modules/azure_rm_virtualwan.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e10179f3c286b53a8347a1cd7d3672cc80e9184589dc7ea292489279fcc67ede", + "chksum_sha256": "8586d543fd6b8ede929df540ee4d972c2dfb66fe775726f19f7b5c52a94dc029", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_no_nsg.yml", + "name": "plugins/modules/azure_rm_deployment_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97017436c84bdbc87de46cee90cfab5edd108685b439253083f141cd5fd52a78", + "chksum_sha256": "2b2f239c18ae7533a69c8a3e380840171bedc20dc4330ffb0b0f14c9cc5bda25", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roleassignment", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_virtualmachine_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3dc5595ff2ae8fd54fb291396a6b1a07b81fbc0454fe6e9d9e7055b4520324fb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roleassignment/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_postgresqldatabase.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e1d1f0a296460cb6a411cc926cff5476be07b16ced01f7b9a95e64802dacf9e2", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roleassignment/meta/main.yml", + "name": "plugins/modules/azure_rm_postgresqlflexiblefirewallrule_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "a2dfe20b3135c2aabee049f886eaa54f797b5168ae6ed2bd579e7bbc63c21d76", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roleassignment/aliases", + "name": "plugins/modules/azure_rm_aksagentpoolversion_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "51bfa0d69b7c8b7e94b28aa9c60c921ace3971f50a385673a66791c31749678a", + "chksum_sha256": "69fd5ecafb1b4dee2cbcb17f9b767f3fff6a9d717ca8548dec4f9735f3d213d6", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roleassignment/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_devtestlab_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "973d2a0d1ad46717f41e2bb26169ad1eced874c034068674131ab480b7d496ed", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_roleassignment/tasks/main.yml", + "name": "plugins/modules/azure_rm_containerinstance_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "77fcaa43c9c8308f544b5ffa24411dcdcd67f1957ff1c7ff2831d451eb5fb9b2", + "chksum_sha256": "ab1aa37508addc2bf616e2c13664f2a1e5e0235af91db2bb84542449d01fc67b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_securitygroup", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_datafactory.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5e54eadbb395d175730960b6e089b78c76cefeebe08dca0ab1ae80e4d34e78fb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_securitygroup/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_sqlserver_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "31710e981ec3af5a7ab221d4679e06e7d7baad4e1cca7a1e9809536cf07c8899", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_securitygroup/meta/main.yml", + "name": "plugins/modules/azure_rm_virtualwan_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "3e7d2fdf7181de1499b68196f176080a9563767764ee9bb27bf3e3411cb87a75", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_securitygroup/aliases", + "name": "plugins/modules/azure_rm_registrationassignment.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a390a5b729f05cbb0f6d91d7d663389c81a571a34bd2e931dc56fcdaee025754", + "chksum_sha256": "46371a2648227e97d625dbc25bdf9bdfac600b28b1fe2c07aa832186562dbe7a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_securitygroup/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_roledefinition.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1f4fe12f44e9e0b030fc051e90e76d2f0383f4426331ebf72dd0a806cb32f580", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_securitygroup/tasks/main.yml", + "name": "plugins/modules/azure_rm_aksagentpool.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "436bac9c55273b36de74ec81c5c41e2c608843665dfec86ef85138d81a3c5b55", + "chksum_sha256": "35eede66b4539d8ebfabaeba04dc70f75614d3bc94b2d19a721b527269e44404", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_manageddisk", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_mariadbserver.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6c671f81b7aff21b252b4844b16135a8fef889b340f66337e394d87e249e4a28", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_manageddisk/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_trafficmanagerprofile.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4df5198ca3361e221f283b8d1cc1d26dbb3ea265422c76ebb8d6357ab6b4d4b6", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_manageddisk/meta/main.yml", + "name": "plugins/modules/azure_rm_mysqlconfiguration_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "d9e284a3a0c4c2ec47a44ac4a7419358ab7d897488fa29de3ae616cfed56ec4d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_manageddisk/aliases", + "name": "plugins/modules/azure_rm_galleryimage.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b79d487ac5f66f90cfba1e03eb40daf31086e77447861b1cf4aeceee77d9745b", + "chksum_sha256": "ef785f694e97dfe2e003f9977873c77a3b0e68306bb9567cc6a366a3ff50e293", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_manageddisk/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_hdinsightcluster.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "56f82f0e1dece88b1eb6f238dd564ec67d93ed521cc437233c41e805a2ce0bbc", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_manageddisk/tasks/main.yml", + "name": "plugins/modules/azure_rm_aks.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8decdddddd8660e19da01320399ff9e5216c7733d9c755a9f812f81068f7ca5", + "chksum_sha256": "d63a516ee5a970d80bea017097e3d474a59b34c0dc58f0d0ecaced542dfbb5fa", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vpnsite", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_servicebustopic.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3061e6f04b67b71c3c7d09566a35916f130745ffc7dd1b472385d78587140da3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vpnsite/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_sqlmanagedinstance.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0658e86bcee4a16b909a105ee7cf17f650924bc8e97c7bc24edde9a6f0d83a68", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vpnsite/meta/main.yml", + "name": "plugins/modules/azure_rm_cognitivesearch_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "8e5e926aea80ecc40b2a0c06745ed85287f4f6f83692af2ad78e7ea641c8d463", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vpnsite/aliases", + "name": "plugins/modules/azure_rm_postgresqlserver.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "51bfa0d69b7c8b7e94b28aa9c60c921ace3971f50a385673a66791c31749678a", + "chksum_sha256": "665e6153c4700277d41a5b0b83a65601d71b3088868f8e8f93229b91a3d660b1", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vpnsite/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_account_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4ec8a4640333983bf88ff274ac7eb854329844cf696447b2ce9cdc070e9a093b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_vpnsite/tasks/main.yml", + "name": "plugins/modules/azure_rm_vmbackuppolicy_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bcfd0915de197ad7e6d01dd27e5ffe2a8f62d93303f19d5e4c09373a82dc7334", + "chksum_sha256": "1493048fce1c74d200efa796b75048be8562b854ce5211f2f8988c7ead43988a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_gallery", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_devtestlabenvironment.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "011a6997e971c489b239d38a889ed0bbf2c90513ebec62aadd64f0ca736e69a5", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_gallery/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_appgateway.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b0a80426b79eeeb00b8ab51935f167eaad07d2887d8d1e3298b0a181e9ce526a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_gallery/meta/main.yml", + "name": "plugins/modules/azure_rm_devtestlabvirtualnetwork_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "abf1007b4b27cf62007827926b3494ca4fadd27670cdef0c8e6d965dafd6e0f5", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_gallery/aliases", + "name": "plugins/modules/azure_rm_appserviceplan_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e676d2331077a7a453c2694fef48b0b56195d00e5a1009e3f668a7e174abd16b", + "chksum_sha256": "2feccbb74790330b291a4ab0f8bcf3d4ba44f5bd2c18490aff02c92f3d043e09", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_gallery/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_routetable.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "903a9d84fb9a4c7aac19a8c54c32e414e364570fe6d02b56427b8c9a8263e979", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_gallery/tasks/main.yml", + "name": "plugins/modules/azure_rm_openshiftmanagedcluster_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "22d0d3850e426784e4df1c303a1857ea5cbaf9735e5ed6df62442ac04aba5216", + "chksum_sha256": "cfea70f6d3c1cb3fe2a04e7a06d9887a6d9b95ae68015f2455cde00bb48b8844", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnsrecordset", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_devtestlabenvironment_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1b274684226da721ee03fdd590bb307709565a0a989ddb1a409a07db7c3b2e50", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnsrecordset/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_containerregistrytag.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9b6a6b029d0bff63cc6fd9cbbbc92f44337fd23d460747b942a4caf32731ad05", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnsrecordset/meta/main.yml", + "name": "plugins/modules/azure_rm_privatednszone.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "c4def272c347cc85f0e108b4392b69eabd6e9caf432cbb84b2acc902bd8a3f34", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnsrecordset/aliases", + "name": "plugins/modules/azure_rm_iothub_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "36614727374728e26b5686e9fac66641e5b9c268b6945f2dcd1b4a9c4d2232c3", + "chksum_sha256": "5ceef9d30aeb4826188b1c96a6d955955e99ae90a1e8b9ff437859f82a3cdd5a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnsrecordset/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_virtualmachineimage_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "81e679d55f2d54420d960d51e6f0318cec3b781dd37a062df0b0ff9e1756797e", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_dnsrecordset/tasks/main.yml", + "name": "plugins/modules/azure_rm_monitorlogprofile.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d766be151f93042b7018bd39ac79b987e66389613ce426a70d5683952b5a841", + "chksum_sha256": "0951e10121e28230e99e7a3143ce444c9bc4cbf8b7858033c6dd5d071e1ac579", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageaccount", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_postgresqlflexibledatabase_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e0e60a876bea1ad5af26ff70972b0ee0ada7f8435b51cb0a679ffd08f90212f6", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageaccount/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_apimanagement_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a7b9f6fe7e3fcd0a532ae601c02a53d45ddeddd5625d9b2747c33b0a653cdccc", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageaccount/meta/main.yml", + "name": "plugins/modules/azure_rm_devtestlab.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "2ee7422c462798a4b45173196c63c87773a6e863597e2aaa80608102d0e4d497", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageaccount/aliases", + "name": "plugins/modules/azure_rm_devtestlabarmtemplate_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", + "chksum_sha256": "92ab9069e528f924357f86307b0e0714d26a089381fe7ae5a833bd1a07071fc7", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageaccount/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_keyvaultsecret.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "11ac0f42fd18e2f8480376dc2021d461cbe09bd15464c089a5863ea09953b157", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageaccount/tasks/main.yml", + "name": "plugins/modules/azure_rm_galleryimageversion.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cddf19a5eb8e886612cfea1a81f43967228e1375327c04e984a143e6bf5d495f", + "chksum_sha256": "5696dced8e1885d7512b1289d87a9165d65071b8f7dfad7fa3d172d1e00b354f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mysqlserver", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_availabilityset.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "685bb7c2dfeaac6f1042b164d014064dcad6b8865cbe764da3ea9ab5f23a9a76", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mysqlserver/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_hdinsightcluster_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "735371a6bed2621d8a08ad8abe4e12b69d20295357f75f59988706d7115bf8e2", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mysqlserver/meta/main.yml", + "name": "plugins/modules/azure_rm_mariadbdatabase.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "f8dc569f2de810f80a09d827c276f44fd85dc254766b82bed9769846f41008b6", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mysqlserver/aliases", + "name": "plugins/modules/azure_rm_sshpublickey_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c74420c4bc9cc5d8af14406a1d97ea762c6b8afa4de8728a4a833b2e742cf41", + "chksum_sha256": "b02d533ef59cd58cdc9668f7f5eda1b7df55d75f0c56293fcd8ba50c2f39aebb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mysqlserver/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_virtualnetworkpeering.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f0ee463d7cbde4f3c704542e0ff6e8220b22f436b1014b15a355e8c832845ffd", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_mysqlserver/tasks/main.yml", + "name": "plugins/modules/azure_rm_privatelinkservice.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "743277ee9a1eda331e62acae9a94ba4820d4bef31de88a77008d62fdda27874c", + "chksum_sha256": "5c56fae085180b9c34424f1cb9fce62adaac67e7107f556702f1a8b9ae00025a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_expressroute", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_webappvnetconnection.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5f823a8fd9802af336c53b103f05d687a20989e92334d7bc122f7ccb62a6a410", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_expressroute/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_natgateway_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "05d862d157fc493cab345fea70f17c3913624364407562a9a2d884377f69f586", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_expressroute/meta/main.yml", + "name": "plugins/modules/azure_rm_appgateway_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "fbe1b90752ce94a33ab1c3e6771f90e4fe87d676e99819e15da631fe5fe2cea5", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_expressroute/aliases", + "name": "plugins/modules/azure_rm_postgresqldatabase_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", + "chksum_sha256": "3c896791d9f215a0ab5c7cb5315bcc302392ba07eea4081b4c68cf392c7013c2", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_expressroute/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_mariadbconfiguration_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "783f344263d15fef8444cab2f98286515b584c64945f759d1c45ab3363ae1304", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_expressroute/tasks/main.yml", + "name": "plugins/modules/azure_rm_storageaccount_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0fee3fb92d49fcebdc6564a4becd35f638cfa294e5d893fc5adf2fff21ac072b", + "chksum_sha256": "3bd4cbd10fcd4f1ea3c79e717e5323436f9bea1f0f49000015d098ba01ba943e", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_devtestlab", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_publicipaddress_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7c60893a6d181b60254e2b8e2dca0aae0c83c1f98bf2e1a6f2ab6206a222112f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_devtestlab/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_deployment.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2d452a372b394707323cee58c3d480e0510b8cc45d962dc7412c00ac96d58fe6", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_devtestlab/meta/main.yml", + "name": "plugins/modules/azure_rm_galleryimage_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "fe094e6c2005824059c1dc30f851d8c0df973c8f75148f1f1a3b7ed7a69bb262", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_devtestlab/aliases", + "name": "plugins/modules/azure_rm_storageshare_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "435162ac2df7aa373bc2d191a07d79c283d3891a1278b0277f85e6112b96fc03", + "chksum_sha256": "c30615415440ade0b39196ccd619a923cfce2162548c18c7edaec635f46e84e3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_devtestlab/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_sqlfirewallrule.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bf215ff5460bd7561374c1013e93dd13406286bedf9bb34fe5c63a423d65b996", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_devtestlab/tasks/main.yml", + "name": "plugins/modules/azure_rm_expressroute_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "17fd6c08f41838809e461f199a62e373c8bf28c5d90199bf09340ae9762dd252", + "chksum_sha256": "5e302a549f10b209ec9b8d61051f3ddf478eea0e4d99d8eb9af1db568975994f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageshare", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_availabilityset_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5210c3fbf5fd2f5b702cd82ba5cf7b44604231bebbe9f00a71ee71616a8e2e6b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageshare/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_sqldatabase_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d97f650c2b9d89769f4089c17e2d64c1ee066e5295e757119f270be7be10b25a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageshare/meta/main.yml", + "name": "plugins/modules/azure_rm_webapp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "3905f0d95ea3661bb716b8b1f6c7d0806ce92cb5eeec61824d0ec8657d75824f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageshare/aliases", + "name": "plugins/modules/azure_rm_eventhub.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", + "chksum_sha256": "aeadcc0ec44f966ae318556be223ecbbe4198c412c9d34d1360d724aa919ce0e", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageshare/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_postgresqlflexibleserver_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8be887b3634bf62a040d6ffbb5d1d5317d672761144d3967856a574cac4c7f17", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageshare/tasks/main.yml", + "name": "plugins/modules/azure_rm_servicebustopicsubscription.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8428a40d80a569d0c5ac929641e4befc59b86cf7c7cc4da72add3b5eb4570202", + "chksum_sha256": "7ffbac3a815640add669c05c8c29d78ac433ccd8e9762540746eef25457f6829", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistry", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_sshpublickey.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b30925c6282e8eeb24532186779ef38ea30a1780f6ac2baf52b0d8d2f1380bbe", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistry/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_virtualnetworkpeering_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "70b548cc3d9362d2c6a3c0ddedbded5ec61be98334bb43d0c59cad8a95065898", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistry/meta/main.yml", + "name": "plugins/modules/azure_rm_devtestlabcustomimage_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "b7cee683acac28bef8c299a125222c4f9d7ec64ebc9a56a3ae8aacc698d3a09b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistry/aliases", + "name": "plugins/modules/azure_rm_adpassword_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec1ff0ecb096def7880d4a1aab74cae1ee3e46dbdba9df7f476b7311ee64f2ab", + "chksum_sha256": "133c3630a9e91f45a7c86c05453240143d77f15f0bc985bd8c36128821ae4b3d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistry/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_vpnsite.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6f61d4a29a0d5b8270df41060245bdcd633e9b6d16e388cc97e19c828578872b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_containerregistry/tasks/main.yml", + "name": "plugins/modules/azure_rm_apimanagementservice_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7eab7dde3b4ad416e882a673e1b671770c760c1d2ff97f9c21606a24bb3a7540", + "chksum_sha256": "ed595234eeeeafd2c72aefcafbf6d13d86d057bfab2a41ae8b31b2690d74a2ff", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_acs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_virtualmachineextension.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "09bd02e50c12aa9e602e8ac7b4312b2619be27b656114309625c9aa39fbcb97a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_acs/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_mysqldatabase_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "942d9a275c4bee8ba4ee32eb8e025eec7f3b70e6a52fce3602631c1cce6884ae", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_acs/meta/main.yml", + "name": "plugins/modules/azure_rm_route.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "f290a0e704d3225c8689ac3a7a9523facc263adace73b8193906cb5ee94bffbd", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_acs/aliases", + "name": "plugins/modules/azure_rm_mariadbserver_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f7e954a810d0341b1aed1d34e5684bc502980bb6ebbe6a46fb03163ed0e11db", + "chksum_sha256": "3b836969fea8c255c6aeddca297111eef43141755a9b61677661dd581bb2f1a4", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_acs/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_image_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c6dfd163560a3389f0d12d364e61a5a6e6bb87f50b2fc08965b19285002b600d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_acs/tasks/main.yml", + "name": "plugins/modules/azure_rm_vmssnetworkinterface_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ecad2cdce0986a34a8f64d2bcbcbd742d99a0083d4e2773cc6a5482a5d529b9c", + "chksum_sha256": "968c1e5781fdca422d62eeea87dd9ac45132e5f03c7e3a91ca6b15d0683eb944", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageblob", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_sqlelasticpool_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "05959ef86783c8274fe64c2c1cec19208c37b3d038e6556ffb3a20b51813375c", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageblob/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_devtestlabpolicy_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8fcaf07dfe338c84a604855e61c4ad63061ed6e855ef5faf9edb34683d4f26a9", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageblob/meta/main.yml", + "name": "plugins/modules/azure_rm_publicipprefix.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "fd96262bbb96e29f08befba0e8ce69102066161089584b8cdf2f3ab6789fb6fc", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageblob/aliases", + "name": "plugins/modules/azure_rm_cdnendpoint_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4311037a5b5f1a98e3c03b7fa222f259e996783695c05fc0409990f95aa2dacb", + "format": 1 + }, + { + "name": "plugins/modules/azure_rm_hostgroup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "109bb8ece8ca54a061f03f7050aca3401610606b79a6e313d2556dcb04fda637", + "chksum_sha256": "7f3b26f577bb53702d0ed884da4c0c587dc6a186b7bdf9b87d3765c7dadcd89f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageblob/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_containerregistry_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b176c5d28ade7bb04fb50a82ea0c59987cc004136fcfc37a50cfa240d8c29cc3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageblob/tasks/main.yml", + "name": "plugins/modules/azure_rm_aksupgrade_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b93536f3d35eaa0d49a0bfb1ce75902b524b86c0db95f3e43122088dcfcac442", + "chksum_sha256": "e40923a0ba91ba10ec91ccd2960c60501d5e60c0287ab2578c66d756b865409f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageblob/files", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_containerregistrywebhook_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "18b7a6844956e67318fe818bdafd0c94d6631657ec33d529e721e6e21b18ed89", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_storageblob/files/Ratings.png", + "name": "plugins/modules/azure_rm_diskencryptionset_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "20cdf86ae984fb64eefdc57a0e03f34c83cb8b27834b33c84768cc2b62cf9d68", + "chksum_sha256": "586109c40b10714b5280368db2802fca8d4fc87f797e2b0d5084bb5e7a4df3df", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loganalyticsworkspace", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_devtestlabschedule.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b91018d718d35f6ce1b2e911281a31e747c5548db725d8d7b211418a2cb18fb8", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_recoveryservicesvault.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "91dd5cad76a70a786d62389117df58963ac794a6b4d6161c87461d067c168075", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/meta/main.yml", + "name": "plugins/modules/azure_rm_postgresqlfirewallrule.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "6a0ef8e59ec7d273bd94d6e8e40f6ffe8e0a313f8e8d912b9ecb71c5db6ea662", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/aliases", + "name": "plugins/modules/azure_rm_aksagentpool_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6ab21fb1deaf7061dd270b8ca0bf7c6e585eac172153559349e997150abbcaf", + "chksum_sha256": "92c6e3a0f537164ae87f3cf64dd071238a5c8349d7ca84a16826720fc5b82e44", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_adserviceprincipal_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "86743f28d6f9e141baae174641bd0b23f8f577ac3a4b2696a72cdd709dd765ff", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_loganalyticsworkspace/tasks/main.yml", + "name": "plugins/modules/azure_rm_privatednsrecordset_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "529ae2dab2d63d3af2eab9ff5fe9b466a9c2bf3bf600d0a5221126ddec9be288", + "chksum_sha256": "ca64fe771c93ee29952634b1acd63d8ae35c0f36b4ef3a33f6ac1ef0994e2e42", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backupazurevm", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_webappvnetconnection_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cbb81f50bdad8e9d738f6a8ff9566898df41fec03e92e3b03383228de5607fff", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backupazurevm/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_keyvault.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e4a7cf6ffe8993e17dbb9030bfec0c91eba08c6a15f3b040bde6217a6803f777", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backupazurevm/meta/main.yml", + "name": "plugins/modules/azure_rm_image.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "a4648f6095259498761c468442ee994954306f5a112c89ed427e4381dd1b9447", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backupazurevm/aliases", + "name": "plugins/modules/azure_rm_openshiftmanagedclusterkubeconfig_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91c612e6c7b96f80e7e1cede3dc0ef7431a2900356b7e85a7521e2679bfcfa49", + "chksum_sha256": "611955771172bb4644da4c97ee0c5131b303bcb301677e636f55f3ee9df3abfe", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backupazurevm/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_webappaccessrestriction.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a31793686f398ccb3ea7c32aad8341b808e06449bfe5ed468303d74a5406cf2a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_backupazurevm/tasks/main.yml", + "name": "plugins/modules/azure_rm_privatednszonelink.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ac0d2995ac62544c567223a1e45c1b1fc568b840b645d5b42a0b41fd4df1661", + "chksum_sha256": "4166cc9a7e671531be63455046c657896ef9ec1e35a84f7c9bf5bc39cd50bf11", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationdefinition", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_networkinterface_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "690d8bf0ccb1e6f3ab2587ff071b31132e60dfee385d10fde3347b7f0514f364", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationdefinition/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_automationaccount_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "048a0c9b532196427437575202beaf31f8314efb70c67aa86733e6cccc14a98c", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationdefinition/meta/main.yml", + "name": "plugins/modules/azure_rm_registrationdefinition_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "4b48937ab648dae2d339e1d1975b2e6562fbfb25b5b3789ca1c3295352963b22", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationdefinition/aliases", + "name": "plugins/modules/azure_rm_aduser.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", + "chksum_sha256": "f455cefd4a7af853f672ef7bffbc09422cd9f659841ac35ddc60a4a29c5cde65", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationdefinition/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_loadbalancer.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "40bcb2a088750276d350e5170a7993a5e92117948835d6bd30dcf5989db2cf11", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_registrationdefinition/tasks/main.yml", + "name": "plugins/modules/azure_rm_datalakestore_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b1e2343656426831e5aadf56883b897f520bfc13adee76347b787f396f037855", + "chksum_sha256": "64ced3d20472f4e29c76baed328f40e9bc1483583f04fbf7e69e9346b5ed07ad", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_availabilityset", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_multiplemanageddisks.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "95a1386da7e22dc74338466668e3542f37584f4272481fc56b298ee95053d23e", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_availabilityset/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_resource.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1c0e218be7f687e3d53c7b051293c6721071318582dada5c295b7cbc2420489d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_availabilityset/meta/main.yml", + "name": "plugins/modules/azure_rm_backuppolicy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "37cfea022ca13c6ea40025ae4ec9d00f9e962fba506e1a5708bc00dcfcdc9116", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_availabilityset/aliases", + "name": "plugins/modules/azure_rm_virtualmachinescaleset_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5647901b6198849a4dd58b7fb51aee85b889220f80acde88cea67bffff453d8d", + "chksum_sha256": "5925fb4d64f27c1460dc96e40aaa1eabda5612174aa598a717856b2861540662", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_availabilityset/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_sqldatabase.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4ad23bc0505f7a62a03434a0c94c2eaf90ed06c4d5e4ccbf05f169de465fd693", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_availabilityset/tasks/main.yml", + "name": "plugins/modules/azure_rm_dnsrecordset.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0d096b5b5000fd2c1c259adae048dd6ac824c2441db10e6fe352282c8bb77b8a", + "chksum_sha256": "291de8eb7d89ed612be3a3777aae9f947339745011f5f513cb14925f375c55a3", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hdinsightcluster", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_virtualmachinescalesetinstance_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d79dad68277ae5d3c8c72e1265606e28b17e19c26d2dd94452723a08b22e490d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hdinsightcluster/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_vpnsitelink_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c12058e056680201ef2358025ed148b9338a50eebace5b8784cc9acdc525093f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hdinsightcluster/meta/main.yml", + "name": "plugins/modules/azure_rm_containerregistrytag_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "99cde6ea4e4b3f5216131583a7f2ce0dc1777e836d93089733da276895c65b44", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hdinsightcluster/aliases", + "name": "plugins/modules/azure_rm_virtualmachinescalesetinstance.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dffdf5ca6061cf1a43744d6b7e0bb18a4020eed3f693702082b2314f982c65a6", + "chksum_sha256": "29c4528fce1aea43abda1fed65f9d49ef13b592592174c2305fd581e62cdcf8d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hdinsightcluster/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_storageaccount.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d09f22958e853cdcda49fe673df53310e1823dbae741054fe46f8cc8a8044b92", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_hdinsightcluster/tasks/main.yml", + "name": "plugins/modules/azure_rm_hostgroup_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a0464f133b840983fad3fa552279ac8aca4a07023877e84bd273e8bde440f65", + "chksum_sha256": "05d3069e290c810fe454923e22f4aae4932aa8924b12d872039904d87b779a07", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappvnetconnection", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_containerregistry.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "781782bcf6811e28b975d35abb3892b96dbf168421891a06e352d02ac4c00569", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappvnetconnection/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_proximityplacementgroup_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3e049bd091a4b88b2d68b6462d3cc15d740fcc65f5d3e310496513be40a83661", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappvnetconnection/meta/main.yml", + "name": "plugins/modules/azure_rm_resource_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "81d9773dc10d0f9db2f733a4f85972dd8bfe7542c5f75a9672921559e2adbd2d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappvnetconnection/aliases", + "name": "plugins/modules/azure_rm_virtualmachinesize_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "262ad6ab8a8087f2f21d4f26a2c2d02c347a7edf0fb1af8fdb931ab1c1087bbb", + "chksum_sha256": "24e4730a6256f17cd27877328ed90580bcd2ac93c1b3718b70e18d8c574769a5", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappvnetconnection/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_registrationassignment_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ac05497040ab2ad0a62d8b284128375cdf7bf2953572d5f08e3d125c8adacfbb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_webappvnetconnection/tasks/main.yml", + "name": "plugins/modules/azure_rm_managementgroup_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe11d34bfc4836a138318153cd0df0bb89f64d2d6d64f9dc7843704f1bd60760", + "chksum_sha256": "728bb535e8dbf3211e4a79123dfa981434dc51423efb046e2bfa6cb35c5949f6", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_networkinterface", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_datalakestore.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "da55af371c87610112c5ff6dd9d8a1c1e3fa38ffd2e3bf8d7887f9a0dfdfd03b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_networkinterface/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_adapplication.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "49e82eb39f31d45623c7713aa5e6f1a8ed2cb7eeffbd6eeca67a19ac8283687a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_networkinterface/meta/main.yml", + "name": "plugins/modules/azure_rm_servicebusqueue.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "5ba3c26da0e1437c64c3a7d945886563965b08c9fef67f099e97990ef5f50290", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_networkinterface/aliases", + "name": "plugins/modules/azure_rm_loganalyticsworkspace_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "79cafc6b10612f907e2e4a97bac50c9948ac0a0dd5030875a9465204a6323b48", + "chksum_sha256": "b2ea8f5bf029879cd6b7367c7c07d1f638453ff39e0c9f64c04db9afa3a57f8b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_networkinterface/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_postgresqlflexibleconfiguration_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "aaf618321aeed34343058f7278967fe2290250cfdfa525eb75fd431e2fd830fb", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_networkinterface/tasks/main.yml", + "name": "plugins/modules/azure_rm_monitordiagnosticsetting.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd2b9fd7ff5b256d26839ba3646b9347fa95f8fd6b1104e7f2835e1d7b7b2624", + "chksum_sha256": "a87a1032899109683876d6a6ce5eba1ee931f2c64442c0910d69242a05560b26", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednsrecordset", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_devtestlabschedule_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d421b64fef84568f67d602785f1529be85f0dc8650450fe132797b24df7b5424", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednsrecordset/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_servicebus.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f7379123759b383d1c9b39442ddff6beb7910e1bb6c68ba570a8d59eed2c6e95", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednsrecordset/meta/main.yml", + "name": "plugins/modules/azure_rm_managementgroup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "b327ba44e77b9ab0f30dd21b28a1dbcd750994b3ffb7a55fb96ea057a0378a7c", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednsrecordset/aliases", + "name": "plugins/modules/azure_rm_trafficmanagerendpoint.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "36614727374728e26b5686e9fac66641e5b9c268b6945f2dcd1b4a9c4d2232c3", + "chksum_sha256": "48772694d9d17d8d0f6b0e6d44c4359dbb35861116c38fa933b0db93981f7a76", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednsrecordset/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_postgresqlserver_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "41eccd6933ff71ce9f0bbfe939057aeea30beaf4c6e475887a7bf21df6a48f67", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednsrecordset/tasks/main.yml", + "name": "plugins/modules/azure_rm_devtestlabvirtualmachine.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1fc82f73aab3fbd25c62ca6e740a796a286df28c3de2cc6d084619cdb7fd12eb", + "chksum_sha256": "01373d3450d1449d03df275df6f2c64b6e067082e5a4ba0c5c6fa569224e58ee", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_proximityplacementgroup", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_postgresqlflexiblefirewallrule.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8db7ef3ea60e698e7b5a65be465d6a639927cc63d91a2da61e1cb6a5f89fe7b8", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_proximityplacementgroup/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_containerregistrywebhook.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b911199637d90fb213eaf63e586745cfb8ab889af2f199340d0d4df59138362a", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_proximityplacementgroup/meta/main.yml", + "name": "plugins/modules/azure_rm_eventhub_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "840c5f5441849b9ae7c489f04bb2fd065cc4192ca4a8143c1fc052c2845e002f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_proximityplacementgroup/aliases", + "name": "plugins/modules/azure_rm_ipgroup_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", + "chksum_sha256": "dcb8c2107767aeeae8dad3a39e68b5a1c475d9eb91e0a9c72b3276461fe0f4cd", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_proximityplacementgroup/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_trafficmanagerprofile_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b99d27f1679a3d1fafdec74448bfdf2977930e8cef05f0b6d720971b4f6b8c8d", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_proximityplacementgroup/tasks/main.yml", + "name": "plugins/modules/azure_rm_vpnsite_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5c88276931feb2e7c2b7386c1ed4885d19888d5f70cf8c76dd4088fa33fa79d", + "chksum_sha256": "63c87ba7508bb5c7e2f4968c4975b8e85e27260474dcb6f7d558295f9c56a946", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resourcegroup", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_registrationdefinition.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "01e4ec5adaaf634de07a9d34c5ca56639c5dd57d45c2a713dd6d563553a1dd3f", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resourcegroup/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_mariadbfirewallrule_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7a2b125c6e0ed19d1fe70703e24ed9e4257713c492e927785fe35cdf789afcc2", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resourcegroup/meta/main.yml", + "name": "plugins/modules/azure_rm_mysqlserver_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "595b1221845b1ff1d61c133eabb34930f9e9d0b59cd2ee853cddc487b182c57b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resourcegroup/aliases", + "name": "plugins/modules/azure_rm_adgroup_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd30933c00554775a36ee6421935b7d8baf776db7cb35d5a103be9e18b7d2486", + "chksum_sha256": "c2802b5f00ffe0edaf458e13a4929c6949f61d4d75e1d2b965445eb923fdf206", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resourcegroup/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_gallery.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9834bdff67c806952f4147583348ae861ea7a1b28eb9e2f153d9b7a5d9060bce", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_resourcegroup/tasks/main.yml", + "name": "plugins/modules/azure_rm_devtestlabvirtualnetwork.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ccf92a54443b6b7b1df4139247acd0d9496fb6266d6a99defb4035fb76cb61a3", + "chksum_sha256": "ba592f55f40cb7fa8986e924b493a8e8341db4f399085a963c488aef11626367", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhub", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_trafficmanagerendpoint_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "19fa3f18fc08a32e65b2dfb6c0b74a7a4827a2afcb36409214de9887899e754e", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhub/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_aksversion_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f5996a6bb0e520450296272e726d0c65a1b58fed9d780c0c9dbd2edbb8e31377", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhub/meta/main.yml", + "name": "plugins/modules/azure_rm_expressroute.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "b7a0f0dd5862dbb3fc72329ed7c6790cc18a79e279a3e3f85896c075dda2ab1c", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhub/aliases", + "name": "plugins/modules/azure_rm_webappslot.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b09e7a20443d9fe8e820607cf9ae826988c41fe890af049d025cb7eba9e4dbb0", + "chksum_sha256": "d7c28a3338c7a7ecfa0da50def079ab83286aa1750aa52d13944fbac4fbf2399", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhub/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_functionapp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b36955b4ade5a066cf353dc80387fb9e7419fabf07664db38510b29c6931282b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_virtualhub/tasks/main.yml", + "name": "plugins/modules/azure_rm_loganalyticsworkspace.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8810084bf5132a43f31c425b77e96134af6d5855dcb4d4ab94ed2b691d555614", + "chksum_sha256": "5f5d8fa3f00c30d80ce2427ccb7c9d8a00e78c255ecfc67fb1de5f37256c3418", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszone", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_securitygroup.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2b34dfe1c061f8745f84de518f66d0eb9a81d9c033240953ae63e31ebe7f2161", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszone/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_devtestlabvirtualmachine_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "37c4b6bc2ca17c75ce12edccfce27959e1f157ed0bf72a78184b8293e96a0d11", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszone/meta/main.yml", + "name": "plugins/modules/azure_rm_devtestlabartifactsource_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "7b31a9bbe98afcb5510621d353069923e449532df0b4e01de5e4fc3b7f421f6b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszone/aliases", + "name": "plugins/modules/azure_rm_accesstoken_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e131092efb0e9d778baeb38471a15da9b4f8ab9e3425ec4f37aaece309220d47", + "chksum_sha256": "05f2949f236a8f79c474c1caa57df258695e9f0a87f9072abe4aef9ca1d323d6", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszone/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_privateendpoint.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9cf71bc67a11a058b6eac5f7c06c3a003ecce968f6fe09285f43dbd81f91fdf9", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_privatednszone/tasks/main.yml", + "name": "plugins/modules/azure_rm_virtualhubconnection.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2de5836a16a64f95f0494dd53d54cd82716c1133e7707c0c2680d9502dfef5c", + "chksum_sha256": "2b3ba5bbf31b9e64c4e0978fa92768ce9115fe39450f5dd8085c775fe4ed2716", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_datafactory", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_batchaccount.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8da700f46228d2eda7ba617acfa096136ad1cf5923cb44ca9ea2e67c6ef0bbd0", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_datafactory/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_mariadbconfiguration.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f54c337f3d115d08dcac88d6e4fe16ef1db3d9dec1833b033928f227d89ea11b", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_datafactory/meta/main.yml", + "name": "plugins/modules/azure_rm_privatednszonelink_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00bd90476595ae7d97d3ca8f8aa7ff475ebc3dd87d7d12e862bf0527f7bd81f", + "chksum_sha256": "93d488b4238c4631765dff43c9a6978f3bef9d8ff35294dba4f34772a85a4284", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_datafactory/aliases", + "name": "plugins/modules/azure_rm_backupazurevm_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a74040b53394bd68b1885c350f1f62603740e721ca38e01609660895693a3858", + "chksum_sha256": "f347194586ae27419cecae08bec9340ce537b9c9eeb8bf785d25db8b60c99525", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_datafactory/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_servicebussaspolicy.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "10d85532d9875ac3da016f15add256df6cf2cbb8a88d4a57ad316bce7df7a45c", "format": 1 }, { - "name": "tests/integration/targets/azure_rm_datafactory/tasks/main.yml", + "name": "plugins/modules/azure_rm_rediscache_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eedba69010cd9dad1b57c7e0f7f18eacb0feb43359922cb53c3ba98479e8dfcc", + "chksum_sha256": "a10c697c6832b6d01d4c3645819ee5a8f254715d5b5ac4bdd8db94dbe8fa5602", "format": 1 }, { - "name": "tests/sanity", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/azure_rm_lock_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7e2b1cfcf35b517ad440bbb1457931c7481b5fd442e3f4fbd8a3710c549ac9a0", "format": 1 }, { - "name": "tests/sanity/ignore-2.13.txt", + "name": "plugins/modules/azure_rm_virtualmachinescalesetextension.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c88d45d86600e17b8da638521ccef69e6f48ce4a0e1486cb59e09ae1d0d65d57", + "chksum_sha256": "a8ef46432cfcc51726f0e9d1ce8003a5e9820432a253d897b420c8423c178f74", "format": 1 }, { - "name": "tests/sanity/ignore-2.15.txt", + "name": "plugins/modules/azure_rm_virtualnetwork.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c88d45d86600e17b8da638521ccef69e6f48ce4a0e1486cb59e09ae1d0d65d57", + "chksum_sha256": "d1f54cd77a98a82bbc32959ec20f38af893dc0a41c442c995ed64d42c53ceedc", "format": 1 }, { - "name": "tests/sanity/ignore-2.14.txt", + "name": "plugins/modules/azure_rm_devtestlabcustomimage.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c88d45d86600e17b8da638521ccef69e6f48ce4a0e1486cb59e09ae1d0d65d57", + "chksum_sha256": "9c9f8924ff79fc0b02518ff6a8142c1de2fe7ecf2164665def80420e31cd33e0", "format": 1 }, { - "name": "LICENSE", + "name": "plugins/modules/azure_rm_bastionhost_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b1ba204bb69a0ade2bfcf65ef294a920f6bb361b317dba43c7ef29d96332b9b", + "chksum_sha256": "dcdf18934767abd5f6912ce0bb9cbbff6954c79fab3998fdf9ea3c75f5f9d604", "format": 1 }, { - "name": "sanity-requirements-azure.txt", + "name": "plugins/modules/azure_rm_keyvault_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bd3de2a9921f5fcdfed1582123c18a91bd48b120d2e9c10d9879ef46d40e98f1", + "chksum_sha256": "6f2320d935c3989cf5f0e0fa1b06e87cced44393b5e772310a9c4e6f49c2fc1f", "format": 1 }, { - "name": "CHANGELOG.md", + "name": "plugins/modules/azure_rm_postgresqlconfiguration_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f464028041360717ad63fbeeb1a50c208c8d1c13792f1ac55f9aed2449af8da", + "chksum_sha256": "61b7807ec717db7657e825a2c1bbd815ede63112b9ce0bd4811e1c486ef01fd3", "format": 1 }, { - "name": "release-pipelines.yml", + "name": "plugins/modules/azure_rm_publicipprefix_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26a84e5d665443b05c84c798e9d901a7681cf891436e04b4a16c9f9cfbab1f8a", + "chksum_sha256": "c7b5a5d41eff443ad1b8ef21a06d230a559c32f11523f09060ccd3ea1101c933", "format": 1 }, { - "name": "CONTRIBUTING.md", + "name": "plugins/inventory", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/inventory/azure_rm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "290a3dfba9b53aecbf86badacfdcb7f320c9a924e02a8f0b4824785a551d0a39", + "chksum_sha256": "47b59006cb06078a81321afbd3b443cb9255af87a78989411a8d42c61f9b66ec", "format": 1 }, { - "name": ".idea", + "name": "plugins/lookup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": ".idea/misc.xml", + "name": "plugins/lookup/azure_keyvault_secret.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e5df86803b5913746c8d40c348879d7f9442e4a6bfefbae93cc711a640fba506", + "chksum_sha256": "80c27a8f8599afe6734f00e807a39e293e3569cf09517d2e09254996fe8c8818", "format": 1 }, { - "name": ".idea/azcollection.iml", + "name": "plugins/lookup/azure_service_principal_attribute.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a9e614b7294d32d9dd7d25fd7116079ac7e3ac6bbe3043f672cb3db0f828eeeb", + "chksum_sha256": "32b87b6f2e4b429d14d2f428cb504a73d1e2ab75a36ac99556f58a036ab12c7b", "format": 1 }, { - "name": ".idea/modules.xml", + "name": "CONTRIBUTING.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8aa540922a578f85297bfb3bacf703eb49b573c6c229fc2323e6a90e33bdca6", + "chksum_sha256": "290a3dfba9b53aecbf86badacfdcb7f320c9a924e02a8f0b4824785a551d0a39", "format": 1 }, { - "name": ".idea/workspace.xml", + "name": "azure-pipelines.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f87e05eb5e48aba1dff20dbea0fb919b6f3c848d2391064f56028ae939d7101d", + "chksum_sha256": "1f55cf75a25502f8322df2fc8640e52f85fed4459b8c26fee3c75295f9c45552", "format": 1 }, { - "name": ".idea/vcs.xml", + "name": "CredScanSuppressions.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "62be7e0a7f84ab3c35b4d4bafb890a4951d061eadafde1a10aa3f5d0406db5df", + "chksum_sha256": "98c0ee6a0b7a115787cf109a8c0e2ea4a61df6751ecda37915b22ffb44a1128d", "format": 1 }, { - "name": ".idea/inspectionProfiles", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "sanity-requirements-azure.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "62326475a7ffd00afcdaf8a3d89158f778593e56e8b694a388daf9f523b53648", "format": 1 }, { - "name": ".idea/inspectionProfiles/profiles_settings.xml", + "name": ".gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6172c5997eeb3cd19c9ca2b5b97d6e2983cdd1fa60b2460d7bbb74055edcaa46", + "chksum_sha256": "38926e151151b0e009deae6bd0bfc42f6ac03c8d1f900d32acc6e3711447f321", "format": 1 }, { - "name": ".idea/.gitignore", + "name": "pr-pipelines.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1bfdece3645ed8ed356030f22cc2004dc3f401ff060ac3d24de811c3bcd82e16", + "chksum_sha256": "ce013c171143675f4d44e20b4b7d3907c5cee12c53f055c2c3bf6edebb1342ea", "format": 1 }, { - "name": ".gitignore", + "name": "release-pipelines.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "702d6332d579931561017161f2d96eb3b023a006c94ed262d789411d0f21bd26", + "chksum_sha256": "26a84e5d665443b05c84c798e9d901a7681cf891436e04b4a16c9f9cfbab1f8a", + "format": 1 + }, + { + "name": "LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8b1ba204bb69a0ade2bfcf65ef294a920f6bb361b317dba43c7ef29d96332b9b", "format": 1 } ], diff --git a/ansible_collections/azure/azcollection/MANIFEST.json b/ansible_collections/azure/azcollection/MANIFEST.json index 4c8d77d4a..c78a03285 100644 --- a/ansible_collections/azure/azcollection/MANIFEST.json +++ b/ansible_collections/azure/azcollection/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "azure", "name": "azcollection", - "version": "1.19.0", + "version": "2.3.0", "authors": [ "Microsoft " ], @@ -31,7 +31,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ed7ebc35c6b19227d62f58a00333d40e5ba30ca842d3c2c293465bae42f7b4a", + "chksum_sha256": "27255da19a036c3db65d132f41dc1d28980b84543f99724b5d1e8d529804eabe", "format": 1 }, "format": 1 diff --git a/ansible_collections/azure/azcollection/README.md b/ansible_collections/azure/azcollection/README.md index 69d9e7c0b..cdc2953a6 100644 --- a/ansible_collections/azure/azcollection/README.md +++ b/ansible_collections/azure/azcollection/README.md @@ -13,7 +13,7 @@ It is recommended to run ansible in [Virtualenv](https://virtualenv.pypa.io/en/l ## Requirements -- ansible version >= 2.9 +- ansible version >= 2.14 To install Azure collection hosted in Galaxy: diff --git a/ansible_collections/azure/azcollection/meta/runtime.yml b/ansible_collections/azure/azcollection/meta/runtime.yml index ccff76341..5870f6d89 100644 --- a/ansible_collections/azure/azcollection/meta/runtime.yml +++ b/ansible_collections/azure/azcollection/meta/runtime.yml @@ -1,5 +1,5 @@ --- -requires_ansible: '>=2.13.0' +requires_ansible: '>=2.14.0' action_groups: all: - azure.azcollection.azure_rm_account_info diff --git a/ansible_collections/azure/azcollection/plugins/doc_fragments/azure.py b/ansible_collections/azure/azcollection/plugins/doc_fragments/azure.py index bc382e401..74c1286ac 100644 --- a/ansible_collections/azure/azcollection/plugins/doc_fragments/azure.py +++ b/ansible_collections/azure/azcollection/plugins/doc_fragments/azure.py @@ -34,7 +34,8 @@ options: type: str client_id: description: - - Azure client ID. Use when authenticating with a Service Principal. + - Azure client ID. Use when authenticating with a Service Principal or Managed Identity (msi). + - Can also be set via the C(AZURE_CLIENT_ID) environment variable. type: str secret: description: @@ -65,6 +66,19 @@ options: type: str choices: [ ignore, validate ] version_added: '0.0.1' + disable_instance_discovery: + description: + - Determines whether or not instance discovery is performed when attempting to authenticate. + Setting this to true will completely disable both instance discovery and authority validation. + This functionality is intended for use in scenarios where the metadata endpoint cannot be reached + such as in private clouds or Azure Stack. The process of instance discovery entails retrieving + authority metadata from https://login.microsoft.com/ to validate the authority. By setting this + to **True**, the validation of the authority is disabled. As a result, it is crucial to ensure + that the configured authority host is valid and trustworthy. + - Set via credential file profile or the C(AZURE_DISABLE_INSTANCE_DISCOVERY) environment variable. + type: bool + default: False + version_added: '2.3.0' auth_source: description: - Controls the source of the credentials to use for authentication. diff --git a/ansible_collections/azure/azcollection/plugins/doc_fragments/azure_rm.py b/ansible_collections/azure/azcollection/plugins/doc_fragments/azure_rm.py index 8d860d863..6677137a1 100644 --- a/ansible_collections/azure/azcollection/plugins/doc_fragments/azure_rm.py +++ b/ansible_collections/azure/azcollection/plugins/doc_fragments/azure_rm.py @@ -47,6 +47,11 @@ options: expression in the list is evaluated for each host; when the expression is true, the host is excluded from the inventory. default: [] + include_host_filters: + description: Include hosts from the inventory with a list of Jinja2 conditional expressions. Each + expression in the list is evaluated for each host; when the expression is true, the host is included + in the inventory, all hosts are includes in the inventory by default. + default: [true] batch_fetch: description: To improve performance, results are fetched using an unsupported batch API. Disabling C(batch_fetch) uses a much slower serial fetch, resulting in many more round-trips. Generally only @@ -61,8 +66,8 @@ options: description: - By default this plugin is using a general group name sanitization to create safe and usable group names for use in Ansible. This option allows you to override that, in efforts to allow migration from the old inventory script and - matches the sanitization of groups when the script's ``replace_dash_in_groups`` option is set to ``False``. - To replicate behavior of ``replace_dash_in_groups = True`` with constructed groups, + matches the sanitization of groups when the script's C(replace_dash_in_groups) option is set to C(false). + To replicate behavior of C(replace_dash_in_groups = true) with constructed groups, you will need to replace hyphens with underscores via the regex_replace filter for those entries. - For this to work you should also turn off the TRANSFORM_INVALID_GROUP_CHARS setting, otherwise the core engine will just use the standard sanitization on top. @@ -86,9 +91,9 @@ options: - Ignores expression if result is an empty string or None value. - By default, inventory_hostname is generated to be globally unique based on the VM host name. See C(plain_host_names) for more details on the default. - - An expression of 'default' will force using the default hostname generator if no previous hostname expression + - An expression of C(default) will force using the default hostname generator if no previous hostname expression resulted in a valid hostname. - - Use ``default_inventory_hostname`` to access the default hostname generator's value in any of the Jinja2 expressions. + - Use C(default_inventory_hostname) to access the default hostname generator's value in any of the Jinja2 expressions. type: list elements: str default: [default] diff --git a/ansible_collections/azure/azcollection/plugins/inventory/azure_rm.py b/ansible_collections/azure/azcollection/plugins/inventory/azure_rm.py index 3442aa124..12970dec3 100644 --- a/ansible_collections/azure/azcollection/plugins/inventory/azure_rm.py +++ b/ansible_collections/azure/azcollection/plugins/inventory/azure_rm.py @@ -105,6 +105,14 @@ exclude_host_filters: - tags['tagkey2'] is defined and tags['tagkey2'] == 'tagkey2' # excludes hosts that are powered off - powerstate != 'running' + +# includes a host to the inventory when any of these expressions is true, can refer to any vars defined on the host +include_host_filters: + # includes hosts that in the eastus region and power on + - location in ['eastus'] and powerstate == 'running' + # includes hosts in the eastus region and power on OR includes hosts in the eastus2 region and tagkey is tagkey + - location in ['eastus'] and powerstate == 'running' + - location in ['eastus2'] and tags['tagkey'] is defined and tags['tagkey'] == 'tagkey' ''' # FUTURE: do we need a set of sane default filters, separate from the user-defineable ones? @@ -130,12 +138,15 @@ from ansible.errors import AnsibleParserError, AnsibleError from ansible.module_utils.parsing.convert_bool import boolean from ansible.module_utils._text import to_native, to_bytes, to_text from itertools import chain +from os import environ try: from azure.core._pipeline_client import PipelineClient from azure.core.pipeline.policies import BearerTokenCredentialPolicy from azure.core.configuration import Configuration from azure.mgmt.core.tools import parse_resource_id + from azure.core.pipeline import PipelineResponse + from azure.mgmt.core.polling.arm_polling import ARMPolling except ImportError: Configuration = object parse_resource_id = object @@ -199,7 +210,7 @@ class InventoryModule(BaseInventoryPlugin, Constructable): if re.match(r'.{0,}azure_rm\.y(a)?ml$', path): return True # display.debug("azure_rm inventory filename must end with 'azure_rm.yml' or 'azure_rm.yaml'") - return False + raise AnsibleError("azure_rm inventory filename must end with 'azure_rm.yml' or 'azure_rm.yaml'") def parse(self, inventory, loader, path, cache=True): super(InventoryModule, self).parse(inventory, loader, path) @@ -215,6 +226,8 @@ class InventoryModule(BaseInventoryPlugin, Constructable): self._filters = self.get_option('exclude_host_filters') + self.get_option('default_host_filters') + self._include_filters = self.get_option('include_host_filters') + try: self._credential_setup() self._get_hosts() @@ -222,8 +235,9 @@ class InventoryModule(BaseInventoryPlugin, Constructable): raise def _credential_setup(self): + auth_source = environ.get('ANSIBLE_AZURE_AUTH_SOURCE', None) or self.get_option('auth_source') auth_options = dict( - auth_source=self.get_option('auth_source'), + auth_source=auth_source, profile=self.get_option('profile'), subscription_id=self.get_option('subscription_id'), client_id=self.get_option('client_id'), @@ -238,6 +252,18 @@ class InventoryModule(BaseInventoryPlugin, Constructable): adfs_authority_url=self.get_option('adfs_authority_url') ) + if self.templar.is_template(auth_options["tenant"]): + auth_options["tenant"] = self.templar.template(variable=auth_options["tenant"], disable_lookups=False) + + if self.templar.is_template(auth_options["client_id"]): + auth_options["client_id"] = self.templar.template(variable=auth_options["client_id"], disable_lookups=False) + + if self.templar.is_template(auth_options["secret"]): + auth_options["secret"] = self.templar.template(variable=auth_options["secret"], disable_lookups=False) + + if self.templar.is_template(auth_options["subscription_id"]): + auth_options["subscription_id"] = self.templar.template(variable=auth_options["subscription_id"], disable_lookups=False) + self.azure_auth = AzureRMAuth(**auth_options) self._clientconfig = AzureRMRestConfiguration(self.azure_auth.azure_credential_track2, self.azure_auth.subscription_id, @@ -297,12 +323,14 @@ class InventoryModule(BaseInventoryPlugin, Constructable): for h in self._hosts: # FUTURE: track hostnames to warn if a hostname is repeated (can happen for legacy and for composed inventory_hostname) inventory_hostname = self._get_hostname(h, hostnames=constructable_hostnames, strict=constructable_config_strict) - if self._filter_host(inventory_hostname, h.hostvars): + if self._filter_exclude_host(inventory_hostname, h.hostvars): + continue + if not self._filter_include_host(inventory_hostname, h.hostvars): continue self.inventory.add_host(inventory_hostname) # FUTURE: configurable default IP list? can already do this via hostvar_expressions self.inventory.set_variable(inventory_hostname, "ansible_host", - next(chain(h.hostvars['public_ipv4_addresses'], h.hostvars['private_ipv4_addresses']), None)) + next(chain(h.hostvars['public_ipv4_address'], h.hostvars['private_ipv4_addresses']), None)) for k, v in iteritems(h.hostvars): # FUTURE: configurable hostvar prefix? Makes docs harder... self.inventory.set_variable(inventory_hostname, k, v) @@ -313,10 +341,10 @@ class InventoryModule(BaseInventoryPlugin, Constructable): self._add_host_to_keyed_groups(constructable_config_keyed_groups, h.hostvars, inventory_hostname, strict=constructable_config_strict) # FUTURE: fix underlying inventory stuff to allow us to quickly access known groupvars from reconciled host - def _filter_host(self, inventory_hostname, hostvars): + def _filter_host(self, filter, inventory_hostname, hostvars): self.templar.available_variables = hostvars - for condition in self._filters: + for condition in filter: # FUTURE: should warn/fail if conditional doesn't return True or False conditional = "{{% if {0} %}} True {{% else %}} False {{% endif %}}".format(condition) try: @@ -329,6 +357,12 @@ class InventoryModule(BaseInventoryPlugin, Constructable): return False + def _filter_include_host(self, inventory_hostname, hostvars): + return self._filter_host(self._include_filters, inventory_hostname, hostvars) + + def _filter_exclude_host(self, inventory_hostname, hostvars): + return self._filter_host(self._filters, inventory_hostname, hostvars) + def _get_hostname(self, host, hostnames=None, strict=False): hostname = None errors = [] @@ -441,8 +475,18 @@ class InventoryModule(BaseInventoryPlugin, Constructable): request_new = self.new_client.post(url, query_parameters, header_parameters, body_content) response = self.new_client.send_request(request_new) - - return json.loads(response.body()) + if response.status_code == 202: + try: + poller = ARMPolling(timeout=3) + poller.initialize(client=self.new_client, + initial_response=PipelineResponse(None, response, None), + deserialization_callback=lambda r: r) + poller.run() + return poller.resource().context['deserialized_data'] + except Exception as ec: + raise + else: + return json.loads(response.body()) def send_request(self, url, api_version): query_parameters = {'api-version': api_version} @@ -525,9 +569,11 @@ class AzureHost(object): network_interface_id=[], security_group_id=[], security_group=[], - public_ipv4_addresses=[], + public_ip_address=[], + public_ipv4_address=[], public_dns_hostnames=[], private_ipv4_addresses=[], + subnet=[], id=self._vm_model['id'], location=self._vm_model['location'], name=self._vm_model['name'], @@ -550,25 +596,34 @@ class AzureHost(object): resource_group=parse_resource_id(self._vm_model['id']).get('resource_group').lower(), default_inventory_hostname=self.default_inventory_hostname, creation_time=self._vm_model['properties']['timeCreated'], + license_type=self._vm_model['properties'].get('licenseType', 'Unknown') ) # set nic-related values from the primary NIC first for nic in sorted(self.nics, key=lambda n: n.is_primary, reverse=True): # and from the primary IP config per NIC first for ipc in sorted(nic._nic_model['properties']['ipConfigurations'], key=lambda i: i['properties'].get('primary', False), reverse=True): - private_ip = ipc['properties'].get('privateIPAddress') - if private_ip: - new_hostvars['private_ipv4_addresses'].append(private_ip) - pip_id = ipc['properties'].get('publicIPAddress', {}).get('id') - if pip_id: - new_hostvars['public_ip_id'] = pip_id - - pip = nic.public_ips[pip_id] - new_hostvars['public_ip_name'] = pip._pip_model['name'] - new_hostvars['public_ipv4_addresses'].append(pip._pip_model['properties'].get('ipAddress', None)) - pip_fqdn = pip._pip_model['properties'].get('dnsSettings', {}).get('fqdn') - if pip_fqdn: - new_hostvars['public_dns_hostnames'].append(pip_fqdn) + try: + subnet = ipc['properties'].get('subnet') + if subnet: + new_hostvars['subnet'].append(subnet) + private_ip = ipc['properties'].get('privateIPAddress') + if private_ip: + new_hostvars['private_ipv4_addresses'].append(private_ip) + pip_id = ipc['properties'].get('publicIPAddress', {}).get('id') + if pip_id and pip_id in nic.public_ips: + pip = nic.public_ips[pip_id] + new_hostvars['public_ipv4_address'].append(pip._pip_model['properties'].get('ipAddress', None)) + new_hostvars['public_ip_address'].append({ + 'id': pip_id, + 'name': pip._pip_model['name'], + 'ipv4_address': pip._pip_model['properties'].get('ipAddress', None), + }) + pip_fqdn = pip._pip_model['properties'].get('dnsSettings', {}).get('fqdn') + if pip_fqdn: + new_hostvars['public_dns_hostnames'].append(pip_fqdn) + except Exception: + continue new_hostvars['mac_address'].append(nic._nic_model['properties'].get('macAddress')) new_hostvars['network_interface'].append(nic._nic_model['name']) diff --git a/ansible_collections/azure/azcollection/plugins/lookup/azure_keyvault_secret.py b/ansible_collections/azure/azcollection/plugins/lookup/azure_keyvault_secret.py index ea2183a5a..5e693e4b3 100644 --- a/ansible_collections/azure/azcollection/plugins/lookup/azure_keyvault_secret.py +++ b/ansible_collections/azure/azcollection/plugins/lookup/azure_keyvault_secret.py @@ -32,6 +32,8 @@ options: description: Secret of the service principal. tenant_id: description: Tenant id of service principal. + use_msi: + description: MSI token autodiscover, default is true. notes: - If version is not provided, this plugin will return the latest version of the secret. - If ansible is running on Azure Virtual Machine with MSI enabled, client_id, secret and tenant isn't required. @@ -74,7 +76,8 @@ EXAMPLE = """ vault_url=url, client_id=client_id, secret=secret, - tenant_id=tenant + tenant_id=tenant, + use_msi=false ) }}" @@ -139,22 +142,6 @@ token_headers = { 'Metadata': 'true' } -token = None - -try: - token_res = requests.get('http://169.254.169.254/metadata/identity/oauth2/token', params=token_params, headers=token_headers, timeout=(3.05, 27)) - if token_res.ok: - token = token_res.json().get("access_token") - if token is not None: - TOKEN_ACQUIRED = True - else: - display.v('Successfully called MSI endpoint, but no token was available. Will use service principal if provided.') - else: - display.v("Unable to query MSI endpoint, Error Code %s. Will use service principal if provided" % token_res.status_code) -except Exception: - display.v('Unable to fetch MSI token. Will use service principal if provided.') - TOKEN_ACQUIRED = False - def lookup_secret_non_msi(terms, vault_url, kwargs): @@ -187,6 +174,27 @@ class LookupModule(LookupBase): def run(self, terms, variables, **kwargs): ret = [] vault_url = kwargs.pop('vault_url', None) + use_msi = kwargs.pop('use_msi', True) + TOKEN_ACQUIRED = False + token = None + + if use_msi: + try: + token_res = requests.get('http://169.254.169.254/metadata/identity/oauth2/token', + params=token_params, + headers=token_headers, + timeout=(3.05, 27)) + if token_res.ok: + token = token_res.json().get("access_token") + if token is not None: + TOKEN_ACQUIRED = True + else: + display.v('Successfully called MSI endpoint, but no token was available. Will use service principal if provided.') + else: + display.v("Unable to query MSI endpoint, Error Code %s. Will use service principal if provided" % token_res.status_code) + except Exception: + display.v('Unable to fetch MSI token. Will use service principal if provided.') + if vault_url is None: raise AnsibleError('Failed to get valid vault url.') if TOKEN_ACQUIRED: diff --git a/ansible_collections/azure/azcollection/plugins/lookup/azure_service_principal_attribute.py b/ansible_collections/azure/azcollection/plugins/lookup/azure_service_principal_attribute.py new file mode 100644 index 000000000..1b1941026 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/lookup/azure_service_principal_attribute.py @@ -0,0 +1,101 @@ +# (c) 2018 Yunge Zhu, +# (c) 2017 Ansible Project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +DOCUMENTATION = """ +--- +name: azure_service_principal_attribute + +requirements: + - msgraph-sdk + +author: + - Yunge Zhu (@yungezz) + +version_added: "1.12.0" + +short_description: Look up Azure service principal attributes. + +description: + - Describes object id of your Azure service principal account. +options: + azure_client_id: + description: azure service principal client id. + azure_secret: + description: azure service principal secret + azure_tenant: + description: azure tenant + azure_cloud_environment: + description: azure cloud environment +""" + +EXAMPLES = """ +set_fact: + object_id: "{{ lookup('azure_service_principal_attribute', + azure_client_id=azure_client_id, + azure_secret=azure_secret, + azure_tenant=azure_secret) }}" +""" + +RETURN = """ +_raw: + description: + Returns object id of service principal. +""" + +from ansible.errors import AnsibleError +from ansible.plugins.lookup import LookupBase +from ansible.module_utils._text import to_native + +try: + from azure.cli.core import cloud as azure_cloud + from azure.identity._credentials.client_secret import ClientSecretCredential + import asyncio + from msgraph import GraphServiceClient + from msgraph.generated.service_principals.service_principals_request_builder import ServicePrincipalsRequestBuilder +except ImportError: + pass + + +class LookupModule(LookupBase): + def run(self, terms, variables, **kwargs): + + self.set_options(direct=kwargs) + + credentials = {} + credentials['azure_client_id'] = self.get_option('azure_client_id', None) + credentials['azure_secret'] = self.get_option('azure_secret', None) + credentials['azure_tenant'] = self.get_option('azure_tenant', 'common') + + if credentials['azure_client_id'] is None or credentials['azure_secret'] is None: + raise AnsibleError("Must specify azure_client_id and azure_secret") + + _cloud_environment = azure_cloud.AZURE_PUBLIC_CLOUD + if self.get_option('azure_cloud_environment', None) is not None: + _cloud_environment = azure_cloud.get_cloud_from_metadata_endpoint(credentials['azure_cloud_environment']) + + try: + azure_credential_track2 = ClientSecretCredential(client_id=credentials['azure_client_id'], + client_secret=credentials['azure_secret'], + tenant_id=credentials['azure_tenant'], + authority=_cloud_environment.endpoints.active_directory) + + client = GraphServiceClient(azure_credential_track2) + + response = asyncio.get_event_loop().run_until_complete(self.get_service_principals(client, credentials['azure_client_id'])) + if not response: + return [] + return list(response.value)[0].id.split(',') + except Exception as ex: + raise AnsibleError("Failed to get service principal object id: %s" % to_native(ex)) + return False + + async def get_service_principals(self, _client, app_id): + request_configuration = ServicePrincipalsRequestBuilder.ServicePrincipalsRequestBuilderGetRequestConfiguration( + query_parameters=ServicePrincipalsRequestBuilder.ServicePrincipalsRequestBuilderGetQueryParameters( + filter="servicePrincipalNames/any(c:c eq '{0}')".format(app_id), + ) + ) + return await _client.service_principals.get(request_configuration=request_configuration) diff --git a/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py b/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py index 9c0e6e839..79b5167b1 100644 --- a/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py +++ b/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common.py @@ -15,10 +15,6 @@ import inspect import traceback import json -try: - from azure.graphrbac import GraphRbacManagementClient -except Exception: - pass from os.path import expanduser from ansible.module_utils.basic import \ @@ -53,6 +49,7 @@ AZURE_COMMON_ARGS = dict( log_path=dict(type='str', no_log=True), x509_certificate_path=dict(type='path', no_log=True), thumbprint=dict(type='str', no_log=True), + disable_instance_discovery=dict(type='bool', default=False), ) AZURE_CREDENTIAL_ENV_MAPPING = dict( @@ -67,7 +64,8 @@ AZURE_CREDENTIAL_ENV_MAPPING = dict( cert_validation_mode='AZURE_CERT_VALIDATION_MODE', adfs_authority_url='AZURE_ADFS_AUTHORITY_URL', x509_certificate_path='AZURE_X509_CERTIFICATE_PATH', - thumbprint='AZURE_THUMBPRINT' + thumbprint='AZURE_THUMBPRINT', + disable_instance_discovery='AZURE_DISABLE_INSTANCE_DISCOVERY' ) @@ -114,7 +112,28 @@ AZURE_API_PROFILES = { 'ManagementLockClient': '2016-09-01', 'DataLakeStoreAccountManagementClient': '2016-11-01', 'NotificationHubsManagementClient': '2016-03-01', - 'EventHubManagementClient': '2018-05-04' + 'EventHubManagementClient': '2021-11-01', + 'GenericRestClient': 'latest', + 'DnsManagementClient': '2018-05-01', + 'PrivateDnsManagementClient': 'latest', + 'ContainerServiceClient': '2022-02-01', + 'SqlManagementClient': 'latest', + 'ContainerRegistryManagementClient': '2021-09-01', + 'MarketplaceOrderingAgreements': 'latest', + 'TrafficManagerManagementClient': 'latest', + 'MonitorManagementClient': '2016-03-01', + 'LogAnalyticsManagementClient': 'latest', + 'ServiceBusManagementClient': 'latest', + 'AutomationClient': 'latest', + 'IotHubClient': 'latest', + 'RecoveryServicesBackupClient': 'latest', + 'DataFactoryManagementClient': 'latest', + 'KeyVaultManagementClient': '2021-10-01', + 'HDInsightManagementClient': 'latest', + 'DevTestLabsClient': 'latest', + 'CosmosDBManagementClient': 'latest', + 'CdnManagementClient': '2017-04-02', + 'BatchManagementClient': 'latest', }, '2019-03-01-hybrid': { 'StorageManagementClient': '2017-10-01', @@ -220,11 +239,8 @@ except ImportError: try: from enum import Enum - from msrestazure.azure_active_directory import AADTokenCredentials - from msrestazure.azure_active_directory import MSIAuthentication from azure.mgmt.core.tools import parse_resource_id, resource_id, is_valid_resource_id from azure.cli.core import cloud as azure_cloud - from azure.common.credentials import ServicePrincipalCredentials, UserPassCredentials from azure.mgmt.network import NetworkManagementClient from azure.mgmt.resource.resources import ResourceManagementClient from azure.mgmt.managementgroups import ManagementGroupsAPI as ManagementGroupsClient @@ -240,11 +256,11 @@ try: from azure.mgmt.marketplaceordering import MarketplaceOrderingAgreements from azure.mgmt.trafficmanager import TrafficManagerManagementClient from azure.storage.blob import BlobServiceClient - from msal.application import ClientApplication, ConfidentialClientApplication from azure.mgmt.authorization import AuthorizationManagementClient from azure.mgmt.sql import SqlManagementClient from azure.mgmt.servicebus import ServiceBusManagementClient from azure.mgmt.rdbms.postgresql import PostgreSQLManagementClient + from azure.mgmt.rdbms.postgresql_flexibleservers import PostgreSQLManagementClient as PostgreSQLFlexibleManagementClient from azure.mgmt.rdbms.mysql import MySQLManagementClient from azure.mgmt.rdbms.mariadb import MariaDBManagementClient from azure.mgmt.containerregistry import ContainerRegistryManagementClient @@ -257,7 +273,11 @@ try: from azure.mgmt.iothub import models as IoTHubModels from azure.mgmt.resource.locks import ManagementLockClient from azure.mgmt.recoveryservicesbackup import RecoveryServicesBackupClient - import azure.mgmt.recoveryservicesbackup.models as RecoveryServicesBackupModels + try: + # Older versions of the library exposed the modules at the root of the package + import azure.mgmt.recoveryservicesbackup.models as RecoveryServicesBackupModels + except ImportError: + import azure.mgmt.recoveryservicesbackup.activestamp.models as RecoveryServicesBackupModels from azure.mgmt.search import SearchManagementClient from azure.mgmt.datalake.store import DataLakeStoreAccountManagementClient import azure.mgmt.datalake.store.models as DataLakeStoreAccountModel @@ -266,6 +286,8 @@ try: from azure.mgmt.datafactory import DataFactoryManagementClient import azure.mgmt.datafactory.models as DataFactoryModel from azure.identity._credentials import client_secret, user_password, certificate, managed_identity + from azure.identity import AzureCliCredential + from msgraph import GraphServiceClient except ImportError as exc: Authentication = object @@ -415,6 +437,7 @@ class AzureRMModuleBase(object): self._mysql_client = None self._mariadb_client = None self._postgresql_client = None + self._postgresql_flexible_client = None self._containerregistry_client = None self._containerinstance_client = None self._containerservice_client = None @@ -484,8 +507,8 @@ class AzureRMModuleBase(object): ''' self.module.fail_json(msg=msg, **kwargs) - def deprecate(self, msg, version=None): - self.module.deprecate(msg, version) + def deprecate(self, msg, version=None, collection_name='azure.azcollection'): + self.module.deprecate(msg, version, collection_name=collection_name) def log(self, msg, pretty_print=False): if pretty_print: @@ -675,11 +698,15 @@ class AzureRMModuleBase(object): self.fail("Error {0} has a provisioning state of {1}. Expecting state to be {2}.".format( azure_object.name, azure_object.provisioning_state, AZURE_SUCCESS_STATE)) - def get_blob_service_client(self, resource_group_name, storage_account_name): + def get_blob_service_client(self, resource_group_name, storage_account_name, auth_mode='key'): try: self.log("Getting storage account detail") account = self.storage_client.storage_accounts.get_properties(resource_group_name=resource_group_name, account_name=storage_account_name) - account_keys = self.storage_client.storage_accounts.list_keys(resource_group_name=resource_group_name, account_name=storage_account_name) + if auth_mode == 'login' and self.azure_auth.credentials.get('credential'): + credential = self.azure_auth.credentials['credential'] + else: + account_keys = self.storage_client.storage_accounts.list_keys(resource_group_name=resource_group_name, account_name=storage_account_name) + credential = account_keys.keys[0].value except Exception as exc: self.fail("Error getting storage account detail for {0}: {1}".format(storage_account_name, str(exc))) @@ -687,7 +714,7 @@ class AzureRMModuleBase(object): self.log("Create blob service client") return BlobServiceClient( account_url=account.primary_endpoints.blob, - credential=account_keys.keys[0].value, + credential=credential, ) except Exception as exc: self.fail("Error creating blob service client for storage account {0} - {1}".format(storage_account_name, str(exc))) @@ -854,14 +881,17 @@ class AzureRMModuleBase(object): # wrap basic strings in a dict that just defines the default return dict(default_api_version=profile_raw) - def get_graphrbac_client(self, tenant_id): - cred = self.azure_auth.azure_credentials - base_url = self.azure_auth._cloud_environment.endpoints.active_directory_graph_resource_id - client = GraphRbacManagementClient(cred, tenant_id, base_url) + # The graphrbac has deprecated, migrate to msgraph + # def get_graphrbac_client(self, tenant_id): + # cred = self.azure_auth.azure_credentials + # base_url = self.azure_auth._cloud_environment.endpoints.active_directory_graph_resource_id + # client = GraphRbacManagementClient(cred, tenant_id, base_url) + # return client - return client + def get_msgraph_client(self): + return GraphServiceClient(self.azure_auth.azure_credential_track2) - def get_mgmt_svc_client(self, client_type, base_url=None, api_version=None, suppress_subscription_id=False, is_track2=False): + def get_mgmt_svc_client(self, client_type, base_url=None, api_version=None, suppress_subscription_id=False): self.log('Getting management service client {0}'.format(client_type.__name__)) self.check_client_version(client_type) @@ -883,16 +913,10 @@ class AzureRMModuleBase(object): # Some management clients do not take a subscription ID as parameters. if suppress_subscription_id: - if is_track2: - client_kwargs = dict(credential=self.azure_auth.azure_credential_track2, base_url=base_url, credential_scopes=[base_url + ".default"]) - else: - client_kwargs = dict(credentials=self.azure_auth.azure_credentials, base_url=base_url) + client_kwargs = dict(credential=self.azure_auth.azure_credential_track2, base_url=base_url, credential_scopes=[base_url + ".default"]) else: - if is_track2: - client_kwargs = dict(credential=self.azure_auth.azure_credential_track2, - subscription_id=mgmt_subscription_id, base_url=base_url, credential_scopes=[base_url + ".default"]) - else: - client_kwargs = dict(credentials=self.azure_auth.azure_credentials, subscription_id=mgmt_subscription_id, base_url=base_url) + client_kwargs = dict(credential=self.azure_auth.azure_credential_track2, + subscription_id=mgmt_subscription_id, base_url=base_url, credential_scopes=[base_url + ".default"]) api_profile_dict = {} @@ -926,13 +950,8 @@ class AzureRMModuleBase(object): setattr(client, '_ansible_models', importlib.import_module(client_type.__module__).models) client.models = types.MethodType(_ansible_get_models, client) - if not is_track2: - client.config = self.add_user_agent(client.config) - if self.azure_auth._cert_validation_mode == 'ignore': - client.config.session_configuration_callback = self._validation_ignore_callback - else: - if self.azure_auth._cert_validation_mode == 'ignore': - client._config.session_configuration_callback = self._validation_ignore_callback + if self.azure_auth._cert_validation_mode == 'ignore': + client._config.session_configuration_callback = self._validation_ignore_callback return client @@ -992,7 +1011,6 @@ class AzureRMModuleBase(object): if not self._storage_client: self._storage_client = self.get_mgmt_svc_client(StorageManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2021-06-01') return self._storage_client @@ -1006,7 +1024,6 @@ class AzureRMModuleBase(object): if not self._authorization_client: self._authorization_client = self.get_mgmt_svc_client(AuthorizationManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2020-04-01-preview') return self._authorization_client @@ -1021,7 +1038,6 @@ class AzureRMModuleBase(object): self._subscription_client = self.get_mgmt_svc_client(SubscriptionClient, base_url=self._cloud_environment.endpoints.resource_manager, suppress_subscription_id=True, - is_track2=True, api_version='2019-11-01') return self._subscription_client @@ -1036,7 +1052,6 @@ class AzureRMModuleBase(object): self._management_group_client = self.get_mgmt_svc_client(ManagementGroupsClient, base_url=self._cloud_environment.endpoints.resource_manager, suppress_subscription_id=True, - is_track2=True, api_version='2020-05-01') return self._management_group_client @@ -1046,7 +1061,6 @@ class AzureRMModuleBase(object): if not self._network_client: self._network_client = self.get_mgmt_svc_client(NetworkManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2021-03-01') return self._network_client @@ -1061,7 +1075,6 @@ class AzureRMModuleBase(object): if not self._resource_client: self._resource_client = self.get_mgmt_svc_client(ResourceManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2019-10-01') return self._resource_client @@ -1076,7 +1089,6 @@ class AzureRMModuleBase(object): if not self._image_client: self._image_client = self.get_mgmt_svc_client(ComputeManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2021-04-01') return self._image_client @@ -1091,7 +1103,6 @@ class AzureRMModuleBase(object): if not self._compute_client: self._compute_client = self.get_mgmt_svc_client(ComputeManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2021-04-01') return self._compute_client @@ -1106,7 +1117,6 @@ class AzureRMModuleBase(object): if not self._dns_client: self._dns_client = self.get_mgmt_svc_client(DnsManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2018-05-01') return self._dns_client @@ -1121,7 +1131,6 @@ class AzureRMModuleBase(object): if not self._private_dns_client: self._private_dns_client = self.get_mgmt_svc_client( PrivateDnsManagementClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) return self._private_dns_client @@ -1136,7 +1145,6 @@ class AzureRMModuleBase(object): if not self._web_client: self._web_client = self.get_mgmt_svc_client(WebSiteManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2021-03-01') return self._web_client @@ -1146,7 +1154,6 @@ class AzureRMModuleBase(object): if not self._containerservice_client: self._containerservice_client = self.get_mgmt_svc_client(ContainerServiceClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2017-07-01') return self._containerservice_client @@ -1161,7 +1168,6 @@ class AzureRMModuleBase(object): if not self._managedcluster_client: self._managedcluster_client = self.get_mgmt_svc_client(ContainerServiceClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2022-02-01') return self._managedcluster_client @@ -1170,16 +1176,22 @@ class AzureRMModuleBase(object): self.log('Getting SQL client') if not self._sql_client: self._sql_client = self.get_mgmt_svc_client(SqlManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True) + base_url=self._cloud_environment.endpoints.resource_manager) return self._sql_client + @property + def postgresql_flexible_client(self): + self.log('Getting PostgreSQL client') + if not self._postgresql_flexible_client: + self._postgresql_flexible_client = self.get_mgmt_svc_client(PostgreSQLFlexibleManagementClient, + base_url=self._cloud_environment.endpoints.resource_manager) + return self._postgresql_flexible_client + @property def postgresql_client(self): self.log('Getting PostgreSQL client') if not self._postgresql_client: self._postgresql_client = self.get_mgmt_svc_client(PostgreSQLManagementClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) return self._postgresql_client @@ -1188,7 +1200,6 @@ class AzureRMModuleBase(object): self.log('Getting MySQL client') if not self._mysql_client: self._mysql_client = self.get_mgmt_svc_client(MySQLManagementClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) return self._mysql_client @@ -1197,7 +1208,6 @@ class AzureRMModuleBase(object): self.log('Getting MariaDB client') if not self._mariadb_client: self._mariadb_client = self.get_mgmt_svc_client(MariaDBManagementClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) return self._mariadb_client @@ -1207,7 +1217,6 @@ class AzureRMModuleBase(object): if not self._containerregistry_client: self._containerregistry_client = self.get_mgmt_svc_client(ContainerRegistryManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2021-09-01') return self._containerregistry_client @@ -1218,7 +1227,6 @@ class AzureRMModuleBase(object): if not self._containerinstance_client: self._containerinstance_client = self.get_mgmt_svc_client(ContainerInstanceManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2018-06-01') return self._containerinstance_client @@ -1228,7 +1236,6 @@ class AzureRMModuleBase(object): self.log('Getting marketplace agreement client') if not self._marketplace_client: self._marketplace_client = self.get_mgmt_svc_client(MarketplaceOrderingAgreements, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) return self._marketplace_client @@ -1237,7 +1244,6 @@ class AzureRMModuleBase(object): self.log('Getting traffic manager client') if not self._traffic_manager_management_client: self._traffic_manager_management_client = self.get_mgmt_svc_client(TrafficManagerManagementClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) return self._traffic_manager_management_client @@ -1247,8 +1253,7 @@ class AzureRMModuleBase(object): if not self._monitor_autoscale_settings_client: self._monitor_autoscale_settings_client = self.get_mgmt_svc_client(MonitorManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - api_version="2015-04-01", - is_track2=True) + api_version="2015-04-01") return self._monitor_autoscale_settings_client @property @@ -1257,8 +1262,7 @@ class AzureRMModuleBase(object): if not self._monitor_log_profiles_client: self._monitor_log_profiles_client = self.get_mgmt_svc_client(MonitorManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - api_version="2016-03-01", - is_track2=True) + api_version="2016-03-01") return self._monitor_log_profiles_client @property @@ -1267,8 +1271,7 @@ class AzureRMModuleBase(object): if not self._monitor_diagnostic_settings_client: self._monitor_diagnostic_settings_client = self.get_mgmt_svc_client(MonitorManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - api_version="2021-05-01-preview", - is_track2=True) + api_version="2021-05-01-preview") return self._monitor_diagnostic_settings_client @property @@ -1276,7 +1279,6 @@ class AzureRMModuleBase(object): self.log('Getting log analytics client') if not self._log_analytics_client: self._log_analytics_client = self.get_mgmt_svc_client(LogAnalyticsManagementClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) return self._log_analytics_client @@ -1290,7 +1292,6 @@ class AzureRMModuleBase(object): self.log('Getting servicebus client') if not self._servicebus_client: self._servicebus_client = self.get_mgmt_svc_client(ServiceBusManagementClient, - is_track2=True, api_version="2021-06-01-preview", base_url=self._cloud_environment.endpoints.resource_manager) return self._servicebus_client @@ -1304,8 +1305,7 @@ class AzureRMModuleBase(object): self.log('Getting automation client') if not self._automation_client: self._automation_client = self.get_mgmt_svc_client(AutomationClient, - base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True) + base_url=self._cloud_environment.endpoints.resource_manager) return self._automation_client @property @@ -1317,7 +1317,6 @@ class AzureRMModuleBase(object): self.log('Getting iothub client') if not self._IoThub_client: self._IoThub_client = self.get_mgmt_svc_client(IotHubClient, - is_track2=True, api_version='2018-04-01', base_url=self._cloud_environment.endpoints.resource_manager) return self._IoThub_client @@ -1332,7 +1331,6 @@ class AzureRMModuleBase(object): if not self._lock_client: self._lock_client = self.get_mgmt_svc_client(ManagementLockClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2016-09-01') return self._lock_client @@ -1346,7 +1344,6 @@ class AzureRMModuleBase(object): self.log('Getting recovery services backup client') if not self._recovery_services_backup_client: self._recovery_services_backup_client = self.get_mgmt_svc_client(RecoveryServicesBackupClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) return self._recovery_services_backup_client @@ -1360,7 +1357,6 @@ class AzureRMModuleBase(object): if not self._search_client: self._search_client = self.get_mgmt_svc_client(SearchManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2020-08-01') return self._search_client @@ -1370,7 +1366,6 @@ class AzureRMModuleBase(object): if not self._datalake_store_client: self._datalake_store_client = self.get_mgmt_svc_client(DataLakeStoreAccountManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2016-11-01') return self._datalake_store_client @@ -1385,7 +1380,6 @@ class AzureRMModuleBase(object): self._notification_hub_client = self.get_mgmt_svc_client( NotificationHubsManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2016-03-01') return self._notification_hub_client @@ -1396,7 +1390,6 @@ class AzureRMModuleBase(object): self._event_hub_client = self.get_mgmt_svc_client( EventHubManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2021-11-01') return self._event_hub_client @@ -1405,7 +1398,6 @@ class AzureRMModuleBase(object): self.log('Getting datafactory client...') if not self._datafactory_client: self._datafactory_client = self.get_mgmt_svc_client(DataFactoryManagementClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) return self._datafactory_client @@ -1425,7 +1417,8 @@ class AzureRMAuth(object): def __init__(self, auth_source=None, profile=None, subscription_id=None, client_id=None, secret=None, tenant=None, ad_user=None, password=None, cloud_environment='AzureCloud', cert_validation_mode='validate', api_profile='latest', adfs_authority_url=None, fail_impl=None, is_ad_resource=False, - x509_certificate_path=None, thumbprint=None, track1_cred=False, **kwargs): + x509_certificate_path=None, thumbprint=None, track1_cred=False, + disable_instance_discovery=False, **kwargs): if fail_impl: self._fail_impl = fail_impl @@ -1448,7 +1441,8 @@ class AzureRMAuth(object): api_profile=api_profile, adfs_authority_url=adfs_authority_url, x509_certificate_path=x509_certificate_path, - thumbprint=thumbprint) + thumbprint=thumbprint, + disable_instance_discovery=disable_instance_discovery) if not self.credentials: if HAS_AZURE_CLI_CORE: @@ -1467,6 +1461,12 @@ class AzureRMAuth(object): if self._cert_validation_mode not in ['validate', 'ignore']: self.fail('invalid cert_validation_mode: {0}'.format(self._cert_validation_mode)) + # Disable instance discovery: module-arg, credential profile, env, "False" + self._disable_instance_discovery = disable_instance_discovery or \ + self.credentials.get('disable_instance_discovery') or \ + self._get_env('disable_instance_discovery') or \ + False + # if cloud_environment specified, look up/build Cloud object raw_cloud_env = self.credentials.get('cloud_environment') if self.credentials.get('credentials') is not None and raw_cloud_env is not None: @@ -1504,84 +1504,50 @@ class AzureRMAuth(object): if self.credentials.get('auth_source') == 'msi': # MSI Credentials - if is_ad_resource or track1_cred: - self.azure_credentials = self.credentials['credentials'] - self.azure_credential_track2 = self.credentials['credential'] + self.azure_credential_track2 = self.credentials['credentials'] elif self.credentials.get('credentials') is not None: # AzureCLI credentials - if is_ad_resource or track1_cred: - self.azure_credentials = self.credentials['credentials'] self.azure_credential_track2 = self.credentials['credentials'] elif self.credentials.get('client_id') is not None and \ self.credentials.get('secret') is not None and \ self.credentials.get('tenant') is not None: - - graph_resource = self._cloud_environment.endpoints.active_directory_graph_resource_id - rm_resource = self._cloud_environment.endpoints.resource_manager - if is_ad_resource or track1_cred: - self.azure_credentials = ServicePrincipalCredentials(client_id=self.credentials['client_id'], - secret=self.credentials['secret'], - tenant=self.credentials['tenant'], - cloud_environment=self._cloud_environment, - resource=graph_resource if self.is_ad_resource else rm_resource, - verify=self._cert_validation_mode == 'validate') self.azure_credential_track2 = client_secret.ClientSecretCredential(client_id=self.credentials['client_id'], client_secret=self.credentials['secret'], tenant_id=self.credentials['tenant'], - authority=self._adfs_authority_url) + authority=self._adfs_authority_url, + disable_instance_discovery=self._disable_instance_discovery) elif self.credentials.get('client_id') is not None and \ self.credentials.get('tenant') is not None and \ self.credentials.get('thumbprint') is not None and \ self.credentials.get('x509_certificate_path') is not None: - if is_ad_resource or track1_cred: - self.azure_credentials = self.acquire_token_with_client_certificate( - self._adfs_authority_url, - self.credentials['x509_certificate_path'], - self.credentials['thumbprint'], - self.credentials['client_id'], - self.credentials['tenant']) - self.azure_credential_track2 = certificate.CertificateCredential(tenant_id=self.credentials['tenant'], client_id=self.credentials['client_id'], certificate_path=self.credentials['x509_certificate_path'], - authority=self._adfs_authority_url) + authority=self._adfs_authority_url, + disable_instance_discovery=self._disable_instance_discovery) elif self.credentials.get('ad_user') is not None and \ self.credentials.get('password') is not None and \ self.credentials.get('client_id') is not None and \ self.credentials.get('tenant') is not None: - if is_ad_resource or track1_cred: - self.azure_credentials = self.acquire_token_with_username_password( - self._adfs_authority_url, - self.credentials['ad_user'], - self.credentials['password'], - self.credentials['client_id'], - self.credentials['tenant']) self.azure_credential_track2 = user_password.UsernamePasswordCredential(username=self.credentials['ad_user'], password=self.credentials['password'], tenant_id=self.credentials.get('tenant'), client_id=self.credentials.get('client_id'), - authority=self._adfs_authority_url) + authority=self._adfs_authority_url, + disable_instance_discovery=self._disable_instance_discovery) elif self.credentials.get('ad_user') is not None and self.credentials.get('password') is not None: - tenant = self.credentials.get('tenant') - if not tenant: - tenant = 'common' # SDK default - - if is_ad_resource or track1_cred: - self.azure_credentials = UserPassCredentials(self.credentials['ad_user'], - self.credentials['password'], - tenant=tenant, - cloud_environment=self._cloud_environment, - verify=self._cert_validation_mode == 'validate') - - client_id = self.credentials.get('client_id', '04b07795-8ddb-461a-bbee-02f9e1bf7b46') + client_id = self.credentials.get('client_id') + if client_id is None: + client_id = '04b07795-8ddb-461a-bbee-02f9e1bf7b46' self.azure_credential_track2 = user_password.UsernamePasswordCredential(username=self.credentials['ad_user'], password=self.credentials['password'], tenant_id=self.credentials.get('tenant', 'organizations'), client_id=client_id, - authority=self._adfs_authority_url) + authority=self._adfs_authority_url, + disable_instance_discovery=self._disable_instance_discovery) else: self.fail("Failed to authenticate with provided credentials. Some attributes were missing. " @@ -1640,7 +1606,7 @@ class AzureRMAuth(object): except Exception as exc: self.fail("cloud_environment {0} could not be resolved: {1}".format(_cloud_environment, str(exc)), exception=traceback.format_exc()) - credentials = MSIAuthentication(client_id=client_id, cloud_environment=cloud_environment) + client_id = client_id or self._get_env('client_id') credential = managed_identity.ManagedIdentityCredential(client_id=client_id, cloud_environment=cloud_environment) subscription_id = subscription_id or self._get_env('subscription_id') if not subscription_id: @@ -1653,8 +1619,7 @@ class AzureRMAuth(object): self.fail("Failed to get MSI token: {0}. " "Please check whether your machine enabled MSI or grant access to any subscription.".format(str(exc))) return { - 'credentials': credentials, - 'credential': credential, + 'credentials': credential, 'subscription_id': subscription_id, 'cloud_environment': cloud_environment, 'auth_source': 'msi' @@ -1669,12 +1634,13 @@ class AzureRMAuth(object): except Exception as exc: self.fail("Failed to load CLI profile {0}.".format(str(exc))) - credentials, subscription_id, tenant = profile.get_login_credentials( - subscription_id=subscription_id, resource=resource) + cred, subscription_id, tenant = profile.get_login_credentials( + subscription_id=subscription_id) cloud_environment = get_cli_active_cloud() + az_cli = AzureCliCredential() cli_credentials = { - 'credentials': credentials, + 'credentials': az_cli if self.is_ad_resource else cred, 'subscription_id': subscription_id, 'cloud_environment': cloud_environment } @@ -1762,42 +1728,6 @@ class AzureRMAuth(object): return None - def acquire_token_with_username_password(self, authority, username, password, client_id, tenant): - authority_uri = authority - - if tenant is not None: - authority_uri = authority + '/' + tenant - - context = ClientApplication(client_id=client_id, authority=authority_uri) - base_url = self._cloud_environment.endpoints.resource_manager - if not base_url.endswith("/"): - base_url += "/" - scopes = [base_url + ".default"] - token_response = context.acquire_token_by_username_password(username, password, scopes) - - return AADTokenCredentials(token_response) - - def acquire_token_with_client_certificate(self, authority, x509_private_key_path, thumbprint, client_id, tenant): - authority_uri = authority - - if tenant is not None: - authority_uri = authority + '/' + tenant - - x509_private_key = None - with open(x509_private_key_path, 'r') as pem_file: - x509_private_key = pem_file.read() - - base_url = self._cloud_environment.endpoints.resource_manager - if not base_url.endswith("/"): - base_url += "/" - scopes = [base_url + ".default"] - client_credential = {"thumbprint": thumbprint, "private_key": x509_private_key} - context = ConfidentialClientApplication(client_id=client_id, authority=authority_uri, client_credential=client_credential) - - token_response = context.acquire_token_for_client(scopes=scopes) - - return AADTokenCredentials(token_response) - def log(self, msg, pretty_print=False): pass # Use only during module development diff --git a/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common_rest.py b/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common_rest.py index 6acb1e7b9..bc740824f 100644 --- a/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common_rest.py +++ b/ansible_collections/azure/azcollection/plugins/module_utils/azure_rm_common_rest.py @@ -82,7 +82,7 @@ class GenericRestClient(object): response = self._client.send_request(request, **operation_config) if response.status_code not in expected_status_codes: - exp = SendRequestException(response, response.status_code) + exp = SendRequestException(response.text(), response.status_code) raise exp elif response.status_code == 202 and polling_timeout > 0: def get_long_running_output(response): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_accesstoken_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_accesstoken_info.py new file mode 100644 index 000000000..cf9569868 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_accesstoken_info.py @@ -0,0 +1,126 @@ +#!/usr/bin/python +# +# Copyright (c) 2023 Patrick Uiterwijk <@puiterwijk> +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_accesstoken_info + +version_added: "1.19.0" + +short_description: Get Azure API access token + +description: + - Get an access token for Azure APIs. + +options: + scopes: + description: + - The scopes to request. + type: list + elements: str + required: True + claims: + description: + - Additional claims required in the token. + type: list + elements: str + token_tenant_id: + description: + - Tenant to include in the token request. + type: str + enable_cae: + description: + - Whether to enable Continuous Access Evaluation (CAE) for the requested token. + default: false + type: bool + +extends_documentation_fragment: + - azure.azcollection.azure + +author: + - Patrick Uiterwijk (@puiterwijk) +''' + +EXAMPLES = ''' +- name: Get access token for Microsoft Graph + azure.azcollection.azure_rm_accesstoken_info: + scopes: + - https://graph.microsoft.com/.default +''' + +RETURN = ''' +access_token: + description: + - API access token. + returned: success + type: str + sample: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiaWF0IjoxNTE2MjM5MDIyfQ.L8i6g3PfcHlioHCCPURC9pmXT7gdJpx3kOoyAfNUwCc +expires_on: + description: + - Timestamp the token expires on. + returned: success + type: int + sample: 1699337824 +''' + + +from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + + +class AzureRMAccessToken(AzureRMModuleBase): + + def __init__(self): + + self.module_arg_spec = dict( + scopes=dict(type='list', elements='str', required=True), + claims=dict(type='list', elements='str'), + token_tenant_id=dict(type='str'), + enable_cae=dict(type='bool', default=False), + ) + + self.scopes = None + self.claims = None + self.token_tenant_id = None + self.enable_cae = False + + self.results = dict(changed=False) + + super(AzureRMAccessToken, self).__init__(derived_arg_spec=self.module_arg_spec, + supports_check_mode=True, + supports_tags=False, + is_ad_resource=False) + + def exec_module(self, **kwargs): + for key in list(self.module_arg_spec.keys()): + setattr(self, key, kwargs[key]) + + claims = None + if self.claims is not None: + claims = ' '.join(self.claims) + + cred = self.azure_auth.azure_credential_track2 + token = cred.get_token( + *self.scopes, + claims=claims, + tenant_id=self.token_tenant_id, + enable_cae=self.enable_cae, + ) + + self.results['access_token'] = token.token + self.results['expires_on'] = token.expires_on + return self.results + + +def main(): + AzureRMAccessToken() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_account_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_account_info.py index 5061604e2..a3f2109bd 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_account_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_account_info.py @@ -102,14 +102,13 @@ account_info: try: - from azure.graphrbac import GraphRbacManagementClient - from azure.graphrbac.models import GraphErrorException + import asyncio + from msgraph.generated.education.me.user.user_request_builder import UserRequestBuilder except ImportError: # This is handled in azure_rm_common pass from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase -from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMAuth class AzureRMAccountInfo(AzureRMModuleBase): @@ -126,19 +125,15 @@ class AzureRMAccountInfo(AzureRMModuleBase): # Different return info is gathered using 2 different clients # 1. All except "user" section of the return value uses azure.mgmt.subsctiption.operations.subscriptionoperations - # 2. "user" section of the return value uses different client (graphrbac) + # 2. "user" section of the return value uses different client (GraphServiceClient) super(AzureRMAccountInfo, self).__init__(derived_arg_spec=self.module_arg_spec, supports_check_mode=True, supports_tags=False, - is_ad_resource=False) + is_ad_resource=True) def exec_module(self, **kwargs): - - result = [] - result = self.list_items() - - self.results['account_info'] = result + self.results['account_info'] = self.list_items() return self.results def list_items(self): @@ -179,7 +174,7 @@ class AzureRMAccountInfo(AzureRMModuleBase): results['state'] = subscription_list_response[0].state results['managedByTenants'] = self.get_managed_by_tenants_list(subscription_list_response[0].managed_by_tenants) results['environmentName'] = self.azure_auth._cloud_environment.name - results['user'] = self.get_aduser_info(subscription_list_response[0].tenant_id) + results['user'] = self.get_aduser_info() return results @@ -187,33 +182,32 @@ class AzureRMAccountInfo(AzureRMModuleBase): return [dict(tenantId=item.tenant_id) for item in object_list] - def get_aduser_info(self, tenant_id): + def get_aduser_info(self): - # Create GraphRbacManagementClient for getting + # Create GraphServiceClient for getting # "user": { # "name": "mandar123456@abcdefg.onmicrosoft.com", - # "type": "user"self. + # "type": "Member" # } - # Makes use of azure graphrbac - # https://docs.microsoft.com/en-us/python/api/overview/azure/microsoft-graph?view=azure-python#client-library + # Makes use of azure MSGraph + # https://learn.microsoft.com/en-us/graph/api/user-get?view=graph-rest-1.0&tabs=http user = {} - self.azure_auth_graphrbac = AzureRMAuth(is_ad_resource=True) - cred = self.azure_auth_graphrbac.azure_credentials - base_url = self.azure_auth_graphrbac._cloud_environment.endpoints.active_directory_graph_resource_id - client = GraphRbacManagementClient(cred, tenant_id, base_url) - - try: - user_info = client.signed_in_user.get() - user['name'] = user_info.user_principal_name - user['type'] = user_info.object_type - - except GraphErrorException as e: - self.fail("failed to get ad user info {0}".format(str(e))) + user_info = asyncio.get_event_loop().run_until_complete(self.getAccount()) + user['name'] = user_info.user_principal_name + user['type'] = user_info.user_type return user + async def getAccount(self): + return await self.get_msgraph_client().me.get( + request_configuration=UserRequestBuilder.UserRequestBuilderGetRequestConfiguration( + query_parameters=UserRequestBuilder.UserRequestBuilderGetQueryParameters( + select=["userType", "userPrincipalName", "postalCode", "identities"], ), + ) + ) + def main(): AzureRMAccountInfo() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication.py index 9f21728fc..b428463aa 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication.py @@ -5,8 +5,8 @@ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function -__metaclass__ = type +__metaclass__ = type DOCUMENTATION = ''' --- @@ -20,12 +20,6 @@ description: - Manage Azure Active Directory application. options: - tenant: - description: - - The tenant ID. - type: str - required: True - app_id: description: - Application ID. @@ -34,6 +28,7 @@ options: display_name: description: - The display name of the application. + required: true type: str app_roles: @@ -74,11 +69,24 @@ options: - Any other character, including the space character, are not allowed. type: str - available_to_other_tenants: + sign_in_audience: description: - The application can be used from any Azure AD tenants. - type: bool + - Microsoft Graph SDK deprecate I(available_to_other_tenants), replace by I(sign_in_audience). + - Refer to link U(https://learn.microsoft.com/en-us/graph/migrate-azure-ad-graph-property-differences#application-property-differences) + type: str + choices: + - AzureADMyOrg + - AzureADMultipleOrgs + - AzureADandPersonalMicrosoftAccount + - PersonalMicrosoftAccount + available_to_other_tenants: + description: + - (Deprecated) The application can be used from any Azure AD tenants. + - This parameter was not supported after the migration to Microsoft Graph and was replaced by I(sign_in_audience). + - It will deprecated in next version(V3.0.0). + type: bool credential_description: description: - The description of the password. @@ -170,8 +178,27 @@ options: - App password, aka 'client secret'. type: str - reply_urls: + web_reply_urls: description: + - The web redirect urls. + - Space-separated URIs to which Azure AD will redirect in response to an OAuth 2.0 request. + - The value does not need to be a physical endpoint, but must be a valid URI. + type: list + elements: str + aliases: + - reply_urls + + spa_reply_urls: + description: + - The spa redirect urls. + - Space-separated URIs to which Azure AD will redirect in response to an OAuth 2.0 request. + - The value does not need to be a physical endpoint, but must be a valid URI. + type: list + elements: str + + public_client_reply_urls: + description: + - The public client redirect urls. - Space-separated URIs to which Azure AD will redirect in response to an OAuth 2.0 request. - The value does not need to be a physical endpoint, but must be a valid URI. type: list @@ -236,14 +263,24 @@ author: EXAMPLES = ''' - name: Create ad application azure_rm_adapplication: - tenant: "{{ tenant_id }}" display_name: "{{ display_name }}" +- name: Create ad application with multi redirect urls + azure_rm_adapplication: + display_name: "{{ display_name }}" + web_reply_urls: + - https://web01.com + spa_reply_urls: + - https://spa01.com + - https://spa02.com + public_client_reply_urls: + - https://public01.com + - https://public02.com + - name: Create application with more parameter azure_rm_adapplication: - tenant: "{{ tenant_id }}" display_name: "{{ display_name }}" - available_to_other_tenants: false + sign_in_audience: AzureADandPersonalMicrosoftAccount credential_description: "for test" end_date: 2021-10-01 start_date: 2021-05-18 @@ -251,7 +288,6 @@ EXAMPLES = ''' - name: delete ad application azure_rm_adapplication: - tenant: "{{ tenant_id }}" app_id: "{{ app_id }}" state: absent ''' @@ -281,12 +317,18 @@ output: returned: always type: str sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + sign_in_audience: + description: + - The application can be used from any Azure AD tenants. + returned: always + type: str + sample: AzureADandPersonalMicrosoftAccount available_to_other_tenants: description: - The application can be used from any Azure AD tenants. returned: always - type: bool - sample: false + type: str + sample: AzureADandPersonalMicrosoftAccount homepage: description: - The url where users can sign in and use your app. @@ -311,8 +353,23 @@ output: returned: always type: list sample: [] - reply_urls: + public_client_reply_urls: + description: + - The public client redirect urls. + - Space-separated URIs to which Azure AD will redirect in response to an OAuth 2.0 request. + returned: always + type: list + sample: [] + web_reply_urls: description: + - The web redirect urls. + - Space-separated URIs to which Azure AD will redirect in response to an OAuth 2.0 request. + returned: always + type: list + sample: [] + spa_reply_urls: + description: + - The spa redirect urls. - Space-separated URIs to which Azure AD will redirect in response to an OAuth 2.0 request. returned: always type: list @@ -322,17 +379,22 @@ output: from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_ext import AzureRMModuleBaseExt try: - from azure.graphrbac.models import GraphErrorException import datetime - from dateutil.relativedelta import relativedelta import dateutil.parser - from azure.graphrbac.models import ApplicationCreateParameters import uuid - from azure.graphrbac.models import ResourceAccess - from azure.graphrbac.models import RequiredResourceAccess - from azure.graphrbac.models import AppRole - from azure.graphrbac.models import PasswordCredential, KeyCredential - from azure.graphrbac.models import ApplicationUpdateParameters + import asyncio + from dateutil.relativedelta import relativedelta + from msgraph.generated.applications.applications_request_builder import ApplicationsRequestBuilder + from msgraph.generated.models.application import Application + from msgraph.generated.models.password_credential import PasswordCredential + from msgraph.generated.models.key_credential import KeyCredential + from msgraph.generated.models.required_resource_access import RequiredResourceAccess + from msgraph.generated.models.resource_access import ResourceAccess + from msgraph.generated.models.app_role import AppRole + from msgraph.generated.models.web_application import WebApplication + from msgraph.generated.models.spa_application import SpaApplication + from msgraph.generated.models.public_client_application import PublicClientApplication + from msgraph.generated.models.implicit_grant_settings import ImplicitGrantSettings except ImportError: # This is handled in azure_rm_common pass @@ -396,31 +458,40 @@ class AzureRMADApplication(AzureRMModuleBaseExt): def __init__(self): self.module_arg_spec = dict( - tenant=dict(type='str', required=True), app_id=dict(type='str'), - display_name=dict(type='str'), + display_name=dict(type='str', required=True), app_roles=dict(type='list', elements='dict', options=app_role_spec), - available_to_other_tenants=dict(type='bool'), + sign_in_audience=dict( + type='str', + choices=['AzureADMyOrg', 'AzureADMultipleOrgs', 'AzureADandPersonalMicrosoftAccount', 'PersonalMicrosoftAccount'] + ), + available_to_other_tenants=dict( + type='bool', + removed_in_version='3.0.0', + removed_from_collection='azure.azcollection' + ), credential_description=dict(type='str'), end_date=dict(type='str'), homepage=dict(type='str'), allow_guests_sign_in=dict(type='bool'), identifier_uris=dict(type='list', elements='str'), - key_type=dict(type='str', default='AsymmetricX509Cert', choices=['AsymmetricX509Cert', 'Password', 'Symmetric']), + key_type=dict(type='str', default='AsymmetricX509Cert', + choices=['AsymmetricX509Cert', 'Password', 'Symmetric']), key_usage=dict(type='str', default='Verify', choices=['Sign', 'Verify']), key_value=dict(type='str', no_log=True), native_app=dict(type='bool'), oauth2_allow_implicit_flow=dict(type='bool'), optional_claims=dict(type='list', elements='dict', options=optional_claims_spec), password=dict(type='str', no_log=True), - reply_urls=dict(type='list', elements='str'), + public_client_reply_urls=dict(type='list', elements='str'), + web_reply_urls=dict(type='list', elements='str', aliases=['reply_urls']), + spa_reply_urls=dict(type='list', elements='str'), start_date=dict(type='str'), required_resource_accesses=dict(type='list', elements='dict', options=required_resource_accesses_spec), state=dict(type='str', default='present', choices=['present', 'absent']), ) self.state = None - self.tenant = None self.app_id = None self.display_name = None self.app_roles = None @@ -436,11 +507,15 @@ class AzureRMADApplication(AzureRMModuleBaseExt): self.oauth2_allow_implicit_flow = None self.optional_claims = None self.password = None - self.reply_urls = None + self.public_client_reply_urls = None + self.spa_reply_urls = None + self.web_reply_urls = None self.start_date = None self.required_resource_accesses = None self.allow_guests_sign_in = None self.results = dict(changed=False) + self._client = None + self.sign_in_audience = None super(AzureRMADApplication, self).__init__(derived_arg_spec=self.module_arg_spec, supports_check_mode=False, @@ -448,12 +523,11 @@ class AzureRMADApplication(AzureRMModuleBaseExt): is_ad_resource=True) def exec_module(self, **kwargs): - + self._client = self.get_msgraph_client() for key in list(self.module_arg_spec.keys()): setattr(self, key, kwargs[key]) response = self.get_resource() - if response: if self.state == 'present': if self.check_update(response): @@ -475,90 +549,113 @@ class AzureRMADApplication(AzureRMModuleBaseExt): if self.identifier_uris: self.fail("'identifier_uris' is not required for creating a native application") else: - password_creds, key_creds = self.build_application_creds(self.password, self.key_value, self.key_type, self.key_usage, - self.start_date, self.end_date, self.credential_description) + password_creds, key_creds = self.build_application_creds(self.password, self.key_value, self.key_type, + self.key_usage, + self.start_date, self.end_date, + self.credential_description) if self.required_resource_accesses: required_accesses = self.build_application_accesses(self.required_resource_accesses) if self.app_roles: app_roles = self.build_app_roles(self.app_roles) - client = self.get_graphrbac_client(self.tenant) - app_create_param = ApplicationCreateParameters(available_to_other_tenants=self.available_to_other_tenants, - display_name=self.display_name, - identifier_uris=self.identifier_uris, - homepage=self.homepage, - reply_urls=self.reply_urls, - key_credentials=key_creds, - password_credentials=password_creds, - oauth2_allow_implicit_flow=self.oauth2_allow_implicit_flow, - required_resource_access=required_accesses, - app_roles=app_roles, - allow_guests_sign_in=self.allow_guests_sign_in, - optional_claims=self.optional_claims) - response = client.applications.create(app_create_param) + create_app = Application( + sign_in_audience=self.sign_in_audience, + web=WebApplication( + home_page_url=self.homepage, + redirect_uris=self.web_reply_urls, + implicit_grant_settings=ImplicitGrantSettings( + enable_access_token_issuance=self.oauth2_allow_implicit_flow, + ), + ), + spa=SpaApplication(redirect_uris=self.spa_reply_urls), + public_client=PublicClientApplication(redirect_uris=self.public_client_reply_urls), + display_name=self.display_name, + identifier_uris=self.identifier_uris, + key_credentials=key_creds, + password_credentials=password_creds, + required_resource_access=required_accesses, + app_roles=app_roles, + optional_claims=self.optional_claims + # allow_guests_sign_in=self.allow_guests_sign_in, + ) + response = asyncio.get_event_loop().run_until_complete(self.create_application(create_app)) self.results['changed'] = True self.results.update(self.to_dict(response)) return response - except GraphErrorException as ge: - self.fail("Error creating application, display_name {0} - {1}".format(self.display_name, str(ge))) + except Exception as ge: + self.fail("Error creating application, display_name: {0} - {1}".format(self.display_name, str(ge))) def update_resource(self, old_response): try: - client = self.get_graphrbac_client(self.tenant) key_creds, password_creds, required_accesses, app_roles, optional_claims = None, None, None, None, None if self.native_app: if self.identifier_uris: self.fail("'identifier_uris' is not required for creating a native application") else: - password_creds, key_creds = self.build_application_creds(self.password, self.key_value, self.key_type, self.key_usage, - self.start_date, self.end_date, self.credential_description) + password_creds, key_creds = self.build_application_creds(self.password, self.key_value, self.key_type, + self.key_usage, + self.start_date, self.end_date, + self.credential_description) if self.required_resource_accesses: required_accesses = self.build_application_accesses(self.required_resource_accesses) if self.app_roles: app_roles = self.build_app_roles(self.app_roles) - app_update_param = ApplicationUpdateParameters(available_to_other_tenants=self.available_to_other_tenants, - display_name=self.display_name, - identifier_uris=self.identifier_uris, - homepage=self.homepage, - reply_urls=self.reply_urls, - key_credentials=key_creds, - password_credentials=password_creds, - oauth2_allow_implicit_flow=self.oauth2_allow_implicit_flow, - required_resource_access=required_accesses, - allow_guests_sign_in=self.allow_guests_sign_in, - app_roles=app_roles, - optional_claims=self.optional_claims) - client.applications.patch(old_response['object_id'], app_update_param) + + app_update_param = Application( + sign_in_audience=self.sign_in_audience, + web=WebApplication( + home_page_url=self.homepage, + redirect_uris=self.web_reply_urls, + implicit_grant_settings=ImplicitGrantSettings( + enable_access_token_issuance=self.oauth2_allow_implicit_flow, + ), + ), + spa=SpaApplication(redirect_uris=self.spa_reply_urls), + public_client=PublicClientApplication(redirect_uris=self.public_client_reply_urls), + display_name=self.display_name, + identifier_uris=self.identifier_uris, + key_credentials=key_creds, + password_credentials=password_creds, + required_resource_access=required_accesses, + # allow_guests_sign_in=self.allow_guests_sign_in, + app_roles=app_roles, + optional_claims=self.optional_claims) + asyncio.get_event_loop().run_until_complete(self.update_application( + obj_id=old_response['object_id'], update_app=app_update_param)) + self.results['changed'] = True self.results.update(self.get_resource()) - except GraphErrorException as ge: + except Exception as ge: self.fail("Error updating the application app_id {0} - {1}".format(self.app_id, str(ge))) def delete_resource(self, response): try: - client = self.get_graphrbac_client(self.tenant) - client.applications.delete(response.get('object_id')) + asyncio.get_event_loop().run_until_complete(self.delete_application(response.get('object_id'))) self.results['changed'] = True return True - except GraphErrorException as ge: - self.fail("Error deleting application app_id {0} display_name {1} - {2}".format(self.app_id, self.display_name, str(ge))) + except Exception as ge: + self.fail( + "Error deleting application app_id {0} display_name {1} - {2}".format(self.app_id, self.display_name, + str(ge))) def get_resource(self): try: - client = self.get_graphrbac_client(self.tenant) existing_apps = [] if self.app_id: - existing_apps = list(client.applications.list(filter="appId eq '{0}'".format(self.app_id))) + ret = asyncio.get_event_loop().run_until_complete(self.get_application_by_app_id(self.app_id)) + existing_apps = ret.value + if not existing_apps: return False result = existing_apps[0] return self.to_dict(result) - except GraphErrorException as ge: - self.log("Did not find the graph instance instance {0} - {1}".format(self.app_id, str(ge))) - return False + except Exception as ge: + self.fail(ge) + # self.log("Did not find the graph instance instance {0} - {1}".format(self.app_id, str(ge))) + # return False def check_update(self, response): for key in list(self.module_arg_spec.keys()): @@ -575,19 +672,22 @@ class AzureRMADApplication(AzureRMModuleBaseExt): 'is_enabled': app_role.is_enabled, 'value': app_role.value, "description": app_role.description - }for app_role in object.app_roles] + } for app_role in object.app_roles] return dict( app_id=object.app_id, - object_id=object.object_id, + object_id=object.id, display_name=object.display_name, app_roles=app_roles, - available_to_other_tenants=object.available_to_other_tenants, - homepage=object.homepage, + available_to_other_tenants=object.sign_in_audience, + sign_in_audience=object.sign_in_audience, + homepage=object.web.home_page_url, identifier_uris=object.identifier_uris, - oauth2_allow_implicit_flow=object.oauth2_allow_implicit_flow, + oauth2_allow_implicit_flow=object.web.implicit_grant_settings.enable_access_token_issuance, optional_claims=object.optional_claims, - allow_guests_sign_in=object.allow_guests_sign_in, - reply_urls=object.reply_urls + # allow_guests_sign_in=object.allow_guests_sign_in, + web_reply_urls=object.web.redirect_uris, + spa_reply_urls=object.spa.redirect_uris, + public_client_reply_urls=object.public_client.redirect_uris ) def build_application_creds(self, password=None, key_value=None, key_type=None, key_usage=None, @@ -615,14 +715,16 @@ class AzureRMADApplication(AzureRMModuleBaseExt): password_creds = None key_creds = None if password: - password_creds = [PasswordCredential(start_date=start_date, end_date=end_date, key_id=str(self.gen_guid()), - value=password, custom_key_identifier=custom_key_id)] + password_creds = [PasswordCredential(start_date_time=start_date, end_date_time=end_date, + key_id=self.gen_guid(), secret_text=password, + custom_key_identifier=custom_key_id)] # value ? secret_text elif key_value: key_creds = [ - KeyCredential(start_date=start_date, end_date=end_date, key_id=str(self.gen_guid()), value=key_value, + KeyCredential(start_date_time=start_date, end_date_time=end_date, key_id=self.gen_guid(), key=key_value, + # value ? key usage=key_usage, type=key_type, custom_key_identifier=custom_key_id)] - return (password_creds, key_creds) + return password_creds, key_creds def encode_custom_key_description(self, key_description): # utf16 is used by AAD portal. Do not change it to other random encoding @@ -640,7 +742,6 @@ class AzureRMADApplication(AzureRMModuleBaseExt): self.log('Getting "requiredResourceAccess" from a full manifest') required_resource_accesses = required_resource_accesses.get('required_resource_access', []) for x in required_resource_accesses: - accesses = [ResourceAccess(id=y['id'], type=y['type']) for y in x['resource_access']] required_accesses.append(RequiredResourceAccess(resource_app_id=x['resource_app_id'], resource_access=accesses)) @@ -657,10 +758,34 @@ class AzureRMADApplication(AzureRMModuleBaseExt): role = AppRole(id=x.get('id', None) or self.gen_guid(), allowed_member_types=x.get('allowed_member_types', None), description=x.get('description', None), display_name=x.get('display_name', None), - is_enabled=x.get('is_enabled', None), value=x.get('value', None)) + is_enabled=x.get('is_enabled', None), value=x.get('value', None)) # value ? additional_data result.append(role) return result + async def create_application(self, creat_app): + return await self._client.applications.post(body=creat_app) + + async def update_application(self, obj_id, update_app): + return await self._client.applications.by_application_id(obj_id).patch(body=update_app) + + async def get_application_by_app_id(self, app_id): + request_configuration = ApplicationsRequestBuilder.ApplicationsRequestBuilderGetRequestConfiguration( + query_parameters=ApplicationsRequestBuilder.ApplicationsRequestBuilderGetQueryParameters( + filter=(" appId eq '{0}'".format(app_id)), ), + ) + + return await self._client.applications.get(request_configuration=request_configuration) + + async def delete_application(self, obj_id): + await self._client.applications.by_application_id(obj_id).delete() + + async def get_applications(self, filters): + request_configuration = ApplicationsRequestBuilder.ApplicationsRequestBuilderGetRequestConfiguration( + query_parameters=ApplicationsRequestBuilder.ApplicationsRequestBuilderGetQueryParameters( + filter=(' and '.join(filters)) + )) + return await self._client.applications.get(request_configuration=request_configuration) + def main(): AzureRMADApplication() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication_info.py index 939058815..167b82552 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adapplication_info.py @@ -6,8 +6,8 @@ from __future__ import absolute_import, division, print_function -__metaclass__ = type +__metaclass__ = type DOCUMENTATION = ''' module: azure_rm_adapplication_info @@ -24,18 +24,17 @@ options: description: - The application ID. type: str - tenant: - description: - - The tenant ID. - type: str - required: True object_id: description: - - It's application's object ID. + - The application's object ID. type: str identifier_uri: description: - - It's identifier_uri's object ID. + - The identifier_uri's object ID. + type: str + app_display_name: + description: + - The applications' Name. type: str extends_documentation_fragment: @@ -45,23 +44,25 @@ author: haiyuan_zhang (@haiyuazhang) Fred-sun (@Fred-sun) guopeng_lin (@guopenglin) + Xu Zhang (@xuzhang) ''' EXAMPLES = ''' - name: get ad app info by App ID azure_rm_adapplication_info: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" - name: get ad app info ---- by object ID azure_rm_adapplication_info: object_id: "{{ object_id }}" - tenant: "{{ tenant_id }}" - name: get ad app info ---- by identifier uri azure_rm_adapplication_info: identifier_uri: "{{ identifier_uri }}" - tenant: "{{ tenant_id }}" + +- name: get ad app info ---- by display name + azure_rm_adapplication_info: + app_display_name: "{{ display_name }}" ''' RETURN = ''' @@ -95,12 +96,47 @@ applications: returned: always type: str sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + sign_in_audience: + description: + - The application can be used from any Azure AD tenants + type: str + returned: always + sample: AzureADandPersonalMicrosoftAccount + available_to_other_tenants: + description: + - The application can be used from any Azure AD tenants + type: str + returned: always + sample: AzureADandPersonalMicrosoftAccount + public_client_reply_urls: + description: + - The public client redirect urls. + - Space-separated URIs to which Azure AD will redirect in response to an OAuth 2.0 request. + returned: always + type: list + sample: [] + web_reply_urls: + description: + - The web redirect urls. + - Space-separated URIs to which Azure AD will redirect in response to an OAuth 2.0 request. + returned: always + type: list + sample: [] + spa_reply_urls: + description: + - The spa redirect urls. + - Space-separated URIs to which Azure AD will redirect in response to an OAuth 2.0 request. + returned: always + type: list + sample: [] ''' from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_ext import AzureRMModuleBase try: - from azure.graphrbac.models import GraphErrorException + import asyncio + from msgraph.generated.applications.applications_request_builder import ApplicationsRequestBuilder + from kiota_abstractions.api_error import APIError except ImportError: # This is handled in azure_rm_common pass @@ -110,25 +146,17 @@ class AzureRMADApplicationInfo(AzureRMModuleBase): def __init__(self): self.module_arg_spec = dict( - app_id=dict( - type='str' - ), - object_id=dict( - type='str' - ), - identifier_uri=dict( - type='str' - ), - tenant=dict( - type='str', - required=True - ) + app_id=dict(type='str'), + object_id=dict(type='str'), + identifier_uri=dict(type='str'), + app_display_name=dict(type='str') ) - self.tenant = None self.app_id = None + self.app_display_name = None self.object_id = None self.identifier_uri = None self.results = dict(changed=False) + self._client = None super(AzureRMADApplicationInfo, self).__init__(derived_arg_spec=self.module_arg_spec, supports_check_mode=True, supports_tags=False, @@ -139,21 +167,26 @@ class AzureRMADApplicationInfo(AzureRMModuleBase): setattr(self, key, kwargs[key]) applications = [] + try: - client = self.get_graphrbac_client(self.tenant) + self._client = self.get_msgraph_client() if self.object_id: - applications = [client.applications.get(self.object_id)] + applications = [asyncio.get_event_loop().run_until_complete(self.get_application(self.object_id))] else: sub_filters = [] if self.identifier_uri: sub_filters.append("identifierUris/any(s:s eq '{0}')".format(self.identifier_uri)) if self.app_id: sub_filters.append("appId eq '{0}'".format(self.app_id)) - # applications = client.applications.list(filter=(' and '.join(sub_filters))) - applications = list(client.applications.list(filter=(' and '.join(sub_filters)))) - + if self.app_display_name: + sub_filters.append("displayName eq '{0}'".format(self.app_display_name)) + apps = asyncio.get_event_loop().run_until_complete(self.get_applications(sub_filters)) + applications = list(apps) self.results['applications'] = [self.to_dict(app) for app in applications] - except GraphErrorException as ge: + except APIError as e: + if e.response_status_code != 404: + self.fail("failed to get application info {0}".format(str(e))) + except Exception as ge: self.fail("failed to get application info {0}".format(str(ge))) return self.results @@ -161,11 +194,46 @@ class AzureRMADApplicationInfo(AzureRMModuleBase): def to_dict(self, object): return dict( app_id=object.app_id, - object_id=object.object_id, + object_id=object.id, app_display_name=object.display_name, - identifier_uris=object.identifier_uris + identifier_uris=object.identifier_uris, + available_to_other_tenants=object.sign_in_audience, + sign_in_audience=object.sign_in_audience, + web_reply_urls=object.web.redirect_uris, + spa_reply_urls=object.spa.redirect_uris, + public_client_reply_urls=object.public_client.redirect_uris ) + async def get_application(self, obj_id): + return await self._client.applications.by_application_id(obj_id).get() + + async def get_applications(self, sub_filters): + if sub_filters: + request_configuration = ApplicationsRequestBuilder.ApplicationsRequestBuilderGetRequestConfiguration( + query_parameters=ApplicationsRequestBuilder.ApplicationsRequestBuilderGetQueryParameters( + filter=(' and '.join(sub_filters)), + ), + ) + applications = await self._client.applications.get(request_configuration=request_configuration) + return applications.value + else: + applications_list = [] + applications = await self._client.applications.get() + for app in applications.value: + applications_list.append(app) + + if applications.odata_next_link: + next_link = applications.odata_next_link + else: + next_link = None + + while next_link: + applications = await self._client.applications.with_url(next_link).get() + next_link = applications.odata_next_link + for app in applications.value: + applications_list.append(app) + return applications_list + def main(): AzureRMADApplicationInfo() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adgroup.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adgroup.py index 812b6953c..1693794a7 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adgroup.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adgroup.py @@ -5,6 +5,7 @@ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function + __metaclass__ = type DOCUMENTATION = ''' @@ -14,11 +15,6 @@ short_description: Manage Azure Active Directory group description: - Create, update or delete Azure Active Directory group. options: - tenant: - description: - - The tenant ID. - type: str - required: True state: description: - Assert the state of the resource group. Use C(present) to create or update and C(absent) to delete. @@ -67,6 +63,10 @@ options: - The azure ad objects asserted to not be owners of the group. type: list elements: str + description: + description: + - An optional description for the group. + type: str extends_documentation_fragment: - azure.azcollection.azure author: @@ -76,46 +76,41 @@ author: EXAMPLES = ''' - name: Create Group azure_rm_adgroup: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx display_name: "Group-Name" mail_nickname: "Group-Mail-Nickname" + description: 'fortest' state: 'present' - name: Delete Group using display_name and mail_nickname azure_rm_adgroup: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx display_name: "Group-Name" mail_nickname: "Group-Mail-Nickname" state: 'absent' - name: Delete Group using object_id azure_rm_adgroup: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx state: 'absent' - name: Ensure Users are Members of a Group using display_name and mail_nickname azure_rm_adgroup: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx display_name: "Group-Name" mail_nickname: "Group-Mail-Nickname" state: 'present' present_members: - - "https://graph.windows.net/{{ tenant_id }}/directoryObjects/{{ ad_object_1_object_id }}" - - "https://graph.windows.net/{{ tenant_id }}/directoryObjects/{{ ad_object_2_object_id }}" + - "{{ ad_object_1_object_id }}" + - "{{ ad_object_2_object_id }}" - name: Ensure Users are Members of a Group using object_id azure_rm_adgroup: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx state: 'present' present_members: - - "https://graph.windows.net/{{ ad_object_1_tenant_id }}/directoryObjects/{{ ad_object_1_object_id }}" - - "https://graph.windows.net/{{ ad_object_2_tenant_id }}/directoryObjects/{{ ad_object_2_object_id }}" + - "{{ ad_object_1_object_id }}" + - "{{ ad_object_2_object_id }}" - name: Ensure Users are not Members of a Group using display_name and mail_nickname azure_rm_adgroup: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx display_name: "Group-Name" mail_nickname: "Group-Mail-Nickname" state: 'present' @@ -124,7 +119,6 @@ EXAMPLES = ''' - name: Ensure Users are Members of a Group using object_id azure_rm_adgroup: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx state: 'present' absent_members: @@ -132,26 +126,23 @@ EXAMPLES = ''' - name: Ensure Users are Owners of a Group using display_name and mail_nickname azure_rm_adgroup: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx display_name: "Group-Name" mail_nickname: "Group-Mail-Nickname" state: 'present' present_owners: - - "https://graph.windows.net/{{ tenant_id }}/directoryObjects/{{ ad_object_1_object_id }}" - - "https://graph.windows.net/{{ tenant_id }}/directoryObjects/{{ ad_object_2_object_id }}" + - "{{ ad_object_1_object_id }}" + - "{{ ad_object_2_object_id }}" - name: Ensure Users are Owners of a Group using object_id azure_rm_adgroup: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx state: 'present' present_owners: - - "https://graph.windows.net/{{ ad_object_1_tenant_id }}/directoryObjects/{{ ad_object_1_object_id }}" - - "https://graph.windows.net/{{ ad_object_2_tenant_id }}/directoryObjects/{{ ad_object_2_object_id }}" + - "{{ ad_object_1_object_id }}" + - "{{ ad_object_2_object_id }}" - name: Ensure Users are not Owners of a Group using display_name and mail_nickname azure_rm_adgroup: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx display_name: "Group-Name" mail_nickname: "Group-Mail-Nickname" state: 'present' @@ -161,7 +152,6 @@ EXAMPLES = ''' - name: Ensure Users are Owners of a Group using object_id azure_rm_adgroup: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx state: 'present' absent_owners: @@ -216,13 +206,23 @@ group_members: - The members of the group. returned: always type: list +description: + description: + - An optional description for the group. + type: str + returned: always + sample: 'fortest' ''' from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_ext import AzureRMModuleBase try: - from azure.graphrbac.models import GraphErrorException - from azure.graphrbac.models import GroupCreateParameters + import asyncio + from msgraph.generated.groups.groups_request_builder import GroupsRequestBuilder + from msgraph.generated.models.group import Group + from msgraph.generated.groups.item.transitive_members.transitive_members_request_builder import \ + TransitiveMembersRequestBuilder + from msgraph.generated.models.reference_create import ReferenceCreate except ImportError: # This is handled in azure_rm_common pass @@ -239,7 +239,7 @@ class AzureRMADGroup(AzureRMModuleBase): present_owners=dict(type='list', elements='str'), absent_members=dict(type='list', elements='str'), absent_owners=dict(type='list', elements='str'), - tenant=dict(type='str', required=True), + description=dict(type='str'), state=dict( type='str', default='present', @@ -247,7 +247,6 @@ class AzureRMADGroup(AzureRMModuleBase): ), ) - self.tenant = None self.display_name = None self.mail_nickname = None self.object_id = None @@ -257,6 +256,7 @@ class AzureRMADGroup(AzureRMModuleBase): self.absent_owners = [] self.state = None self.results = dict(changed=False) + self._client = None super(AzureRMADGroup, self).__init__(derived_arg_spec=self.module_arg_spec, supports_check_mode=False, @@ -264,7 +264,6 @@ class AzureRMADGroup(AzureRMModuleBase): is_ad_resource=True) def exec_module(self, **kwargs): - for key in list(self.module_arg_spec.keys()): setattr(self, key, kwargs[key]) @@ -272,53 +271,61 @@ class AzureRMADGroup(AzureRMModuleBase): ad_groups = [] try: - client = self.get_graphrbac_client(self.tenant) + self._client = self.get_msgraph_client() ad_groups = [] if self.display_name and self.mail_nickname: - ad_groups = list(client.groups.list(filter="displayName eq '{0}' and mailNickname eq '{1}'".format(self.display_name, self.mail_nickname))) - + filter = "displayName eq '{0}' and mailNickname eq '{1}'".format(self.display_name, self.mail_nickname) + ad_groups = asyncio.get_event_loop().run_until_complete(self.get_group_list(filter)) if ad_groups: - self.object_id = ad_groups[0].object_id + self.object_id = ad_groups[0].id elif self.object_id: - ad_groups = [client.groups.get(self.object_id)] + ad_groups = [asyncio.get_event_loop().run_until_complete(self.get_group(self.object_id))] if ad_groups: if self.state == "present": self.results["changed"] = False elif self.state == "absent": - ad_groups = [client.groups.delete(self.object_id)] + asyncio.get_event_loop().run_until_complete(self.delete_group(self.object_id)) + ad_groups = [] self.results["changed"] = True else: if self.state == "present": if self.display_name and self.mail_nickname: - ad_groups = [client.groups.create(GroupCreateParameters(display_name=self.display_name, mail_nickname=self.mail_nickname))] + group = Group( + mail_enabled=False, + security_enabled=True, + group_types=[], + display_name=self.display_name, + mail_nickname=self.mail_nickname, + description=self.description + ) + + ad_groups = [asyncio.get_event_loop().run_until_complete(self.create_group(group))] self.results["changed"] = True else: - raise ValueError('The group does not exist. Both display_name : {0} and mail_nickname : {1} must be passed to create a new group' - .format(self.display_name, self.mail_nickname)) + raise ValueError( + 'The group does not exist. Both display_name : {0} and mail_nickname : {1} must be passed to create a new group' + .format(self.display_name, self.mail_nickname)) elif self.state == "absent": self.results["changed"] = False - if ad_groups[0] is not None: - self.update_members(ad_groups[0].object_id, client) - self.update_owners(ad_groups[0].object_id, client) - self.results.update(self.set_results(ad_groups[0], client)) + if ad_groups and ad_groups[0] is not None: + self.update_members(ad_groups[0].id) + self.update_owners(ad_groups[0].id) + self.results.update(self.set_results(ad_groups[0])) - except GraphErrorException as e: - self.fail(e) - except ValueError as e: + except Exception as e: self.fail(e) - return self.results - def update_members(self, group_id, client): - + def update_members(self, group_id): current_members = [] if self.present_members or self.absent_members: - current_members = [object.object_id for object in list(client.groups.get_group_members(group_id))] + ret = asyncio.get_event_loop().run_until_complete(self.get_group_members(group_id)) + current_members = [object.id for object in ret.value] if self.present_members: present_members_by_object_id = self.dictionary_from_object_urls(self.present_members) @@ -327,8 +334,8 @@ class AzureRMADGroup(AzureRMModuleBase): if members_to_add: for member_object_id in members_to_add: - client.groups.add_member(group_id, present_members_by_object_id[member_object_id]) - + asyncio.get_event_loop().run_until_complete( + self.add_group_member(group_id, present_members_by_object_id[member_object_id])) self.results["changed"] = True if self.absent_members: @@ -336,24 +343,25 @@ class AzureRMADGroup(AzureRMModuleBase): if members_to_remove: for member in members_to_remove: - client.groups.remove_member(group_id, member) + asyncio.get_event_loop().run_until_complete(self.delete_group_member(group_id, member)) self.results["changed"] = True - def update_owners(self, group_id, client): + def update_owners(self, group_id): current_owners = [] if self.present_owners or self.absent_owners: - current_owners = [object.object_id for object in list(client.groups.list_owners(group_id))] + ret = asyncio.get_event_loop().run_until_complete(self.get_group_owners(group_id)) + current_owners = [object.id for object in ret.value] if self.present_owners: present_owners_by_object_id = self.dictionary_from_object_urls(self.present_owners) - owners_to_add = list(set(present_owners_by_object_id.keys()) - set(current_owners)) if owners_to_add: for owner_object_id in owners_to_add: - client.groups.add_owner(group_id, present_owners_by_object_id[owner_object_id]) + asyncio.get_event_loop().run_until_complete( + self.add_gropup_owner(group_id, present_owners_by_object_id[owner_object_id])) self.results["changed"] = True if self.absent_owners: @@ -361,7 +369,7 @@ class AzureRMADGroup(AzureRMModuleBase): if owners_to_remove: for owner in owners_to_remove: - client.groups.remove_owner(group_id, owner) + asyncio.get_event_loop().run_until_complete(self.remove_gropup_owner(group_id, owner)) self.results["changed"] = True def dictionary_from_object_urls(self, object_urls): @@ -383,24 +391,25 @@ class AzureRMADGroup(AzureRMModuleBase): def serviceprincipal_to_dict(self, object): return dict( app_id=object.app_id, - object_id=object.object_id, + object_id=object.id, app_display_name=object.display_name, app_role_assignment_required=object.app_role_assignment_required ) def group_to_dict(self, object): return dict( - object_id=object.object_id, + object_id=object.id, display_name=object.display_name, mail_nickname=object.mail_nickname, mail_enabled=object.mail_enabled, security_enabled=object.security_enabled, - mail=object.mail + mail=object.mail, + description=object.description ) def user_to_dict(self, object): return dict( - object_id=object.object_id, + object_id=object.id, display_name=object.display_name, user_principal_name=object.user_principal_name, mail_nickname=object.mail_nickname, @@ -410,28 +419,92 @@ class AzureRMADGroup(AzureRMModuleBase): ) def result_to_dict(self, object): - if object.object_type == "Group": + if object.odata_type == "#microsoft.graph.group": return self.group_to_dict(object) - elif object.object_type == "User": + elif object.odata_type == "#microsoft.graph.user": return self.user_to_dict(object) - elif object.object_type == "Application": + elif object.odata_type == "#microsoft.graph.application": return self.application_to_dict(object) - elif object.object_type == "ServicePrincipal": + elif object.odata_type == "#microsoft.graph.servicePrincipal": return self.serviceprincipal_to_dict(object) else: - return object.object_type + return object.odata_type - def set_results(self, object, client): + def set_results(self, object): results = self.group_to_dict(object) if results["object_id"] and (self.present_owners or self.absent_owners): - results["group_owners"] = [self.result_to_dict(object) for object in list(client.groups.list_owners(results["object_id"]))] + ret = asyncio.get_event_loop().run_until_complete(self.get_group_owners(results["object_id"])) + results["group_owners"] = [self.result_to_dict(object) for object in ret.value] if results["object_id"] and (self.present_members or self.absent_members): - results["group_members"] = [self.result_to_dict(object) for object in list(client.groups.get_group_members(results["object_id"]))] + ret = asyncio.get_event_loop().run_until_complete(self.get_group_members(results["object_id"])) + results["group_members"] = [self.result_to_dict(object) for object in ret.value] return results + async def create_group(self, create_group): + return await self._client.groups.post(body=create_group) + + async def delete_group(self, group_id): + await self._client.groups.by_group_id(group_id).delete() + + async def get_group(self, group_id): + return await self._client.groups.by_group_id(group_id).get() + + async def get_group_list(self, filter=None): + if filter: + request_configuration = GroupsRequestBuilder.GroupsRequestBuilderGetRequestConfiguration( + query_parameters=GroupsRequestBuilder.GroupsRequestBuilderGetQueryParameters( + count=True, + filter=filter, + ), + ) + groups = await self._client.groups.get(request_configuration=request_configuration) + else: + groups = await self._client.groups.get() + + if groups and groups.value: + return groups.value + return [] + + async def get_group_members(self, group_id, filters=None): + request_configuration = TransitiveMembersRequestBuilder.TransitiveMembersRequestBuilderGetRequestConfiguration( + query_parameters=TransitiveMembersRequestBuilder.TransitiveMembersRequestBuilderGetQueryParameters( + count=True, + ), + ) + if filters: + request_configuration.query_parameters.filter = filters + return await self._client.groups.by_group_id(group_id).transitive_members.get( + request_configuration=request_configuration) + + async def add_group_member(self, group_id, obj_id): + request_body = ReferenceCreate( + odata_id="https://graph.microsoft.com/v1.0/directoryObjects/{0}".format(obj_id), + ) + await self._client.groups.by_group_id(group_id).members.ref.post(body=request_body) + + async def delete_group_member(self, group_id, member_id): + await self._client.groups.by_group_id(group_id).members.by_directory_object_id(member_id).ref.delete() + + async def get_group_owners(self, group_id): + request_configuration = GroupsRequestBuilder.GroupsRequestBuilderGetRequestConfiguration( + query_parameters=GroupsRequestBuilder.GroupsRequestBuilderGetQueryParameters( + count=True, + ), + ) + return await self._client.groups.by_group_id(group_id).owners.get(request_configuration=request_configuration) + + async def add_gropup_owner(self, group_id, obj_id): + request_body = ReferenceCreate( + odata_id="https://graph.microsoft.com/v1.0/users/{0}".format(obj_id), + ) + await self._client.groups.by_group_id(group_id).owners.ref.post(body=request_body) + + async def remove_gropup_owner(self, group_id, obj_id): + await self._client.groups.by_group_id(group_id).owners.by_directory_object_id(obj_id).ref.delete() + def main(): AzureRMADGroup() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adgroup_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adgroup_info.py index 37bc1febb..3525bdf1b 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adgroup_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adgroup_info.py @@ -1,10 +1,11 @@ #!/usr/bin/python # -# Copyright (c) 2021 Cole Neubauer, (@coleneubauer) +# Copyright (c) 2021 Cole Neubauer, (@coleneubauer), xuzhang3 (@xuzhang3) # # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function + __metaclass__ = type DOCUMENTATION = ''' @@ -14,11 +15,6 @@ short_description: Get Azure Active Directory group info description: - Get Azure Active Directory group info. options: - tenant: - description: - - The tenant ID. - type: str - required: True object_id: description: - The object id for the ad group. @@ -70,53 +66,46 @@ extends_documentation_fragment: - azure.azcollection.azure author: - Cole Neubauer(@coleneubauer) + - Xu Zhang(@xuzhang) ''' EXAMPLES = ''' - name: Return a specific group using object_id azure_rm_adgroup_info: object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - name: Return a specific group using object_id and return the owners of the group azure_rm_adgroup_info: object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx return_owners: true - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - name: Return a specific group using object_id and return the owners and members of the group azure_rm_adgroup_info: object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx return_owners: true return_group_members: true - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - name: Return a specific group using object_id and return the groups the group is a member of azure_rm_adgroup_info: object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx return_member_groups: true - tenant: "{{ tenant_id }}" - name: Return a specific group using object_id and check an ID for membership azure_rm_adgroup_info: object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx check_membership: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - name: Return a specific group using displayName for attribute_name azure_rm_adgroup_info: attribute_name: "displayName" attribute_value: "Display-Name-Of-AD-Group" - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - name: Return groups matching odata_filter azure_rm_adgroup_info: odata_filter: "mailNickname eq 'Mail-Nickname-Of-AD-Group'" - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - name: Return all groups azure_rm_adgroup_info: - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx all: true ''' @@ -167,13 +156,23 @@ group_members: - The members of the group. returned: always type: list +description: + description: + - An optional description for the group. + type: str + returned: always + sample: 'fortest' ''' from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_ext import AzureRMModuleBase try: - from azure.graphrbac.models import GraphErrorException - from azure.graphrbac.models import CheckGroupMembershipParameters + import asyncio + from msgraph.generated.groups.groups_request_builder import GroupsRequestBuilder + from msgraph.generated.groups.item.transitive_members.transitive_members_request_builder import \ + TransitiveMembersRequestBuilder + from msgraph.generated.groups.item.get_member_groups.get_member_groups_post_request_body import \ + GetMemberGroupsPostRequestBody except ImportError: # This is handled in azure_rm_common pass @@ -192,10 +191,8 @@ class AzureRMADGroupInfo(AzureRMModuleBase): return_group_members=dict(type='bool', default=False), return_member_groups=dict(type='bool', default=False), all=dict(type='bool', default=False), - tenant=dict(type='str', required=True), ) - self.tenant = None self.object_id = None self.attribute_name = None self.attribute_value = None @@ -207,6 +204,7 @@ class AzureRMADGroupInfo(AzureRMModuleBase): self.all = False self.results = dict(changed=False) + self._client = None mutually_exclusive = [['odata_filter', 'attribute_name', 'object_id', 'all']] required_together = [['attribute_name', 'attribute_value']] @@ -228,20 +226,19 @@ class AzureRMADGroupInfo(AzureRMModuleBase): ad_groups = [] try: - client = self.get_graphrbac_client(self.tenant) + self._client = self.get_msgraph_client() if self.object_id is not None: - ad_groups = [client.groups.get(self.object_id)] + ad_groups = [asyncio.get_event_loop().run_until_complete(self.get_group(self.object_id))] elif self.attribute_name is not None and self.attribute_value is not None: - ad_groups = list(client.groups.list(filter="{0} eq '{1}'".format(self.attribute_name, self.attribute_value))) + ad_groups = asyncio.get_event_loop().run_until_complete( + self.get_group_list(filter="{0} eq '{1}'".format(self.attribute_name, self.attribute_value))) elif self.odata_filter is not None: # run a filter based on user input - ad_groups = list(client.groups.list(filter=self.odata_filter)) + ad_groups = asyncio.get_event_loop().run_until_complete(self.get_group_list(filter=self.odata_filter)) elif self.all: - ad_groups = list(client.groups.list()) - - self.results['ad_groups'] = [self.set_results(group, client) for group in ad_groups] - - except GraphErrorException as e: + ad_groups = asyncio.get_event_loop().run_until_complete(self.get_group_list()) + self.results['ad_groups'] = [self.set_results(group) for group in ad_groups] + except Exception as e: self.fail("failed to get ad group info {0}".format(str(e))) return self.results @@ -256,24 +253,25 @@ class AzureRMADGroupInfo(AzureRMModuleBase): def serviceprincipal_to_dict(self, object): return dict( app_id=object.app_id, - object_id=object.object_id, + object_id=object.id, app_display_name=object.display_name, app_role_assignment_required=object.app_role_assignment_required ) def group_to_dict(self, object): return dict( - object_id=object.object_id, + object_id=object.id, display_name=object.display_name, mail_nickname=object.mail_nickname, mail_enabled=object.mail_enabled, security_enabled=object.security_enabled, - mail=object.mail + mail=object.mail, + description=object.description ) def user_to_dict(self, object): return dict( - object_id=object.object_id, + object_id=object.id, display_name=object.display_name, user_principal_name=object.user_principal_name, mail_nickname=object.mail_nickname, @@ -283,35 +281,94 @@ class AzureRMADGroupInfo(AzureRMModuleBase): ) def result_to_dict(self, object): - if object.object_type == "Group": + if object.odata_type == "#microsoft.graph.group": return self.group_to_dict(object) - elif object.object_type == "User": + elif object.odata_type == "#microsoft.graph.user": return self.user_to_dict(object) - elif object.object_type == "Application": + elif object.odata_type == "#microsoft.graph.application": return self.application_to_dict(object) - elif object.object_type == "ServicePrincipal": + elif object.odata_type == "#microsoft.graph.servicePrincipal": return self.serviceprincipal_to_dict(object) else: - return object.object_type + return object.odata_type - def set_results(self, object, client): + def set_results(self, object): results = self.group_to_dict(object) if results["object_id"] and self.return_owners: - results["group_owners"] = [self.result_to_dict(object) for object in list(client.groups.list_owners(results["object_id"]))] + ret = asyncio.get_event_loop().run_until_complete(self.get_group_owners(results["object_id"])) + results["group_owners"] = [self.result_to_dict(object) for object in ret.value] if results["object_id"] and self.return_group_members: - results["group_members"] = [self.result_to_dict(object) for object in list(client.groups.get_group_members(results["object_id"]))] + ret = asyncio.get_event_loop().run_until_complete(self.get_group_members(results["object_id"])) + results["group_members"] = [self.result_to_dict(object) for object in ret.value] if results["object_id"] and self.return_member_groups: - results["member_groups"] = [self.result_to_dict(object) for object in list(client.groups.get_member_groups(results["object_id"], False))] + ret = asyncio.get_event_loop().run_until_complete(self.get_member_groups(results["object_id"])) + results["member_groups"] = [self.result_to_dict(object) for object in list(ret.value)] if results["object_id"] and self.check_membership: - results["is_member_of"] = client.groups.is_member_of( - CheckGroupMembershipParameters(group_id=results["object_id"], member_id=self.check_membership)).value + filter = "id eq '{0}' ".format(self.check_membership) + ret = asyncio.get_event_loop().run_until_complete(self.get_group_members(results["object_id"], filter)) + results["is_member_of"] = True if ret.value and len(ret.value) != 0 else False return results + async def get_group(self, group_id): + return await self._client.groups.by_group_id(group_id).get() + + async def get_group_list(self, filter=None): + kwargs = {} + if filter: + request_configuration = GroupsRequestBuilder.GroupsRequestBuilderGetRequestConfiguration( + query_parameters=GroupsRequestBuilder.GroupsRequestBuilderGetQueryParameters( + count=True, + filter=filter, + ), + ) + kwargs["request_configuration"] = request_configuration + + groups = [] + # paginated response can be quite large + response = await self._client.groups.get(**kwargs) + if response: + groups += response.value + while response is not None and response.odata_next_link is not None: + response = await self._client.groups.with_url(response.odata_next_link).get(**kwargs) + if response: + groups += response.value + + return groups + + async def get_group_owners(self, group_id): + request_configuration = GroupsRequestBuilder.GroupsRequestBuilderGetRequestConfiguration( + query_parameters=GroupsRequestBuilder.GroupsRequestBuilderGetQueryParameters( + count=True, + select=['id', 'displayName', 'userPrincipalName', 'mailNickname', 'mail', 'accountEnabled', 'userType', + 'appId', 'appRoleAssignmentRequired'] + + ), + ) + return await self._client.groups.by_group_id(group_id).owners.get(request_configuration=request_configuration) + + async def get_group_members(self, group_id, filters=None): + request_configuration = TransitiveMembersRequestBuilder.TransitiveMembersRequestBuilderGetRequestConfiguration( + query_parameters=TransitiveMembersRequestBuilder.TransitiveMembersRequestBuilderGetQueryParameters( + count=True, + select=['id', 'displayName', 'userPrincipalName', 'mailNickname', 'mail', 'accountEnabled', 'userType', + 'appId', 'appRoleAssignmentRequired'] + + ), + ) + if filters: + request_configuration.query_parameters.filter = filters + return await self._client.groups.by_group_id(group_id).transitive_members.get( + request_configuration=request_configuration) + + async def get_member_groups(self, obj_id): + request_body = GetMemberGroupsPostRequestBody(security_enabled_only=False) + return await self._client.groups.by_group_id(obj_id).get_member_groups.post(body=request_body) + def main(): AzureRMADGroupInfo() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adpassword.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adpassword.py index 587d842b5..c6a634db9 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adpassword.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adpassword.py @@ -32,21 +32,17 @@ options: key_id: description: - The password key ID. + - It isn't supported anymore in the create operation. See the Azure documentation for more information + U(https://learn.microsoft.com/en-us/graph/api/application-addpassword?view=graph-rest-1.0&tabs=http#request-body). type: str - tenant: - description: - - The tenant ID. - type: str - required: True end_date: description: - Date or datemtime after which credentials expire. - Default value is one year after current time. type: str - value: + display_name: description: - - The application password value. - - Length greater than 18 characters. + - The friendly name of the application password. type: str app_object_id: description: @@ -77,8 +73,7 @@ EXAMPLES = ''' azure_rm_adpassword: app_id: "{{ app_id }}" state: present - value: "$abc12345678" - tenant: "{{ tenant_id }}" + display_name: "Password friendly name" ''' RETURN = ''' @@ -102,17 +97,26 @@ start_date: type: str returned: always sample: "2020-06-28T06:00:32.637070+00:00" - +secret_text: + description: + - The application password value. + - API only returns the application password value at creation. + type: str + returned: created + sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ''' from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase -import uuid import datetime try: - from azure.graphrbac.models import GraphErrorException - from azure.graphrbac.models import PasswordCredential - from azure.graphrbac.models import ApplicationUpdateParameters + import asyncio + from msgraph.generated.models.password_credential import PasswordCredential + from msgraph.generated.applications.item.add_password.add_password_post_request_body import \ + AddPasswordPostRequestBody + from msgraph.generated.applications.item.remove_password.remove_password_post_request_body import \ + RemovePasswordPostRequestBody + from msgraph.generated.applications.applications_request_builder import ApplicationsRequestBuilder from dateutil.relativedelta import relativedelta except ImportError: # This is handled in azure_rm_common @@ -127,19 +131,17 @@ class AzureRMADPassword(AzureRMModuleBase): service_principal_object_id=dict(type='str'), app_object_id=dict(type='str'), key_id=dict(type='str'), - tenant=dict(type='str', required=True), - value=dict(type='str'), + display_name=dict(type='str'), end_date=dict(type='str'), state=dict(type='str', default='present', choices=['present', 'absent']), ) self.state = None - self.tenant = None self.app_id = None self.service_principal_object_id = None self.app_object_id = None self.key_id = None - self.value = None + self.display_name = None self.end_date = None self.results = dict(changed=False) @@ -154,13 +156,13 @@ class AzureRMADPassword(AzureRMModuleBase): for key in list(self.module_arg_spec.keys()): setattr(self, key, kwargs[key]) - self.client = self.get_graphrbac_client(self.tenant) + self._client = self.get_msgraph_client() self.resolve_app_obj_id() passwords = self.get_all_passwords() if self.state == 'present': if self.key_id and self.key_exists(passwords): - self.update(passwords) + self.update_password(passwords) else: self.create_password(passwords) else: @@ -173,7 +175,7 @@ class AzureRMADPassword(AzureRMModuleBase): def key_exists(self, old_passwords): for pd in old_passwords: - if pd.key_id == self.key_id: + if str(pd.key_id) == self.key_id: return True return False @@ -183,27 +185,31 @@ class AzureRMADPassword(AzureRMModuleBase): return elif self.app_id or self.service_principal_object_id: if not self.app_id: - sp = self.client.service_principals.get(self.service_principal_object_id) + sp = asyncio.get_event_loop().run_until_complete(self.get_service_principal()) self.app_id = sp.app_id if not self.app_id: - self.fail("can't resolve app via service principal object id {0}".format(self.service_principal_object_id)) + self.fail("can't resolve app via service principal object id {0}".format( + self.service_principal_object_id)) - result = list(self.client.applications.list(filter="appId eq '{0}'".format(self.app_id))) + apps = asyncio.get_event_loop().run_until_complete(self.get_applications()) + result = list(apps.value) if result: - self.app_object_id = result[0].object_id + self.app_object_id = result[0].id else: self.fail("can't resolve app via app id {0}".format(self.app_id)) else: self.fail("one of the [app_id, app_object_id, service_principal_id] must be set") - except GraphErrorException as ge: + except Exception as ge: self.fail("error in resolve app_object_id {0}".format(str(ge))) def get_all_passwords(self): try: - return list(self.client.applications.list_password_credentials(self.app_object_id)) - except GraphErrorException as ge: + application = asyncio.get_event_loop().run_until_complete(self.get_application()) + passwordCredentials = application.password_credentials + return passwordCredentials + except Exception as ge: self.fail("failed to fetch passwords for app {0}: {1}".format(self.app_object_id, str(ge))) def delete_all_passwords(self, old_passwords): @@ -212,9 +218,10 @@ class AzureRMADPassword(AzureRMModuleBase): self.results['changed'] = False return try: - self.client.applications.patch(self.app_object_id, ApplicationUpdateParameters(password_credentials=[])) + for pd in old_passwords: + asyncio.get_event_loop().run_until_complete(self.remove_password(pd.key_id)) self.results['changed'] = True - except GraphErrorException as ge: + except Exception as ge: self.fail("fail to purge all passwords for app: {0} - {1}".format(self.app_object_id, str(ge))) def delete_password(self, old_passwords): @@ -225,46 +232,38 @@ class AzureRMADPassword(AzureRMModuleBase): num_of_passwords_before_delete = len(old_passwords) for pd in old_passwords: - if pd.key_id == self.key_id: - old_passwords.remove(pd) + if str(pd.key_id) == self.key_id: + try: + asyncio.get_event_loop().run_until_complete(self.remove_password(pd.key_id)) + + num_of_passwords_after_delete = len(self.get_all_passwords()) + if num_of_passwords_after_delete != num_of_passwords_before_delete: + self.results['changed'] = True + except Exception as ge: + self.fail("failed to delete password with key id {0} - {1}".format(self.app_id, str(ge))) break - try: - self.client.applications.patch(self.app_object_id, ApplicationUpdateParameters(password_credentials=old_passwords)) - num_of_passwords_after_delete = len(self.get_all_passwords()) - if num_of_passwords_after_delete != num_of_passwords_before_delete: - self.results['changed'] = True - - except GraphErrorException as ge: - self.fail("failed to delete password with key id {0} - {1}".format(self.app_id, str(ge))) def create_password(self, old_passwords): - - def gen_guid(): - return uuid.uuid4() - - if self.value is None: - self.fail("when creating a new password, module parameter value can't be None") - start_date = datetime.datetime.now(datetime.timezone.utc) end_date = self.end_date or start_date + relativedelta(years=1) - value = self.value - key_id = self.key_id or str(gen_guid()) - - new_password = PasswordCredential(start_date=start_date, end_date=end_date, key_id=key_id, - value=value, custom_key_identifier=None) - old_passwords.append(new_password) + display_name = self.display_name + num_of_passwords_before_add = len(old_passwords) try: - client = self.get_graphrbac_client(self.tenant) - app_patch_parameters = ApplicationUpdateParameters(password_credentials=old_passwords) - client.applications.patch(self.app_object_id, app_patch_parameters) - - new_passwords = self.get_all_passwords() - for pd in new_passwords: - if pd.key_id == key_id: - self.results['changed'] = True - self.results.update(self.to_dict(pd)) - except GraphErrorException as ge: + request_body = AddPasswordPostRequestBody( + password_credential=PasswordCredential( + start_date_time=start_date, + end_date_time=end_date, + display_name=display_name + ), + ) + pd = asyncio.get_event_loop().run_until_complete(self.add_password(request_body)) + + num_of_passwords_after_add = len(self.get_all_passwords()) + if num_of_passwords_after_add != num_of_passwords_before_add: + self.results['changed'] = True + self.results.update(self.to_dict(pd)) + except Exception as ge: self.fail("failed to create new password: {0}".format(str(ge))) def update_password(self, old_passwords): @@ -272,10 +271,36 @@ class AzureRMADPassword(AzureRMModuleBase): def to_dict(self, pd): return dict( - end_date=pd.end_date, - start_date=pd.start_date, - key_id=pd.key_id + end_date=str(pd.end_date_time), + start_date=str(pd.start_date_time), + key_id=str(pd.key_id), + secret_text=str(pd.secret_text) + ) + + async def get_service_principal(self): + return await self._client.service_principals.by_service_principal_id(self.service_principal_object_id).get() + + async def get_applications(self): + request_configuration = ApplicationsRequestBuilder.ApplicationsRequestBuilderGetRequestConfiguration( + query_parameters=ApplicationsRequestBuilder.ApplicationsRequestBuilderGetQueryParameters( + filter="appId eq '{0}'".format(self.app_id), + ), ) + return await self._client.applications.get(request_configuration=request_configuration) + + async def get_application(self): + return await self._client.applications.by_application_id(self.app_object_id).get() + + async def remove_password(self, key_id): + request_body = RemovePasswordPostRequestBody( + key_id=key_id, + ) + return await self._client.applications.by_application_id(self.app_object_id).remove_password.post( + body=request_body) + + async def add_password(self, request_body): + return await self._client.applications.by_application_id(self.app_object_id).add_password.post( + body=request_body) def main(): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adpassword_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adpassword_info.py index 7c82b7b9f..229ef100d 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adpassword_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adpassword_info.py @@ -8,7 +8,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - DOCUMENTATION = ''' module: azure_rm_adpassword_info @@ -32,11 +31,6 @@ options: description: - The password key ID. type: str - tenant: - description: - - The tenant ID. - type: str - required: True end_date: description: - Date or datemtime after which credentials expire. @@ -64,7 +58,6 @@ EXAMPLES = ''' - name: get ad password info azure_rm_adpassword_info: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" key_id: "{{ key_id }}" ''' @@ -107,7 +100,8 @@ passwords: from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase try: - from azure.graphrbac.models import GraphErrorException + import asyncio + from msgraph.generated.applications.applications_request_builder import ApplicationsRequestBuilder except ImportError: # This is handled in azure_rm_common pass @@ -121,12 +115,10 @@ class AzureRMADPasswordInfo(AzureRMModuleBase): app_object_id=dict(type='str'), service_principal_object_id=dict(type='str'), key_id=dict(type='str'), - tenant=dict(type='str', required=True), value=dict(type='str'), end_date=dict(type='str'), ) - self.tenant = None self.app_id = None self.service_principal_object_id = None self.app_object_id = None @@ -147,12 +139,12 @@ class AzureRMADPasswordInfo(AzureRMModuleBase): for key in list(self.module_arg_spec.keys()): setattr(self, key, kwargs[key]) - self.client = self.get_graphrbac_client(self.tenant) + self._client = self.get_msgraph_client() self.resolve_app_obj_id() passwords = self.get_all_passwords() if self.key_id: - filtered = [pd for pd in passwords if pd.key_id == self.key_id] + filtered = [pd for pd in passwords if str(pd.key_id) == self.key_id] self.results['passwords'] = [self.to_dict(pd) for pd in filtered] else: self.results['passwords'] = [self.to_dict(pd) for pd in passwords] @@ -165,37 +157,55 @@ class AzureRMADPasswordInfo(AzureRMModuleBase): return elif self.app_id or self.service_principal_object_id: if not self.app_id: - sp = self.client.service_principals.get(self.service_principal_id) + sp = asyncio.get_event_loop().run_until_complete(self.get_service_principal()) self.app_id = sp.app_id if not self.app_id: - self.fail("can't resolve app via service principal object id {0}".format(self.service_principal_object_id)) + self.fail("can't resolve app via service principal object id {0}".format( + self.service_principal_object_id)) - result = list(self.client.applications.list(filter="appId eq '{0}'".format(self.app_id))) + apps = asyncio.get_event_loop().run_until_complete(self.get_applications()) + result = list(apps.value) if result: - self.app_object_id = result[0].object_id + self.app_object_id = result[0].id else: self.fail("can't resolve app via app id {0}".format(self.app_id)) else: - self.fail("one of the [app_id, app_object_id, service_principal_id] must be set") + self.fail("one of the [app_id, app_object_id, service_principal_object_id] must be set") - except GraphErrorException as ge: + except Exception as ge: self.fail("error in resolve app_object_id {0}".format(str(ge))) def get_all_passwords(self): try: - return list(self.client.applications.list_password_credentials(self.app_object_id)) - except GraphErrorException as ge: + application = asyncio.get_event_loop().run_until_complete(self.get_application()) + passwordCredentials = application.password_credentials + return passwordCredentials + except Exception as ge: self.fail("failed to fetch passwords for app {0}: {1}".format(self.app_object_id, str(ge))) def to_dict(self, pd): return dict( - end_date=pd.end_date, - start_date=pd.start_date, - key_id=pd.key_id, + end_date=pd.end_date_time, + start_date=pd.start_date_time, + key_id=str(pd.key_id), custom_key_identifier=str(pd.custom_key_identifier) ) + async def get_service_principal(self): + return await self._client.service_principals.by_service_principal_id(self.service_principal_object_id).get() + + async def get_applications(self): + request_configuration = ApplicationsRequestBuilder.ApplicationsRequestBuilderGetRequestConfiguration( + query_parameters=ApplicationsRequestBuilder.ApplicationsRequestBuilderGetQueryParameters( + filter="appId eq '{0}'".format(self.app_id), + ), + ) + return await self._client.applications.get(request_configuration=request_configuration) + + async def get_application(self): + return await self._client.applications.by_application_id(self.app_object_id).get() + def main(): AzureRMADPasswordInfo() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adserviceprincipal.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adserviceprincipal.py index a7d3b39fd..ef12d642d 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adserviceprincipal.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adserviceprincipal.py @@ -5,8 +5,8 @@ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function -__metaclass__ = type +__metaclass__ = type DOCUMENTATION = ''' --- @@ -25,11 +25,6 @@ options: - The application ID. type: str required: True - tenant: - description: - - The tenant ID. - type: str - required: True app_role_assignment_required: description: - Whether the Role of the Service Principal is set. @@ -57,7 +52,6 @@ EXAMPLES = ''' azure_rm_adserviceprincipal: app_id: "{{ app_id }}" state: present - tenant: "{{ tenant_id }}" ''' RETURN = ''' @@ -89,13 +83,15 @@ object_id: ''' from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_ext import AzureRMModuleBaseExt + try: - from azure.graphrbac.models import ServicePrincipalCreateParameters + from msgraph.generated.models.service_principal import ServicePrincipal except Exception: pass try: - from azure.graphrbac.models import GraphErrorException + import asyncio + from msgraph.generated.service_principals.service_principals_request_builder import ServicePrincipalsRequestBuilder except ImportError: # This is handled in azure_rm_common pass @@ -106,13 +102,11 @@ class AzureRMADServicePrincipal(AzureRMModuleBaseExt): self.module_arg_spec = dict( app_id=dict(type='str', required=True), - tenant=dict(type='str', required=True), state=dict(type='str', default='present', choices=['present', 'absent']), app_role_assignment_required=dict(type='bool') ) self.state = None - self.tenant = None self.app_id = None self.app_role_assignment_required = None self.object_id = None @@ -128,6 +122,8 @@ class AzureRMADServicePrincipal(AzureRMModuleBaseExt): for key in list(self.module_arg_spec.keys()): setattr(self, key, kwargs[key]) + self._client = self.get_msgraph_client() + response = self.get_resource() if response: @@ -146,46 +142,47 @@ class AzureRMADServicePrincipal(AzureRMModuleBaseExt): def create_resource(self): try: - client = self.get_graphrbac_client(self.tenant) - response = client.service_principals.create(ServicePrincipalCreateParameters(app_id=self.app_id, account_enabled=True)) + response = asyncio.get_event_loop().run_until_complete(self.create_service_principal()) self.results['changed'] = True self.results.update(self.to_dict(response)) return response - except GraphErrorException as ge: + except Exception as ge: self.fail("Error creating service principle, app id {0} - {1}".format(self.app_id, str(ge))) def update_resource(self, old_response): try: - client = self.get_graphrbac_client(self.tenant) - to_update = {} + request_body = ServicePrincipal( + app_role_assignment_required=None, + ) if self.app_role_assignment_required is not None: - to_update['app_role_assignment_required'] = self.app_role_assignment_required + request_body = ServicePrincipal( + app_role_assignment_required=self.app_role_assignment_required + ) - client.service_principals.update(old_response['object_id'], to_update) + asyncio.get_event_loop().run_until_complete(self.update_service_principal(old_response, request_body)) self.results['changed'] = True self.results.update(self.get_resource()) - except GraphErrorException as ge: + except Exception as ge: self.fail("Error updating the service principal app_id {0} - {1}".format(self.app_id, str(ge))) def delete_resource(self, response): try: - client = self.get_graphrbac_client(self.tenant) - client.service_principals.delete(response.get('object_id')) + asyncio.get_event_loop().run_until_complete(self.delete_service_principal(response)) self.results['changed'] = True return True - except GraphErrorException as ge: + except Exception as ge: self.fail("Error deleting service principal app_id {0} - {1}".format(self.app_id, str(ge))) def get_resource(self): try: - client = self.get_graphrbac_client(self.tenant) - result = list(client.service_principals.list(filter="servicePrincipalNames/any(c:c eq '{0}')".format(self.app_id))) + sps = asyncio.get_event_loop().run_until_complete(self.get_service_principals()) + result = list(sps.value) if not result: return False result = result[0] return self.to_dict(result) - except GraphErrorException as ge: + except Exception as ge: self.log("Did not find the graph instance instance {0} - {1}".format(self.app_id, str(ge))) return False @@ -198,11 +195,33 @@ class AzureRMADServicePrincipal(AzureRMModuleBaseExt): def to_dict(self, object): return dict( app_id=object.app_id, - object_id=object.object_id, + object_id=object.id, app_display_name=object.display_name, app_role_assignment_required=object.app_role_assignment_required ) + async def create_service_principal(self): + request_body = ServicePrincipal( + app_id=self.app_id, + account_enabled=True + ) + return await self._client.service_principals.post(body=request_body) + + async def update_service_principal(self, old_response, request_body): + return await self._client.service_principals.by_service_principal_id(old_response['object_id']).patch( + body=request_body) + + async def delete_service_principal(self, response): + return await self._client.service_principals.by_service_principal_id(response.get('object_id')).delete() + + async def get_service_principals(self): + request_configuration = ServicePrincipalsRequestBuilder.ServicePrincipalsRequestBuilderGetRequestConfiguration( + query_parameters=ServicePrincipalsRequestBuilder.ServicePrincipalsRequestBuilderGetQueryParameters( + filter="servicePrincipalNames/any(c:c eq '{0}')".format(self.app_id), + ) + ) + return await self._client.service_principals.get(request_configuration=request_configuration) + def main(): AzureRMADServicePrincipal() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adserviceprincipal_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adserviceprincipal_info.py index db27ccae8..d2acfac04 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adserviceprincipal_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_adserviceprincipal_info.py @@ -5,8 +5,8 @@ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function -__metaclass__ = type +__metaclass__ = type DOCUMENTATION = ''' module: azure_rm_adserviceprincipal_info @@ -23,11 +23,6 @@ options: description: - The application ID. type: str - tenant: - description: - - The tenant ID. - type: str - required: True object_id: description: - It's service principal's object ID. @@ -45,34 +40,43 @@ EXAMPLES = ''' - name: get ad sp info azure_rm_adserviceprincipal_info: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" +- name: get all service principals + azure_rm_adserviceprincipal_info: ''' RETURN = ''' -app_display_name: - description: - - Object's display name or its prefix. - type: str - returned: always - sample: sp -app_id: +service_principals: description: - - The application ID. + - A list of service principals in the tenant. If app_id or object_id is set, the maximum length + of this list should be one. + type: list + elements: dict returned: always - type: str - sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -app_role_assignment_required: - description: - - Whether the Role of the Service Principal is set. - type: bool - returned: always - sample: false -object_id: - description: - - It's service principal's object ID. - returned: always - type: str - sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + contains: + app_display_name: + description: + - Object's display name or its prefix. + type: str + returned: always + sample: sp + app_id: + description: + - The application ID. + returned: always + type: str + sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + app_role_assignment_required: + description: + - Whether the Role of the Service Principal is set. + type: bool + returned: always + sample: false + object_id: + description: + - It's service principal's object ID. + returned: always + type: str + sample: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ''' @@ -80,7 +84,8 @@ object_id: from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_ext import AzureRMModuleBase try: - from azure.graphrbac.models import GraphErrorException + import asyncio + from msgraph.generated.service_principals.service_principals_request_builder import ServicePrincipalsRequestBuilder except ImportError: # This is handled in azure_rm_common pass @@ -92,10 +97,8 @@ class AzureRMADServicePrincipalInfo(AzureRMModuleBase): self.module_arg_spec = dict( app_id=dict(type='str'), object_id=dict(type='str'), - tenant=dict(type='str', required=True), ) - self.tenant = None self.app_id = None self.object_id = None self.results = dict(changed=False) @@ -110,17 +113,18 @@ class AzureRMADServicePrincipalInfo(AzureRMModuleBase): for key in list(self.module_arg_spec.keys()): setattr(self, key, kwargs[key]) + self._client = self.get_msgraph_client() + service_principals = [] try: - client = self.get_graphrbac_client(self.tenant) if self.object_id is None: - service_principals = list(client.service_principals.list(filter="servicePrincipalNames/any(c:c eq '{0}')".format(self.app_id))) + service_principals = asyncio.get_event_loop().run_until_complete(self.get_service_principals()) else: - service_principals = [client.service_principals.get(self.object_id)] + service_principals = [asyncio.get_event_loop().run_until_complete(self.get_service_principal())] self.results['service_principals'] = [self.to_dict(sp) for sp in service_principals] - except GraphErrorException as ge: + except Exception as ge: self.fail("failed to get service principal info {0}".format(str(ge))) return self.results @@ -128,11 +132,32 @@ class AzureRMADServicePrincipalInfo(AzureRMModuleBase): def to_dict(self, object): return dict( app_id=object.app_id, - object_id=object.object_id, + object_id=object.id, app_display_name=object.display_name, app_role_assignment_required=object.app_role_assignment_required ) + async def get_service_principal(self): + return await self._client.service_principals.by_service_principal_id(self.object_id).get() + + async def get_service_principals(self): + kwargs = {} + if self.app_id is not None: + request_configuration = ServicePrincipalsRequestBuilder.ServicePrincipalsRequestBuilderGetRequestConfiguration( + query_parameters=ServicePrincipalsRequestBuilder.ServicePrincipalsRequestBuilderGetQueryParameters( + filter="servicePrincipalNames/any(c:c eq '{0}')".format(self.app_id)) + ) + kwargs['request_configuration'] = request_configuration + service_principals = [] + response = await self._client.service_principals.get(**kwargs) + if response: + service_principals += response.value + while response is not None and response.odata_next_link is not None: + response = await self._client.service_principals.with_url(response.odata_next_link).get(**kwargs) + if response: + service_principals += response.value + return service_principals + def main(): AzureRMADServicePrincipalInfo() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aduser.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aduser.py index b41c5ae7e..1e0a238c0 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aduser.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aduser.py @@ -5,6 +5,7 @@ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function + __metaclass__ = type DOCUMENTATION = ''' @@ -18,11 +19,6 @@ description: - Create, delete, and update an Azure Active Directory user. options: - tenant: - description: - - The tenant ID. - type: str - required: True state: description: - State of the ad user. Use C(present) to create or update an ad user and C(absent) to delete an ad user. @@ -57,11 +53,13 @@ options: - The surname for the user. - Used when either creating or updating a user account. type: str - immutable_id: + on_premises_immutable_id: description: - - The immutable_id of the user. + - The on_premises_immutable_id of the user. - Used when either creating or updating a user account. type: str + aliases: + - immutable_id mail: description: - The primary email address of the user. @@ -114,6 +112,13 @@ options: - Filter that can be used to specify a user to update or delete. - Mutually exclusive with I(object_id), I(attribute_name), and I(user_principal_name). type: str + company_name: + description: + - The name of the company that the user is associated with. + - This property can be useful for describing the company that an external user comes from. + - The maximum length is 64 characters.Returned only on $select. + - Supports $filter (eq, ne, not, ge, le, in, startsWith, and eq on null values). + type: str extends_documentation_fragment: - azure.azcollection.azure @@ -126,30 +131,28 @@ EXAMPLES = ''' - name: Create user azure_rm_aduser: user_principal_name: "{{ user_id }}" - tenant: "{{ tenant_id }}" state: "present" account_enabled: "True" display_name: "Test_{{ user_principal_name }}_Display_Name" password_profile: "password" mail_nickname: "Test_{{ user_principal_name }}_mail_nickname" - immutable_id: "{{ object_id }}" + on_premises_immutable_id: "{{ object_id }}" given_name: "First" surname: "Last" user_type: "Member" usage_location: "US" mail: "{{ user_principal_name }}@contoso.com" + company_name: 'Test Company' - name: Update user with new value for account_enabled azure_rm_aduser: user_principal_name: "{{ user_id }}" - tenant: "{{ tenant_id }}" state: "present" account_enabled: "False" - name: Delete user azure_rm_aduser: user_principal_name: "{{ user_id }}" - tenant: "{{ tenant_id }}" state: "absent" ''' @@ -196,15 +199,21 @@ user_type: returned: always type: str sample: Member +company_name: + description: + - The name of the company that the user is associated with. + type: str + returned: always + sample: 'Test Company' ''' from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_ext import AzureRMModuleBase try: - from azure.graphrbac.models import UserUpdateParameters - from azure.graphrbac.models import UserCreateParameters - from azure.graphrbac.models import PasswordProfile - from azure.graphrbac.models import GraphErrorException + import asyncio + from msgraph.generated.models.password_profile import PasswordProfile + from msgraph.generated.models.user import User + from msgraph.generated.users.users_request_builder import UsersRequestBuilder except ImportError: # This is handled in azure_rm_common pass @@ -224,16 +233,15 @@ class AzureRMADUser(AzureRMModuleBase): display_name=dict(type='str'), password_profile=dict(type='str', no_log=True), mail_nickname=dict(type='str'), - immutable_id=dict(type='str'), + on_premises_immutable_id=dict(type='str', aliases=['immutable_id']), usage_location=dict(type='str'), given_name=dict(type='str'), surname=dict(type='str'), user_type=dict(type='str'), mail=dict(type='str'), - tenant=dict(type='str', required=True), + company_name=dict(type='str') ) - self.tenant = None self.user_principal_name = None self.state = None self.object_id = None @@ -244,12 +252,13 @@ class AzureRMADUser(AzureRMModuleBase): self.display_name = None self.password_profile = None self.mail_nickname = None - self.immutable_id = None + self.on_premises_immutable_id = None self.usage_location = None self.given_name = None self.surname = None self.user_type = None self.mail = None + self.company_name = None self.log_path = None self.log_mode = None @@ -273,9 +282,9 @@ class AzureRMADUser(AzureRMModuleBase): setattr(self, key, kwargs[key]) try: - client = self.get_graphrbac_client(self.tenant) + self._client = self.get_msgraph_client() - ad_user = self.get_exisiting_user(client) + ad_user = self.get_exisiting_user() if self.state == 'present': @@ -284,11 +293,13 @@ class AzureRMADUser(AzureRMModuleBase): password = None if self.password_profile: - password = PasswordProfile(password=self.password_profile) + password = PasswordProfile( + password=self.password_profile, + ) should_update = False - if self.immutable_id and ad_user.immutable_id != self.immutable_id: + if self.on_premises_immutable_id and ad_user.on_premises_immutable_id != self.on_premises_immutable_id: should_update = True if should_update or self.usage_location and ad_user.usage_location != self.usage_location: should_update = True @@ -308,84 +319,73 @@ class AzureRMADUser(AzureRMModuleBase): should_update = True if should_update or self.mail_nickname and ad_user.mail_nickname != self.mail_nickname: should_update = True + if should_update or self.company_name and ad_user.company_name != self.company_name: + should_update = True if should_update: - parameters = UserUpdateParameters(immutable_id=self.immutable_id, - usage_location=self.usage_location, - given_name=self.given_name, - surname=self.surname, - user_type=self.user_type, - account_enabled=self.account_enabled, - display_name=self.display_name, - password_profile=password, - user_principal_name=self.user_principal_name, - mail_nickname=self.mail_nickname) - - client.users.update(upn_or_object_id=ad_user.object_id, parameters=parameters) + asyncio.get_event_loop().run_until_complete(self.update_user(ad_user, password)) self.results['changed'] = True # Get the updated versions of the users to return # the update method, has no return value so it needs to be explicitely returned in a call - ad_user = self.get_exisiting_user(client) + ad_user = self.get_exisiting_user() else: self.results['changed'] = False else: # Create, changed - password = PasswordProfile(password=self.password_profile) - parameters = UserCreateParameters(account_enabled=self.account_enabled, - display_name=self.display_name, - password_profile=password, - user_principal_name=self.user_principal_name, - mail_nickname=self.mail_nickname, - immutable_id=self.immutable_id, - usage_location=self.usage_location, - given_name=self.given_name, - surname=self.surname, - user_type=self.user_type, - mail=self.mail) - ad_user = client.users.create(parameters=parameters) + asyncio.get_event_loop().run_until_complete(self.create_user()) self.results['changed'] = True + ad_user = self.get_exisiting_user() self.results['ad_user'] = self.to_dict(ad_user) elif self.state == 'absent': if ad_user: # Delete, changed - client.users.delete(ad_user.object_id) + asyncio.get_event_loop().run_until_complete(self.delete_user(ad_user)) self.results['changed'] = True else: # Do nothing unchanged self.results['changed'] = False - except GraphErrorException as e: + except Exception as e: self.fail("failed to get ad user info {0}".format(str(e))) return self.results - def get_exisiting_user(self, client): + def get_exisiting_user(self): ad_user = None try: if self.user_principal_name is not None: - ad_user = client.users.get(self.user_principal_name) + ad_user = asyncio.get_event_loop().run_until_complete(self.get_user(self.user_principal_name)) elif self.object_id is not None: - ad_user = client.users.get(self.object_id) + ad_user = asyncio.get_event_loop().run_until_complete(self.get_user(self.object_id)) elif self.attribute_name is not None and self.attribute_value is not None: try: - ad_user = list(client.users.list(filter="{0} eq '{1}'".format(self.attribute_name, self.attribute_value)))[0] - except GraphErrorException as e: + users = asyncio.get_event_loop().run_until_complete( + self.get_users_by_filter("{0} eq '{1}'".format(self.attribute_name, self.attribute_value))) + ad_users = list(users.value) + ad_user = ad_users[0] + except Exception as e: # the type doesn't get more specific. Could check the error message but no guarantees that message doesn't change in the future # more stable to try again assuming the first error came from the attribute being a list try: - ad_user = list(client.users.list(filter="{0}/any(c:c eq '{1}')".format(self.attribute_name, self.attribute_value)))[0] - except GraphErrorException as sub_e: + users = asyncio.get_event_loop().run_until_complete(self.get_users_by_filter( + "{0}/any(c:c eq '{1}')".format(self.attribute_name, self.attribute_value))) + ad_users = list(users.value) + ad_user = ad_users[0] + except Exception as sub_e: raise elif self.odata_filter is not None: # run a filter based on user input to return based on any given attribute/query - ad_user = list(client.users.list(filter=self.odata_filter))[0] - except GraphErrorException as e: + users = asyncio.get_event_loop().run_until_complete(self.get_users_by_filter(self.odata_filter)) + ad_users = list(users.value) + ad_user = ad_users[0] + except Exception as e: # User was not found err_msg = str(e) - if err_msg == "Resource '{0}' does not exist or one of its queried reference-property objects are not present.".format(self.user_principal_name): + if "Resource '{0}' does not exist or one of its queried reference-property objects are not present.".format( + self.user_principal_name) in err_msg: ad_user = None else: raise @@ -393,13 +393,75 @@ class AzureRMADUser(AzureRMModuleBase): def to_dict(self, object): return dict( - object_id=object.object_id, + object_id=object.id, display_name=object.display_name, user_principal_name=object.user_principal_name, mail_nickname=object.mail_nickname, mail=object.mail, account_enabled=object.account_enabled, - user_type=object.user_type + user_type=object.user_type, + company_name=object.company_name + ) + + async def update_user(self, ad_user, password): + request_body = User( + on_premises_immutable_id=self.on_premises_immutable_id, + usage_location=self.usage_location, + given_name=self.given_name, + surname=self.surname, + user_type=self.user_type, + account_enabled=self.account_enabled, + display_name=self.display_name, + password_profile=password, + user_principal_name=self.user_principal_name, + mail_nickname=self.mail_nickname, + company_name=self.company_name + ) + return await self._client.users.by_user_id(ad_user.id).patch(body=request_body) + + async def create_user(self): + password = PasswordProfile( + password=self.password_profile + ) + request_body = User( + account_enabled=self.account_enabled, + display_name=self.display_name, + password_profile=password, + user_principal_name=self.user_principal_name, + mail_nickname=self.mail_nickname, + on_premises_immutable_id=self.on_premises_immutable_id, + usage_location=self.usage_location, + given_name=self.given_name, + surname=self.surname, + user_type=self.user_type, + mail=self.mail, + company_name=self.company_name + ) + return await self._client.users.post(body=request_body) + + async def delete_user(self, ad_user): + return await self._client.users.by_user_id(ad_user.id).delete() + + async def get_user(self, object): + request_configuration = UsersRequestBuilder.UsersRequestBuilderGetRequestConfiguration( + query_parameters=UsersRequestBuilder.UsersRequestBuilderGetQueryParameters( + select=["accountEnabled", "displayName", "mail", "mailNickname", "id", "userPrincipalName", "userType", + "onPremisesImmutableId", "usageLocation", "givenName", "surname", "companyName"] + ), + ) + return await self._client.users.by_user_id(object).get(request_configuration=request_configuration) + + async def get_users_by_filter(self, filter): + return await self._client.users.get( + request_configuration=UsersRequestBuilder.UsersRequestBuilderGetRequestConfiguration( + query_parameters=UsersRequestBuilder.UsersRequestBuilderGetQueryParameters( + filter=filter, + select=["accountEnabled", "displayName", "mail", "mailNickname", "id", "userPrincipalName", + "userType", "onPremisesImmutableId", "usageLocation", "givenName", "surname", "companyName"], + count=True + ), + headers={'ConsistencyLevel': "eventual", } + ) ) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aduser_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aduser_info.py index 85460e741..98c30be57 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aduser_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aduser_info.py @@ -5,6 +5,7 @@ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function + __metaclass__ = type DOCUMENTATION = ''' @@ -18,11 +19,6 @@ description: - Get Azure Active Directory user info. options: - tenant: - description: - - The tenant ID. - type: str - required: True object_id: description: - The object id for the user. @@ -74,34 +70,28 @@ EXAMPLES = ''' - name: Using user_principal_name azure.azcollection.azure_rm_aduser_info: user_principal_name: user@contoso.com - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - name: Using object_id azure.azcollection.azure_rm_aduser_info: object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - name: Using attribute mailNickname - not a collection azure.azcollection.azure_rm_aduser_info: attribute_name: mailNickname attribute_value: users_mailNickname - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - name: Using attribute proxyAddresses - a collection azure.azcollection.azure_rm_aduser_info: attribute_name: proxyAddresses attribute_value: SMTP:user@contoso.com - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - name: Using Filter mailNickname azure.azcollection.azure_rm_aduser_info: odata_filter: mailNickname eq 'user@contoso.com' - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - name: Using Filter proxyAddresses azure.azcollection.azure_rm_aduser_info: odata_filter: proxyAddresses/any(c:c eq 'SMTP:user@contoso.com') - tenant: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ''' RETURN = ''' @@ -147,12 +137,19 @@ user_type: returned: always type: str sample: Member +company_name: + description: + - The name of the company that the user is associated with. + type: str + returned: always + sample: "Test Company" ''' from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_ext import AzureRMModuleBase try: - from azure.graphrbac.models import GraphErrorException + import asyncio + from msgraph.generated.users.users_request_builder import UsersRequestBuilder except ImportError: # This is handled in azure_rm_common pass @@ -168,10 +165,8 @@ class AzureRMADUserInfo(AzureRMModuleBase): attribute_value=dict(type='str'), odata_filter=dict(type='str'), all=dict(type='bool'), - tenant=dict(type='str', required=True), ) - self.tenant = None self.user_principal_name = None self.object_id = None self.attribute_name = None @@ -203,44 +198,88 @@ class AzureRMADUserInfo(AzureRMModuleBase): ad_users = [] try: - client = self.get_graphrbac_client(self.tenant) + self._client = self.get_msgraph_client() if self.user_principal_name is not None: - ad_users = [client.users.get(self.user_principal_name)] + ad_users = [asyncio.get_event_loop().run_until_complete(self.get_user(self.user_principal_name))] elif self.object_id is not None: - ad_users = [client.users.get(self.object_id)] + ad_users = [asyncio.get_event_loop().run_until_complete(self.get_user(self.object_id))] elif self.attribute_name is not None and self.attribute_value is not None: try: - ad_users = list(client.users.list(filter="{0} eq '{1}'".format(self.attribute_name, self.attribute_value))) - except GraphErrorException as e: + users = asyncio.get_event_loop().run_until_complete( + self.get_users_by_filter("{0} eq '{1}'".format(self.attribute_name, self.attribute_value))) + ad_users = list(users.value) + except Exception as e: # the type doesn't get more specific. Could check the error message but no guarantees that message doesn't change in the future # more stable to try again assuming the first error came from the attribute being a list try: - ad_users = list(client.users.list(filter="{0}/any(c:c eq '{1}')".format(self.attribute_name, self.attribute_value))) - except GraphErrorException as sub_e: + users = asyncio.get_event_loop().run_until_complete(self.get_users_by_filter( + "{0}/any(c:c eq '{1}')".format(self.attribute_name, self.attribute_value))) + ad_users = list(users.value) + except Exception as sub_e: raise elif self.odata_filter is not None: # run a filter based on user input to return based on any given attribute/query - ad_users = list(client.users.list(filter=self.odata_filter)) + users = asyncio.get_event_loop().run_until_complete(self.get_users_by_filter(self.odata_filter)) + ad_users = list(users.value) elif self.all: - ad_users = list(client.users.list()) + # this returns as a list, since we parse multiple pages + ad_users = asyncio.get_event_loop().run_until_complete(self.get_users()) self.results['ad_users'] = [self.to_dict(user) for user in ad_users] - except GraphErrorException as e: + except Exception as e: self.fail("failed to get ad user info {0}".format(str(e))) return self.results def to_dict(self, object): return dict( - object_id=object.object_id, + object_id=object.id, display_name=object.display_name, user_principal_name=object.user_principal_name, mail_nickname=object.mail_nickname, mail=object.mail, account_enabled=object.account_enabled, - user_type=object.user_type + user_type=object.user_type, + company_name=object.company_name + ) + + async def get_user(self, object): + request_configuration = UsersRequestBuilder.UsersRequestBuilderGetRequestConfiguration( + query_parameters=UsersRequestBuilder.UsersRequestBuilderGetQueryParameters( + select=["accountEnabled", "displayName", "mail", "mailNickname", "id", "userPrincipalName", "userType", "companyName"] + ), + ) + return await self._client.users.by_user_id(object).get(request_configuration=request_configuration) + + async def get_users(self): + request_configuration = UsersRequestBuilder.UsersRequestBuilderGetRequestConfiguration( + query_parameters=UsersRequestBuilder.UsersRequestBuilderGetQueryParameters( + select=["accountEnabled", "displayName", "mail", "mailNickname", "id", "userPrincipalName", "userType", "companyName"] + ), ) + users = [] + # paginated response can be quite large + response = await self._client.users.get(request_configuration=request_configuration) + if response: + users += response.value + while response is not None and response.odata_next_link is not None: + response = await self._client.users.with_url(response.odata_next_link).get(request_configuration=request_configuration) + if response: + users += response.value + + return users + + async def get_users_by_filter(self, filter): + return await self._client.users.get( + request_configuration=UsersRequestBuilder.UsersRequestBuilderGetRequestConfiguration( + query_parameters=UsersRequestBuilder.UsersRequestBuilderGetQueryParameters( + filter=filter, + select=["accountEnabled", "displayName", "mail", "mailNickname", "id", "userPrincipalName", + "userType", "companyName"], + count=True + ), + )) def main(): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aks.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aks.py index bb034b48b..0fb5095fe 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aks.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aks.py @@ -284,7 +284,7 @@ options: type: str managed: description: - - Whether to enable manged AAD. + - Whether to enable managed AAD. type: bool default: false admin_group_object_ids: @@ -356,6 +356,57 @@ options: - Name of the resource group containing agent pool nodes. - Unable to update. type: str + pod_identity_profile: + description: + - Config pod identities in managed Kubernetes cluster. + type: dict + suboptions: + enabled: + description: + - Whether the pod identity addon is enabled. + type: bool + allow_network_plugin_kubenet: + description: + - Whether using Kubenet network plugin with AAD Pod Identity. + type: bool + user_assigned_identities: + description: + - The pod identities to use in the cluster. + type: list + elements: dict + suboptions: + name: + description: + - The name of the pod identity. + type: str + required: true + namespace: + description: + - The namespace of the pod identity. + type: str + required: true + binding_selector: + description: + - The binding selector to use for the AzureIdentityBinding resource. + type: str + identity: + description: + - The user assigned identity details. + type: dict + required: true + suboptions: + resource_id: + description: + - The resource ID of the user assigned identity. + type: str + object_id: + description: + - The object ID of the user assigned identity. + type: str + client_id: + description: + - The client ID of the user assigned identity. + type: str extends_documentation_fragment: - azure.azcollection.azure @@ -463,6 +514,45 @@ EXAMPLES = ''' type: VirtualMachineScaleSets enable_auto_scaling: false +- name: Create an AKS instance wit pod_identity_profile settings + azure_rm_aks: + name: "aks{{ rpfx }}" + resource_group: "{{ resource_group }}" + location: eastus + dns_prefix: "aks{{ rpfx }}" + kubernetes_version: "{{ versions.azure_aks_versions[0] }}" + service_principal: + client_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + client_secret: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + linux_profile: + admin_username: azureuser + ssh_key: ssh-rsa AAAAB3Ip6*************** + agent_pool_profiles: + - name: default + count: 1 + vm_size: Standard_B2s + type: VirtualMachineScaleSets + mode: System + node_labels: {"release":"stable"} + max_pods: 42 + availability_zones: + - 1 + - 2 + node_resource_group: "node{{ noderpfx }}" + enable_rbac: true + network_profile: + load_balancer_sku: standard + pod_identity_profile: + enabled: false + allow_network_plugin_kubenet: false + user_assigned_identities: + - name: fredtest + namespace: fredtest + binding_selector: test + identity: + client_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + object_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + - name: Remove a managed Azure Container Services (AKS) instance azure_rm_aks: name: myAKS @@ -490,7 +580,7 @@ state: changed: false dns_prefix: aks9860bdcd89 id: "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/aks9860bdc" - kube_config: "......" + kube_config: ["......"] kubernetes_version: 1.14.6 linux_profile: admin_username: azureuser @@ -500,13 +590,29 @@ state: provisioning_state: Succeeded service_principal_profile: client_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + pod_identity_profile: { + "allow_network_plugin_kubenet": false, + "user_assigned_identities": [ + { + "binding_selector": "test", + "identity": { + "client_id": xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, + "object_id": xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + }, + "name": "fredtest", + "namespace": "fredtest", + "provisioning_state": "Updating" + } + ] + } tags: {} type: Microsoft.ContainerService/ManagedClusters ''' -from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase +from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_ext import AzureRMModuleBaseExt try: from azure.core.exceptions import ResourceNotFoundError + from azure.core.exceptions import HttpResponseError except ImportError: # This is handled in azure_rm_common pass @@ -540,10 +646,19 @@ def create_aks_dict(aks): api_server_access_profile=create_api_server_access_profile_dict(aks.api_server_access_profile), addon=create_addon_dict(aks.addon_profiles), fqdn=aks.fqdn, - node_resource_group=aks.node_resource_group + node_resource_group=aks.node_resource_group, + pod_identity_profile=create_pod_identity_profile(aks.pod_identity_profile.as_dict()) if aks.pod_identity_profile else None ) +def create_pod_identity_profile(pod_profile): + return dict( + enabled=pod_profile.get('enabled', False), + allow_network_plugin_kubenet=pod_profile.get('allow_network_plugin_kubenet', False), + user_assigned_identities=pod_profile.get('user_assigned_identities') + ) if pod_profile else {} + + def create_network_profiles_dict(network): return dict( network_plugin=network.network_plugin, @@ -715,7 +830,7 @@ api_server_access_profile_spec = dict( ) -class AzureRMManagedCluster(AzureRMModuleBase): +class AzureRMManagedCluster(AzureRMModuleBaseExt): """Configuration class for an Azure RM container service (AKS) resource""" def __init__(self): @@ -777,6 +892,31 @@ class AzureRMManagedCluster(AzureRMModuleBase): ), node_resource_group=dict( type='str' + ), + pod_identity_profile=dict( + type='dict', + options=dict( + enabled=dict(type='bool'), + allow_network_plugin_kubenet=dict(type='bool'), + user_assigned_identities=dict( + type='list', + elements='dict', + options=dict( + name=dict(type='str', required=True), + namespace=dict(type='str', required=True), + binding_selector=dict(type='str'), + identity=dict( + type='dict', + required=True, + options=dict( + resource_id=dict(type='str'), + client_id=dict(type='str'), + object_id=dict(type='str') + ) + ) + ) + ) + ) ) ) @@ -796,6 +936,7 @@ class AzureRMManagedCluster(AzureRMModuleBase): self.api_server_access_profile = None self.addon = None self.node_resource_group = None + self.pod_identity_profile = None required_if = [ ('state', 'present', [ @@ -972,6 +1113,10 @@ class AzureRMManagedCluster(AzureRMModuleBase): if not matched: self.log("Agent Pool not found") to_be_updated = True + if not self.default_compare({}, self.pod_identity_profile, response['pod_identity_profile'], '', dict(compare=[])): + to_be_updated = True + else: + self.pod_identity_profile = response['pod_identity_profile'] if update_agentpool: self.log("Need to update agentpool") @@ -1044,6 +1189,15 @@ class AzureRMManagedCluster(AzureRMModuleBase): else: linux_profile = None + if self.pod_identity_profile: + pod_identity_profile = self.managedcluster_models.ManagedClusterPodIdentityProfile( + enabled=self.pod_identity_profile.get('enabled'), + allow_network_plugin_kubenet=self.pod_identity_profile.get('allow_network_plugin_kubenet'), + user_assigned_identities=self.pod_identity_profile.get('user_assigned_identities') + ) + else: + pod_identity_profile = None + parameters = self.managedcluster_models.ManagedCluster( location=self.location, dns_prefix=self.dns_prefix, @@ -1058,7 +1212,8 @@ class AzureRMManagedCluster(AzureRMModuleBase): aad_profile=self.create_aad_profile_instance(self.aad_profile), api_server_access_profile=self.create_api_server_access_profile_instance(self.api_server_access_profile), addon_profiles=self.create_addon_profile_instance(self.addon), - node_resource_group=self.node_resource_group + node_resource_group=self.node_resource_group, + pod_identity_profile=pod_identity_profile ) # self.log("service_principal_profile : {0}".format(parameters.service_principal_profile)) @@ -1169,10 +1324,12 @@ class AzureRMManagedCluster(AzureRMModuleBase): :return: AKS instance kubeconfig ''' - access_profile = self.managedcluster_client.managed_clusters.get_access_profile(resource_group_name=self.resource_group, - resource_name=self.name, - role_name="clusterUser") - return access_profile.kube_config.decode('utf-8') + try: + access_profile = self.managedcluster_client.managed_clusters.list_cluster_user_credentials(self.resource_group, self.name) + except HttpResponseError as ec: + self.log("Lists the cluster user credentials of a managed cluster Failed, Exception as {0}".format(ec)) + return [] + return [item.value.decode('utf-8') for item in access_profile.kubeconfigs] def create_agent_pool_profile_instance(self, agentpoolprofile): ''' diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aks_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aks_info.py index c97bd893e..2e4fd7a26 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aks_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aks_info.py @@ -37,10 +37,14 @@ options: description: - Show kubeconfig of the AKS cluster. - Note the operation will cost more network overhead, not recommended when listing AKS. + - I(show_kubeconfig=monitoring) to lists the cluster monitoring user credentials of a managed cluster. + - I(show_kubeconfig=admin) to lists the cluster admin credentials of a managed cluster. + - I(show_kubeconfig=user) to lists the cluster user credentials of a managed cluster. type: str choices: - user - admin + - monitoring extends_documentation_fragment: - azure.azcollection.azure @@ -75,6 +79,7 @@ from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common try: from azure.core.exceptions import ResourceNotFoundError + from azure.core.exceptions import HttpResponseError except Exception: # handled in azure_rm_common pass @@ -91,7 +96,7 @@ class AzureRMManagedClusterInfo(AzureRMModuleBase): name=dict(type='str'), resource_group=dict(type='str'), tags=dict(type='list', elements='str'), - show_kubeconfig=dict(type='str', choices=['user', 'admin']), + show_kubeconfig=dict(type='str', choices=['user', 'admin', 'monitoring']), ) self.results = dict( @@ -196,11 +201,29 @@ class AzureRMManagedClusterInfo(AzureRMModuleBase): :return: AKS instance kubeconfig ''' - if not self.show_kubeconfig: - return '' - role_name = 'cluster{0}'.format(str.capitalize(self.show_kubeconfig)) - access_profile = self.managedcluster_client.managed_clusters.get_access_profile(resource_group, name, role_name) - return access_profile.kube_config.decode('utf-8') + if self.show_kubeconfig == 'user': + try: + access_profile = self.managedcluster_client.managed_clusters.list_cluster_user_credentials(self.resource_group, self.name) + except HttpResponseError as ec: + self.log("Lists the cluster user credentials of a managed cluster Failed, Exception as {0}".format(ec)) + return [] + return [item.value.decode('utf-8') for item in access_profile.kubeconfigs] + elif self.show_kubeconfig == 'admin': + try: + access_profile = self.managedcluster_client.managed_clusters.list_cluster_admin_credentials(self.resource_group, self.name) + except HttpResponseError as ec: + self.log("Lists the cluster admin credentials of a managed cluster Failed, Exception as {0}".format(ec)) + return [] + return [item.value.decode('utf-8') for item in access_profile.kubeconfigs] + elif self.show_kubeconfig == 'monitoring': + try: + access_profile = self.managedcluster_client.managed_clusters.list_cluster_monitoring_user_credentials(self.resource_group, self.name) + except HttpResponseError as ec: + self.log("Lists the cluster monitoring credentials of a managed cluster Failed, Exception as {0}".format(ec)) + return [] + return [item.value.decode('utf-8') for item in access_profile.kubeconfigs] + else: + return [] def main(): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_akscredentials_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_akscredentials_info.py new file mode 100644 index 000000000..95a7fb104 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_akscredentials_info.py @@ -0,0 +1,209 @@ +#!/usr/bin/python +# +# Copyright (c) 2024 xuzhang3 (@xuzhang3), Fred-sun (@Fred-sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_akscredentials_info + +version_added: "2.3.0" + +short_description: List Azure Kubernetes Service Credentials facts + +description: + - List Azure Kubernetes Service Credentials facts. + +options: + cluster_name: + description: + - Azure Kubernetes Service or all Azure Kubernetes Services. + type: str + required: true + resource_group: + description: + - The resource group to search for the desired Azure Kubernetes Service. + type: str + required: true + show_admin_credentials: + description: + - Whether list Cluster Admin Credentials. + type: bool + default: false + show_user_credentials: + description: + - Whether list Cluster User Credentials. + type: bool + default: false + show_monitor_credentials: + description: + - Whether list Cluster Monitoring User Credentials. + type: bool + default: false + +extends_documentation_fragment: + - azure.azcollection.azure + +author: + - xuzhang3 (@xuzhang3) + - Fred Sun (@Fred-sun) +''' + +EXAMPLES = ''' +- name: Get managecluster admin credentials + azure_rm_akscredentials_info: + resource_group: "{{ resource_group }}" + cluster_name: cluter_name + show_admin_credentials: true + +- name: Get managecluster user credentials + azure_rm_akscredentials_info: + resource_group: "{{ resource_group }}" + cluster_name: cluster_name + show_user_credentials: true + +- name: Get managecluster monitor user credentials + azure_rm_akscredentials_info: + resource_group: "{{ resource_group }}" + cluster_name: cluster_name + show_monitor_credentials: true +''' + +RETURN = ''' +cluster_credentials: + description: + - Lists the cluster user, admin or monitoring user credentials of a managed cluster + returned: always + type: complex + contains: + cluster_name: + description: + - Azure Kubernetes Service or all Azure Kubernetes Services. + type: str + returned: always + sample: testcluster01 + resource_group: + description: + - The resource group to search for the desired Azure Kubernetes Service. + type: str + returned: always + sample: + name: + description: + - The name of the credential. + type: str + returned: always + sample: + value: + description: + - Base64-encoded Kubernetes configuration file. + type: str + returned: always + sample: "apiVersion: ************************" +''' + +from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from azure.core.exceptions import HttpResponseError +except Exception: + # handled in azure_rm_common + pass + +AZURE_OBJECT_CLASS = 'managedClustersCredentials' + + +class AzureRMAksCredentialsInfo(AzureRMModuleBase): + """Utility class to get Azure Kubernetes Service Credentials facts""" + + def __init__(self): + + self.module_args = dict( + cluster_name=dict(type='str', required=True), + resource_group=dict(type='str', required=True), + show_admin_credentials=dict(type='bool', default=False), + show_user_credentials=dict(type='bool', default=False), + show_monitor_credentials=dict(type='bool', default=False), + ) + + self.results = dict( + changed=False, + cluster_credentials=[], + ) + + mutually_exclusive = [('show_admin_credentials', 'show_user_credentials', 'show_monitor_credentials')] + + super(AzureRMAksCredentialsInfo, self).__init__( + derived_arg_spec=self.module_args, + supports_check_mode=True, + supports_tags=False, + mutually_exclusive=mutually_exclusive, + facts_module=True + ) + + def exec_module(self, **kwargs): + + for key in self.module_args: + setattr(self, key, kwargs[key]) + + if self.show_user_credentials: + self.results['cluster_credentials'] = self.get_user_credentials() + elif self.show_admin_credentials: + self.results['cluster_credentials'] = self.get_admin_credentials() + elif self.show_monitor_credentials: + self.results['cluster_credentials'] = self.get_monitor_credentials() + + self.results['resource_group'] = self.resource_group + self.results['cluster_name'] = self.cluster_name + return self.results + + def get_user_credentials(self): + """Get The Azure Kubernetes Service USER Credentials""" + response = None + + try: + response = self.managedcluster_client.managed_clusters.list_cluster_user_credentials(self.resource_group, self.cluster_name) + except HttpResponseError as ec: + self.fail("Lists the cluster user credentials of a managed cluster Failed, Exception as {0}".format(ec)) + return [self.format_response(item) for item in response.kubeconfigs] + + def get_admin_credentials(self): + """Get The Azure Kubernetes Service Admin Credentials""" + response = None + + try: + response = self.managedcluster_client.managed_clusters.list_cluster_admin_credentials(self.resource_group, self.cluster_name) + except HttpResponseError as ec: + self.fail("Lists the cluster admin credentials of a managed cluster Failed, Exception as {0}".format(ec)) + + return [self.format_response(item) for item in response.kubeconfigs] + + def get_monitor_credentials(self): + """Get The Azure Kubernetes Service Monitor Credentials""" + response = None + + try: + response = self.managedcluster_client.managed_clusters.list_cluster_monitoring_user_credentials(self.resource_group, self.cluster_name) + except HttpResponseError as ec: + self.fail("Lists the cluster monitoring credentials of a managed cluster Failed, Exception as {0}".format(ec)) + return [self.format_response(item) for item in response.kubeconfigs] + + def format_response(self, item): + if not item: + return + return dict(name=item.name, value=item.value.decode('utf-8')) + + +def main(): + """Main module execution code path""" + + AzureRMAksCredentialsInfo() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksversion_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksversion_info.py index 9e5af42ce..5d4f695a6 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksversion_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_aksversion_info.py @@ -29,6 +29,13 @@ options: description: - Get the upgrade versions available for a managed Kubernetes cluster version. type: str + allow_preview: + description: + - Whether Kubernetes version is currently in preview. + - If I(allow_preview=True), returns the current preview status of the current Kubernetes version. + - If I(allow_preview=False), returns the Kubernetes version in a non-current preview state. + - If no set C(allow_preview), returns all the avaiable Kubernetes version. + type: bool extends_documentation_fragment: - azure.azcollection.azure @@ -38,6 +45,10 @@ author: ''' EXAMPLES = ''' +- name: Get current preview versions for AKS in location eastus + azure_rm_aksversion_info: + location: eastus + allow_preview: true - name: Get available versions for AKS in location eastus azure_rm_aksversion_info: location: eastus @@ -63,7 +74,8 @@ class AzureRMAKSVersion(AzureRMModuleBase): self.module_args = dict( location=dict(type='str', required=True), - version=dict(type='str') + version=dict(type='str'), + allow_preview=dict(type='bool') ) self.results = dict( @@ -73,6 +85,7 @@ class AzureRMAKSVersion(AzureRMModuleBase): self.location = None self.version = None + self.allow_preview = None super(AzureRMAKSVersion, self).__init__( derived_arg_spec=self.module_args, @@ -104,7 +117,14 @@ class AzureRMAKSVersion(AzureRMModuleBase): response = self.containerservice_client.container_services.list_orchestrators(self.location, resource_type='managedClusters') orchestrators = response.orchestrators for item in orchestrators: - result[item.orchestrator_version] = [x.orchestrator_version for x in item.upgrades] if item.upgrades else [] + if self.allow_preview is None: + result[item.orchestrator_version] = [x.orchestrator_version for x in item.upgrades] if item.upgrades else [] + elif self.allow_preview: + if item.is_preview: + result[item.orchestrator_version] = [x.orchestrator_version for x in item.upgrades] if item.upgrades else [] + else: + if not item.is_preview: + result[item.orchestrator_version] = [x.orchestrator_version for x in item.upgrades] if item.upgrades else [] if version: return result.get(version) or [] else: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement.py index 97a7868d1..4e7e359bb 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement.py @@ -296,41 +296,30 @@ class AzureApiManagement(AzureRMModuleBaseExt): self.module_arg_spec = dict( resource_group=dict( type='str', - updatable=False, - disposition='resourceGroupName', required=True ), service_name=dict( type='str', - updatable=False, - disposition='serviceName', required=True ), api_id=dict( type='str', - updatable=False, - disposition='apiId', required=True ), description=dict( type='str', - disposition='/properties/description' ), authentication_settings=dict( type='dict', - disposition='/properties/authenticationSettings', options=dict( o_auth2=dict( type='dict', - disposition='oAuth2', options=dict( authorization_server_id=dict( type='str', - disposition='authorizationServerId' ), scope=dict( type='str', - disposition='scope' ) ) ), @@ -339,12 +328,10 @@ class AzureApiManagement(AzureRMModuleBaseExt): options=dict( openid_provider_id=dict( type='str', - disposition='openidProviderId' ), bearer_token_sending_methods=dict( type='list', elements='str', - disposition='bearerTokenSendingMethods', choices=['authorizationHeader', 'query'] ) ) @@ -354,7 +341,6 @@ class AzureApiManagement(AzureRMModuleBaseExt): subscription_key_parameter_names=dict( type='dict', no_log=True, - disposition='/properties/subscriptionKeyParameterNames', options=dict( header=dict( type='str', @@ -368,63 +354,49 @@ class AzureApiManagement(AzureRMModuleBaseExt): ), type=dict( type='str', - disposition='/properties/type', choices=['http', 'soap'] ), api_revision=dict( type='str', - disposition='/properties/apiRevision' ), api_version=dict( type='str', - disposition='/properties/apiVersion' ), is_current=dict( type='bool', - disposition='/properties/isCurrent' ), api_revision_description=dict( type='str', - disposition='/properties/apiRevisionDescription' ), api_version_description=dict( type='str', - disposition='/properties/apiVersionDescription' ), api_version_set_id=dict( type='str', - disposition='/properties/apiVersionSetId', ), subscription_required=dict( type='bool', - disposition='/properties/subscriptionRequired' ), source_api_id=dict( type='str', - disposition='/properties/sourceApiId', ), display_name=dict( type='str', - disposition='/properties/displayName' ), service_url=dict( type='str', - disposition='/properties/serviceUrl' ), path=dict( type='str', - disposition='/properties/*', ), protocols=dict( type='list', elements='str', - disposition='/properties/protocols', choices=['http', 'https'] ), api_version_set=dict( type='dict', - disposition='/properties/apiVersionSet', options=dict( id=dict( type='str' @@ -437,28 +409,23 @@ class AzureApiManagement(AzureRMModuleBaseExt): ), versioning_scheme=dict( type='str', - disposition='versioningScheme', choices=['Segment', 'Query', 'Header'] ), version_query_name=dict( type='str', - disposition='versionQueryName' ), version_header_name=dict( type='str', - disposition='versionHeaderName' ) ) ), value=dict( type='str', - disposition='/properties/*' ), format=dict( type='str', - disposition='/properties/*', choices=['wadl-xml', 'wadl-link-json', 'swagger-json', @@ -471,21 +438,17 @@ class AzureApiManagement(AzureRMModuleBaseExt): ), wsdl_selector=dict( type='dict', - disposition='/properties/wsdlSelector', options=dict( wsdl_service_name=dict( type='str', - disposition='wsdlServiceName' ), wsdl_endpoint_name=dict( type='str', - disposition='wsdlEndpointName' ) ) ), api_type=dict( type='str', - disposition='/properties/apiType', choices=['http', 'soap'] ), state=dict( @@ -507,8 +470,9 @@ class AzureApiManagement(AzureRMModuleBaseExt): self.to_do = Actions.NoAction self.body = {} + self.body['properties'] = {} self.query_parameters = {} - self.query_parameters['api-version'] = '2020-06-01-preview' + self.query_parameters['api-version'] = '2022-08-01' self.header_parameters = {} self.header_parameters['Content-Type'] = 'application/json; charset=utf-8' @@ -527,16 +491,81 @@ class AzureApiManagement(AzureRMModuleBaseExt): if hasattr(self, key): setattr(self, key, kwargs[key]) elif kwargs[key] is not None: - self.body[key] = kwargs[key] + if key == 'description': + self.body['properties']['description'] = kwargs[key] + elif key == 'authentication_settings': + self.body['properties']['authenticationSettings'] = {} + if kwargs[key].get('o_auth2') is not None: + self.body['properties']['authenticationSettings']['oAuth2'] = {} + for item in kwargs[key]['o_auth2'].keys(): + if item == 'authorization_server_id': + authorization_id = kwargs[key]['o_auth2']['authorization_server_id'] + self.body['properties']['authenticationSettings']['oAuth2']['authorizationServerId'] = authorization_id + elif item == 'scope': + self.body['properties']['authenticationSettings']['oAuth2']['scope'] = kwargs[key]['o_auth2']['scope'] + elif kwargs[key].get('openid') is not None: + self.body['properties']['authenticationSettings']['openid'] = {} + for item in kwargs[key]['openid'].keys(): + if item == 'openid_provider_id' and kwargs[key]['openid'].get('openid_provider_id') is not None: + openid_pro = kwargs[key]['openid'].get('openid_provider_id') + self.body['properties']['authenticationSettings']['openid']['openidProviderId'] = openid_pro + elif item == 'bearer_token_sending_methods' and kwargs[key]['openid'].get('bearer_token_sending_methods') is not None: + bearer_token = kwargs[key]['openid']['bearer_token_sending_methods'] + self.body['properties']['authenticationSettings']['openid']['bearerTokenSendingMethods'] = bearer_token + elif key == 'subscription_key_parameter_names': + self.body['properties']['subscriptionKeyParameterNames'] = kwargs[key] + elif key == 'type': + self.body['properties']['type'] = kwargs[key] + elif key == 'api_revision': + self.body['properties']['apiRevision'] = kwargs[key] + elif key == 'api_version': + self.body['properties']['apiVersion'] = kwargs[key] + elif key == 'is_current': + self.body['properties']['isCurrent'] = kwargs[key] + elif key == 'api_revision_description': + self.body['properties']['apiRevisionDescription'] = kwargs[key] + elif key == 'api_version_description': + self.body['properties']['apiVersionDescription'] = kwargs[key] + elif key == 'api_version_set_id': + self.body['properties']['apiVersionSetId'] = kwargs[key] + elif key == 'subscription_required': + self.body['properties']['subscriptionRequired'] = kwargs[key] + elif key == 'source_api_id': + self.body['properties']['sourceApiId'] = kwargs[key] + elif key == 'display_name': + self.body['properties']['displayName'] = kwargs[key] + elif key == 'service_url': + self.body['properties']['serviceUrl'] = kwargs[key] + elif key == 'protocols': + self.body['properties']['protocols'] = kwargs[key] + elif key == 'api_version_set': + self.body['properties']['apiVersionSet'] = {} + for item in kwargs[key].keys(): + if item == 'versioning_scheme': + self.body['properties']['apiVersionSet'] = kwargs[key].get('versioning_scheme') + elif item == 'version_query_name': + self.body['properties']['versionQueryName'] = kwargs[key].get('version_query_name') + elif item == 'version_header_name': + self.body['properties']['versionHeaderName'] = kwargs[key].get('version_header_name') + else: + self.body['properties'][item] = kwargs[key].get(item) + elif key == 'wsdl_selector': + self.body['properties']['wsdlSelector'] = {} + for item in kwargs[key].keys(): + if item == 'wsdl_service_name': + self.body['properties']['wsdlSelector']['wsdlServiceName'] = kwargs[key].get(item) + if item == 'wsdl_endpoint_name': + self.body['properties']['wsdlSelector']['wsdlEndpointName'] = kwargs[key].get(item) + elif key == 'api_type': + self.body['properties']['apiType'] = kwargs[key] + else: + self.body['properties'][key] = kwargs[key] - # https://docs.microsoft.com/en-us/azure/templates/microsoft.apimanagement/service/apis - self.inflate_parameters(self.module_arg_spec, self.body, 0) self.url = self.get_url() old_response = None response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) old_response = self.get_resource() @@ -552,11 +581,75 @@ class AzureApiManagement(AzureRMModuleBaseExt): if self.state == 'absent': self.to_do = Actions.Delete else: - modifiers = {} - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - self.results['compare'] = [] - if not self.default_compare(modifiers, self.body, old_response, '', self.results): + if self.body['properties'].get('description') is not None and \ + self.body['properties']['description'] != old_response['properties']['description']: + self.to_do = Actions.Update + elif self.body['properties'].get('authenticationSettings') is not None: + if old_response['properties'].get('authenticationSettings') is None: + self.to_do = Actions.Update + elif (self.body['properties']['authenticationSettings'].get('oAuth2') is not None and + self.body['properties']['authenticationSettings']['oAuth2'] != old_response['properties']['authenticationSettings'].get('oAuth2')): + self.to_do = Actions.Update + elif (self.body['properties']['authenticationSettings'].get('openid') is not None and + self.body['properties']['authenticationSettings']['openid'] != old_response['properties']['authenticationSettings'].get('openid')): + self.to_do = Actions.Update + elif self.body['properties'].get('subscriptionKeyParameterNames') is not None: + tt = old_response['properties'] + if old_response['properties'].get('subscriptionKeyParameterNames') is None: + self.to_do = Actions.Update + elif (not all(self.body['properties']['subscriptionKeyParameterNames'].get(item) == tt['subscriptionKeyParameterNames'].get(item) + for item in self.body['properties']['subscriptionKeyParameterNames'].keys())): + self.to_do = Actions.Update + elif (self.body['properties'].get('apiRevision') is not None and + self.body['properties']['apiRevision'] != old_response['properties'].get('apiRevision')): + self.to_do = Actions.Update + elif (self.body['properties'].get('apiVersion') is not None and + self.body['properties']['apiVersion'] != old_response['properties'].get('apiVersion')): + self.to_do == Actions.Update + elif (self.body['properties'].get('isCurrent') is not None and + self.body['properties']['isCurrent'] != old_response['properties'].get('isCurrent')): + self.to_do = Actions.Update + elif (self.body['properties'].get('apiRevisionDescription') is not None and self.body['properties']['apiRevisionDescription'] != + old_response['properties'].get('apiRevisionDescription')): + self.to_do = Actions.Update + elif (self.body['properties'].get('apiVersionDescription') is not None and + self.body['properties']['apiVersionDescription'] != old_response['properties'].get('apiVersionDescription')): + self.to_do = Actions.Update + elif (self.body['properties'].get('apiVersionSetId') is not None and + self.body['properties']['apiVersionSetId'] != old_response['properties'].get('apiVersionSetId')): + self.to_do = Actions.Update + elif (self.body['properties'].get('subscriptionRequired') is not None and + self.body['properties']['subscriptionRequired'] != old_response['properties'].get('subscriptionRequired')): + self.to_do = Actions.Update + elif (self.body['properties'].get('sourceApiId') is not None and + self.body['properties']['sourceApiId'] != old_response['properties'].get('sourceApiId')): + self.to_do = Actions.Update + elif (self.body['properties'].get('displayName') is not None and + self.body['properties']['displayName'] != old_response['properties'].get('displayName')): + self.to_do = Actions.Update + elif (self.body['properties'].get('serviceUrl') is not None and + self.body['properties']['serviceUrl'] != old_response['properties'].get('serviceUrl')): + self.to_do = Actions.Update + elif self.body['properties'].get('path') is not None and self.body['properties']['path'] != old_response['properties'].get('path'): + self.to_do = Actions.Update + elif (self.body['properties'].get('protocols') is not None and + self.body['properties']['protocols'] != old_response['properties'].get('protocols')): + self.to_do = Actions.Update + elif self.body['properties'].get('type') is not None and self.body['properties']['type'] != old_response['properties'].get('type'): + self.to_do = Actions.Update + elif self.body['properties'].get('apiType') is not None and self.body['properties']['apiType'] != old_response['properties'].get('apiType'): + self.to_do = Actions.Update + elif self.body['properties'].get('value') is not None and self.body['properties']['value'] != old_response['properties'].get('value'): + self.to_do = Actions.Update + elif self.body['properties'].get('format') is not None and self.body['properties']['format'] != old_response['properties'].get('format'): + self.to_do = Actions.Update + elif (self.body['properties'].get('wsdlSelector') is not None and + not all(self.body['properties']['wsdlSelector'][item] == old_response['properties']['wsdlSelector'].get(item) + for item in self.body['properties']['wsdlSelector'].keys())): + self.to_do = Actions.Update + elif (self.body['properties'].get('apiVersionSet') is not None and + not all(self.body['properties']['apiVersionSet'][item] == old_response['properties']['apiVersionSet'].get(item) + for item in self.body['properties']['apiVersionSet'].keys())): self.to_do = Actions.Update if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): @@ -605,10 +698,12 @@ class AzureApiManagement(AzureRMModuleBaseExt): except Exception as exc: self.log('Error while creating/updating the Api instance.') self.fail('Error creating the Api instance: {0}'.format(str(exc))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement_info.py index 30120b5e5..51e99b733 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagement_info.py @@ -139,7 +139,7 @@ class AzureApiManagementInfo(AzureRMModuleBaseExt): self.status_code = [200] self.query_parameters = {} - self.query_parameters['api-version'] = '2020-06-01-preview' + self.query_parameters['api-version'] = '2022-08-01' self.header_parameters = {} self.header_parameters['Content-Type'] = 'application/json; charset=utf-8' @@ -155,7 +155,6 @@ class AzureApiManagementInfo(AzureRMModuleBaseExt): self.body[key] = kwargs[key] self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if (self.resource_group is not None and diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagementservice.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagementservice.py index 8c694bec4..6d8a0aaf9 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagementservice.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagementservice.py @@ -113,32 +113,23 @@ class AzureRMApiManagementService(AzureRMModuleBaseExt): self.module_arg_spec = dict( resource_group=dict( type='str', - updatable=False, - disposition='resourceGroupName', required=True ), name=dict( type='str', - updatable=False, - disposition='serviceName', required=True ), location=dict( type='str', - updatable=False, - disposition='location' ), publisher_name=dict( type='str', - disposition='/properties/publisherName' ), publisher_email=dict( type='str', - disposition='/properties/publisherEmail' ), sku_name=dict( type='str', - disposition='/sku/name', choices=['Developer', 'Standard', 'Premium', @@ -147,7 +138,6 @@ class AzureRMApiManagementService(AzureRMModuleBaseExt): ), sku_capacity=dict( type='int', - disposition='/sku/capacity' ), state=dict( type='str', @@ -168,8 +158,10 @@ class AzureRMApiManagementService(AzureRMModuleBaseExt): self.to_do = Actions.NoAction self.body = {} + self.body['properties'] = {} + self.body['sku'] = {} self.query_parameters = {} - self.query_parameters['api-version'] = '2020-06-01-preview' + self.query_parameters['api-version'] = '2022-08-01' self.header_parameters = {} self.header_parameters['Content-Type'] = 'application/json; charset=utf-8' @@ -182,15 +174,21 @@ class AzureRMApiManagementService(AzureRMModuleBaseExt): if hasattr(self, key): setattr(self, key, kwargs[key]) elif kwargs[key] is not None: - self.body[key] = kwargs[key] - - self.inflate_parameters(self.module_arg_spec, self.body, 0) + if key == 'publisher_name': + self.body['properties']['publisherName'] = kwargs[key] + elif key == 'publisher_email': + self.body['properties']['publisherEmail'] = kwargs[key] + elif key == 'sku_name': + self.body['sku']['name'] = kwargs[key] + elif key == 'sku_capacity': + self.body['sku']['capacity'] = kwargs[key] + else: + self.body[key] = kwargs[key] old_response = None response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) resource_group = self.get_resource_group(self.resource_group) @@ -225,12 +223,15 @@ class AzureRMApiManagementService(AzureRMModuleBaseExt): if self.state == 'absent': self.to_do = Actions.Delete else: - modifiers = {} - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - self.results['compare'] = [] - if not self.default_compare(modifiers, self.body, old_response, '', self.results): - self.to_do = Actions.Update + for key in self.body.keys(): + if key == 'properties': + for key in self.body['properties'].keys(): + if self.body['properties'][key] != old_response['properties'].get(key): + self.to_do = Actions.Update + elif key == 'sku': + for key in self.body['sku'].keys(): + if self.body['sku'][key] != old_response['sku'].get(key): + self.to_do = Actions.Update self.body['location'] = self.location if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): @@ -272,23 +273,34 @@ class AzureRMApiManagementService(AzureRMModuleBaseExt): def create_update_resource(self): # Creating / Updating the ApiManagementService instance. try: - response = self.mgmt_client.query(self.url, - 'PUT', - self.query_parameters, - self.header_parameters, - self.body, - self.status_code, - 600, - 30) + if self.to_do == Actions.Create: + response = self.mgmt_client.query(self.url, + 'PUT', + self.query_parameters, + self.header_parameters, + self.body, + self.status_code, + 600, + 30) + else: + response = self.mgmt_client.query(self.url, + 'PATCH', + self.query_parameters, + self.header_parameters, + self.body, + self.status_code, + 600, + 30) except Exception as exc: self.log('Error attempting to create the ApiManagementService instance.') self.fail('Error creating the ApiManagementService instance: {0}'.format(str(exc))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} - pass + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagementservice_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagementservice_info.py index 663e87e78..5d686c98d 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagementservice_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_apimanagementservice_info.py @@ -143,7 +143,7 @@ class AzureRMApiManagementServiceInfo(AzureRMModuleBaseExt): self.status_code = [200] self.query_parameters = {} - self.query_parameters['api-version'] = '2020-06-01-preview' + self.query_parameters['api-version'] = '2022-08-01' self.header_parameters = {} self.header_parameters['Content-Type'] = 'application/json; charset=utf-8' @@ -156,7 +156,6 @@ class AzureRMApiManagementServiceInfo(AzureRMModuleBaseExt): setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if (self.resource_group is not None and self.name is not None): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_appgateway.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_appgateway.py index f95766fa9..8d70dda89 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_appgateway.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_appgateway.py @@ -519,6 +519,24 @@ options: - Whether host header should be picked from the host name of the backend HTTP settings. Default value is false. type: bool default: False + port: + description: + - Custom port which will be used for probing the backend servers. + - The valid value ranges from 1 to 65535. + - In case not set, port from http settings will be used. + - This property is valid for C(Standard_v2) and C(WAF_v2) only. + type: int + match: + description: + - Criterion for classifying a healthy probe response. + type: dict + suboptions: + status_codes: + description: + - Allowed ranges of healthy status codes. + - Default range of healthy status codes is 200-399. + type: list + elements: str backend_http_settings_collection: description: - Backend http settings of the application gateway resource. @@ -1419,6 +1437,54 @@ EXAMPLES = ''' max_request_body_size_in_kb: 128 file_upload_limit_in_mb: 100 +- name: Create application gateway with multi parameters + azure_rm_appgateway: + resource_group: myResourceGroup + name: myappgateway + sku: + name: standard_v2 + tier: standard_v2 + capacity: 2 + gateway_ip_configurations: + - subnet: + id: "{{ subnet_id }}" + name: app_gateway_ip_config + frontend_ip_configurations: + - name: sample_gateway_frontend_ip_config + public_ip_address: "pip{{ rpfx }}" + frontend_ports: + - port: 80 + name: http_frontend_port + backend_address_pools: + - name: test_backend_address_pool # empty pool which will receive attachment to NIC. + backend_http_settings_collection: + - port: 80 + protocol: http + cookie_based_affinity: enabled + name: sample_appgateway_http_settings + http_listeners: + - frontend_ip_configuration: sample_gateway_frontend_ip_config + frontend_port: http_frontend_port + protocol: http + name: http_listener + probes: + - name: testprobes01 + protocol: http + path: '/' + timeout: 30 + host: testazure + interval: 90 + port: 80 + match: + status_codes: + - 200 + request_routing_rules: + - rule_type: basic + backend_address_pool: test_backend_address_pool + backend_http_settings: sample_appgateway_http_settings + http_listener: http_listener + name: rule1 + - name: Stop an Application Gateway instance azure_rm_appgateway: resource_group: myResourceGroup @@ -1517,6 +1583,11 @@ ssl_policy_spec = dict( ) +match_spec = dict( + status_codes=dict(type='list', elements='str') +) + + probe_spec = dict( host=dict(type='str'), interval=dict(type='int'), @@ -1525,7 +1596,9 @@ probe_spec = dict( protocol=dict(type='str', choices=['http', 'https']), timeout=dict(type='int'), unhealthy_threshold=dict(type='int'), - pick_host_name_from_backend_http_settings=dict(type='bool', default=False) + pick_host_name_from_backend_http_settings=dict(type='bool', default=False), + port=dict(type='int'), + match=dict(type='dict', options=match_spec) ) @@ -2239,6 +2312,8 @@ class AzureRMApplicationGateways(AzureRMModuleBase): self.parameters["web_application_firewall_configuration"] = kwargs[key] elif key == "enable_http2": self.parameters["enable_http2"] = kwargs[key] + elif key == "tags": + self.parameters["tags"] = kwargs[key] response = None @@ -2272,7 +2347,7 @@ class AzureRMApplicationGateways(AzureRMModuleBase): (old_response['operational_state'] == 'Running' and self.gateway_state == 'started')): self.to_do = Actions.NoAction elif (self.parameters['location'] != old_response['location'] or - self.parameters['enable_http2'] != old_response['enable_http2'] or + self.parameters['enable_http2'] != old_response.get('enable_http2', False) or self.parameters['sku']['name'] != old_response['sku']['name'] or self.parameters['sku']['tier'] != old_response['sku']['tier'] or self.parameters['sku'].get('capacity', None) != old_response['sku'].get('capacity', None) or @@ -2296,6 +2371,11 @@ class AzureRMApplicationGateways(AzureRMModuleBase): else: self.to_do = Actions.NoAction + update_tags, new_tags = self.update_tags(old_response.get('tags')) + if update_tags: + self.to_do = Actions.Update + self.parameters["tags"] = new_tags + if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): self.log("Need to Create / Update the Application Gateway instance") diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_azurefirewall.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_azurefirewall.py index f960f024d..692628317 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_azurefirewall.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_azurefirewall.py @@ -354,40 +354,30 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): self.module_arg_spec = dict( resource_group=dict( type='str', - disposition='resource_group_name', required=True ), name=dict( type='str', - disposition='azure_firewall_name', required=True ), location=dict( type='str', - updatable=False, - disposition='/', - comparison='location' ), application_rule_collections=dict( type='list', elements='dict', - disposition='/properties/applicationRuleCollections', options=dict( priority=dict( type='int', - disposition='properties/*' ), action=dict( type='str', choices=['allow', 'deny'], - disposition='properties/action/type', - pattern='camelize' ), rules=dict( type='list', elements='raw', - disposition='properties/*', options=dict( name=dict( type='str' @@ -398,7 +388,6 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): source_addresses=dict( type='list', elements='str', - disposition='sourceAddresses' ), protocols=dict( type='list', @@ -406,7 +395,6 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): options=dict( type=dict( type='str', - disposition='protocolType' ), port=dict( type='str' @@ -416,12 +404,10 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): target_fqdns=dict( type='list', elements='raw', - disposition='targetFqdns' ), fqdn_tags=dict( type='list', elements='raw', - disposition='fqdnTags' ) ) ), @@ -433,23 +419,18 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): nat_rule_collections=dict( type='list', elements='dict', - disposition='/properties/natRuleCollections', options=dict( priority=dict( type='int', - disposition='properties/*' ), action=dict( type='str', - disposition='properties/action/type', choices=['snat', 'dnat'], - pattern='camelize' ), rules=dict( type='list', elements='dict', - disposition='properties/*', options=dict( name=dict( type='str' @@ -460,17 +441,14 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): source_addresses=dict( type='list', elements='str', - disposition='sourceAddresses' ), destination_addresses=dict( type='list', elements='str', - disposition='destinationAddresses' ), destination_ports=dict( type='list', elements='str', - disposition='destinationPorts' ), protocols=dict( type='list', @@ -478,11 +456,9 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): ), translated_address=dict( type='str', - disposition='translatedAddress' ), translated_port=dict( type='str', - disposition='translatedPort' ) ) ), @@ -494,23 +470,18 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): network_rule_collections=dict( type='list', elements='dict', - disposition='/properties/networkRuleCollections', options=dict( priority=dict( type='int', - disposition='properties/*' ), action=dict( type='str', choices=['allow', 'deny'], - disposition='properties/action/type', - pattern='camelize' ), rules=dict( type='list', elements='dict', - disposition='properties/*', options=dict( name=dict( type='str' @@ -525,17 +496,14 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): source_addresses=dict( type='list', elements='str', - disposition='sourceAddresses' ), destination_addresses=dict( type='list', elements='str', - disposition='destinationAddresses' ), destination_ports=dict( type='list', elements='str', - disposition='destinationPorts' ) ) ), @@ -547,22 +515,12 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): ip_configurations=dict( type='list', elements='dict', - disposition='/properties/ipConfigurations', options=dict( subnet=dict( type='raw', - disposition='properties/subnet/id', - pattern=('/subscriptions/{subscription_id}/resourceGroups' - '/{resource_group}/providers/Microsoft.Network' - '/virtualNetworks/{virtual_network_name}/subnets' - '/{name}') ), public_ip_address=dict( type='raw', - disposition='properties/publicIPAddress/id', - pattern=('/subscriptions/{subscription_id}/resourceGroups' - '/{resource_group}/providers/Microsoft.Network' - '/publicIPAddresses/{name}') ), name=dict( type='str' @@ -579,6 +537,7 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): self.resource_group = None self.name = None self.body = {} + self.body['properties'] = {} self.results = dict(changed=False) self.mgmt_client = None @@ -587,7 +546,6 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): self.status_code = [200, 201, 202] self.to_do = Actions.NoAction - self.body = {} self.query_parameters = {} self.query_parameters['api-version'] = '2018-11-01' self.header_parameters = {} @@ -602,15 +560,171 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): if hasattr(self, key): setattr(self, key, kwargs[key]) elif kwargs[key] is not None: - self.body[key] = kwargs[key] - - self.inflate_parameters(self.module_arg_spec, self.body, 0) + if key == 'application_rule_collections': + self.body['properties']['applicationRuleCollections'] = [] + for item in kwargs[key]: + app_rule = dict(properties={}) + if item.get('priority') is not None: + app_rule['properties']['priority'] = item['priority'] + if item.get('action') is not None: + app_rule['properties']['action'] = dict(type=item['action']) + if item.get('name') is not None: + app_rule['name'] = item['name'] + if item.get('rules') is not None: + app_rule['properties']['rules'] = [] + for value in item['rules']: + rule_value = {} + if value.get('name') is not None: + rule_value['name'] = value['name'] + if value.get('description') is not None: + rule_value['description'] = value['description'] + if value.get('source_addresses') is not None: + rule_value['sourceAddresses'] = value.get('source_addresses') + if value.get('target_fqdns') is not None: + rule_value['targetFqdns'] = value.get('target_fqdns') + if value.get('fqdn_tags') is not None: + rule_value['fqdnTags'] = value.get('fqdn_tags') + if value.get('protocols') is not None: + rule_value['protocols'] = [] + for pp in value['protocols']: + pro = {} + if pp.get('type') is not None: + pro['protocolType'] = pp.get('type') + if pp.get('port') is not None: + pro['port'] = pp.get('port') + rule_value['protocols'].append(pro) + app_rule['properties']['rules'].append(rule_value) + self.body['properties']['applicationRuleCollections'].append(app_rule) + elif key == 'nat_rule_collections': + self.body['properties']['natRuleCollections'] = [] + for item in kwargs[key]: + nat_rule = dict(properties={}) + if item.get('priority') is not None: + nat_rule['properties']['priority'] = item['priority'] + if item.get('action') is not None: + nat_rule['properties']['action'] = dict(type=item['action']) + if item.get('name') is not None: + nat_rule['name'] = item['name'] + if item.get('rules') is not None: + nat_rule['properties']['rules'] = [] + for value in item['rules']: + nat_value = {} + if value.get('name') is not None: + nat_value['name'] = value.get('name') + if value.get('description') is not None: + nat_value['description'] = value.get('description') + if value.get('source_addresses') is not None: + nat_value['sourceAddresses'] = value.get('source_addresses') + if value.get('destination_addresses') is not None: + nat_value['destinationAddresses'] = value.get('destination_addresses') + if value.get('destination_ports') is not None: + nat_value['destinationPorts'] = value.get('destination_ports') + if value.get('protocols') is not None: + nat_value['protocols'] = value.get('protocols') + if value.get('translated_address') is not None: + nat_value['translatedAddress'] = value.get('translated_address') + if value.get('translated_port') is not None: + nat_value['translatedPort'] = value.get('translated_port') + nat_rule['properties']['rules'].append(nat_value) + self.body['properties']['natRuleCollections'].append(nat_rule) + elif key == 'network_rule_collections': + self.body['properties']['networkRuleCollections'] = [] + for item in kwargs[key]: + network_rule = dict(properties={}) + if item.get('priority') is not None: + network_rule['properties']['priority'] = item['priority'] + if item.get('action') is not None: + network_rule['properties']['action'] = dict(type=item['action']) + if item.get('name') is not None: + network_rule['name'] = item['name'] + if item.get('rules') is not None: + network_rule['properties']['rules'] = [] + for value in item['rules']: + net_value = {} + if value.get('name') is not None: + net_value['name'] = value.get('name') + if value.get('description') is not None: + net_value['description'] = value.get('description') + if value.get('source_addresses') is not None: + net_value['sourceAddresses'] = value.get('source_addresses') + if value.get('destination_addresses') is not None: + net_value['destinationAddresses'] = value.get('destination_addresses') + if value.get('destination_ports') is not None: + net_value['destinationPorts'] = value.get('destination_ports') + if value.get('protocols') is not None: + net_value['protocols'] = value.get('protocols') + network_rule['properties']['rules'].append(net_value) + self.body['properties']['networkRuleCollections'].append(network_rule) + elif key == 'ip_configurations': + self.body['properties']['ipConfigurations'] = [] + for item in kwargs[key]: + ipconfig = dict(properties={}) + if item.get('subnet') is not None: + ipconfig['properties']['subnet'] = {} + if isinstance(item['subnet'], str): + ipconfig['properties']['subnet']['id'] = item['subnet'] + elif isinstance(item['subnet'], dict): + if item['subnet'].get('id') is not None: + ipconfig['properties']['subnet']['id'] = item['subnet'].get('id') + elif (item['subnet'].get('resource_group') is not None and item['subnet'].get('name') is not None and + item['subnet'].get('virtual_network_name') is not None): + ipconfig['properties']['subnet']['id'] = ('/subscriptions/' + + self.subscription_id + + '/resourceGroups/' + + item['subnet'].get('resource_group') + + '/providers/Microsoft.Network/virtualNetworks/' + + item['subnet'].get('virtual_network_name') + + '/subnets/' + + item['subnet'].get('name')) + elif item['subnet'].get('name') is not None and item['subnet'].get('virtual_network_name') is not None: + ipconfig['properties']['subnet']['id'] = ('/subscriptions/' + + self.subscription_id + + '/resourceGroups/' + + self.resource_group + + '/providers/Microsoft.Network/virtualNetworks/' + + item['subnet'].get('virtual_network_name') + + '/subnets/' + + item['subnet'].get('name')) + else: + self.fail("The ip_configuration's subnet config error") + else: + self.fail("The ip_configuration's subnet config error") + if item.get('public_ip_address') is not None: + ipconfig['properties']['publicIPAddress'] = {} + if isinstance(item.get('public_ip_address'), str): + ipconfig['properties']['publicIPAddress']['id'] = item.get('public_ip_address') + elif isinstance(item.get('public_ip_address'), dict): + if item['public_ip_address'].get('id') is not None: + ipconfig['properties']['publicIPAddress']['id'] = item['public_ip_address'].get('id') + elif item['public_ip_address'].get('resource_group') is not None and item['public_ip_address'].get('name') is not None: + ipconfig['properties']['publicIPAddress']['id'] = ('/subscriptions/' + + self.subscription_id + + '/resourceGroups/' + + item['public_ip_address'].get('resource_group') + + '/providers/Microsoft.Network/publicIPAddresses/' + + item['public_ip_address'].get('name')) + elif item['public_ip_address'].get('name') is not None: + ipconfig['properties']['publicIPAddress']['id'] = ('/subscriptions/' + + self.subscription_id + + '/resourceGroups/' + + self.resource_group + + '/providers/Microsoft.Network/publicIPAddresses/' + + item['public_ip_address'].get('name')) + else: + self.fail("The ip_configuration's public ip address config error") + else: + self.fail("The ip_configuration's public ip address config error") + + if item.get('name') is not None: + ipconfig['name'] = item['name'] + self.body['properties']['ipConfigurations'].append(ipconfig) + else: + self.body[key] = kwargs[key] old_response = None response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) resource_group = self.get_resource_group(self.resource_group) @@ -642,11 +756,12 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): if self.state == 'absent': self.to_do = Actions.Delete else: - modifiers = {} - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - self.results['compare'] = [] - if not self.default_compare(modifiers, self.body, old_response, '', self.results): + update_tags, new_tags = self.update_tags(old_response.get('tags')) + if update_tags: + self.to_do = Actions.Update + self.body['tags'] = new_tags + + if not self.default_compare({}, self.body, old_response, '', dict(compare=[])): self.to_do = Actions.Update if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): @@ -705,10 +820,12 @@ class AzureRMAzureFirewalls(AzureRMModuleBaseExt): self.log('Error attempting to create the AzureFirewall instance.') self.fail('Error creating the AzureFirewall instance: {0}'.format(str(exc))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_azurefirewall_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_azurefirewall_info.py index d86932693..a565ef886 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_azurefirewall_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_azurefirewall_info.py @@ -140,7 +140,6 @@ class AzureRMAzureFirewallsInfo(AzureRMModuleBase): setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if (self.resource_group is not None and self.name is not None): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_backupazurevm.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_backupazurevm.py index 77d6d92ed..863839329 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_backupazurevm.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_backupazurevm.py @@ -255,7 +255,6 @@ class BackupAzureVM(AzureRMModuleBaseExt): response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) changed = False @@ -296,10 +295,12 @@ class BackupAzureVM(AzureRMModuleBaseExt): self.fail( 'Error in creating/updating protection for Azure VM {0}'.format(str(e))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response @@ -322,10 +323,12 @@ class BackupAzureVM(AzureRMModuleBaseExt): self.log('Error attempting to stop protection.') self.fail('Error in disabling the protection: {0}'.format(str(e))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response @@ -348,10 +351,12 @@ class BackupAzureVM(AzureRMModuleBaseExt): self.log('Error attempting to delete backup.') self.fail('Error deleting the azure backup: {0}'.format(str(e))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response @@ -375,10 +380,12 @@ class BackupAzureVM(AzureRMModuleBaseExt): self.fail( 'Error while taking on-demand backup: {0}'.format(str(e))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_backupazurevm_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_backupazurevm_info.py index b4ba22fc1..90ece65cb 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_backupazurevm_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_backupazurevm_info.py @@ -130,7 +130,6 @@ class BackupAzureVMInfo(AzureRMModuleBaseExt): response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) response = self.get_recovery_point_info() @@ -156,10 +155,12 @@ class BackupAzureVMInfo(AzureRMModuleBaseExt): self.log('Error in fetching recovery point.') self.fail('Error in fetching recovery point {0}'.format(str(e))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_batchaccount.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_batchaccount.py index ac237294c..b5ff4d923 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_batchaccount.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_batchaccount.py @@ -140,25 +140,19 @@ class AzureRMBatchAccount(AzureRMModuleBaseExt): type='str' ), location=dict( - type='str', - updatable=False, - disposition='/' + type='str' ), auto_storage_account=dict( type='raw' ), key_vault=dict( type='raw', - no_log=True, - updatable=False, - disposition='/' + no_log=True ), pool_allocation_mode=dict( default='batch_service', type='str', - choices=['batch_service', 'user_subscription'], - updatable=False, - disposition='/' + choices=['batch_service', 'user_subscription'] ), state=dict( type='str', @@ -212,8 +206,7 @@ class AzureRMBatchAccount(AzureRMModuleBaseExt): response = None self.mgmt_client = self.get_mgmt_svc_client(BatchManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True) + base_url=self._cloud_environment.endpoints.resource_manager) old_response = self.get_batchaccount() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_batchaccount_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_batchaccount_info.py index fb61248e4..80930d6db 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_batchaccount_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_batchaccount_info.py @@ -112,9 +112,7 @@ class AzureRMBatchAccountInfo(AzureRMModuleBaseExt): response = [] self.mgmt_client = self.get_mgmt_svc_client(BatchManagementClient, - base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True) - + base_url=self._cloud_environment.endpoints.resource_manager) if self.resource_group is not None and self.name is not None: response = [self.get_batchaccount()] elif self.resource_group is not None: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnendpoint.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnendpoint.py index 2f3a3d76f..ad4cb1303 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnendpoint.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnendpoint.py @@ -659,7 +659,6 @@ class AzureRMCdnendpoint(AzureRMModuleBase): if not self.cdn_client: self.cdn_client = self.get_mgmt_svc_client(CdnManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2017-04-02') return self.cdn_client diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnendpoint_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnendpoint_info.py index 9f89408d0..46a759847 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnendpoint_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnendpoint_info.py @@ -232,7 +232,6 @@ class AzureRMCdnEndpointInfo(AzureRMModuleBase): self.cdn_client = self.get_mgmt_svc_client(CdnManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2017-04-02') if self.name: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnprofile.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnprofile.py index 96761228f..ebac6f22f 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnprofile.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnprofile.py @@ -290,7 +290,6 @@ class AzureRMCdnprofile(AzureRMModuleBase): if not self.cdn_client: self.cdn_client = self.get_mgmt_svc_client(CdnManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2017-04-02') return self.cdn_client diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnprofile_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnprofile_info.py index 92b9b7957..f4c599854 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnprofile_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cdnprofile_info.py @@ -253,7 +253,6 @@ class AzureRMCdnprofileInfo(AzureRMModuleBase): if not self.cdn_client: self.cdn_client = self.get_mgmt_svc_client(CdnManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2017-04-02') return self.cdn_client diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cosmosdbaccount.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cosmosdbaccount.py index d1f3dd987..98d2c7149 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cosmosdbaccount.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cosmosdbaccount.py @@ -426,7 +426,6 @@ class AzureRMCosmosDBAccount(AzureRMModuleBase): response = None self.mgmt_client = self.get_mgmt_svc_client(CosmosDBManagementClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) resource_group = self.get_resource_group(self.resource_group) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cosmosdbaccount_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cosmosdbaccount_info.py index 61414272a..f80b2835e 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cosmosdbaccount_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_cosmosdbaccount_info.py @@ -431,7 +431,6 @@ class AzureRMCosmosDBAccountInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(CosmosDBManagementClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.name is not None: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_datalakestore.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_datalakestore.py index eaecb9df5..b46907339 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_datalakestore.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_datalakestore.py @@ -504,6 +504,7 @@ class AzureRMDatalakeStore(AzureRMModuleBase): supports_tags=True) def exec_module(self, **kwargs): + self.module.deprecate("The azure_rm_datalakestore.py will deprecated. Azure Data Lake Storage Gen1 retired on February 29,2024", version=(2.3, )) for key in list(self.module_arg_spec.keys()) + ['tags']: setattr(self, key, kwargs[key]) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_datalakestore_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_datalakestore_info.py index 2417ff74a..8444a4c1c 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_datalakestore_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_datalakestore_info.py @@ -312,6 +312,7 @@ class AzureRMDatalakeStoreInfo(AzureRMModuleBase): supports_tags=False) def exec_module(self, **kwargs): + self.module.deprecate("The azure_rm_datalakestore_info.py will deprecated. Azure Data Lake Storage Gen1 retired on February 29,2024", version=(2.3, )) for key in self.module_arg_spec: setattr(self, key, kwargs[key]) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_deployment.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_deployment.py index 07cf93d8e..ef32b19dc 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_deployment.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_deployment.py @@ -84,7 +84,7 @@ options: description: - If I(state=present), template will be created. - If I(state=present) and deployment exists, it will be updated. - - If I(state=absent), the resource group will be removed. + - If I(state=absent), the deployment resource will be deleted. default: present type: str choices: @@ -498,7 +498,7 @@ class AzureRMDeploymentManager(AzureRMModuleBase): else: try: if self.get_resource_group(self.resource_group): - self.destroy_resource_group() + self.destroy_deployment_resource() self.results['changed'] = True self.results['msg'] = "deployment deleted" except Exception: @@ -572,12 +572,12 @@ class AzureRMDeploymentManager(AzureRMModuleBase): return deployment_result - def destroy_resource_group(self): + def destroy_deployment_resource(self): """ Destroy the targeted resource group """ try: - result = self.rm_client.resource_groups.begin_delete(self.resource_group) + result = self.rm_client.deployments.begin_delete(self.resource_group, self.name) result.wait() # Blocking wait till the delete is finished except Exception as e: if e.status_code == 404 or e.status_code == 204: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlab.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlab.py index 1424be8c9..4d0ce4a36 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlab.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlab.py @@ -157,7 +157,6 @@ class AzureRMDevTestLab(AzureRMModuleBase): self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2018-10-15') resource_group = self.get_resource_group(self.resource_group) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlab_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlab_info.py index 6add55e59..91dcf737a 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlab_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlab_info.py @@ -184,7 +184,6 @@ class AzureRMDevTestLabInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.resource_group is not None: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabarmtemplate_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabarmtemplate_info.py index 783a272dd..cf03aac99 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabarmtemplate_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabarmtemplate_info.py @@ -162,7 +162,6 @@ class AzureRMDtlArmTemplateInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.name: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifact_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifact_info.py index 9ec729257..35a084e5d 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifact_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifact_info.py @@ -175,7 +175,6 @@ class AzureRMArtifactInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.name: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifactsource.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifactsource.py index 87f19bbd9..7ae9290ea 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifactsource.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifactsource.py @@ -220,7 +220,6 @@ class AzureRMDevTestLabArtifactsSource(AzureRMModuleBase): self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2018-10-15') old_response = self.get_devtestlabartifactssource() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifactsource_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifactsource_info.py index 036a3da45..0b3dbeaba 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifactsource_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabartifactsource_info.py @@ -185,7 +185,6 @@ class AzureRMDtlArtifactSourceInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.name: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabcustomimage.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabcustomimage.py index f24c6f7e5..6017ca2ed 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabcustomimage.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabcustomimage.py @@ -205,7 +205,6 @@ class AzureRMDtlCustomImage(AzureRMModuleBase): response = None self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) old_response = self.get_customimage() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabcustomimage_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabcustomimage_info.py index 2c6d559aa..e5c434f4a 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabcustomimage_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabcustomimage_info.py @@ -162,7 +162,6 @@ class AzureRMDtlCustomImageInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.name: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabenvironment.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabenvironment.py index 214ddbbe1..7fd3737fd 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabenvironment.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabenvironment.py @@ -190,7 +190,6 @@ class AzureRMDtlEnvironment(AzureRMModuleBase): response = None self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) resource_group = self.get_resource_group(self.resource_group) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabenvironment_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabenvironment_info.py index 4648ed1b7..31e2d1b42 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabenvironment_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabenvironment_info.py @@ -175,7 +175,6 @@ class AzureRMDtlEnvironmentInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.name: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabpolicy.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabpolicy.py index 2a3f2f953..7d19dd813 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabpolicy.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabpolicy.py @@ -200,7 +200,6 @@ class AzureRMDtlPolicy(AzureRMModuleBase): response = None self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) resource_group = self.get_resource_group(self.resource_group) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabpolicy_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabpolicy_info.py index a8f3b104a..8801d09ad 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabpolicy_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabpolicy_info.py @@ -173,7 +173,6 @@ class AzureRMDtlPolicyInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.name: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabschedule.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabschedule.py index 060b3baa0..1907794c8 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabschedule.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabschedule.py @@ -172,7 +172,6 @@ class AzureRMSchedule(AzureRMModuleBase): response = None self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) resource_group = self.get_resource_group(self.resource_group) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabschedule_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabschedule_info.py index e366e0f99..c5ded5ffd 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabschedule_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabschedule_info.py @@ -157,7 +157,6 @@ class AzureRMDtlScheduleInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.name: self.results['schedules'] = self.get() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualmachine.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualmachine.py index 62e7db77a..9a21fc532 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualmachine.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualmachine.py @@ -393,7 +393,6 @@ class AzureRMVirtualMachine(AzureRMModuleBase): response = None self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) old_response = self.get_virtualmachine() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualmachine_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualmachine_info.py index 24398136e..8a3692e2a 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualmachine_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualmachine_info.py @@ -253,7 +253,6 @@ class AzureRMDtlVirtualMachineInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.name: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualnetwork.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualnetwork.py index a47a8c8f9..15e3b67f6 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualnetwork.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualnetwork.py @@ -157,7 +157,6 @@ class AzureRMDevTestLabVirtualNetwork(AzureRMModuleBase): self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2018-10-15') resource_group = self.get_resource_group(self.resource_group) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualnetwork_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualnetwork_info.py index 23392468b..0f6d59e02 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualnetwork_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_devtestlabvirtualnetwork_info.py @@ -152,7 +152,6 @@ class AzureRMDevTestLabVirtualNetworkInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(DevTestLabsClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.name: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_dnsrecordset.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_dnsrecordset.py index 32448964a..1ac9983b4 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_dnsrecordset.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_dnsrecordset.py @@ -360,8 +360,10 @@ class AzureRMRecordSet(AzureRMModuleBase): resource_group=dict(type='str', required=True), relative_name=dict(type='str', required=True), zone_name=dict(type='str', required=True), - record_type=dict(choices=RECORD_ARGSPECS.keys(), required=True, type='str'), - record_mode=dict(choices=['append', 'purge'], default='purge'), + record_type=dict(choices=['A', 'AAAA', 'CNAME', 'MX', 'NS', 'PTR', 'SRV', 'TXT', 'SOA', 'CAA'], + required=True, + type='str'), + record_mode=dict(type='str', choices=['append', 'purge'], default='purge'), state=dict(choices=['present', 'absent'], default='present', type='str'), time_to_live=dict(type='int', default=3600), records=dict(type='list', elements='dict'), diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_gallery.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_gallery.py index cb902ace7..9eb8ce397 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_gallery.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_gallery.py @@ -85,24 +85,17 @@ class AzureRMGalleries(AzureRMModuleBaseExt): self.module_arg_spec = dict( resource_group=dict( type='str', - updatable=False, - disposition='resourceGroupName', required=True ), name=dict( type='str', - updatable=False, - disposition='galleryName', required=True ), location=dict( - type='str', - updatable=False, - disposition='/' + type='str' ), description=dict( type='str', - disposition='/properties/*' ), state=dict( type='str', @@ -123,6 +116,7 @@ class AzureRMGalleries(AzureRMModuleBaseExt): self.to_do = Actions.NoAction self.body = {} + self.body['properties'] = {} self.query_parameters = {} self.query_parameters['api-version'] = '2019-07-01' self.header_parameters = {} @@ -133,19 +127,19 @@ class AzureRMGalleries(AzureRMModuleBaseExt): supports_tags=True) def exec_module(self, **kwargs): - for key in list(self.module_arg_spec.keys()): + for key in list(self.module_arg_spec.keys()) + ['tags']: if hasattr(self, key): setattr(self, key, kwargs[key]) elif kwargs[key] is not None: - self.body[key] = kwargs[key] - - self.inflate_parameters(self.module_arg_spec, self.body, 0) + if key == 'description': + self.body['properties']['description'] = kwargs[key] + else: + self.body[key] = kwargs[key] old_response = None response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) resource_group = self.get_resource_group(self.resource_group) @@ -180,28 +174,36 @@ class AzureRMGalleries(AzureRMModuleBaseExt): if self.state == 'absent': self.to_do = Actions.Delete else: - modifiers = {} - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - self.results['compare'] = [] - if not self.default_compare(modifiers, self.body, old_response, '', self.results): + if self.body.get('properties') is not None and self.body['properties']['description'] != old_response['properties']['description']: self.to_do = Actions.Update - self.body['properties'].pop('identifier', None) + else: + self.body['properties']['description'] = old_response['properties']['description'] - if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): - self.log('Need to Create / Update the Gallery instance') + update_tags, new_tags = self.update_tags(old_response.get('tags')) + if update_tags: + self.to_do = Actions.Update + self.body['tags'] = new_tags + if self.to_do == Actions.Create: + self.log('Need to Create the Gallery instance') if self.check_mode: self.results['changed'] = True return self.results - - response = self.create_update_resource() - + response = self.create_resource() # if not old_response: self.results['changed'] = True # else: # self.results['changed'] = old_response.__ne__(response) - self.log('Creation / Update done') + self.log('Creation done') + elif self.to_do == Actions.Update: + self.log('Need to Update the Gallery instance') + if self.check_mode: + self.results['changed'] = True + return self.results + response = self.update_resource() + # if not old_response: + self.results['changed'] = True + self.log('Update done') elif self.to_do == Actions.Delete: self.log('Gallery instance deleted') self.results['changed'] = True @@ -225,8 +227,33 @@ class AzureRMGalleries(AzureRMModuleBaseExt): return self.results - def create_update_resource(self): - # self.log('Creating / Updating the Gallery instance {0}'.format(self.)) + def update_resource(self): + # self.log('Updating the Gallery instance {0}'.format(self.)) + + try: + response = self.mgmt_client.query(self.url, + 'PATCH', + self.query_parameters, + self.header_parameters, + self.body, + self.status_code, + 600, + 30) + except Exception as exc: + self.log('Error attempting to update the Gallery instance.') + self.fail('Error updating the Gallery instance: {0}'.format(str(exc))) + + if hasattr(response, 'body'): + response = json.loads(response.body()) + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Updating fail, no match message return, return info as {0}".format(response)) + + return response + + def create_resource(self): + # self.log('Creating the Gallery instance {0}'.format(self.)) try: response = self.mgmt_client.query(self.url, @@ -241,10 +268,12 @@ class AzureRMGalleries(AzureRMModuleBaseExt): self.log('Error attempting to create the Gallery instance.') self.fail('Error creating the Gallery instance: {0}'.format(str(exc))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_gallery_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_gallery_info.py index cd02bec28..d144c46fb 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_gallery_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_gallery_info.py @@ -128,7 +128,6 @@ class AzureRMGalleriesInfo(AzureRMModuleBase): setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if (self.resource_group is not None and self.name is not None): @@ -232,6 +231,8 @@ class AzureRMGalleriesInfo(AzureRMModuleBase): return [self.format_item(x) for x in results['value']] if results['value'] else [] def format_item(self, item): + if not item: + return d = { 'id': item['id'], 'name': item['name'], diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimage.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimage.py index c14aedd4a..9a4542458 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimage.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimage.py @@ -76,6 +76,14 @@ options: - V1 - V2 type: str + architecture: + description: + - This property allows you to specify the hardware architecture of the Virtual Machines. + - Arm64 is only supported with Hyper V Version 2. + choices: + - Arm64 + - x64 + type: str end_of_life_date: description: - The end of life date of the gallery Image Definition. @@ -162,6 +170,22 @@ options: description: - The product ID. type: str + features: + description: + - A list of gallery image features. + type: list + elements: dict + suboptions: + name: + description: + - The name of the gallery image feature. + type: str + required: True + value: + description: + - The value of the gallery image feature. + type: str + required: True state: description: - Assert the state of the GalleryImage. @@ -219,73 +243,60 @@ class AzureRMGalleryImages(AzureRMModuleBaseExt): self.module_arg_spec = dict( resource_group=dict( type='str', - updatable=False, - disposition='resourceGroupName', required=True ), gallery_name=dict( type='str', - updatable=False, - disposition='galleryName', required=True ), name=dict( type='str', - updatable=False, - disposition='galleryImageName', required=True ), location=dict( type='str', - updatable=False, - disposition='/' ), description=dict( type='str', - disposition='/properties/*' ), eula=dict( type='str', - disposition='/properties/*' ), privacy_statement_uri=dict( type='str', - disposition='/properties/privacyStatementUri' ), release_note_uri=dict( type='str', - disposition='/properties/releaseNoteUri' ), os_type=dict( type='str', - disposition='/properties/osType', choices=['windows', 'linux'] ), os_state=dict( type='str', - disposition='/properties/osState', choices=['generalized', 'specialized'] ), hypervgeneration=dict( type='str', - disposition='/properties/hyperVGeneration', choices=['V1', 'V2'] ), + architecture=dict( + type='str', + choices=['Arm64', + 'x64'] + ), end_of_life_date=dict( type='str', - disposition='/properties/endOfLifeDate' ), identifier=dict( type='dict', - disposition='/properties/*', options=dict( publisher=dict( type='str', required=True, - updatable=False ), offer=dict( type='str', @@ -299,11 +310,9 @@ class AzureRMGalleryImages(AzureRMModuleBaseExt): ), recommended=dict( type='dict', - disposition='/properties/*', options=dict( v_cpus=dict( type='dict', - disposition='vCPUs', options=dict( min=dict( type='int' @@ -328,18 +337,15 @@ class AzureRMGalleryImages(AzureRMModuleBaseExt): ), disallowed=dict( type='dict', - disposition='/properties/*', options=dict( disk_types=dict( type='list', elements='str', - disposition='diskTypes' ) ) ), purchase_plan=dict( type='dict', - disposition='/properties/purchasePlan', options=dict( name=dict( type='str' @@ -352,6 +358,20 @@ class AzureRMGalleryImages(AzureRMModuleBaseExt): ) ) ), + features=dict( + type='list', + elements='dict', + options=dict( + name=dict( + type='str', + required=True + ), + value=dict( + type='str', + required=True + ) + ) + ), state=dict( type='str', default='present', @@ -372,8 +392,9 @@ class AzureRMGalleryImages(AzureRMModuleBaseExt): self.to_do = Actions.NoAction self.body = {} + self.body['properties'] = {} self.query_parameters = {} - self.query_parameters['api-version'] = '2019-07-01' + self.query_parameters['api-version'] = '2022-03-03' self.header_parameters = {} self.header_parameters['Content-Type'] = 'application/json; charset=utf-8' @@ -382,19 +403,51 @@ class AzureRMGalleryImages(AzureRMModuleBaseExt): supports_tags=True) def exec_module(self, **kwargs): - for key in list(self.module_arg_spec.keys()): + for key in list(self.module_arg_spec.keys()) + ['tags']: if hasattr(self, key): setattr(self, key, kwargs[key]) elif kwargs[key] is not None: - self.body[key] = kwargs[key] - - self.inflate_parameters(self.module_arg_spec, self.body, 0) + if key == 'description': + self.body['properties']['description'] = kwargs[key] + elif key == 'eula': + self.body['properties']['eula'] = kwargs[key] + elif key == 'privacy_statement_uri': + self.body['properties']['privacyStatementUri'] = kwargs[key] + elif key == 'release_note_uri': + self.body['properties']['releaseNoteUri'] = kwargs[key] + elif key == 'os_type': + self.body['properties']['osType'] = kwargs[key] + elif key == 'os_state': + self.body['properties']['osState'] = kwargs[key] + elif key == 'hypervgeneration': + self.body['properties']['hyperVGeneration'] = kwargs[key] + elif key == 'architecture': + self.body['properties']['architecture'] = kwargs[key] + elif key == 'end_of_life_date': + self.body['properties']['endOfLifeDate'] = kwargs[key] + elif key == 'identifier': + self.body['properties']['identifier'] = kwargs[key] + elif key == 'recommended': + self.body['properties']['recommended'] = {} + for item in kwargs[key].keys(): + if item == 'v_cpus': + self.body['properties']['recommended']['vCPUs'] = kwargs[key].get('v_cpus') + elif item == 'memory': + self.body['properties']['recommended']['memory'] = kwargs[key].get('memory') + elif key == 'disallowed': + self.body['properties']['disallowed'] = {} + self.body['properties']['disallowed']['diskTypes'] = kwargs[key].get('disk_types') + elif key == 'purchase_plan': + self.body['properties']['purchasePlan'] = kwargs[key] + elif key == 'features': + self.body['properties']['features'] = kwargs[key] + else: + self.body[key] = kwargs[key] old_response = None response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) resource_group = self.get_resource_group(self.resource_group) @@ -432,11 +485,60 @@ class AzureRMGalleryImages(AzureRMModuleBaseExt): if self.state == 'absent': self.to_do = Actions.Delete else: - modifiers = {} - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - self.results['compare'] = [] - if not self.default_compare(modifiers, self.body, old_response, '', self.results): + if self.body['properties'].get('description') is not None and \ + self.body['properties']['description'] != old_response['properties'].get('description'): + self.to_do = Actions.Update + elif self.body['properties'].get('eula') is not None and self.body['properties']['eula'] != old_response['properties'].get('eula'): + self.to_do = Actions.Update + elif (self.body['properties'].get('privacyStatementUri') is not None and + self.body['properties']['privacyStatementUri'] != old_response['properties'].get('privacyStatementUri')): + self.to_do = Actions.Update + elif (self.body['properties'].get('releaseNoteUri') is not None and + self.body['properties']['releaseNoteUri'] != old_response['properties'].get('releaseNoteUri')): + self.to_do = Actions.Update + elif (self.body['properties'].get('osType') is not None and + self.body['properties']['osType'].lower() != old_response['properties'].get('osType', '').lower()): + self.to_do = Actions.Update + elif (self.body['properties'].get('osState') is not None and + self.body['properties']['osState'].lower() != old_response['properties'].get('osState', '').lower()): + self.to_do = Actions.Update + elif (self.body['properties'].get('hyperVGeneration') is not None and + self.body['properties']['hyperVGeneration'] != old_response['properties'].get('hyperVGeneration')): + self.to_do = Actions.Update + elif (self.body['properties'].get('architecture') is not None and + self.body['properties']['architecture'] != old_response['properties'].get('architecture')): + self.to_do = Actions.Update + elif (self.body['properties'].get('endOfLifeDate') is not None and + self.body['properties']['endOfLifeDate'] != old_response['properties'].get('endOfLifeDate')): + self.to_do = Actions.Update + elif (self.body['properties'].get('identifier') is not None and + self.body['properties']['identifier'].get('offer') != old_response['properties']['identifier'].get('offer') or + self.body['properties']['identifier'].get('sku') != old_response['properties']['identifier'].get('sku')): + self.to_do = Actions.Update + elif self.body['properties'].get('recommended') is not None: + if self.body['properties']['recommended'].get('vCPUS') is not None: + for item in self.body['properties']['recommended']['vCPUS'].keys(): + if self.body['properties']['recommended']['vCPUS'].get(item) != old_response['properties']['recommended']['vCPUS'].get(item): + self.to_do = Actions.Update + elif (self.body['properties']['recommended'].get('memory') is not None and + not all(self.body['properties']['recommended']['memory'].get(item) == old_response['properties']['recommended']['memory'].get(item) + for item in self.body['properties']['recommended']['memory'].keys())): + self.to_do = Actions.Update + elif (self.body['properties'].get('disallowed') is not None and + self.body['properties']['disallowed'].get('diskTypes') != old_response['properties']['disallowed'].get('diskTypes')): + self.to_do = Actions.Update + elif self.body['properties'].get('purchasePlan') is not None: + for item in self.body['properties']['purchasePlan'].keys(): + if self.body['properties']['purchasePlan'][item] != old_response['properties']['purchasePlan'].get(item): + self.to_do = Actions.Update + elif self.body['properties'].get('features') is not None: + if old_response['properties'].get('features') is None: + self.to_do = Actions.Update + else: + if not all(item in old_response['properties']['features'] for item in self.body['properties']['features']): + self.to_do = Actions.Update + update_tags, self.body['tags'] = self.update_tags(old_response.get('tags')) + if update_tags: self.to_do = Actions.Update if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): @@ -492,10 +594,12 @@ class AzureRMGalleryImages(AzureRMModuleBaseExt): self.log('Error attempting to create the GalleryImage instance.') self.fail('Error creating the GalleryImage instance: {0}'.format(str(exc))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimage_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimage_info.py index 0f1c5020f..1b48f4f22 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimage_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimage_info.py @@ -159,7 +159,6 @@ class AzureRMGalleryImagesInfo(AzureRMModuleBase): setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if (self.resource_group is not None and diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimageversion.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimageversion.py index 9d61bf874..66a4dea6b 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimageversion.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimageversion.py @@ -125,6 +125,62 @@ options: description: - Storage account type. type: str + encryption: + description: + - Allows users to provide customer managed keys for encrypting the OS and data disks in the gallery artifact. + type: dict + suboptions: + data_disk_images: + description: + - A list of encryption specifications for data disk images. + type: list + elements: dict + suboptions: + disk_encryption_set_id: + description: + - A relative URI containing the resource ID of the disk encryption set. + type: str + lun: + description: + - This property specifies the logical unit number of the data disk. + - This value is used to identify data disks within the Virtual Machine and + therefore must be unique for each data disk attached to the Virtual Machine. + type: int + os_disk_image: + description: + - Contains encryption settings for an OS disk image. + type: dict + suboptions: + disk_encryption_set_id: + description: + - A relative URI containing the resource ID of the disk encryption set. + type: str + security_profile: + description: + - This property specifies the security profile of an OS disk image. + type: dict + suboptions: + confidential_vm_encryption_type: + description: + - Confidential VM encryption types. + type: dict + suboptions: + encrypted_vm_guest_state_only_with_pmk: + description: + - VM Guest State Only with PMK. + type: str + encrypted_with_cmk: + description: + - Encrypted with CMK. + type: str + encrypted_with_pmk: + description: + - Encrypted with PMK. + type: str + secure_vm_disk_encryption_set_id: + description: + - Secure VM disk encryption set id. + type: str managed_image: description: - Managed image reference, could be resource ID, or dictionary containing I(resource_group) and I(name) @@ -274,74 +330,40 @@ class AzureRMGalleryImageVersions(AzureRMModuleBaseExt): self.module_arg_spec = dict( resource_group=dict( type='str', - updatable=False, - disposition='resourceGroupName', required=True ), gallery_name=dict( type='str', - updatable=False, - disposition='galleryName', required=True ), gallery_image_name=dict( type='str', - updatable=False, - disposition='galleryImageName', required=True ), name=dict( type='str', - updatable=False, - disposition='galleryImageVersionName', required=True ), tags=dict( type='dict', - updatable=False, - disposition='tags', - comparison='tags' ), location=dict( type='str', - updatable=False, - disposition='/', - comparison='location' ), storage_profile=dict( type='dict', - updatable=False, - disposition='/properties/storageProfile', - comparison='ignore', options=dict( source_image=dict( type='raw', - disposition='source/id', - purgeIfNone=True, - pattern=[('/subscriptions/{subscription_id}/resourceGroups' - '/{resource_group}/providers/Microsoft.Compute' - '/images/{name}'), - ('/subscriptions/{subscription_id}/resourceGroups' - '/{resource_group}/providers/Microsoft.Compute' - '/galleries/{gallery_name}/images/{gallery_image_name}' - '/versions/{version}')] ), os_disk=dict( type='dict', - disposition='osDiskImage', - purgeIfNone=True, - comparison='ignore', options=dict( source=dict( type='raw', - disposition='source/id', - pattern=('/subscriptions/{subscription_id}/resourceGroups' - '/{resource_group}/providers/Microsoft.Compute' - '/snapshots/{name}') ), host_caching=dict( type='str', - disposition='hostCaching', default="None", choices=["ReadOnly", "ReadWrite", "None"] ) @@ -350,22 +372,15 @@ class AzureRMGalleryImageVersions(AzureRMModuleBaseExt): data_disks=dict( type='list', elements='raw', - disposition='dataDiskImages', - purgeIfNone=True, options=dict( lun=dict( type='int' ), source=dict( type='raw', - disposition="source/id", - pattern=('/subscriptions/{subscription_id}/resourceGroups' - '/{resource_group}/providers/Microsoft.Compute' - '/snapshots/{name}') ), host_caching=dict( type='str', - disposition='hostCaching', default="None", choices=["ReadOnly", "ReadWrite", "None"] ) @@ -375,57 +390,87 @@ class AzureRMGalleryImageVersions(AzureRMModuleBaseExt): ), publishing_profile=dict( type='dict', - disposition='/properties/publishingProfile', options=dict( target_regions=dict( type='list', elements='raw', - disposition='targetRegions', options=dict( name=dict( type='str', required=True, - comparison='location' ), regional_replica_count=dict( type='int', - disposition='regionalReplicaCount' ), storage_account_type=dict( type='str', - disposition='storageAccountType' + ), + encryption=dict( + type='dict', + options=dict( + data_disk_images=dict( + type='list', + elements='dict', + options=dict( + disk_encryption_set_id=dict( + type='str', + ), + lun=dict( + type='int' + ) + ) + ), + os_disk_image=dict( + type='dict', + options=dict( + disk_encryption_set_id=dict( + type='str', + ), + security_profile=dict( + type='dict', + options=dict( + confidential_vm_encryption_type=dict( + type='dict', + options=dict( + encrypted_vm_guest_state_only_with_pmk=dict( + type='str', + ), + encrypted_with_cmk=dict( + type='str', + ), + encrypted_with_pmk=dict( + type='str', + ) + ) + ), + secure_vm_disk_encryption_set_id=dict( + type='str', + ) + ) + ) + ) + ) + ) ) ) ), managed_image=dict( type='raw', - pattern=('/subscriptions/{subscription_id}/resourceGroups' - '/{resource_group}/providers/Microsoft.Compute' - '/images/{name}'), - comparison='ignore' ), snapshot=dict( type='raw', - pattern=('/subscriptions/{subscription_id}/resourceGroups' - '/{resource_group}/providers/Microsoft.Compute' - '/snapshots/{name}'), - comparison='ignore' ), replica_count=dict( type='int', - disposition='replicaCount' ), exclude_from_latest=dict( type='bool', - disposition='excludeFromLatest' ), end_of_life_date=dict( type='str', - disposition='endOfLifeDate' ), storage_account_type=dict( type='str', - disposition='storageAccountType', choices=['Standard_LRS', 'Standard_ZRS'] ) @@ -453,8 +498,9 @@ class AzureRMGalleryImageVersions(AzureRMModuleBaseExt): self.to_do = Actions.NoAction self.body = {} + self.body['properties'] = {} self.query_parameters = {} - self.query_parameters['api-version'] = '2019-07-01' + self.query_parameters['api-version'] = '2022-03-03' self.header_parameters = {} self.header_parameters['Content-Type'] = 'application/json; charset=utf-8' @@ -469,9 +515,182 @@ class AzureRMGalleryImageVersions(AzureRMModuleBaseExt): if key == 'tags': self.body[key] = kwargs[key] elif kwargs[key] is not None: - self.body[key] = kwargs[key] - - self.inflate_parameters(self.module_arg_spec, self.body, 0) + if key == 'location': + self.body['location'] = kwargs[key] + elif key == 'storage_profile': + self.body['properties']['storageProfile'] = {} + if kwargs[key].get('source_image') is not None: + self.body['properties']['storageProfile']['source'] = {} + if isinstance(kwargs[key].get('source_image'), str): + self.body['properties']['storageProfile']['source']['id'] = kwargs[key].get('source_image') + elif isinstance(kwargs[key].get('source_image'), dict): + if kwargs[key]['source_image'].get('id') is not None: + self.body['properties']['storageProfile']['source']['id'] = kwargs[key]['source_image'].get('id') + if kwargs[key]['source_image'].get('resource_group') is not None and kwargs[key]['source_image'].get('name') is not None: + self.body['properties']['storageProfile']['source']['id'] = ('/subscriptions/' + + self.subscription_id + + '/resourceGroups/' + + kwargs[key]['source_image'].get('resource_group') + + '/providers/Microsoft.Compute/images/' + + kwargs[key]['source_image'].get('name')) + elif (kwargs[key]['source_image'].get('resource_group') is not None and + kwargs[key]['source_image'].get('gallery_name') is not None and + kwargs[key]['source_image'].get('gallery_image_name') is not None and kwargs[key]['source_image'].get('version') is not None): + self.body['properties']['storageProfile']['source']['id'] = ('/subscriptions/' + + self.subscription_id + + '/resourceGroups/' + + kwargs[key]['source_image'].get('resource_group') + + '/providers/Microsoft.Compute/galleries/' + + kwargs[key]['source_image'].get('gallery_name') + + '/images/' + + kwargs[key]['source_image'].get('gallery_image_name') + + '/versions/' + + kwargs[key]['source_image'].get('version')) + else: + self.fail("The source_image parameters config errors") + else: + self.fail("The source_image parameters config errors") + if kwargs[key].get('os_disk') is not None: + self.body['properties']['storageProfile']['osDiskImage'] = {} + if kwargs[key]['os_disk'].get('host_caching') is not None: + self.body['properties']['storageProfile']['osDiskImage']['hostCaching'] = kwargs[key]['os_disk'].get('host_caching') + if kwargs[key]['os_disk'].get('source') is not None: + self.body['properties']['storageProfile']['osDiskImage']['source'] = {} + if isinstance(kwargs[key]['os_disk']['source'], str): + self.body['properties']['storageProfile']['osDiskImage']['source']['id'] = kwargs[key]['os_disk']['source'] + elif isinstance(kwargs[key]['os_disk']['source'], dict): + if kwargs[key]['os_disk']['source'].get('id') is not None: + self.body['properties']['storageProfile']['osDiskImage']['source']['id'] = kwargs[key]['os_disk']['source'].get('id') + if kwargs[key]['os_disk']['source'].get('resource_group') is not None and \ + kwargs[key]['os_disk']['source'].get('name') is not None: + resource_group = kwargs[key]['os_disk']['source'].get('resource_group') + self.body['properties']['storageProfile']['osDiskImage']['source']['id'] = ('/subscriptions/' + + self.subscription_id + + '/resourceGroups/' + + resource_group + + '/providers/Microsoft.Compute/snapshots/' + + kwargs[key]['os_disk']['source'].get('name')) + else: + self.fail("The os_disk.source parameters config errors") + + else: + self.fail("The os_disk.source parameters config errors") + + if kwargs[key].get('data_disks') is not None: + self.body['properties']['storageProfile']['dataDiskImages'] = [] + data_disk = {} + for item in kwargs[key].get('data_disks'): + if item.get('lun') is not None: + data_disk['lun'] = item['lun'] + if item.get('source') is not None: + data_disk['source'] = {} + if isinstance(item.get('source'), str): + data_disk['source']['id'] = item.get('source') + elif isinstance(item.get('source'), dict): + if item['source'].get('id') is not None: + data_disk['source']['id'] = item['source'].get('id') + elif item['source'].get('resource_group') is not None and item['source'].get('name') is not None: + data_disk['source']['id'] = ('/subscriptions/' + + self.subscription_id + + '/resourceGroups/' + + item['source'].get('resource_group') + + '/providers/Microsoft.Compute/snapshots/' + + item['source'].get('name')) + else: + self.fail("The data_disk.source parameters config errors") + else: + self.fail("The data_disk.source parameters config errors") + if item.get('host_caching') is not None: + data_disk['hostCaching'] = item['host_caching'] + elif key == 'publishing_profile': + self.body['properties']['publishingProfile'] = {} + if kwargs['publishing_profile'].get('target_regions') is not None: + self.body['properties']['publishingProfile']['targetRegions'] = [] + for item in kwargs['publishing_profile']['target_regions']: + target_regions = {} + for value in item.keys(): + if value == 'name': + target_regions[value] = item[value] + elif value == 'regional_replica_count': + target_regions['regionalReplicaCount'] = item[value] + elif value == 'storage_account_type': + target_regions['storageAccountType'] = item[value] + elif value == 'encryption': + target_regions['encryption'] = {} + if item[value].get('data_disk_images') is not None: + target_regions['encryption']['dataDiskImages'] = [] + for tt in item[value]['data_disk_images']: + disk_image = {} + if tt.get('lun') is not None: + disk_image['lun'] = tt['lun'] + if tt.get('disk_encryption_set_id') is not None: + disk_image['diskEncryptionSetId'] = tt['disk_encryption_set_id'] + target_regions['encryption']['dataDiskImages'].append(disk_image) + + if item['encryption'].get('os_disk_image') is not None: + target_regions['encryption']['osDiskImage'] = {} + if item['encryption']['os_disk_image'].get('disk_encryption_set_id') is not None: + disk_encryption_set_id = item['encryption']['os_disk_image']['disk_encryption_set_id'] + target_regions['encryption']['osDiskImage']['diskEncryptionSetId'] = disk_encryption_set_id + if item['encryption']['os_disk_image'].get('security_profile') is not None: + target_regions['encryption']['osDiskImage']['securityProfile'] = {} + if item['encryption']['os_disk_image']['security_profile'].get('secure_vm_disk_encryption_set_id') is not None: + secure_id = item['encryption']['os_disk_image']['security_profile']['secure_vm_disk_encryption_set_id'] + target_regions['encryption']['osDiskImage']['securityProfile']['secureVMDiskEncryptionSetId'] = secure_id + + if item['encryption']['os_disk_image']['security_profile'].get('confidential_vm_encryption_type') is not None: + target_regions['encryption']['osDiskImage']['securityProfile']['confidentialVMEncryptionType'] = {} + security = item['encryption']['os_disk_image']['security_profile']['confidential_vm_encryption_type'] + tt = target_regions['encryption']['osDiskImage']['securityProfile']['confidentialVMEncryptionType'] + if security.get('encrypted_vm_guest_state_only_with_pmk') is not None: + tt['EncryptedVMGuestStateOnlyWithPmk'] = security.get('encrypted_vm_guest_state_only_with_pmk') + if security.get('encrypted_with_cmk') is not None: + tt['EncryptedWithCmk'] = security.get('encrypted_with_cmk') + if security.get('encrypted_with_pmk') is not None: + tt['EncryptedWithPmk'] = security.get('encrypted_with_pmk') + self.body['properties']['publishingProfile']['targetRegions'].append(target_regions) + if kwargs[key].get('managed_image') is not None: + if isinstance(kwargs[key]['managed_image'], str): + self.body['properties']['publishingProfile']['managed_image'] = kwargs[key]['managed_image'] + elif isinstance(kwargs[key]['managed_image'], dict): + if kwargs[key]['managed_image'].get('id') is not None: + self.body['properties']['publishingProfile']['managed_image'] = kwargs[key]['managed_image']['id'] + elif kwargs[key]['managed_image'].get('resource_group') is not None and kwargs[key]['managed_image'].get('name') is not None: + self.body['properties']['publishingProfile']['managed_image'] = ('/subscriptions/' + + self.subscription_id + + '/resourceGroups/' + + kwargs[key]['managed_image'].get('resource_group') + + '/providers/Microsoft.Compute/images/' + + kwargs[key]['managed_image'].get('name')) + else: + self.fail("The managed_image parameters config errors") + else: + self.fail("The managed_image parameters config errors") + if kwargs[key].get('snapshot') is not None: + if isinstance(kwargs[key].get('snapshot'), str): + self.body['properties']['publishingProfile']['snapshot'] = kwargs[key].get('snapshot') + elif isinstance(kwargs[key].get('snapshot'), dict): + if kwargs[key]['snapshot'].get('id') is not None: + self.body['properties']['publishingProfile']['snapshot'] = kwargs[key]['snapshot'].get('id') + elif kwargs[key]['snapshot'].get('resource_group') is not None and kwargs[key]['snapshot'].get('name') is not None: + self.body['properties']['publishingProfile']['snapshot'] = ('/subscriptions/' + + self.subscription_id + + '/resourceGroups/' + + kwargs[key]['snapshot'].get('resource_group') + + '/providers/Microsoft.Compute/snapshots/' + + kwargs[key]['snapshot'].get('name')) + else: + self.fail("The managed_image parameters config errors") + else: + self.fail("The managed_image parameters config errors") + if kwargs[key].get('replica_count') is not None: + self.body['properties']['publishingProfile']['replicaCount'] = kwargs[key].get('replica_count') + if kwargs[key].get('exclude_from_latest') is not None: + self.body['properties']['publishingProfile']['excludeFromLatest'] = kwargs[key].get('exclude_from_latest') + if kwargs[key].get('end_of_life_date') is not None: + self.body['properties']['publishingProfile']['endOfLifeDate'] = kwargs[key].get('end_of_life_date') + if kwargs[key].get('storage_account_type') is not None: + self.body['properties']['publishingProfile']['storageAccountType'] = kwargs[key].get('storage_account_type') # keep backward compatibility snapshot = self.body.get('properties', {}).get('publishingProfile', {}).pop('snapshot', None) @@ -485,7 +704,6 @@ class AzureRMGalleryImageVersions(AzureRMModuleBaseExt): response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) resource_group = self.get_resource_group(self.resource_group) @@ -531,12 +749,19 @@ class AzureRMGalleryImageVersions(AzureRMModuleBaseExt): self.tags = newtags self.body['tags'] = self.tags self.to_do = Actions.Update - modifiers = {} - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - self.results['compare'] = [] - if not self.default_compare(modifiers, self.body, old_response, '', self.results): - self.to_do = Actions.Update + if self.body['properties'].get('publishingProfile') is not None: + for key in self.body['properties']['publishingProfile'].keys(): + if key == 'targetRegions': + result = dict(compare=[]) + modifies = {'/*/name': {'updatable': True, 'comparison': 'location'}} + if not self.default_compare(modifies, self.body['properties']['publishingProfile'][key], + old_response['properties']['publishingProfile'][key], '', result): + self.to_do = Actions.Update + elif key == 'endOfLifeDate': + if self.body['properties']['publishingProfile'][key].lower() != old_response['properties']['publishingProfile'][key].lower(): + self.to_do = Actions.Update + elif self.body['properties']['publishingProfile'].get(key) != old_response['properties']['publishingProfile'].get(key): + self.to_do = Actions.Update if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): self.log('Need to Create / Update the GalleryImageVersion instance') @@ -583,10 +808,12 @@ class AzureRMGalleryImageVersions(AzureRMModuleBaseExt): self.log('Error attempting to create the GalleryImageVersion instance.') self.fail('Error creating the GalleryImageVersion instance: {0}'.format(str(exc))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) while response['properties']['provisioningState'] == 'Creating': time.sleep(60) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimageversion_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimageversion_info.py index b4c7e89a2..2eebb73e7 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimageversion_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_galleryimageversion_info.py @@ -150,7 +150,6 @@ class AzureRMGalleryImageVersionsInfo(AzureRMModuleBase): setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if (self.resource_group is not None and @@ -258,6 +257,8 @@ class AzureRMGalleryImageVersionsInfo(AzureRMModuleBase): return [self.format_item(x) for x in results['response']] if results['response'] else [] def format_item(self, item): + if not item: + return None d = { 'id': item['id'], 'name': item['name'], diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_hdinsightcluster.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_hdinsightcluster.py index 2ce7e16f3..b2121cd27 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_hdinsightcluster.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_hdinsightcluster.py @@ -322,7 +322,6 @@ class AzureRMClusters(AzureRMModuleBase): response = None self.mgmt_client = self.get_mgmt_svc_client(HDInsightManagementClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) resource_group = self.get_resource_group(self.resource_group) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_hdinsightcluster_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_hdinsightcluster_info.py index afb3211ea..b50d51215 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_hdinsightcluster_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_hdinsightcluster_info.py @@ -229,7 +229,6 @@ class AzureRMHDInsightclusterInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(HDInsightManagementClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.name is not None: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_iotdevice.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_iotdevice.py index be007b8d8..d26062244 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_iotdevice.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_iotdevice.py @@ -378,8 +378,8 @@ class AzureRMIoTDevice(AzureRMModuleBase): elif self.auth_method == 'self_signed': response = self.mgmt_client.update_device_with_certificate_authority(self.name, self.status, iot_edge=self.edge_enabled) elif self.auth_method == 'certificate_authority': - response = self.mgmt_client.update_device_with_x509(self.name, device['etag'], self.primary_thumbprint, - self.secondary_thumbprint, self.status, iot_edge=self.edge_enabled) + response = self.mgmt_client.update_device_with_x509(self.name, device['etag'], self.primary_key, + self.secondary_key, self.status, iot_edge=self.edge_enabled) return self.format_item(response) except Exception as exc: @@ -394,7 +394,7 @@ class AzureRMIoTDevice(AzureRMModuleBase): response = self.mgmt_client.create_device_with_certificate_authority(self.name, self.status, iot_edge=self.edge_enabled) elif self.auth_method == 'certificate_authority': response = self.mgmt_client.create_device_with_x509(self.name, - self.primary_thumbprint, self.secondary_thumbprint, self.status, iot_edge=self.edge_enabled) + self.primary_key, self.secondary_key, self.status, iot_edge=self.edge_enabled) return self.format_item(response) except Exception as exc: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_iotdevicemodule.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_iotdevicemodule.py index 2f2ad679d..274440754 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_iotdevicemodule.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_iotdevicemodule.py @@ -291,11 +291,11 @@ class AzureRMIoTDeviceModule(AzureRMModuleBase): try: if self.auth_method == 'sas': response = self.mgmt_client.update_module_with_sas(self.device, self.name, self.managed_by, self.etag, self.primary_key, self.secondary_key) - elif self.auth_method == 'self_signed': - response = self.mgmt_client.update_module_with_certificate_authority(self.device, self.name, self.managed_by, self.etag) elif self.auth_method == 'certificate_authority': + response = self.mgmt_client.update_module_with_certificate_authority(self.device, self.name, self.managed_by, self.etag) + elif self.auth_method == 'self_signed': response = self.mgmt_client.update_module_with_x509(self.device, - self.name, self.managed_by, self.etag, self.primary_thumbprint, self.secondary_thumbprint) + self.name, self.managed_by, self.etag, self.primary_key, self.secondary_key) return self.format_module(response) except Exception as exc: @@ -309,11 +309,11 @@ class AzureRMIoTDeviceModule(AzureRMModuleBase): try: if self.auth_method == 'sas': response = self.mgmt_client.create_module_with_sas(self.device, self.name, self.managed_by, self.primary_key, self.secondary_key) - elif self.auth_method == 'self_signed': - response = self.mgmt_client.create_module_with_certificate_authority(self.device, self.name, self.managed_by) elif self.auth_method == 'certificate_authority': + response = self.mgmt_client.create_module_with_certificate_authority(self.device, self.name, self.managed_by) + elif self.auth_method == 'self_signed': response = self.mgmt_client.create_module_with_x509(self.device_id, - self.name, self.managed_by, self.primary_thumbprint, self.secondary_thumbprint) + self.name, self.managed_by, self.primary_key, self.secondary_key) return self.format_module(response) except Exception as exc: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvault.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvault.py index efeddaacc..96d2d589e 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvault.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvault.py @@ -382,7 +382,6 @@ class AzureRMVaults(AzureRMModuleBase): self.mgmt_client = self.get_mgmt_svc_client(KeyVaultManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version="2021-10-01") resource_group = self.get_resource_group(self.resource_group) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvault_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvault_info.py index d7b54515f..af1a245e9 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvault_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvault_info.py @@ -261,7 +261,6 @@ class AzureRMKeyVaultInfo(AzureRMModuleBase): self._client = self.get_mgmt_svc_client(KeyVaultManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version="2021-10-01") if self.name: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultkey.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultkey.py index 54cc6eff6..d094a4ac4 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultkey.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultkey.py @@ -117,6 +117,7 @@ from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common try: from azure.keyvault.keys import KeyClient + from azure.core.exceptions import ResourceNotFoundError from datetime import datetime except ImportError: # This is handled in azure_rm_common @@ -191,10 +192,12 @@ class AzureRMKeyVaultKey(AzureRMModuleBase): if self.state == 'absent': changed = True - except Exception: + except ResourceNotFoundError as ec: # Key doesn't exist if self.state == 'present': changed = True + except Exception as ec: + self.fail("Find the key vault secret got exception, exception as {0}".format(ec)) self.results['changed'] = changed self.results['state'] = results diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultkey_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultkey_info.py index b59f89b33..979d09f49 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultkey_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultkey_info.py @@ -195,6 +195,7 @@ keyvaults: from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase try: + from azure.core.exceptions import ResourceNotFoundError from azure.keyvault.keys import KeyClient except ImportError: # This is handled in azure_rm_common @@ -282,7 +283,7 @@ def keyitem_to_dict(keyitem): kid=keyitem._id, version=keyitem.version, tags=keyitem._tags, - manged=keyitem._managed, + managed=keyitem._managed, attributes=dict( enabled=keyitem.enabled, not_before=keyitem.not_before, @@ -398,9 +399,10 @@ class AzureRMKeyVaultKeyInfo(AzureRMModuleBase): self.log("Response : {0}".format(response)) results.append(response) - except Exception as e: - self.fail(e) + except ResourceNotFoundError as e: self.log("Did not find the key vault key {0}: {1}".format(self.name, str(e))) + except Exception as ec: + self.fail("Find the key vault key got a exception as {0}".format(ec)) return results def get_key_versions(self): @@ -422,7 +424,7 @@ class AzureRMKeyVaultKeyInfo(AzureRMModuleBase): if self.has_tags(item['tags'], self.tags): results.append(item) except Exception as e: - self.log("Did not find key versions {0} : {1}.".format(self.name, str(e))) + self.fail("Did not find key versions {0} : {1}.".format(self.name, str(e))) return results def list_keys(self): @@ -444,7 +446,7 @@ class AzureRMKeyVaultKeyInfo(AzureRMModuleBase): if self.has_tags(item['tags'], self.tags): results.append(item) except Exception as e: - self.log("Did not find key vault in current subscription {0}.".format(str(e))) + self.fail("Did not find key vault in current subscription {0}.".format(str(e))) return results def get_deleted_key(self): @@ -465,8 +467,11 @@ class AzureRMKeyVaultKeyInfo(AzureRMModuleBase): self.log("Response : {0}".format(response)) results.append(response) - except Exception as e: - self.log("Did not find the key vault key {0}: {1}".format(self.name, str(e))) + except ResourceNotFoundError as ec: + self.log("Did not find the key vault key {0}: {1}".format(self.name, str(ec))) + except Exception as ec: + self.fail("Find the key vault key got a exception {0}".format(str(ec))) + return results def list_deleted_keys(self): @@ -488,7 +493,7 @@ class AzureRMKeyVaultKeyInfo(AzureRMModuleBase): if self.has_tags(item['tags'], self.tags): results.append(item) except Exception as e: - self.log("Did not find key vault in current subscription {0}.".format(str(e))) + self.fail("Did not find key vault in current subscription {0}.".format(str(e))) return results diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultsecret.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultsecret.py index 98a5e0e78..f36c86f1a 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultsecret.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultsecret.py @@ -43,6 +43,14 @@ options: description: - Optional valid-from datetime for secret type: str + recover_if_need: + description: + - Whether to permanently recover delete secrets. + type: bool + purge_if_need: + description: + - Whether to permanently delete secrets. + type: bool state: description: - Assert the state of the subnet. Use C(present) to create or update a secret and C(absent) to delete a secret . @@ -76,6 +84,18 @@ EXAMPLES = ''' secret_name: MySecret keyvault_uri: https://contoso.vault.azure.net/ state: absent + +- name: Recover a delete secret + azure_rm_keyvaultsecret: + secret_name: MySecret + keyvault_uri: https://contoso.vault.azure.net/ + recover_if_need: true + +- name: Purge a delete secret + azure_rm_keyvaultsecret: + secret_name: MySecret + keyvault_uri: https://contoso.vault.azure.net/ + purge_if_need: true ''' RETURN = ''' @@ -96,6 +116,8 @@ from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common try: from azure.keyvault.secrets import SecretClient + from azure.core.exceptions import ResourceNotFoundError + from azure.core.exceptions import HttpResponseError import dateutil.parser except ImportError: # This is handled in azure_rm_common @@ -114,6 +136,8 @@ class AzureRMKeyVaultSecret(AzureRMModuleBase): secret_expiry=dict(type='str', no_log=True), keyvault_uri=dict(type='str', no_log=True, required=True), state=dict(type='str', default='present', choices=['present', 'absent']), + recover_if_need=dict(type='bool'), + purge_if_need=dict(type='bool'), content_type=dict(type='str') ) @@ -135,6 +159,8 @@ class AzureRMKeyVaultSecret(AzureRMModuleBase): self.data_creds = None self.client = None self.tags = None + self.recover_if_need = None + self.purge_if_need = None self.content_type = None super(AzureRMKeyVaultSecret, self).__init__(self.module_arg_spec, @@ -162,10 +188,12 @@ class AzureRMKeyVaultSecret(AzureRMModuleBase): elif self.secret_value and results['secret_value'] != self.secret_value: changed = True - except Exception as ec: + except ResourceNotFoundError as ec: # Secret doesn't exist if self.state == 'present': changed = True + except Exception as ec2: + self.fail("Find the key vault secret got exception, exception as {0}".format(str(ec2))) self.results['changed'] = changed self.results['state'] = results @@ -181,9 +209,21 @@ class AzureRMKeyVaultSecret(AzureRMModuleBase): if not self.check_mode: # Create secret if self.state == 'present' and changed: - results['secret_id'] = self.create_update_secret(self.secret_name, self.secret_value, self.tags, self.content_type, valid_from, expiry) + if self.get_delete_secret(self.secret_name): + if self.recover_if_need: + results['secret_id'] = self.recover_delete_secret(self.secret_name) + status = 'Recover' + elif self.purge_if_need: + self.purge_deleted_secret(self.secret_name) + status = 'Purged' + else: + self.fail("Secret {0} is currently in a deleted but recoverable state, and its name cannot be reused; in this state,\ + the secret can only be recovered or purged.".format(self.secret_name)) + else: + results['secret_id'] = self.create_update_secret(self.secret_name, self.secret_value, self.tags, self.content_type, valid_from, expiry) + status = 'Created' self.results['state'] = results - self.results['state']['status'] = 'Created' + self.results['state']['status'] = status # Delete secret elif self.state == 'absent' and changed: results['secret_id'] = self.delete_secret(self.secret_name) @@ -225,6 +265,31 @@ class AzureRMKeyVaultSecret(AzureRMModuleBase): result = self.get_poller_result(deleted_secret) return result.properties._id + def recover_delete_secret(self, name): + ''' Recover a delete secret ''' + try: + recover_delete_secret = self.client.begin_recover_deleted_secret(name) + result = self.get_poller_result(recover_delete_secret) + return result._id + except HttpResponseError as ec: + self.fail("Recover the delete secret fail, detail info {0}".format(ec)) + + def purge_deleted_secret(self, name): + ''' Purge delete secret ''' + try: + purge_deleted_secret = self.client.purge_deleted_secret(name) + return purge_deleted_secret + except HttpResponseError as ec: + self.fail("Purge delete secret fail, detail info {0}".format(ec)) + + def get_delete_secret(self, name): + ''' Get delete secret ''' + try: + self.client.get_deleted_secret(name=name) + except ResourceNotFoundError: + return False + return True + def main(): AzureRMKeyVaultSecret() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultsecret_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultsecret_info.py index b612dce36..f03977285 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultsecret_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_keyvaultsecret_info.py @@ -163,12 +163,14 @@ from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common try: from azure.keyvault.secrets import SecretClient + from azure.core.exceptions import ResourceNotFoundError except ImportError: # This is handled in azure_rm_common pass def secretbundle_to_dict(bundle): + return dict(tags=bundle._properties._tags, attributes=dict( enabled=bundle._properties._attributes.enabled, @@ -302,9 +304,11 @@ class AzureRMKeyVaultSecretInfo(AzureRMModuleBase): self.log("Response : {0}".format(response)) results.append(response) - except Exception as e: + except ResourceNotFoundError as ec: self.log("Did not find the key vault secret {0}: {1}".format( - self.name, str(e))) + self.name, str(ec))) + except Exception as ec2: + self.fail("Find the key vault secret got exception, exception as {0}".format(str(ec2))) return results def get_secret_versions(self): @@ -326,7 +330,7 @@ class AzureRMKeyVaultSecretInfo(AzureRMModuleBase): if self.has_tags(item['tags'], self.tags): results.append(item) except Exception as e: - self.log("Did not find secret versions {0} : {1}.".format( + self.fail("Did not find secret versions {0} : {1}.".format( self.name, str(e))) return results @@ -349,7 +353,7 @@ class AzureRMKeyVaultSecretInfo(AzureRMModuleBase): if self.has_tags(item['tags'], self.tags): results.append(item) except Exception as e: - self.log( + self.fail( "Did not find key vault in current subscription {0}.".format( str(e))) return results @@ -372,9 +376,12 @@ class AzureRMKeyVaultSecretInfo(AzureRMModuleBase): self.log("Response : {0}".format(response)) results.append(response) - except Exception as e: + except ResourceNotFoundError as ec: self.log("Did not find the key vault secret {0}: {1}".format( - self.name, str(e))) + self.name, str(ec))) + except Exception as ec2: + self.fail("Did not find the key vault secret {0}: {1}".format( + self.name, str(ec2))) return results def list_deleted_secrets(self): @@ -396,7 +403,7 @@ class AzureRMKeyVaultSecretInfo(AzureRMModuleBase): if self.has_tags(item['tags'], self.tags): results.append(item) except Exception as e: - self.log( + self.fail( "Did not find key vault in current subscription {0}.".format( str(e))) return results diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_lock_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_lock_info.py index 39abbf3b7..0805cfa62 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_lock_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_lock_info.py @@ -158,7 +158,7 @@ class AzureRMLockInfo(AzureRMModuleBase): for key in self.module_arg_spec.keys(): setattr(self, key, kwargs[key]) - self._mgmt_client = self.get_mgmt_svc_client(GenericRestClient, is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) + self._mgmt_client = self.get_mgmt_svc_client(GenericRestClient, base_url=self._cloud_environment.endpoints.resource_manager) changed = False # construct scope id scope = self.get_scope() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_manageddisk.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_manageddisk.py index 2b27fbbff..6f6443994 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_manageddisk.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_manageddisk.py @@ -491,12 +491,13 @@ class AzureRMManagedDisk(AzureRMModuleBase): # unmount from the old virtual machine and mount to the new virtual machine if self.managed_by or self.managed_by == '': vm_name = parse_resource_id(disk_instance.get('managed_by', '')).get('name') if disk_instance else None + resource_group = parse_resource_id(disk_instance.get('managed_by', '')).get('resource_group') if disk_instance else None vm_name = vm_name or '' if self.managed_by != vm_name or self.is_attach_caching_option_different(vm_name, result): changed = True if not self.check_mode: if vm_name: - self.detach(self.resource_group, vm_name, result) + self.detach(resource_group, vm_name, result) if self.managed_by: self.attach(self.resource_group, self.managed_by, result) result = self.get_managed_disk() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_managementgroup.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_managementgroup.py index 35235ccbe..f4f03f121 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_managementgroup.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_managementgroup.py @@ -222,17 +222,16 @@ class Actions: class AzureRMManagementGroups(AzureRMModuleBaseExt): def __init__(self): self.module_arg_spec = dict( - group_id=dict(type='str', updatable=False, required=True), - name=dict(type='str', updatable=False), + group_id=dict(type='str', required=True), + name=dict(type='str'), id=dict(type='str'), type=dict(type='str'), properties=dict( type='dict', - disposition="/", options=dict( - tenant_id=dict(type='str', disposition="tenantId"), - display_name=dict(type='str', disposition="displayName"), - parent_id=dict(type='str', disposition="details/parent/id") + tenant_id=dict(type='str'), + display_name=dict(type='str'), + parent_id=dict(type='str') ) ), state=dict(type='str', default='present', choices=['present', 'absent']), @@ -260,16 +259,25 @@ class AzureRMManagementGroups(AzureRMModuleBaseExt): for key in list(self.module_arg_spec.keys()): if hasattr(self, key): setattr(self, key, kwargs[key]) + elif key == 'properties' and kwargs[key] is not None: + self.body['properties'] = {} + for item in kwargs['properties'].keys(): + if item == 'tenant_id': + self.body['properties']['tenantId'] = kwargs['properties'][item] + elif item == 'display_name': + self.body['properties']['displayName'] = kwargs['properties'][item] + elif item == 'parent_id': + self.body['properties']['details'] = {} + self.body['properties']['details']['parent'] = {} + self.body['properties']['details']['parent']['id'] = kwargs['properties'][item] + elif kwargs[key] is not None: self.body[key] = kwargs[key] - self.inflate_parameters(self.module_arg_spec, self.body, 0) - old_response = None response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) self.url = ('/providers' + @@ -293,13 +301,14 @@ class AzureRMManagementGroups(AzureRMModuleBaseExt): if self.state == 'absent': self.to_do = Actions.Delete else: - modifiers = {} - self.results['compare'] = [] - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - - if not self.default_compare(modifiers, self.body, old_response, '', self.results): - self.to_do = Actions.Update + for key in self.body.keys(): + if key == 'properties': + if old_response.get('properties') is None or \ + not all(self.body['properties'][item] == old_response['properties'].get(item) + for item in self.body['properties'].keys()): + self.to_do = Actions.Update + elif self.body[key] != old_response.get(key): + self.to_do = Actions.Update if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): self.log('Need to Create / Update the ManagementGroup instance') @@ -346,23 +355,34 @@ class AzureRMManagementGroups(AzureRMModuleBaseExt): # self.log('Creating / Updating the ManagementGroup instance {0}'.format(self.)) try: - response = self.mgmt_client.query(self.url, - 'PUT', - self.query_parameters, - self.header_parameters, - self.body, - self.status_code, - 600, - 30) + if self.to_do == Actions.Create: + response = self.mgmt_client.query(self.url, + 'PUT', + self.query_parameters, + self.header_parameters, + self.body, + self.status_code, + 600, + 30) + else: + response = self.mgmt_client.query(self.url, + 'PATCH', + self.query_parameters, + self.header_parameters, + self.body, + self.status_code, + 600, + 30) except Exception as exc: self.log('Error attempting to create the ManagementGroup instance.') self.fail('Error creating the ManagementGroup instance: {0}'.format(str(exc))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} - pass + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_mysqldatabase.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_mysqldatabase.py index a8caa1745..e26ac2a96 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_mysqldatabase.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_mysqldatabase.py @@ -92,7 +92,7 @@ import time try: from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase - from azure.core.exceptions import ResourceNotFoundError + from azure.core.exceptions import ResourceNotFoundError, HttpResponseError from azure.core.polling import LROPoller except ImportError: # This is handled in azure_rm_common @@ -282,6 +282,8 @@ class AzureRMMySqlDatabase(AzureRMModuleBase): self.log("MySQL Database instance : {0} found".format(response.name)) except ResourceNotFoundError as e: self.log('Did not find the MySQL Database instance.') + except HttpResponseError as e: + self.log("Get MySQL Database instance error. code: {0}, message: {1}".format(e.status_code, str(e.error))) if found is True: return response.as_dict() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_mysqldatabase_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_mysqldatabase_info.py index db2cb8cdf..aef0f1df6 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_mysqldatabase_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_mysqldatabase_info.py @@ -101,7 +101,7 @@ databases: try: from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase - from azure.core.exceptions import ResourceNotFoundError + from azure.core.exceptions import ResourceNotFoundError, HttpResponseError except ImportError: # This is handled in azure_rm_common pass @@ -159,6 +159,8 @@ class AzureRMMySqlDatabaseInfo(AzureRMModuleBase): self.log("Response : {0}".format(response)) except ResourceNotFoundError as e: self.log('Could not get facts for Databases.') + except HttpResponseError as e: + self.log("Get MySQL Database instance error. code: {0}, message: {1}".format(e.status_code, str(e.error))) if response is not None: results.append(self.format_item(response)) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_networkinterface.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_networkinterface.py index bb17132d4..3343d5ac1 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_networkinterface.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_networkinterface.py @@ -816,7 +816,7 @@ class AzureRMNetworkInterface(AzureRMModuleBase): if self.state == 'present': subnet = self.network_models.SubResource( id='/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Network/virtualNetworks/{2}/subnets/{3}'.format( - self.virtual_network['subscription_id'], + self.virtual_network['subscription'] if self.virtual_network.get('subscription') else self.virtual_network['subscription_id'], self.virtual_network['resource_group'], self.virtual_network['name'], self.subnet_name)) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_networkinterface_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_networkinterface_info.py index deeb2c8c6..2a71473d6 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_networkinterface_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_networkinterface_info.py @@ -63,176 +63,214 @@ EXAMPLES = ''' ''' RETURN = ''' -azure_networkinterfaces: - description: - - List of network interface dicts. - returned: always - type: list - example: [{ - "dns_settings": { - "applied_dns_servers": [], - "dns_servers": [], - "internal_dns_name_label": null, - "internal_fqdn": null - }, - "enable_ip_forwarding": false, - "etag": 'W/"59726bfc-08c4-44ed-b900-f6a559876a9d"', - "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroup/myResourceGroup/providers/Microsoft.Network/networkInterfaces/nic003", - "ip_configuration": { - "name": "default", - "private_ip_address": "10.10.0.4", - "private_ip_allocation_method": "Dynamic", - "public_ip_address": { - "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroup/myResourceGroup/providers/Microsoft.Network/publicIPAddresses/publicip001", - "name": "publicip001" - }, - "subnet": { - "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroup/myResourceGroup/providers/Microsoft.Network/virtualNetworks/vnet001/subnets/subnet001", - "name": "subnet001", - "virtual_network_name": "vnet001" - } - }, - "location": "westus", - "mac_address": null, - "name": "nic003", - "network_security_group": { - "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroup/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/secgroup001", - "name": "secgroup001" - }, - "primary": null, - "provisioning_state": "Succeeded", - "tags": {}, - "type": "Microsoft.Network/networkInterfaces" - }] networkinterfaces: description: - List of network interface dicts. Each dict contains parameters can be passed to M(azure.azcollection.azure_rm_networkinterface) module. - type: list + type: complex returned: always contains: id: description: - Id of the network interface. type: str + returned: always + sample: "/subscriptions/xxxx-xxxxx/resourceGroups/testRG/providers/Microsoft.Network/networkInterfaces/nic01" resource_group: description: - Name of a resource group where the network interface exists. type: str + returned: always + sample: testRG name: description: - Name of the network interface. type: str + returned: always + sample: nic01 location: description: - Azure location. type: str + returned: always + sample: eastus virtual_network: description: - An existing virtual network with which the network interface will be associated. - It is a dict which contains I(name) and I(resource_group) of the virtual network. - type: raw + type: complex + returned: always + contains: + name: + description: + - The name of the virtual network relate network interface. + type: str + returned: always + sample: vnetnic01 + resource_gorup: + description: + - Resource groups name that exist on the virtual network. + type: str + returned: always + sample: testRG + subscription_id: + description: + - Virtual network Subscription ID. + type: str + returned: always + sample: xxxxxxx-xxxxxxxxxxxxx + subnet_id: + description: + - The subnet's ID. + type: str + returned: always + sample: "/subscriptions/xxx-xxxx/resourceGroups/testRG/providers/Microsoft.Network/virtualNetworks/nic01/subnets/sub01" subnet: description: - Name of an existing subnet within the specified virtual network. type: str + returned: always + sample: sub01 tags: description: - Tags of the network interface. type: dict + returned: always + sample: {key1: value1, key2: value2} ip_configurations: description: - List of IP configurations, if contains multiple configurations. type: complex + returned: always contains: name: description: - Name of the IP configuration. type: str + returned: always + sample: default private_ip_address: description: - Private IP address for the IP configuration. - type: list + type: str + returned: always + sample: 10.10.0.4 private_ip_allocation_method: description: - Private IP allocation method. type: str + returned: always + sample: Dynamic public_ip_address: description: - Name of the public IP address. None for disable IP address. type: str + returned: always + sample: null public_ip_allocation_method: description: - Public IP allocation method. type: str + returned: always + sample: null load_balancer_backend_address_pools: description: - List of existing load-balancer backend address pools associated with the network interface. type: list + returned: always + sample: null application_gateway_backend_address_pools: description: - List of existing application gateway backend address pools associated with the network interface. version_added: "1.10.0" type: list + returned: always + sample: null primary: description: - Whether the IP configuration is the primary one in the list. type: bool + returned: always + sample: true application_security_groups: description: - List of Application security groups. type: list + returned: always sample: ['/subscriptions//resourceGroups//providers/Microsoft.Network/applicationSecurityGroups/myASG'] enable_accelerated_networking: description: - Specifies whether the network interface should be created with the accelerated networking feature or not. type: bool + returned: always + sample: false create_with_security_group: description: - Specifies whether a default security group should be be created with the NIC. Only applies when creating a new NIC. type: bool + returned: always + sample: false security_group: description: - A security group resource ID with which to associate the network interface. type: str + returned: always + sample: null enable_ip_forwarding: description: - Whether to enable IP forwarding type: bool + returned: always + sample: false dns_servers: description: - Which DNS servers should the NIC lookup. - List of IP addresses. type: list + returned: always + sample: [] mac_address: description: - The MAC address of the network interface. type: str + returned: always + sample: null provisioning_state: description: - The provisioning state of the network interface. type: str + returned: always + sample: Succeeded dns_settings: description: - The DNS settings in network interface. type: complex + returned: always contains: dns_servers: description: - List of DNS servers IP addresses. type: list + returned: always + sample: [] applied_dns_servers: description: - If the VM that uses this NIC is part of an Availability Set, then this list will have the union of all DNS servers from all NICs that are part of the Availability Set. This property is what is configured on each of those VMs. type: list + returned: always + sample: [] internal_dns_name_label: description: - Relative DNS name for this NIC used for internal communications between VMs in the same virtual network. type: str + returned: always + sample: null internal_fqdn: description: - Fully qualified DNS name supporting internal communications between VMs in the same virtual network. type: str + returned: always + sample: null ''' # NOQA try: from azure.core.exceptions import ResourceNotFoundError @@ -268,6 +306,8 @@ def nic_to_dict(nic): subnet = subnet_dict.get('subnets') if subnet_dict else None virtual_network = dict( resource_group=subnet_dict.get('resourceGroups'), + subnet_id=config.subnet.id if config and config.subnet else None, + subscription_id=subnet_dict.get('subscriptions'), name=subnet_dict.get('virtualNetworks')) if subnet_dict else None return dict( id=nic.id, diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster.py index cc579c998..b0c28a190 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster.py @@ -412,86 +412,57 @@ class AzureRMOpenShiftManagedClusters(AzureRMModuleBaseExt): self.module_arg_spec = dict( resource_group=dict( type='str', - updatable=False, - disposition='resourceGroupName', required=True ), name=dict( type='str', - updatable=False, - disposition='resourceName', required=True ), location=dict( type='str', - updatable=False, - required=True, - disposition='/' + required=True ), cluster_profile=dict( type='dict', - disposition='/properties/clusterProfile', default=dict(), options=dict( pull_secret=dict( type='str', no_log=True, - updatable=False, - disposition='pullSecret', - purgeIfNone=True ), cluster_resource_group_id=dict( type='str', - updatable=False, - disposition='resourceGroupId', - purgeIfNone=True ), domain=dict( type='str', - updatable=False, - disposition='domain', - purgeIfNone=True ), version=dict( type='str', - updatable=False, - disposition='version', - purgeIfNone=True ) ), ), service_principal_profile=dict( type='dict', - disposition='/properties/servicePrincipalProfile', options=dict( client_id=dict( type='str', - updatable=False, - disposition='clientId', required=True ), client_secret=dict( type='str', no_log=True, - updatable=False, - disposition='clientSecret', required=True ) ) ), network_profile=dict( type='dict', - disposition='/properties/networkProfile', options=dict( pod_cidr=dict( type='str', - updatable=False, - disposition='podCidr' ), service_cidr=dict( type='str', - updatable=False, - disposition='serviceCidr' ) ), default=dict( @@ -501,21 +472,15 @@ class AzureRMOpenShiftManagedClusters(AzureRMModuleBaseExt): ), master_profile=dict( type='dict', - disposition='/properties/masterProfile', options=dict( vm_size=dict( type='str', - updatable=False, - disposition='vmSize', choices=['Standard_D8s_v3', 'Standard_D16s_v3', 'Standard_D32s_v3'], - purgeIfNone=True ), subnet_id=dict( type='str', - updatable=False, - disposition='subnetId', required=True ) ) @@ -523,94 +488,66 @@ class AzureRMOpenShiftManagedClusters(AzureRMModuleBaseExt): worker_profiles=dict( type='list', elements='dict', - disposition='/properties/workerProfiles', options=dict( name=dict( type='str', - disposition='name', - updatable=False, required=True, choices=['worker'] ), count=dict( type='int', - disposition='count', - updatable=False, - purgeIfNone=True ), vm_size=dict( type='str', - disposition='vmSize', - updatable=False, choices=['Standard_D4s_v3', 'Standard_D8s_v3'], - purgeIfNone=True ), subnet_id=dict( type='str', - disposition='subnetId', - updatable=False, required=True ), disk_size=dict( type='int', - disposition='diskSizeGB', - updatable=False, - purgeIfNone=True ) ) ), api_server_profile=dict( type='dict', - disposition='/properties/apiserverProfile', options=dict( visibility=dict( type='str', - disposition='visibility', choices=['Public', 'Private'], default='Public' ), url=dict( type='str', - disposition='*', - updatable=False ), ip=dict( type='str', - disposition='*', - updatable=False ) ) ), ingress_profiles=dict( type='list', elements='dict', - disposition='/properties/ingressProfiles', options=dict( name=dict( type='str', - disposition='name', - updatable=False, choices=['default'], default='default' ), visibility=dict( type='str', - disposition='visibility', - updatable=False, choices=['Public', 'Private'], default='Public' ), ip=dict( type='str', - disposition='*', - updatable=False ) ) ), provisioning_state=dict( type='str', - disposition='/properties/provisioningState' ), state=dict( type='str', @@ -630,6 +567,7 @@ class AzureRMOpenShiftManagedClusters(AzureRMModuleBaseExt): self.to_do = Actions.NoAction self.body = {} + self.body['properties'] = {} self.query_parameters = {} self.header_parameters = {} @@ -645,13 +583,58 @@ class AzureRMOpenShiftManagedClusters(AzureRMModuleBaseExt): if hasattr(self, key): setattr(self, key, kwargs[key]) elif kwargs[key] is not None: - self.body[key] = kwargs[key] + if key == 'cluster_profile': + self.body['properties']['clusterProfile'] = {} + for item in ['pull_secret', 'cluster_resource_group_id', 'domain', 'version']: + if item == 'pull_secret': + self.body['properties']['clusterProfile']['pullSecret'] = kwargs[key].get(item) + elif item == 'cluster_resource_group_id': + self.body['properties']['clusterProfile']['resourceGroupId'] = kwargs[key].get(item) + elif item == 'domain': + self.body['properties']['clusterProfile']['domain'] = kwargs[key].get(item) + elif item == 'version': + self.body['properties']['clusterProfile']['version'] = kwargs[key].get(item) + elif key == 'service_principal_profile': + self.body['properties']['servicePrincipalProfile'] = {} + self.body['properties']['servicePrincipalProfile']['ClientId'] = kwargs[key].get('client_id') + self.body['properties']['servicePrincipalProfile']['clientSecret'] = kwargs[key].get('client_secret') + elif key == 'network_profile': + self.body['properties']['networkProfile'] = {} + for item in kwargs[key].keys(): + if item == 'pod_cidr': + self.body['properties']['networkProfile']['podCidr'] = kwargs[key].get(item) + elif item == 'service_cidr': + self.body['properties']['networkProfile']['serviceCidr'] = kwargs[key].get(item) + elif key == 'master_profile': + self.body['properties']['masterProfile'] = {} + if 'subnet_id' in kwargs[key].keys(): + self.body['properties']['masterProfile']['subnetId'] = kwargs[key].get('subnet_id') + self.body['properties']['masterProfile']['vmSize'] = kwargs[key].get('vm_size') + elif key == 'worker_profiles': + self.body['properties']['workerProfiles'] = [] + for item in kwargs[key]: + worker_profile = {} + if item.get('name') is not None: + worker_profile['name'] = item['name'] + if item.get('subnet_id') is not None: + worker_profile['subnetId'] = item['subnet_id'] + worker_profile['count'] = item.get('count') + worker_profile['vmSize'] = item.get('vm_size') + worker_profile['diskSizeGB'] = item.get('disk_size') + + self.body['properties']['workerProfiles'].append(worker_profile) + elif key == 'api_server_profile': + self.body['properties']['apiserverProfile'] = kwargs[key] + elif key == 'ingress_profiles': + self.body['properties']['ingressProfiles'] = kwargs[key] + elif key == 'provisioning_state': + self.body['properties']['provisioningState'] = kwargs[key] + else: + self.body[key] = kwargs[key] - self.inflate_parameters(self.module_arg_spec, self.body, 0) response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) self.url = ('/subscriptions' + @@ -756,11 +739,12 @@ class AzureRMOpenShiftManagedClusters(AzureRMModuleBaseExt): self.log('Error attempting to create the OpenShiftManagedCluster instance.') self.fail('Error creating the OpenShiftManagedCluster instance: {0}' '\n{1}'.format(str(self.body), str(exc))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} - pass + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster_info.py index ed359c641..cbda2da8b 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedcluster_info.py @@ -254,7 +254,6 @@ class AzureRMOpenShiftManagedClustersInfo(AzureRMModuleBaseExt): setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if (self.resource_group is not None and self.name is not None): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedclusterkubeconfig_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedclusterkubeconfig_info.py new file mode 100644 index 000000000..5b5f73a29 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_openshiftmanagedclusterkubeconfig_info.py @@ -0,0 +1,227 @@ +#!/usr/bin/python +# +# Copyright (c) 2020 Haiyuan Zhang +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_openshiftmanagedclusterkubeconfig_info +version_added: '1.17.0' +short_description: Get admin kubeconfig of Azure Red Hat OpenShift Managed Cluster +description: + - get kubeconfig of Azure Red Hat OpenShift Managed Cluster instance. +options: + resource_group: + description: + - The name of the resource group. + required: true + type: str + name: + description: + - Resource name. + required: true + type: str + path: + description: + - Destination filepath of kubeconfig file + required: false + type: str +extends_documentation_fragment: + - azure.azcollection.azure +author: + - Maxim Babushkin (@maxbab) +''' + +EXAMPLES = ''' +- name: Obtain kubeconfig file of ARO cluster + azure_rm_openshiftmanagedclusterkubeconfig_info: + name: myCluster + resource_group: myResourceGroup + register: kubeconf + +- name: Print registered kubeconfig file + debug: + msg: "{{ kubeconf['kubeconfig'] }}" + +- name: Fetch kubeconfig and save it as mycluster_kubeconfig filename + azure_rm_openshiftmanagedclusterkubeconfig_info: + name: myCluster + resource_group: myResourceGroup + path: ./files/mycluster_kubeconfig + +- name: Fetch kubeconfig and save it to specified directory (file will be named as kubeconfig by default) + azure_rm_openshiftmanagedclusterkubeconfig_info: + name: myCluster + resource_group: myResourceGroup + path: ./files/ +''' + +RETURN = ''' +kubeconfig: + description: + - kubeconfig value + returned: always + type: str +''' + +import base64 +import filecmp +import json +import os +import tempfile +from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_ext import AzureRMModuleBaseExt +from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common_rest import GenericRestClient + + +class Actions: + NoAction, Create, Update, Delete = range(4) + + +class AzureRMOpenShiftManagedClustersKubeconfigInfo(AzureRMModuleBaseExt): + def __init__(self): + self.module_arg_spec = dict( + resource_group=dict( + type='str', required=True + ), + name=dict( + type='str', required=True + ), + path=dict( + type='str', required=False + ) + ) + + self.resource_group = None + self.name = None + self.path = None + + self.results = dict(changed=False) + self.mgmt_client = None + self.state = None + self.url = None + self.status_code = [200] + + self.query_parameters = {} + self.query_parameters['api-version'] = '2021-09-01-preview' + self.header_parameters = {} + self.header_parameters['Content-Type'] = 'application/json; charset=utf-8' + + self.mgmt_client = None + super(AzureRMOpenShiftManagedClustersKubeconfigInfo, self).__init__(self.module_arg_spec, supports_check_mode=True, supports_tags=False) + + def exec_module(self, **kwargs): + + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, is_track2=True, + base_url=self._cloud_environment.endpoints.resource_manager) + self.results = self.get_kubeconfig() + if self.path and self.path_is_valid(): + self.write_kubeconfig_to_file() + return self.results + + def get_kubeconfig(self): + response = None + results = {} + # prepare url + self.url = ('/subscriptions' + + '/{{ subscription_id }}' + + '/resourceGroups' + + '/{{ resource_group }}' + + '/providers' + + '/Microsoft.RedHatOpenShift' + + '/openShiftClusters' + + '/{{ cluster_name }}' + + '/listAdminCredentials') + self.url = self.url.replace('{{ subscription_id }}', self.subscription_id) + self.url = self.url.replace('{{ resource_group }}', self.resource_group) + self.url = self.url.replace('{{ cluster_name }}', self.name) + self.log("Fetch for kubeconfig from the cluster.") + try: + response = self.mgmt_client.query(self.url, + 'POST', + self.query_parameters, + self.header_parameters, + None, + self.status_code, + 600, + 30) + results = json.loads(response.body()) + except Exception as e: + self.log('Could not get info for @(Model.ModuleOperationNameUpper).') + return self.format_item(results) + + def format_item(self, item): + d = { + 'kubeconfig': item.get('kubeconfig'), + } + return d + + def path_is_valid(self): + if not os.path.basename(self.path): + if os.path.isdir(self.path): + self.log("Path is dir. Appending file name.") + self.path += "kubeconfig" + else: + try: + self.log('Attempting to makedirs {0}'.format(self.path)) + os.makedirs(self.path) + except IOError as exc: + self.fail("Failed to create directory {0} - {1}".format(self.path, str(exc))) + self.path += "kubeconfig" + else: + file_name = os.path.basename(self.path) + path = self.path.replace(file_name, '') + self.log('Checking path {0}'. format(path)) + # If the "path" is not defined, it's cwd. + if path and not os.path.isdir(path): + try: + self.log('Attempting to makedirs {0}'. format(path)) + os.makedirs(path) + except IOError as exc: + self.fail("Failed to create directory {0} - {1}".format(path, str(exc))) + self.log("Validated path - {0}". format(self.path)) + return True + + def write_kubeconfig_to_file(self): + decoded_bytes = base64.b64decode(self.results['kubeconfig']) + decoded_string = decoded_bytes.decode("utf-8") + + if os.path.exists(self.path): + self.log('Existing kubeconfig file found. Compare, to decide if needs to override') + # If kubeconfig file already exists, compare it with the new file + # If equal, do nothing, otherwise, override. + tmp_kubeconfig = tempfile.TemporaryFile(mode='w') + tmp_kubeconfig.write(decoded_string) + tmp_kubeconfig.seek(0) + + # No need to close the temp file as it's closed by filecmp.cmp. + if filecmp.cmp(tmp_kubeconfig.name, self.path): + self.log("Files are identical. No need to override.") + self.results['changed'] = False + return + + self.log("Create {0} kubeconfig file.".format(self.path)) + try: + with open(self.path, "w") as file: + file.write(decoded_string) + except Exception as exc: + self.fail("Failed to write kubeconfig output to file - {0} to {1} - {2}".format(self.results['kubeconfig'], + self.path, exc)) + self.log("The {0} kubeconfig file has been created.") + self.results['changed'] = True + return + + +def main(): + AzureRMOpenShiftManagedClustersKubeconfigInfo() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleconfiguration_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleconfiguration_info.py new file mode 100644 index 000000000..52810303b --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleconfiguration_info.py @@ -0,0 +1,210 @@ +#!/usr/bin/python +# +# Copyright (c) 2024 xuzhang3 (@xuzhang3), Fred-sun (@Fred-sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_postgresqlflexibleconfiguration_info +version_added: "2.2.0" +short_description: Get Azure PostgreSQL Flexible Configuration facts +description: + - Get facts of Azure PostgreSQL Flexible Configuration. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. + required: True + type: str + server_name: + description: + - The name of the server. + required: True + type: str + name: + description: + - Setting name. + type: str + +extends_documentation_fragment: + - azure.azcollection.azure + +author: + - xuzhang3 (@xuzhang3) + - Fred-sun (@Fred-sun) + +''' + +EXAMPLES = ''' +- name: Get specific setting of PostgreSQL configuration + azure_rm_postgresqlflexibleconfiguration_info: + resource_group: myResourceGroup + server_name: testpostgresqlserver + name: deadlock_timeout + +- name: Get all settings of PostgreSQL Flexible Configuration + azure_rm_postgresqlflexibleconfiguration_info: + resource_group: myResourceGroup + server_name: testpostgresqlserver +''' + +RETURN = ''' +settings: + description: + - A list of dictionaries containing MySQL Server settings. + returned: always + type: complex + contains: + id: + description: + - Setting resource ID. + returned: always + type: str + sample: "/subscriptions/xxx-xxx/resourceGroups/testRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/post2/configurations/xmloption" + name: + description: + - Setting name. + returned: always + type: str + sample: deadlock_timeout + server_name: + description: + - The name of the post gresql flexible server. + type: str + returned: always + sample: post2 + resource_group: + description: + - Name of the server's resource group. + type: str + returned: always + sample: testRG + value: + description: + - Setting value. + returned: always + type: raw + sample: 1000 + description: + description: + - Description of the configuration. + returned: always + type: str + sample: Deadlock timeout. + source: + description: + - Source of the configuration. + returned: always + type: str + sample: system-default +''' + +try: + from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + from azure.core.exceptions import ResourceNotFoundError +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMPostgreSQLFlexibleConfigurationInfo(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.resource_group = None + self.server_name = None + self.name = None + super(AzureRMPostgreSQLFlexibleConfigurationInfo, self).__init__(self.module_arg_spec, supports_check_mode=True, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if self.name is not None: + self.results['settings'] = self.get() + else: + self.results['settings'] = self.list_by_server() + return self.results + + def get(self): + ''' + Gets facts of the specified PostgreSQL Flexible Configuration. + + :return: deserialized PostgreSQL Flexible Configurationinstance state dictionary + ''' + response = None + try: + response = self.postgresql_flexible_client.configurations.get(resource_group_name=self.resource_group, + server_name=self.server_name, + configuration_name=self.name) + self.log("Response : {0}".format(response)) + except ResourceNotFoundError as e: + self.log('Could not get requested setting, Exception as {0}'.format(e)) + return [] + + return [self.format_item(response)] + + def list_by_server(self): + ''' + Gets facts of the specified PostgreSQL Flexible Configuration. + + :return: deserialized PostgreSQL Flexible Configurationinstance state dictionary + ''' + response = None + results = [] + try: + response = self.postgresql_flexible_client.configurations.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except Exception as e: + self.log('List the flexible server config get exception, except as {0}'.format(e)) + return [] + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'server_name': self.server_name, + 'id': d['id'], + 'name': d['name'], + 'value': d['value'], + 'description': d['description'], + 'source': d['source'] + } + return d + + +def main(): + AzureRMPostgreSQLFlexibleConfigurationInfo() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase.py new file mode 100644 index 000000000..0656ddac6 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase.py @@ -0,0 +1,288 @@ +#!/usr/bin/python +# +# Copyright (c) 2024 xuzhang3 (@xuzhang3), Fred-sun (@Fred-sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_postgresqlflexibledatabase +version_added: "2.2.0" +short_description: Manage PostgreSQL Flexible Database instance +description: + - Create, update and delete instance of PostgreSQL Flexible Database. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. + required: True + type: str + server_name: + description: + - The name of the server. + required: True + type: str + name: + description: + - The name of the database. + required: True + type: str + charset: + description: + - The charset of the database. + type: str + collation: + description: + - The collation of the database. + type: str + state: + description: + - Assert the state of the PostgreSQL Flexible database. Use C(present) to create or update a database and C(absent) to delete it. + default: present + type: str + choices: + - absent + - present + +extends_documentation_fragment: + - azure.azcollection.azure + +author: + - xuzhang3 (@xuzhang3) + - Fred-sun (@Fred-sun) + +''' + +EXAMPLES = ''' +- name: Create (or update) PostgreSQL Flexible Database + azure_rm_postgresqlflexibledatabase: + resource_group: myResourceGroup + server_name: testserver + name: db1 + charset: UTF8 + collation: en_US.utf8 + +- name: Delete PostgreSQL Flexible Database + azure_rm_postgresqlflexibledatabase: + resource_group: myResourceGroup + server_name: testserver + name: db1 +''' + +RETURN = ''' +database: + description: + - A list of dictionaries containing facts for PostgreSQL Flexible Database. + returned: always + type: complex + contains: + id: + description: + - Resource ID of the postgresql flexible database. + returned: always + type: str + sample: "/subscriptions/xxx-xxx/resourceGroups/testRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/postfle9/databases/freddatabase" + name: + description: + - Resource name. + returned: always + type: str + sample: freddatabase + charset: + description: + - The charset of the database. + returned: always + type: str + sample: UTF-8 + collation: + description: + - The collation of the database. + returned: always + type: str + sample: en_US.utf8 + type: + description: + - The type of the resource. + returned: always + type: str + sample: Microsoft.DBforPostgreSQL/flexibleServers/databases +''' + + +try: + from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + from azure.core.exceptions import ResourceNotFoundError + from azure.core.polling import LROPoller +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMPostgreSqlFlexibleDatabases(AzureRMModuleBase): + """Configuration class for an Azure RM PostgreSQL Flexible Database resource""" + + def __init__(self): + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str', + required=True + ), + charset=dict( + type='str' + ), + collation=dict( + type='str' + ), + state=dict( + type='str', + default='present', + choices=['present', 'absent'] + ) + ) + + self.resource_group = None + self.server_name = None + self.name = None + self.parameters = dict() + + self.results = dict(changed=False) + self.state = None + + super(AzureRMPostgreSqlFlexibleDatabases, self).__init__(derived_arg_spec=self.module_arg_spec, + supports_check_mode=True, + supports_tags=False) + + def exec_module(self, **kwargs): + """Main module execution method""" + + for key in list(self.module_arg_spec.keys()): + if hasattr(self, key): + setattr(self, key, kwargs[key]) + elif kwargs[key] is not None: + if key == "charset": + self.parameters["charset"] = kwargs[key] + elif key == "collation": + self.parameters["collation"] = kwargs[key] + + old_response = None + response = None + changed = False + + old_response = self.get_postgresqlflexibledatabase() + + if not old_response: + self.log("PostgreSQL Flexible Database instance doesn't exist") + if self.state == 'absent': + self.log("Old instance didn't exist") + else: + changed = True + if not self.check_mode: + response = self.create_update_postgresqlflexibledatabase(self.parameters) + else: + self.log("PostgreSQL Flexible Database instance already exists") + if self.state == 'absent': + changed = True + if not self.check_mode: + response = self.delete_postgresqlflexibledatabase() + else: + if (self.parameters.get('charset') is not None and self.parameters['charset'] != old_response['charset']) or\ + (self.parameters.get('collation') is not None and self.parameters['collation'] != old_response['collation']): + changed = True + if not self.check_mode: + self.fail("The Post Gresql Flexible database not support to update") + else: + response = old_response + + self.results['database'] = response + self.results['changed'] = changed + return self.results + + def create_update_postgresqlflexibledatabase(self, body): + ''' + Creates or updates PostgreSQL Flexible Database with the specified configuration. + + :return: deserialized PostgreSQL Flexible Database instance state dictionary + ''' + self.log("Creating / Updating the PostgreSQL Flexible Database instance {0}".format(self.name)) + + try: + response = self.postgresql_flexible_client.databases.begin_create(resource_group_name=self.resource_group, + server_name=self.server_name, + database_name=self.name, + parameters=body) + if isinstance(response, LROPoller): + response = self.get_poller_result(response) + + except Exception as exc: + self.log('Error attempting to create the PostgreSQL Flexible Database instance.') + self.fail("Error creating the PostgreSQL Flexible Database instance: {0}".format(str(exc))) + return self.format_item(response) + + def delete_postgresqlflexibledatabase(self): + ''' + Deletes specified PostgreSQL Flexible Database instance in the specified subscription and resource group. + + :return: True + ''' + self.log("Deleting the PostgreSQL Flexible Database instance {0}".format(self.name)) + try: + self.postgresql_flexible_client.databases.begin_delete(resource_group_name=self.resource_group, + server_name=self.server_name, + database_name=self.name) + except Exception as ec: + self.log('Error attempting to delete the PostgreSQL Flexible Database instance.') + self.fail("Error deleting the PostgreSQL Flexible Database instance: {0}".format(str(ec))) + + def get_postgresqlflexibledatabase(self): + ''' + Gets the properties of the specified PostgreSQL Flexible Database. + + :return: deserialized PostgreSQL Flexible Database instance state dictionary + ''' + self.log("Checking if the PostgreSQL Flexible Database instance {0} is present".format(self.name)) + found = False + try: + response = self.postgresql_flexible_client.databases.get(resource_group_name=self.resource_group, + server_name=self.server_name, + database_name=self.name) + found = True + self.log("Response : {0}".format(response)) + self.log("PostgreSQL Flexible Database instance : {0} found".format(response.name)) + except ResourceNotFoundError as e: + self.log('Did not find the PostgreSQL Flexible Database instance. Exception as {0}'.format(e)) + if found is True: + return self.format_item(response) + + return None + + def format_item(self, item): + result = dict( + id=item.id, + name=item.name, + type=item.type, + charset=item.charset, + collation=item.collation + ) + return result + + +def main(): + """Main execution""" + AzureRMPostgreSqlFlexibleDatabases() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase_info.py new file mode 100644 index 000000000..545baf53f --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibledatabase_info.py @@ -0,0 +1,239 @@ +#!/usr/bin/python +# +# Copyright (c) 2024 xuzhang3 (@xuzhang3), Fred-sun (@Fred-sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_postgresqlflexibledatabase_info +version_added: "2.2.0" +short_description: Get Azure PostgreSQL Flexible Database facts +description: + - Get facts of PostgreSQL Flexible Database. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. + type: str + required: True + server_name: + description: + - The name of the post gresql server. + type: str + required: True + name: + description: + - The name of the post gresql database. + type: str + +extends_documentation_fragment: + - azure.azcollection.azure + +author: + - xuzhang3 (@xuzhang3) + - Fred-sun (@Fred-sun) + +''' + +EXAMPLES = ''' +- name: List instance of PostgreSQL Flexible Database by server name + azure_rm_postgresqlflexibledatabase_info: + resource_group: myResourceGroup + server_name: server_name + +- name: Get instances of PostgreSQL Flexible Database + azure_rm_postgresqlflexibledatabase_info: + resource_group: myResourceGroup + server_name: server_name + name: database_name +''' + +RETURN = ''' +database: + description: + - A list of dictionaries containing facts for PostgreSQL Flexible Database. + returned: always + type: complex + contains: + id: + description: + - Resource ID of the postgresql flexible database. + returned: always + type: str + sample: "/subscriptions/xxx-xxx/resourceGroups/testRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/postfle9/databases/freddatabase" + name: + description: + - Resource name. + returned: always + type: str + sample: freddatabase + charset: + description: + - The charset of the database. + returned: always + type: str + sample: UTF-8 + collation: + description: + - The collation of the database. + returned: always + type: str + sample: en_US.utf8 + type: + description: + - The type of the resource. + returned: always + type: str + sample: Microsoft.DBforPostgreSQL/flexibleServers/databases + system_data: + description: + - The system metadata relating to this resource. + type: complex + returned: always + contains: + created_by: + description: + - The identity that created the resource. + type: str + returned: always + sample: null + created_by_type: + description: + - The type of identity that created the resource. + returned: always + type: str + sample: null + created_at: + description: + - The timestamp of resource creation (UTC). + returned: always + sample: null + type: str + last_modified_by: + description: + - The identity that last modified the resource. + type: str + returned: always + sample: null + last_modified_by_type: + description: + - The type of identity that last modified the resource. + returned: always + sample: null + type: str + last_modified_at: + description: + - The timestamp of resource last modification (UTC). + returned: always + sample: null + type: str +''' + + +try: + from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + from azure.core.exceptions import ResourceNotFoundError +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMPostgreSqlFlexibleDatabaseInfo(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ), + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.resource_group = None + self.name = None + self.server_name = None + super(AzureRMPostgreSqlFlexibleDatabaseInfo, self).__init__(self.module_arg_spec, supports_check_mode=True, supports_tags=False, facts_module=True) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if self.name is not None: + self.results['databases'] = self.get() + else: + self.results['databases'] = self.list_all() + return self.results + + def get(self): + response = None + results = [] + try: + response = self.postgresql_flexible_client.databases.get(resource_group_name=self.resource_group, + server_name=self.server_name, + database_name=self.name) + self.log("Response : {0}".format(response)) + except ResourceNotFoundError: + self.log('Could not get facts for PostgreSQL Flexible Server.') + + if response is not None: + results.append(self.format_item(response)) + + return results + + def list_all(self): + response = None + results = [] + try: + response = self.postgresql_flexible_client.databases.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except Exception as ec: + self.log('Could not get facts for PostgreSQL Flexible Servers.') + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + result = dict( + id=item.id, + name=item.name, + system_data=dict(), + type=item.type, + charset=item.charset, + collation=item.collation + ) + if item.system_data is not None: + result['system_data']['created_by'] = item.system_data.created_by + result['system_data']['created_by_type'] = item.system_data.created_by_type + result['system_data']['created_at'] = item.system_data.created_at + result['system_data']['last_modified_by'] = item.system_data.last_modified_by + result['system_data']['last_modified_by_type'] = item.system_data.last_modified_by_type + result['system_data']['last_modified_at'] = item.system_data.last_modified_at + + return result + + +def main(): + AzureRMPostgreSqlFlexibleDatabaseInfo() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule.py new file mode 100644 index 000000000..c73843c46 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule.py @@ -0,0 +1,294 @@ +#!/usr/bin/python +# +# Copyright (c) 2024 xuzhang3 (@xuzhang3), Fred-sun (@Fred-sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_postgresqlflexiblefirewallrule +version_added: "2.2.0" +short_description: Manage PostgreSQL flexible firewall rule instance +description: + - Create, update and delete instance of PostgreSQL flexible firewall rule. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. + required: True + type: str + server_name: + description: + - The name of the server. + required: True + type: str + name: + description: + - The name of the PostgreSQL flexible firewall rule. + required: True + type: str + start_ip_address: + description: + - The start IP address of the PostgreSQL flexible firewall rule. Must be IPv4 format. + type: str + end_ip_address: + description: + - The end IP address of the PostgreSQL flexible firewall rule. Must be IPv4 format. + type: str + state: + description: + - Assert the state of the PostgreSQL flexible firewall rule. + - Use C(present) to create or update a PostgreSQL flexible firewall rule and C(absent) to delete it. + default: present + type: str + choices: + - absent + - present + +extends_documentation_fragment: + - azure.azcollection.azure + +author: + - xuzhang3 (@xuzhang3) + - Fred-sun (@Fred-sun) + +''' + +EXAMPLES = ''' +- name: Create (or update) PostgreSQL flexible firewall rule + azure_rm_postgresqlflexiblefirewallrule: + resource_group: myResourceGroup + server_name: testserver + name: rule1 + start_ip_address: 10.0.0.16 + end_ip_address: 10.0.0.18 +''' + +RETURN = ''' +rules: + description: + - A list of dictionaries containing facts for PostgreSQL Flexible Firewall Rule. + returned: always + type: complex + contains: + id: + description: + - Resource ID. + returned: always + type: str + sample: "/subscriptions/xxx-xxx/resourceGroups/testRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/flexibled9b/firewallRules/firewalld9b" + server_name: + description: + - The name of the server. + returned: always + type: str + sample: testserver + name: + description: + - Resource name. + returned: always + type: str + sample: rule1 + start_ip_address: + description: + - The start IP address of the PostgreSQL firewall rule. + returned: always + type: str + sample: 10.0.0.16 + end_ip_address: + description: + - The end IP address of the PostgreSQL firewall rule. + returned: always + type: str + sample: 10.0.0.18 +''' + + +try: + from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + from azure.core.exceptions import ResourceNotFoundError + from azure.core.polling import LROPoller + import logging + logging.basicConfig(filename='log.log', level=logging.INFO) +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMPostgreSqlFlexibleFirewallRules(AzureRMModuleBase): + """Configuration class for an Azure RM PostgreSQL flexible firewall rule resource""" + + def __init__(self): + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str', + required=True + ), + start_ip_address=dict( + type='str' + ), + end_ip_address=dict( + type='str' + ), + state=dict( + type='str', + default='present', + choices=['present', 'absent'] + ) + ) + + self.resource_group = None + self.server_name = None + self.name = None + self.start_ip_address = None + self.end_ip_address = None + + self.results = dict(changed=False) + self.state = None + self.parameters = dict() + + super(AzureRMPostgreSqlFlexibleFirewallRules, self).__init__(derived_arg_spec=self.module_arg_spec, + supports_check_mode=True, + supports_tags=False) + + def exec_module(self, **kwargs): + """Main module execution method""" + for key in list(self.module_arg_spec.keys()): + if hasattr(self, key): + setattr(self, key, kwargs[key]) + if key in ['start_ip_address', 'end_ip_address']: + self.parameters[key] = kwargs[key] + + old_response = None + response = None + changed = False + + old_response = self.get_firewallrule() + + if old_response is None: + self.log("PostgreSQL flexible firewall rule instance doesn't exist") + if self.state == 'absent': + self.log("Old instance didn't exist") + else: + changed = True + if not self.check_mode: + response = self.create_update_firewallrule(self.parameters) + else: + self.log("PostgreSQL flexible firewall rule instance already exists") + if self.state == 'absent': + changed = True + if self.check_mode: + response = old_response + else: + response = self.delete_firewallrule() + else: + self.log("Need to check if PostgreSQL flexible firewall rule instance has to be deleted or may be updated") + if (self.start_ip_address is not None) and (self.start_ip_address != old_response['start_ip_address']): + changed = True + else: + self.parameters['start_ip_address'] = old_response['start_ip_address'] + if (self.end_ip_address is not None) and (self.end_ip_address != old_response['end_ip_address']): + changed = True + else: + self.parameters['end_ip_address'] = old_response['end_ip_address'] + if changed: + if not self.check_mode: + response = self.create_update_firewallrule(self.parameters) + else: + response = old_response + else: + response = old_response + self.results['firewall_rule'] = response + self.results['changed'] = changed + + return self.results + + def create_update_firewallrule(self, body): + ''' + Creates or updates PostgreSQL flexible firewall rule with the specified configuration. + + :return: deserialized PostgreSQL flexible firewall rule instance state dictionary + ''' + self.log("Creating / Updating the PostgreSQL flexible firewall rule instance {0}".format(self.name)) + + try: + response = self.postgresql_flexible_client.firewall_rules.begin_create_or_update(resource_group_name=self.resource_group, + server_name=self.server_name, + firewall_rule_name=self.name, + parameters=body) + if isinstance(response, LROPoller): + response = self.get_poller_result(response) + + except Exception as exc: + self.log('Error attempting to create the PostgreSQL flexible firewall rule instance.') + self.fail("Error creating the PostgreSQL flexible firewall rule instance: {0}".format(str(exc))) + return self.format_item(response) + + def delete_firewallrule(self): + ''' + Deletes specified PostgreSQL flexible firewall rule instance in the specified subscription and resource group. + + :return: True + ''' + self.log("Deleting the PostgreSQL flexible firewall rule instance {0}".format(self.name)) + try: + self.postgresql_flexible_client.firewall_rules.begin_delete(resource_group_name=self.resource_group, + server_name=self.server_name, + firewall_rule_name=self.name) + except Exception as e: + self.log('Error attempting to delete the PostgreSQL flexible firewall rule instance.') + self.fail("Error deleting the PostgreSQL flexible firewall rule instance: {0}".format(str(e))) + + return True + + def get_firewallrule(self): + ''' + Gets the properties of the specified PostgreSQL flexible firewall rule. + + :return: deserialized PostgreSQL flexible firewall rule instance state dictionary + ''' + self.log("Checking if the PostgreSQL flexible firewall rule instance {0} is present".format(self.name)) + try: + response = self.postgresql_flexible_client.firewall_rules.get(resource_group_name=self.resource_group, + server_name=self.server_name, + firewall_rule_name=self.name) + self.log("Response : {0}".format(response)) + self.log("PostgreSQL flexible firewall rule instance : {0} found".format(response.name)) + except ResourceNotFoundError as e: + self.log('Did not find the PostgreSQL flexible firewall rule instance. Exception as {0}'.format(str(e))) + return None + return self.format_item(response) + + def format_item(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'id': d['id'], + 'server_name': self.server_name, + 'name': d['name'], + 'start_ip_address': d['start_ip_address'], + 'end_ip_address': d['end_ip_address'] + } + return d + + +def main(): + """Main execution""" + AzureRMPostgreSqlFlexibleFirewallRules() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule_info.py new file mode 100644 index 000000000..14eb029b4 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexiblefirewallrule_info.py @@ -0,0 +1,187 @@ +#!/usr/bin/python +# +# Copyright (c) 2024 xuzhang3 (@xuzhang3), Fred-sun (@Fred-sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_postgresqlflexiblefirewallrule_info +version_added: "2.2.0" +short_description: Get Azure PostgreSQL Flexible Firewall Rule facts +description: + - Get facts of Azure PostgreSQL Flexible Firewall Rule. + +options: + resource_group: + description: + - The name of the resource group. + required: True + type: str + server_name: + description: + - The name of the server. + required: True + type: str + name: + description: + - The name of the server firewall rule. + type: str + +extends_documentation_fragment: + - azure.azcollection.azure + +author: + - xuzhang3 (@xuzhang3) + - Fred-sun (@Fred-sun) + +''' + +EXAMPLES = ''' +- name: Get instance of PostgreSQL Flexible Firewall Rule + azure_rm_postgresqlflexiblefirewallrule_info: + resource_group: myResourceGroup + server_name: server_name + name: firewall_rule_name + +- name: List instances of PostgreSQL Flexible Firewall Rule + azure_rm_postgresqlflexiblefirewallrule_info: + resource_group: myResourceGroup + server_name: server_name +''' + +RETURN = ''' +rules: + description: + - A list of dictionaries containing facts for PostgreSQL Flexible Firewall Rule. + returned: always + type: complex + contains: + id: + description: + - Resource ID. + returned: always + type: str + sample: "/subscriptions/xxx-xxx/resourceGroups/testRG/providers/Microsoft.DBforPostgreSQL/flexibleServers/flexibled9b/firewallRules/firewalld9b" + server_name: + description: + - The name of the server. + returned: always + type: str + sample: testserver + name: + description: + - Resource name. + returned: always + type: str + sample: rule1 + start_ip_address: + description: + - The start IP address of the PostgreSQL firewall rule. + returned: always + type: str + sample: 10.0.0.16 + end_ip_address: + description: + - The end IP address of the PostgreSQL firewall rule. + returned: always + type: str + sample: 10.0.0.18 +''' + +try: + from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + from azure.core.exceptions import ResourceNotFoundError +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMPostgreSQLFlexibleFirewallRulesInfo(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + server_name=dict( + type='str', + required=True + ), + name=dict( + type='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.resource_group = None + self.server_name = None + self.name = None + super(AzureRMPostgreSQLFlexibleFirewallRulesInfo, self).__init__(self.module_arg_spec, supports_check_mode=True, supports_tags=False) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if self.name is not None: + self.results['firewall_rules'] = self.get() + else: + self.results['firewall_rules'] = self.list_by_server() + return self.results + + def get(self): + response = None + try: + response = self.postgresql_flexible_client.firewall_rules.get(resource_group_name=self.resource_group, + server_name=self.server_name, + firewall_rule_name=self.name) + self.log("Response : {0}".format(response)) + except ResourceNotFoundError as e: + self.log('Could not get facts for FirewallRules. Exception as {0}'.format(str(e))) + return [] + + return [self.format_item(response)] + + def list_by_server(self): + response = None + results = [] + try: + response = self.postgresql_flexible_client.firewall_rules.list_by_server(resource_group_name=self.resource_group, + server_name=self.server_name) + self.log("Response : {0}".format(response)) + except Exception as e: + self.log('Could not get facts for FirewallRules. Exception as {0}'.format(str(e))) + return [] + + if response is not None: + for item in response: + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + d = item.as_dict() + d = { + 'resource_group': self.resource_group, + 'id': d['id'], + 'server_name': self.server_name, + 'name': d['name'], + 'start_ip_address': d['start_ip_address'], + 'end_ip_address': d['end_ip_address'] + } + return d + + +def main(): + AzureRMPostgreSQLFlexibleFirewallRulesInfo() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver.py new file mode 100644 index 000000000..335dc53c8 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver.py @@ -0,0 +1,928 @@ +#!/usr/bin/python +# +# Copyright (c) 2024 xuzhang3 (@xuzhang3), Fred-sun (@Fred-sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_postgresqlflexibleserver +version_added: "2.2.0" +short_description: Manage PostgreSQL Flexible Server instance +description: + - Create, update and delete instance of PostgreSQL Flexible Server. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. + - You can obtain this value from the Azure Resource Manager API or the portal. + required: True + type: str + name: + description: + - The name of the flexible server. + required: True + type: str + sku: + description: + - The SKU (pricing tier) of the server. + type: dict + suboptions: + name: + description: + - The name of the sku, typically, tier + family + cores, such as Standard_D4s_v3. + type: str + required: True + tier: + description: + - The tier of the particular + type: str + choices: + - Burstable + - GeneralPurpose + - MemoryOptimized + required: True + location: + description: + - Resource location. If not set, location from the resource group will be used as default. + type: str + storage: + description: + - Storage properties of a server. + type: dict + suboptions: + storage_size_gb: + description: + - The storage size for the server. + type: int + administrator_login: + description: + - The administrator's login name of a server. + - Can only be specified when the server is being created (and is required for creation). + type: str + administrator_login_password: + description: + - The administrator login password (required for server creation). + type: str + version: + description: + - PostgreSQL Server version. + type: str + choices: + - '11' + - '12' + - '13' + fully_qualified_domain_name: + description: + - The fully qualified domain name of a server. + type: str + backup: + description: + - Backup properties of a server. + type: dict + suboptions: + backup_retention_days: + description: + - Backup retention days for the server. + type: int + geo_redundant_backup: + description: + - A value indicating whether Geo-Redundant backup is enabled on the server. + type: str + choices: + - Enabled + - Disabled + network: + description: + - Network properties of a server. + type: dict + suboptions: + delegated_subnet_resource_id: + description: + - Delegated subnet arm resource id. + type: str + private_dns_zone_arm_resource_id: + description: + - Private dns zone arm resource id. + type: str + public_network_access: + description: + - Public network access is enabled or not. + type: str + choices: + - Enabled + - Disabled + high_availability: + description: + - High availability properties of a server. + type: dict + suboptions: + mode: + description: + - The HA mode for the server. + type: str + choices: + - Disabled + - ZoneRedundant + standby_availability_zone: + description: + - Availability zone information of the standby. + type: str + maintenance_window: + description: + - Maintenance window properties of a server. + type: dict + suboptions: + custom_window: + description: + - Indicates whether custom window is enabled or disabled. + type: str + start_hour: + description: + - Start hour for maintenance window. + type: int + start_minute: + description: + - Start minute for maintenance window. + type: int + day_of_week: + description: + - Day of week for maintenance window. + type: int + point_in_time_utc: + description: + - Restore point creation time (ISO8601 format), specifying the time to restore from. + - It's required when I(create_mode=PointInTimeRestore). + type: str + availability_zone: + description: + - Availability zone information of the server + type: str + create_mode: + description: + - The mode to create a new PostgreSQL server. + type: str + choices: + - Default + - Create + - Update + - PointInTimeRestore + source_server_resource_id: + description: + - The source server resource ID to restore from. + - It's required when I(create_mode=PointInTimeRestore) + type: str + state: + description: + - Assert the state of the PostgreSQL Flexible server. + - Use C(present) to create or update a server and C(absent) to delete it. + default: present + type: str + choices: + - present + - absent + is_restart: + description: + - Whether to restart the Post gresql server. + type: bool + default: False + is_stop: + description: + - Whether to stop the Post gresql server. + type: bool + default: False + is_start: + description: + - Whether to start the Post gresql server. + type: bool + default: False + +extends_documentation_fragment: + - azure.azcollection.azure + - azure.azcollection.azure_tags + +author: + - xuzhang3 (@xuzhang3) + - Fred-sun (@Fred-sun) + +''' + +EXAMPLES = ''' +- name: Create (or update) PostgreSQL Flexible Server + azure_rm_postgresqlflexibleserver: + resource_group: myResourceGroup + name: testserver + sku: + name: Standard_B1ms + tier: Burstable + administrator_login: azureuser + administrator_login_password: Fred@0329 + version: 12 + storage: + storage_size_gb: 128 + fully_qualified_domain_name: st-private-dns-zone.postgres.database.azure.com + backup: + backup_retention_days: 7 + geo_redundant_backup: Disabled + maintenance_window: + custom_window: Enabled + start_hour: 8 + start_minute: 0 + day_of_week: 0 + point_in_time_utc: 2023-05-31T00:28:17.7279547+00:00 + availability_zone: 1 + create_mode: Default + +- name: Delete PostgreSQL Flexible Server + azure_rm_postgresqlflexibleserver: + resource_group: myResourceGroup + name: testserver + state: absent +''' + +RETURN = ''' +servers: + description: + - A list of dictionaries containing facts for PostgreSQL Flexible servers. + returned: always + type: complex + contains: + id: + description: + - Resource ID of the postgresql flexible server. + returned: always + type: str + sample: "/subscriptions/xxx/resourceGroups/myResourceGroup/providers/Microsoft.DBforPostgreSQL/flexibleservers/postgresql3" + resource_group: + description: + - Resource group name. + returned: always + type: str + sample: myResourceGroup + name: + description: + - Resource name. + returned: always + type: str + sample: postgreabdud1223 + location: + description: + - The location the resource resides in. + returned: always + type: str + sample: eastus + sku: + description: + - The SKU of the server. + returned: always + type: complex + contains: + name: + description: + - The name of the SKU. + returned: always + type: str + sample: Standard_B1ms + tier: + description: + - The tier of the particular SKU. + returned: always + type: str + sample: Burstable + storage: + description: + - The maximum storage allowed for a server. + returned: always + type: complex + contains: + storage_size_gb: + description: + - ax storage allowed for a server. + type: int + returned: always + sample: 128 + administrator_login: + description: + - The administrator's login name of a server. + returned: always + type: str + sample: azureuser + version: + description: + - Flexible Server version. + returned: always + type: str + sample: "12" + choices: + - '11' + - '12' + - '13' + fully_qualified_domain_name: + description: + - The fully qualified domain name of the flexible server. + returned: always + type: str + sample: postflexiblefredpgsqlflexible.postgres.database.azure.com + availability_zone: + description: + - Availability zone information of the server. + type: str + returned: always + sample: 1 + backup: + description: + - Backup properties of a server. + type: complex + returned: always + contains: + backup_retention_days: + description: + - Backup retention days for the server. + type: int + returned: always + sample: 7 + geo_redundant_backup: + description: + - A value indicating whether Geo-Redundant backup is enabled on the server. + type: str + returned: always + sample: Disabled + high_availability: + description: + - High availability properties of a server. + type: complex + returned: always + contains: + mode: + description: + - The HA mode for the server. + returned: always + sample: Disabled + type: str + standby_availability_zone: + description: + - availability zone information of the standby. + type: str + returned: always + sample: null + maintenance_window: + description: + - Maintenance window properties of a server. + type: complex + returned: always + contains: + custom_window: + description: + - Indicates whether custom window is enabled or disabled. + returned: always + sample: Enabled + type: str + day_of_week: + description: + - Day of week for maintenance window. + returned: always + sample: 0 + type: int + start_hour: + description: + - Start hour for maintenance window. + type: int + returned: always + sample: 8 + start_minute: + description: + - Start minute for maintenance window. + type: int + returned: always + sample: 0 + network: + description: + - Network properties of a server. + type: complex + returned: always + contains: + delegated_subnet_resource_id: + description: + - Delegated subnet arm resource id. + type: str + returned: always + sample: null + private_dns_zone_arm_resource_id: + description: + - Private dns zone arm resource id. + type: str + returned: always + sample: null + public_network_access: + description: + - Public network access is enabled or not. + type: str + returned: always + sample: Enabled + point_in_time_utc: + description: + - Restore point creation time (ISO8601 format). + type: str + sample: null + returned: always + source_server_resource_id: + description: + - The source server resource ID to restore from. + type: str + returned: always + sample: null + system_data: + description: + - The system metadata relating to this resource. + type: complex + returned: always + contains: + created_by: + description: + - The identity that created the resource. + type: str + returned: always + sample: null + created_by_type: + description: + - The type of identity that created the resource. + returned: always + type: str + sample: null + created_at: + description: + - The timestamp of resource creation (UTC). + returned: always + sample: null + type: str + last_modified_by: + description: + - The identity that last modified the resource. + type: str + returned: always + sample: null + last_modified_by_type: + description: + - The type of identity that last modified the resource. + returned: always + sample: null + type: str + last_modified_at: + description: + - The timestamp of resource last modification (UTC). + returned: always + sample: null + type: str + tags: + description: + - Tags assigned to the resource. Dictionary of string:string pairs. + type: dict + returned: always + sample: { tag1: abc } +''' + + +try: + from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + from azure.core.exceptions import ResourceNotFoundError + from azure.core.polling import LROPoller +except ImportError: + # This is handled in azure_rm_common + pass + + +sku_spec = dict( + name=dict(type='str', required=True), + tier=dict(type='str', required=True, choices=["Burstable", "GeneralPurpose", "MemoryOptimized"]) +) + + +maintenance_window_spec = dict( + custom_window=dict(type='str'), + start_hour=dict(type='int'), + start_minute=dict(type='int'), + day_of_week=dict(type='int'), +) + + +high_availability_spec = dict( + mode=dict(type='str', choices=["Disabled", "ZoneRedundant"]), + standby_availability_zone=dict(type='str') +) + + +network_spec = dict( + delegated_subnet_resource_id=dict(type='str'), + private_dns_zone_arm_resource_id=dict(type='str'), + public_network_access=dict(type='str', choices=["Enabled", "Disabled"]) +) + + +backup_spec = dict( + backup_retention_days=dict(type='int'), + geo_redundant_backup=dict(type='str', choices=["Enabled", "Disabled"]), +) + + +storage_spec = dict( + storage_size_gb=dict(type='int') +) + + +class AzureRMPostgreSqlFlexibleServers(AzureRMModuleBase): + """Configuration class for an Azure RM PostgreSQL Flexible Server resource""" + + def __init__(self): + self.module_arg_spec = dict( + resource_group=dict( + type='str', + required=True + ), + name=dict( + type='str', + required=True + ), + sku=dict( + type='dict', + options=sku_spec + ), + location=dict( + type='str' + ), + administrator_login=dict( + type='str' + ), + administrator_login_password=dict( + type='str', + no_log=True + ), + version=dict( + type='str', + choices=['11', '12', '13'] + ), + fully_qualified_domain_name=dict( + type='str', + ), + storage=dict( + type='dict', + options=storage_spec + ), + backup=dict( + type='dict', + options=backup_spec + ), + network=dict( + type='dict', + options=network_spec + ), + high_availability=dict( + type='dict', + options=high_availability_spec + ), + maintenance_window=dict( + type='dict', + options=maintenance_window_spec + ), + point_in_time_utc=dict( + type='str' + ), + availability_zone=dict( + type='str' + ), + create_mode=dict( + type='str', + choices=['Default', 'Create', 'Update', 'PointInTimeRestore'] + ), + is_start=dict( + type='bool', + default=False, + ), + is_restart=dict( + type='bool', + default=False + ), + is_stop=dict( + type='bool', + default=False + ), + source_server_resource_id=dict( + type='str' + ), + state=dict( + type='str', + default='present', + choices=['present', 'absent'] + ) + ) + + self.resource_group = None + self.name = None + self.parameters = dict() + self.update_parameters = dict() + self.tags = None + self.is_start = None + self.is_stop = None + self.is_restart = None + + self.results = dict(changed=False) + self.state = None + + super(AzureRMPostgreSqlFlexibleServers, self).__init__(derived_arg_spec=self.module_arg_spec, + supports_check_mode=True, + supports_tags=True) + + def exec_module(self, **kwargs): + """Main module execution method""" + + for key in list(self.module_arg_spec.keys()) + ['tags']: + if hasattr(self, key): + setattr(self, key, kwargs[key]) + elif kwargs[key] is not None: + self.parameters[key] = kwargs[key] + for key in ['location', 'sku', 'administrator_login_password', 'storage', 'backup', 'high_availability', 'maintenance_window', 'create_mode']: + self.update_parameters[key] = kwargs[key] + + old_response = None + response = None + changed = False + + resource_group = self.get_resource_group(self.resource_group) + + if "location" not in self.parameters: + self.parameters["location"] = resource_group.location + self.update_parameters["location"] = resource_group.location + + old_response = self.get_postgresqlflexibleserver() + + if not old_response: + self.log("PostgreSQL Flexible Server instance doesn't exist") + if self.state == 'present': + if not self.check_mode: + response = self.create_postgresqlflexibleserver(self.parameters) + if self.is_stop: + self.stop_postgresqlflexibleserver() + elif self.is_start: + self.start_postgresqlflexibleserver() + elif self.is_restart: + self.restart_postgresqlflexibleserver() + changed = True + else: + self.log("PostgreSQL Flexible Server instance doesn't exist, Don't need to delete") + else: + self.log("PostgreSQL Flexible Server instance already exists") + if self.state == 'present': + update_flag = False + if self.update_parameters.get('sku') is not None: + for key in self.update_parameters['sku'].keys(): + if self.update_parameters['sku'][key] is not None and self.update_parameters['sku'][key] != old_response['sku'].get(key): + update_flag = True + else: + self.update_parameters['sku'][key] = old_response['sku'].get(key) + + if self.update_parameters.get('storage') is not None and self.update_parameters['storage'] != old_response['storage']: + update_flag = True + else: + self.update_parameters['storage'] = old_response['storage'] + + if self.update_parameters.get('backup') is not None: + for key in self.update_parameters['backup'].keys(): + if self.update_parameters['backup'][key] is not None and self.update_parameters['backup'][key] != old_response['backup'].get(key): + update_flag = True + else: + self.update_parameters['backup'][key] = old_response['backup'].get(key) + + if self.update_parameters.get('high_availability') is not None: + for key in self.update_parameters['high_availability'].keys(): + if (self.update_parameters['high_availability'][key] is not None) and\ + (self.update_parameters['high_availability'][key] != old_response['high_availability'].get(key)): + update_flag = True + else: + self.update_parameters['high_availability'][key] = old_response['high_availability'].get(key) + + if self.update_parameters.get('maintenance_window') is not None: + for key in self.update_parameters['maintenance_window'].keys(): + if (self.update_parameters['maintenance_window'][key] is not None) and\ + (self.update_parameters['maintenance_window'][key] != old_response['maintenance_window'].get(key)): + update_flag = True + else: + self.update_parameters['maintenance_window'][key] = old_response['maintenance_window'].get(key) + + update_tags, new_tags = self.update_tags(old_response['tags']) + self.update_parameters['tags'] = new_tags + if update_tags: + update_flag = True + + if update_flag: + changed = True + if not self.check_mode: + response = self.update_postgresqlflexibleserver(self.update_parameters) + else: + response = old_response + if self.is_stop: + self.stop_postgresqlflexibleserver() + changed = True + elif self.is_start: + self.start_postgresqlflexibleserver() + changed = True + elif self.is_restart: + self.restart_postgresqlflexibleserver() + changed = True + else: + if not self.check_mode: + if self.is_stop: + self.stop_postgresqlflexibleserver() + changed = True + elif self.is_start: + self.start_postgresqlflexibleserver() + changed = True + elif self.is_restart: + self.restart_postgresqlflexibleserver() + changed = True + response = old_response + else: + self.log("PostgreSQL Flexible Server instance already exist, will be deleted") + changed = True + if not self.check_mode: + response = self.delete_postgresqlflexibleserver() + + self.results['changed'] = changed + self.results['state'] = response + + return self.results + + def update_postgresqlflexibleserver(self, body): + ''' + Updates PostgreSQL Flexible Server with the specified configuration. + :return: deserialized PostgreSQL Flexible Server instance state dictionary + ''' + self.log("Updating the PostgreSQL Flexible Server instance {0}".format(self.name)) + try: + # structure of parameters for update must be changed + response = self.postgresql_flexible_client.servers.begin_update(resource_group_name=self.resource_group, + server_name=self.name, + parameters=body) + if isinstance(response, LROPoller): + response = self.get_poller_result(response) + + except Exception as exc: + self.log('Error attempting to create the PostgreSQL Flexible Server instance.') + self.fail("Error updating the PostgreSQL Flexible Server instance: {0}".format(str(exc))) + return self.format_item(response) + + def create_postgresqlflexibleserver(self, body): + ''' + Creates PostgreSQL Flexible Server with the specified configuration. + :return: deserialized PostgreSQL Flexible Server instance state dictionary + ''' + self.log("Creating the PostgreSQL Flexible Server instance {0}".format(self.name)) + try: + response = self.postgresql_flexible_client.servers.begin_create(resource_group_name=self.resource_group, + server_name=self.name, + parameters=body) + if isinstance(response, LROPoller): + response = self.get_poller_result(response) + + except Exception as exc: + self.log('Error attempting to create the PostgreSQL Flexible Server instance.') + self.fail("Error creating the PostgreSQL Flexible Server instance: {0}".format(str(exc))) + return self.format_item(response) + + def delete_postgresqlflexibleserver(self): + ''' + Deletes specified PostgreSQL Flexible Server instance in the specified subscription and resource group. + + :return: True + ''' + self.log("Deleting the PostgreSQL Flexible Server instance {0}".format(self.name)) + try: + self.postgresql_flexible_client.servers.begin_delete(resource_group_name=self.resource_group, + server_name=self.name) + except Exception as e: + self.log('Error attempting to delete the PostgreSQL Flexible Server instance.') + self.fail("Error deleting the PostgreSQL Flexible Server instance: {0}".format(str(e))) + + def stop_postgresqlflexibleserver(self): + ''' + Stop PostgreSQL Flexible Server instance in the specified subscription and resource group. + + :return: True + ''' + self.log("Stop the PostgreSQL Flexible Server instance {0}".format(self.name)) + try: + self.postgresql_flexible_client.servers.begin_stop(resource_group_name=self.resource_group, + server_name=self.name) + except Exception as e: + self.log('Error attempting to stop the PostgreSQL Flexible Server instance.') + self.fail("Error stop the PostgreSQL Flexible Server instance: {0}".format(str(e))) + + def start_postgresqlflexibleserver(self): + ''' + Start PostgreSQL Flexible Server instance in the specified subscription and resource group. + + :return: True + ''' + self.log("Starting the PostgreSQL Flexible Server instance {0}".format(self.name)) + try: + self.postgresql_flexible_client.servers.begin_start(resource_group_name=self.resource_group, + server_name=self.name) + except Exception as e: + self.log('Error attempting to start the PostgreSQL Flexible Server instance.') + self.fail("Error starting the PostgreSQL Flexible Server instance: {0}".format(str(e))) + + def restart_postgresqlflexibleserver(self): + ''' + Restart PostgreSQL Flexible Server instance in the specified subscription and resource group. + + :return: True + ''' + self.log("Restarting the PostgreSQL Flexible Server instance {0}".format(self.name)) + try: + self.postgresql_flexible_client.servers.begin_restart(resource_group_name=self.resource_group, + server_name=self.name) + except Exception as e: + self.log('Error attempting to restart the PostgreSQL Flexible Server instance.') + self.fail("Error restarting the PostgreSQL Flexible Server instance: {0}".format(str(e))) + + def get_postgresqlflexibleserver(self): + ''' + Gets the properties of the specified PostgreSQL Flexible Server. + + :return: deserialized PostgreSQL Flexible Server instance state dictionary + ''' + self.log("Checking if the PostgreSQL Flexible Server instance {0} is present".format(self.name)) + try: + response = self.postgresql_flexible_client.servers.get(resource_group_name=self.resource_group, + server_name=self.name) + self.log("Response : {0}".format(response)) + self.log("PostgreSQL Flexible Server instance : {0} found".format(response.name)) + except ResourceNotFoundError as e: + self.log('Did not find the PostgreSQL Flexible Server instance. Exception as {0}'.format(str(e))) + return None + + return self.format_item(response) + + def format_item(self, item): + result = dict( + id=item.id, + resource_group=self.resource_group, + name=item.name, + sku=dict(), + location=item.location, + tags=item.tags, + system_data=dict(), + administrator_login=item.administrator_login, + version=item.version, + minor_version=item.minor_version, + fully_qualified_domain_name=item.fully_qualified_domain_name, + storage=dict(), + backup=dict(), + network=dict(), + high_availability=dict(), + maintenance_window=dict(), + source_server_resource_id=item.source_server_resource_id, + point_in_time_utc=item.point_in_time_utc, + availability_zone=item.availability_zone, + ) + if item.sku is not None: + result['sku']['name'] = item.sku.name + result['sku']['tier'] = item.sku.tier + if item.system_data is not None: + result['system_data']['created_by'] = item.system_data.created_by + result['system_data']['created_by_type'] = item.system_data.created_by_type + result['system_data']['created_at'] = item.system_data.created_at + result['system_data']['last_modified_by'] = item.system_data.last_modified_by + result['system_data']['last_modified_by_type'] = item.system_data.last_modified_by_type + result['system_data']['last_modified_at'] = item.system_data.last_modified_at + if item.storage is not None: + result['storage']['storage_size_gb'] = item.storage.storage_size_gb + if item.backup is not None: + result['backup']['backup_retention_days'] = item.backup.backup_retention_days + result['backup']['geo_redundant_backup'] = item.backup.geo_redundant_backup + if item.network is not None: + result['network']['public_network_access'] = item.network.public_network_access + result['network']['delegated_subnet_resource_id'] = item.network.delegated_subnet_resource_id + result['network']['private_dns_zone_arm_resource_id'] = item.network.private_dns_zone_arm_resource_id + if item.high_availability is not None: + result['high_availability']['mode'] = item.high_availability.mode + result['high_availability']['standby_availability_zone'] = item.high_availability.standby_availability_zone + if item.maintenance_window is not None: + result['maintenance_window']['custom_window'] = item.maintenance_window.custom_window + result['maintenance_window']['start_minute'] = item.maintenance_window.start_minute + result['maintenance_window']['start_hour'] = item.maintenance_window.start_hour + result['maintenance_window']['day_of_week'] = item.maintenance_window.day_of_week + + return result + + +def main(): + """Main execution""" + AzureRMPostgreSqlFlexibleServers() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver_info.py new file mode 100644 index 000000000..50fe9adc5 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_postgresqlflexibleserver_info.py @@ -0,0 +1,443 @@ +#!/usr/bin/python +# +# Copyright (c) 2024 xuzhang3 (@xuzhang3), Fred-sun (@Fred-sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_postgresqlflexibleserver_info +version_added: "2.2.0" +short_description: Get Azure PostgreSQL Flexible Server facts +description: + - Get facts of PostgreSQL Flexible Server. + +options: + resource_group: + description: + - The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. + type: str + name: + description: + - The name of the server. + type: str + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + type: list + elements: str + +extends_documentation_fragment: + - azure.azcollection.azure + +author: + - xuzhang3 (@xuzhang3) + - Fred-sun (@Fred-sun) + +''' + +EXAMPLES = ''' +- name: Get instance of PostgreSQL Flexible Server + azure_rm_postgresqlflexibleserver_info: + resource_group: myResourceGroup + name: server_name + +- name: List instances of PostgreSQL Flexible Server + azure_rm_postgresqlflexibleserver_info: + resource_group: myResourceGroup + tags: + - key +''' + +RETURN = ''' +servers: + description: + - A list of dictionaries containing facts for PostgreSQL Flexible servers. + returned: always + type: complex + contains: + id: + description: + - Resource ID of the postgresql flexible server. + returned: always + type: str + sample: "/subscriptions/xxx/resourceGroups/myResourceGroup/providers/Microsoft.DBforPostgreSQL/flexibleservers/postgresql3" + resource_group: + description: + - Resource group name. + returned: always + type: str + sample: myResourceGroup + name: + description: + - Resource name. + returned: always + type: str + sample: postgreabdud1223 + location: + description: + - The location the resource resides in. + returned: always + type: str + sample: eastus + sku: + description: + - The SKU of the server. + returned: always + type: complex + contains: + name: + description: + - The name of the SKU. + returned: always + type: str + sample: Standard_B1ms + tier: + description: + - The tier of the particular SKU. + returned: always + type: str + sample: Burstable + storage: + description: + - The maximum storage allowed for a server. + returned: always + type: complex + contains: + storage_size_gb: + description: + - Max storage allowed for a server. + type: int + returned: always + sample: 128 + administrator_login: + description: + - The administrator's login name of a server. + returned: always + type: str + sample: azureuser + version: + description: + - Flexible Server version. + returned: always + type: str + sample: "12" + fully_qualified_domain_name: + description: + - The fully qualified domain name of the flexible server. + returned: always + type: str + sample: postflexiblefredpgsqlflexible.postgres.database.azure.com + availability_zone: + description: + - availability zone information of the server. + type: str + returned: always + sample: 1 + backup: + description: + - Backup properties of a server. + type: complex + returned: always + contains: + backup_retention_days: + description: + - Backup retention days for the server. + type: int + returned: always + sample: 7 + geo_redundant_backup: + description: + - A value indicating whether Geo-Redundant backup is enabled on the server. + type: str + returned: always + sample: Disabled + high_availability: + description: + - High availability properties of a server. + type: complex + returned: always + contains: + mode: + description: + - The HA mode for the server. + returned: always + sample: Disabled + type: str + standby_availability_zone: + description: + - availability zone information of the standby. + type: str + returned: always + sample: null + maintenance_window: + description: + - Maintenance window properties of a server. + type: complex + returned: always + contains: + custom_window: + description: + - Indicates whether custom window is enabled or disabled. + returned: always + sample: Enabled + type: str + day_of_week: + description: + - Day of week for maintenance window. + returned: always + sample: 0 + type: int + start_hour: + description: + - Start hour for maintenance window. + type: int + returned: always + sample: 8 + start_minute: + description: + - Start minute for maintenance window. + type: int + returned: always + sample: 0 + network: + description: + - Network properties of a server. + type: complex + returned: always + contains: + delegated_subnet_resource_id: + description: + - Delegated subnet arm resource id. + type: str + returned: always + sample: null + private_dns_zone_arm_resource_id: + description: + - Private dns zone arm resource id. + type: str + returned: always + sample: null + public_network_access: + description: + - Public network access is enabled or not. + type: str + returned: always + sample: Enabled + point_in_time_utc: + description: + - Restore point creation time (ISO8601 format). + type: str + sample: null + returned: always + source_server_resource_id: + description: + - The source server resource ID to restore from. + type: str + returned: always + sample: null + system_data: + description: + - The system metadata relating to this resource. + type: complex + returned: always + contains: + created_by: + description: + - The identity that created the resource. + type: str + returned: always + sample: null + created_by_type: + description: + - The type of identity that created the resource. + returned: always + type: str + sample: null + created_at: + description: + - The timestamp of resource creation (UTC). + returned: always + sample: null + type: str + last_modified_by: + description: + - The identity that last modified the resource. + type: str + returned: always + sample: null + last_modified_by_type: + description: + - The type of identity that last modified the resource. + returned: always + sample: null + type: str + last_modified_at: + description: + - The timestamp of resource last modification (UTC). + returned: always + sample: null + type: str + tags: + description: + - Tags assigned to the resource. Dictionary of string:string pairs. + type: dict + returned: always + sample: { tag1: abc } +''' + + +try: + from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + from azure.core.exceptions import ResourceNotFoundError +except ImportError: + # This is handled in azure_rm_common + pass + + +class AzureRMPostgreSqlFlexibleServersInfo(AzureRMModuleBase): + def __init__(self): + # define user inputs into argument + self.module_arg_spec = dict( + resource_group=dict( + type='str', + ), + name=dict( + type='str' + ), + tags=dict( + type='list', + elements='str' + ) + ) + # store the results of the module operation + self.results = dict( + changed=False + ) + self.resource_group = None + self.name = None + self.tags = None + super(AzureRMPostgreSqlFlexibleServersInfo, self).__init__(self.module_arg_spec, supports_check_mode=True, supports_tags=False, facts_module=True) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if self.resource_group is not None and self.name is not None: + self.results['servers'] = self.get() + elif self.resource_group is not None: + self.results['servers'] = self.list_by_resource_group() + else: + self.results['servers'] = self.list_all() + return self.results + + def get(self): + response = None + results = [] + try: + response = self.postgresql_flexible_client.servers.get(resource_group_name=self.resource_group, + server_name=self.name) + self.log("Response : {0}".format(response)) + except ResourceNotFoundError: + self.log('Could not get facts for PostgreSQL Flexible Server.') + + if response and self.has_tags(response.tags, self.tags): + results.append(self.format_item(response)) + + return results + + def list_by_resource_group(self): + response = None + results = [] + try: + response = self.postgresql_flexible_client.servers.list_by_resource_group(resource_group_name=self.resource_group) + self.log("Response : {0}".format(response)) + except Exception: + self.log('Could not get facts for PostgreSQL Flexible Servers.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_item(item)) + + return results + + def list_all(self): + response = None + results = [] + try: + response = self.postgresql_flexible_client.servers.list() + self.log("Response : {0}".format(response)) + except Exception: + self.log('Could not get facts for PostgreSQL Flexible Servers.') + + if response is not None: + for item in response: + if self.has_tags(item.tags, self.tags): + results.append(self.format_item(item)) + + return results + + def format_item(self, item): + result = dict( + id=item.id, + resource_group=self.resource_group, + name=item.name, + sku=dict(), + location=item.location, + tags=item.tags, + system_data=dict(), + administrator_login=item.administrator_login, + version=item.version, + minor_version=item.minor_version, + fully_qualified_domain_name=item.fully_qualified_domain_name, + storage=dict(), + backup=dict(), + network=dict(), + high_availability=dict(), + maintenance_window=dict(), + source_server_resource_id=item.source_server_resource_id, + point_in_time_utc=item.point_in_time_utc, + availability_zone=item.availability_zone, + ) + if item.sku is not None: + result['sku']['name'] = item.sku.name + result['sku']['tier'] = item.sku.tier + if item.system_data is not None: + result['system_data']['created_by'] = item.system_data.created_by + result['system_data']['created_by_type'] = item.system_data.created_by_type + result['system_data']['created_at'] = item.system_data.created_at + result['system_data']['last_modified_by'] = item.system_data.last_modified_by + result['system_data']['last_modified_by_type'] = item.system_data.last_modified_by_type + result['system_data']['last_modified_at'] = item.system_data.last_modified_at + if item.storage is not None: + result['storage']['storage_size_gb'] = item.storage.storage_size_gb + if item.backup is not None: + result['backup']['backup_retention_days'] = item.backup.backup_retention_days + result['backup']['geo_redundant_backup'] = item.backup.geo_redundant_backup + if item.network is not None: + result['network']['public_network_access'] = item.network.public_network_access + result['network']['delegated_subnet_resource_id'] = item.network.delegated_subnet_resource_id + result['network']['private_dns_zone_arm_resource_id'] = item.network.private_dns_zone_arm_resource_id + if item.high_availability is not None: + result['high_availability']['mode'] = item.high_availability.mode + result['high_availability']['standby_availability_zone'] = item.high_availability.standby_availability_zone + if item.maintenance_window is not None: + result['maintenance_window']['custom_window'] = item.maintenance_window.custom_window + result['maintenance_window']['start_minute'] = item.maintenance_window.start_minute + result['maintenance_window']['start_hour'] = item.maintenance_window.start_hour + result['maintenance_window']['day_of_week'] = item.maintenance_window.day_of_week + + return result + + +def main(): + AzureRMPostgreSqlFlexibleServersInfo() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_privatednsrecordset.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_privatednsrecordset.py index 3560139e7..f2e9e92f7 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_privatednsrecordset.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_privatednsrecordset.py @@ -324,8 +324,10 @@ class AzureRMPrivateDNSRecordSet(AzureRMModuleBase): resource_group=dict(type='str', required=True), relative_name=dict(type='str', required=True), zone_name=dict(type='str', required=True), - record_type=dict(choices=RECORD_ARGSPECS.keys(), required=True, type='str'), - record_mode=dict(choices=['append', 'purge'], default='purge'), + record_type=dict(choices=['A', 'AAAA', 'CNAME', 'MX', 'PTR', 'SRV', 'TXT', 'SOA'], + required=True, + type='str'), + record_mode=dict(type='str', choices=['append', 'purge'], default='purge'), state=dict(choices=['present', 'absent'], default='present', type='str'), time_to_live=dict(type='int', default=3600), records=dict(type='list', elements='dict') diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix.py new file mode 100644 index 000000000..90bfafc41 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix.py @@ -0,0 +1,455 @@ +#!/usr/bin/python +# +# Copyright (c) 2024 xuzhang3 (@xuzhang3), Fred-Sun (@Fred-Sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_publicipprefix + +version_added: "2.2.0" + +short_description: Manage Azure Public IP prefix + +description: + - Create, update and delete a Public IP prefix. + +options: + resource_group: + description: + - Name of resource group with which the Public IP prefix is associated. + required: true + type: str + name: + description: + - Name of the Public IP prefix. + required: true + type: str + state: + description: + - Assert the state of the Public IP. Use C(present) to create or update a and C(absent) to delete. + default: present + type: str + choices: + - absent + - present + location: + description: + - Valid Azure location. Defaults to location of the resource group. + type: str + sku: + description: + - The public IP prefix SKU. + type: dict + suboptions: + name: + description: + - Name of a public IP prefix SKU. + type: str + choices: + - Standard + tier: + description: + - Tier of a public IP prefix SKU. + type: str + choices: + - Regional + - Global + custom_ip_prefix: + description: + - The Custom IP prefix that this prefix is associated with. + type: dict + suboptions: + id: + description: + - Resource ID. + type: str + extended_location: + description: + - The extended location of the public ip address. + type: str + ip_tags: + description: + - The list of tags associated with the public IP prefix. + type: list + elements: dict + suboptions: + ip_tag_type: + description: + - The IP tag type. Example as FirstPartyUsage. + type: str + tag: + description: + - The value of the IP tag associated with the public IP. Example as SQL. + type: str + public_ip_address_version: + description: + - The public IP address version. + type: str + choices: + - IPV4 + - IPV6 + zones: + description: + - A list of availability zones denoting the IP prefix allocated for the resource needs to come from. + type: list + elements: str + choices: + - '1' + - '2' + - '3' + prefix_length: + description: + - The Length of the Public IP Prefix. + type: int + +extends_documentation_fragment: + - azure.azcollection.azure + - azure.azcollection.azure_tags + +author: + - xuzhang3 (@xuzhang3) + - Fred-sun (@Fred-sun) +''' + +EXAMPLES = ''' +- name: Create a public ip prefix + azure_rm_publicipprefix: + resource_group: myResourceGroup + name: my_public_ip + public_ip_address_version: IPV4 + prefix_length: 29 + sku: + name: Standard + tier: Regional + zones: + - 1 + tags: + key1: value1 + +- name: Delete public ip prefix + azure_rm_publicipprefix: + resource_group: myResourceGroup + name: my_public_ipprefix + state: absent +''' + +RETURN = ''' +state: + description: + - List of public IP prefixes dicts. + returned: always + type: complex + contains: + id: + description: + - Resource ID. + returned: always + type: str + sample: /subscriptions/xxx---xxxxx/resourceGroups/v-xisuRG/providers/Microsoft.Network/publicIPPrefixes/pipb57dc95224 + name: + description: + - Name of the public IP prefix. + returned: always + type: str + sample: prefix57dc95224 + type: + description: + - Resource type. + returned: always + type: str + sample: "Microsoft.Network/publicIPPrefixes" + location: + description: + - Resource location. + returned: always + type: str + sample: eastus + tags: + description: + - Resource tags. + returned: always + type: dict + sample: { + "delete": "on-exit", + "testing": "testing" + } + public_ip_address_version: + description: + - The public IP address version. + - Possible values are C(IPv4) and C(IPv6). + returned: always + type: str + sample: IPv4 + ip_tags: + description: + - The list of tags associated with the public IP prefixes. + returned: always + type: list + sample: [{'type': 'FirstPartyUsage', 'value': 'Storage'}] + resource_guid: + description: + - The resource GUID property of the public IP prefix resource. + type: str + sample: "47cafa04-851d-4579-894d-74ad6afe3233" + custom_ip_prefix: + description: + - The customIpPrefix that this prefix is associated with. + type: dict + returned: always + sample: {} + public_ip_addresses: + description: + - The list of all referenced PublicIPAddresses. + type: list + sample: [] +''' + +from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + +try: + from azure.core.exceptions import ResourceNotFoundError +except ImportError: + # This is handled in azure_rm_common + pass + + +def prefix_to_dict(prefix): + result = dict( + id=prefix.id, + name=prefix.name, + tags=prefix.tags, + type=prefix.type, + location=prefix.location, + public_ip_address_version=prefix.public_ip_address_version, + prefix_length=prefix.prefix_length, + provisioning_state=prefix.provisioning_state, + etag=prefix.etag, + zones=prefix.zones, + sku=dict(), + ip_tags=list(), + custom_ip_prefix=dict(), + ip_prefix=prefix.ip_prefix, + resource_guid=prefix.resource_guid, + public_ip_addresses=list(), + extended_location=prefix.extended_location + ) + if prefix.public_ip_addresses: + result['public_ip_addresses'] = [x.id for x in prefix.public_ip_addresses] + if prefix.sku: + result['sku']['name'] = prefix.sku.name + result['sku']['tier'] = prefix.sku.tier + if prefix.custom_ip_prefix: + result['custom_ip_prefix']['id'] = prefix.custom_ip_prefix.id + if prefix.ip_tags: + result['ip_tags'] = [dict(type=x.ip_tag_type, value=x.tag) for x in prefix.ip_tags] + return result + + +class AzureRMPublicIPPrefix(AzureRMModuleBase): + + def __init__(self): + + self.module_arg_spec = dict( + resource_group=dict(type='str', required=True), + name=dict(type='str', required=True), + state=dict(type='str', default='present', choices=['present', 'absent']), + location=dict(type='str'), + public_ip_address_version=dict(type='str', choices=['IPV4', 'IPV6']), + extended_location=dict(type='str'), + prefix_length=dict(type='int'), + custom_ip_prefix=dict( + type='dict', + options=dict( + id=dict(type='str') + ) + ), + sku=dict( + type='dict', + options=dict( + name=dict(type='str', choices=['Standard']), + tier=dict(type='str', choices=['Regional', 'Global']) + ) + ), + ip_tags=dict( + type='list', + elements='dict', + options=dict( + ip_tag_type=dict(type='str'), + tag=dict(type='str') + ) + ), + zones=dict(type='list', elements='str', choices=['1', '2', '3']) + ) + + self.resource_group = None + self.name = None + self.location = None + self.state = None + self.tags = None + self.zones = None + self.sku = None + self.ip_tags = None + self.public_ip_address_version = None + self.prefix_length = None + self.custom_ip_prefix = None + + self.results = dict( + changed=False, + state=dict() + ) + + super(AzureRMPublicIPPrefix, self).__init__(derived_arg_spec=self.module_arg_spec, + supports_check_mode=True) + + def exec_module(self, **kwargs): + + for key in list(self.module_arg_spec.keys()) + ['tags']: + setattr(self, key, kwargs[key]) + + results = dict() + changed = False + prefix = None + update_tags = False + + resource_group = self.get_resource_group(self.resource_group) + if not self.location: + # Set default location + self.location = resource_group.location + + try: + self.log("Fetch public ip prefix {0}".format(self.name)) + prefix = self.network_client.public_ip_prefixes.get(self.resource_group, self.name) + self.log("Public IP prefix {0} exists".format(self.name)) + + if self.state == 'present': + results = prefix_to_dict(prefix) + + if self.public_ip_address_version is not None and \ + self.public_ip_address_version.lower() != results['public_ip_address_version'].lower(): + changed = False + results['public_ip_address_version'] = self.public_ip_address_version + self.fail("The public_ip_address_version can't be updated") + + if self.prefix_length is not None and self.prefix_length != results['prefix_length']: + changed = False + results['prefix_length'] = self.prefix_length + self.fail("The prefix_length can't be updated") + + if self.sku is not None: + for key in self.sku.keys(): + if self.sku[key] != results['sku'].get(key): + changed = False + self.fail("The sku can't be updated") + results['sku'] = self.sku + + if self.zones is not None and not all(key in results['zones'] for key in self.zones): + changed = False + results['zones'] = self.zones + self.fail("The zone can't be updated") + + if self.extended_location is not None and self.extended_location != results['extended_location']: + changed = False + results['extended_location'] = self.extended_location + self.fail("The extended_location can't be updated") + + if self.ip_tags is not None: + for key in self.ip_tags.keys(): + if self.ip_tags[key] != results['ip_tags'].get(key): + changed = False + results['ip_tags'] = self.ip_tags + self.fail("The ip_tags can't be updated") + + if self.custom_ip_prefix is not None: + if results.get('custom_ip_prefix') is None: + changed = False + results['custom_ip_prefix'] = self.custom_ip_prefix + self.fail("The custom_ip_prefix can't be updated") + elif self.custom_ip_prefix['id'].lower() != results['custom_ip_prefix']['id'].lower(): + changed = False + results['custom_ip_prefix'] = self.custom_ip_prefix + self.fail("The custom_ip_prefix can't be updated") + + update_tags, results['tags'] = self.update_tags(results['tags']) + if update_tags: + self.log("CHANGED: tags") + changed = True + self.tags = results['tags'] + + elif self.state == 'absent': + self.log("CHANGED: public ip prefix {0} exists but requested state is 'absent'".format(self.name)) + changed = True + except ResourceNotFoundError: + self.log('Public ip prefix {0} does not exist'.format(self.name)) + if self.state == 'present': + self.log("CHANGED: public IP prefix {0} does not exist but requested state is 'present'".format(self.name)) + changed = True + + self.results['state'] = results + self.results['changed'] = changed + + if self.check_mode: + results['changed'] = True + return results + + if update_tags: + self.results['state'] = self.update_prefix_tags(self.tags) + + elif changed: + if self.state == 'present': + self.log("Create or Update Public IP prefix {0}".format(self.name)) + prefix = self.network_models.PublicIPPrefix( + location=self.location, + public_ip_address_version=self.public_ip_address_version, + prefix_length=self.prefix_length, + zones=self.zones, + tags=self.tags, + sku=self.sku, + ip_tags=self.ip_tags, + custom_ip_prefix=self.custom_ip_prefix + ) + self.results['state'] = self.create_or_update_prefix(prefix) + + elif self.state == 'absent': + self.log('Delete public ip {0}'.format(self.name)) + self.delete_prefix() + + return self.results + + def update_prefix_tags(self, tags): + try: + prefix = self.network_client.public_ip_prefixes.update_tags(self.resource_group, self.name, dict(tags=tags)) + except Exception as exc: + self.fail("Error updating tags {0} - {1}".format(self.name, str(exc))) + return prefix_to_dict(prefix) + + def create_or_update_prefix(self, prefix): + try: + poller = self.network_client.public_ip_prefixes.begin_create_or_update(self.resource_group, self.name, prefix) + prefix = self.get_poller_result(poller) + except Exception as exc: + self.fail("Error creating or updating {0} - {1}".format(self.name, str(exc))) + return prefix_to_dict(prefix) + + def delete_prefix(self): + try: + poller = self.network_client.public_ip_prefixes.begin_delete(self.resource_group, self.name) + self.get_poller_result(poller) + except Exception as exc: + self.fail("Error deleting {0} - {1}".format(self.name, str(exc))) + + self.results['state']['status'] = 'Deleted' + return True + + +def main(): + AzureRMPublicIPPrefix() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix_info.py new file mode 100644 index 000000000..c8cf0eff1 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_publicipprefix_info.py @@ -0,0 +1,296 @@ +#!/usr/bin/python +# +# Copyright (c) 2024 xuzhang3 (@xuzhang3), Fred-Sun (@Fred-Sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_publicipprefix_info + +version_added: "2.2.0" + +short_description: Get public IP prefix facts + +description: + - Get facts for a specific public IP prefix. + - Get all facts for a specific public IP prefixes within a resource group. + +options: + name: + description: + - The name of the public IP prefix. + type: str + resource_group: + description: + - Limit results by resource group. Required when using name parameter. + type: str + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + type: list + elements: str + +extends_documentation_fragment: + - azure.azcollection.azure + +author: + - xuzhang3 (@xuzhang3) + - Fred-sun (@Fred-sun) +''' + +EXAMPLES = ''' +- name: Get facts for one Public IP Prefix + azure_rm_publicipprefix_info: + resource_group: myResourceGroup + name: publicipprefix + +- name: Get facts for all Public IPs within a resource groups + azure_rm_publicipprefix_info: + resource_group: myResourceGroup + tags: + - key:value +''' + +RETURN = ''' +publicipprefix: + description: + - List of public IP prefixes dicts. + returned: always + type: complex + contains: + id: + description: + - Resource ID. + returned: always + type: str + sample: /subscriptions/xxx---xxxxx/resourceGroups/v-xisuRG/providers/Microsoft.Network/publicIPPrefixes/pipb57dc95224 + name: + description: + - Name of the public IP prefix. + returned: always + type: str + sample: prefix57dc95224 + type: + description: + - Resource type. + returned: always + type: str + sample: "Microsoft.Network/publicIPPrefixes" + location: + description: + - Resource location. + returned: always + type: str + sample: eastus + tags: + description: + - Resource tags. + returned: always + type: dict + sample: { + "delete": "on-exit", + "testing": "testing" + } + public_ip_address_version: + description: + - The public IP address version. + - Possible values are C(IPv4) and C(IPv6). + returned: always + type: str + sample: IPv4 + ip_tags: + description: + - The list of tags associated with the public IP prefixes. + returned: always + type: list + sample: [ + { + "type": "FirstPartyUsage", + "value": "Storage" + } + ] + provisioning_state: + description: + - The provisioning state of the PublicIP Prefix resource. + - Possible values is C(Succeeded). + returned: always + type: str + sample: Succeeded + etag: + description: + - A unique read-only string that changes whenever the resource is updated. + returned: always + type: str + sample: "W/'1905ee13-7623-45b1-bc6b-4a12b2fb9d15'" + sku: + description: + - The public IP prefix SKU. + returned: always + type: dict + sample: {'name': 'standard', 'tier': 'Regional'} + zones: + description: + - A list of availability zones denoting the IP allocated for the resource needs to come from. + returned: always + type: list + sample: ['1', '2'] + prefix_length: + description: + - The Length of the Public IP Prefix. + type: int + returned: always + sample: 29 + extended_location: + description: + - The extended location of the public ip address. + type: str + returned: always + sample: 'eastus2' + custom_ip_prefix: + description: + - The customIpPrefix that this prefix is associated with. + type: dict + returned: always + sample: {} + public_ip_addresses: + description: + - The list of all referenced PublicIPAddresses. + type: list + sample: [] + resource_guid: + description: + - The resource GUID property of the public IP prefix resource. + type: str + sample: "47cafa04-851d-4579-894d-74ad6afe3233" + ip_prefix: + description: + - The allocated Prefix. + type: str + sample: 20.199.95.80/29 +''' +try: + from azure.core.exceptions import ResourceNotFoundError +except Exception: + # This is handled in azure_rm_common + pass + +from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + +AZURE_OBJECT_CLASS = 'PublicIpPrefix' + + +class AzureRMPublicIPPrefixInfo(AzureRMModuleBase): + + def __init__(self): + + self.module_arg_spec = dict( + name=dict(type='str'), + resource_group=dict(type='str'), + tags=dict(type='list', elements='str') + ) + + self.results = dict( + changed=False, + ) + + self.name = None + self.resource_group = None + self.tags = None + + super(AzureRMPublicIPPrefixInfo, self).__init__(self.module_arg_spec, + supports_check_mode=True, + supports_tags=False, + facts_module=True) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + result = [] + if self.name is not None and self.resource_group is not None: + result = self.get_item() + elif self.resource_group: + result = self.list_resource_group() + else: + result = self.list_all() + + raw = self.filter(result) + + self.results['publicipprefixes'] = self.format(raw) + + return self.results + + def format(self, raw): + return [self.prefix_to_dict(item) for item in raw] + + def filter(self, response): + return [item for item in response if self.has_tags(item.tags, self.tags)] + + def prefix_to_dict(self, prefix): + result = dict( + id=prefix.id, + name=prefix.name, + tags=prefix.tags, + type=prefix.type, + location=prefix.location, + public_ip_address_version=prefix.public_ip_address_version, + prefix_length=prefix.prefix_length, + provisioning_state=prefix.provisioning_state, + etag=prefix.etag, + zones=prefix.zones, + sku=dict(), + ip_tags=list(), + custom_ip_prefix=dict(), + ip_prefix=prefix.ip_prefix, + resource_guid=prefix.resource_guid, + public_ip_addresses=list(), + extended_location=prefix.extended_location + ) + if prefix.public_ip_addresses: + result['public_ip_addresses'] = [x.id for x in prefix.public_ip_addresses] + if prefix.sku: + result['sku']['name'] = prefix.sku.name + result['sku']['tier'] = prefix.sku.tier + if prefix.custom_ip_prefix: + result['custom_ip_prefix']['id'] = prefix.custom_ip_prefix.id + if prefix.ip_tags: + result['ip_tags'] = [dict(type=x.ip_tag_type, value=x.tag) for x in prefix.ip_tags] + return result + + def get_item(self): + self.log('Get properties for {0}'.format(self.name)) + item = None + try: + item = self.network_client.public_ip_prefixes.get(self.resource_group, self.name) + except ResourceNotFoundError: + pass + return [item] if item else [] + + def list_resource_group(self): + self.log('List items in resource groups') + try: + response = self.network_client.public_ip_prefixes.list(self.resource_group) + except ResourceNotFoundError as exc: + self.fail("Error listing items in resource groups {0} - {1}".format(self.resource_group, str(exc))) + return response + + def list_all(self): + self.log('List all items') + try: + response = self.network_client.public_ip_prefixes.list_all() + except ResourceNotFoundError as exc: + self.fail("Error listing all items - {0}".format(str(exc))) + return response + + +def main(): + AzureRMPublicIPPrefixInfo() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault.py index b2c45b2d5..818d846bf 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault.py @@ -208,7 +208,6 @@ class AzureRMRecoveryServicesVault(AzureRMModuleBaseExt): response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) old_response = self.get_resource() @@ -247,10 +246,12 @@ class AzureRMRecoveryServicesVault(AzureRMModuleBaseExt): self.log('Error in creating Azure Recovery Service Vault.') self.fail('Error in creating Azure Recovery Service Vault {0}'.format(str(e))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault_info.py index 6b2dee776..bc26db2dd 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_recoveryservicesvault_info.py @@ -12,9 +12,9 @@ DOCUMENTATION = \ --- module: azure_rm_recoveryservicesvault_info version_added: '1.1.0' -short_description: Get Azure Recovery Services vault Details +short_description: Get or list the Azure Recovery Services vault Details description: - - Get Azure Recovery Services vault Details. + - Get or list the Azure Recovery Services vault Details. options: resource_group: description: @@ -23,8 +23,8 @@ options: type: str name: description: + - If this parameter is not configured, all Vaults in the resource group are listed. - The name of the Azure Recovery Service Vault. - required: true type: str extends_documentation_fragment: - azure.azcollection.azure @@ -34,6 +34,10 @@ author: ''' EXAMPLES = ''' +- name: List all Azure Recovery Services Vault in same resource group + azure_rm_recoveryservicesvault_info: + resource_group: 'myResourceGroup' + - name: Get Azure Recovery Services Vault Details. azure_rm_recoveryservicesvault_info: resource_group: 'myResourceGroup' @@ -110,7 +114,6 @@ class AzureRMRecoveryServicesVaultInfo(AzureRMModuleBaseExt): ), name=dict( type='str', - required=True ) ) @@ -137,13 +140,21 @@ class AzureRMRecoveryServicesVaultInfo(AzureRMModuleBaseExt): return '2016-06-01' def get_url(self): - return '/subscriptions/' \ - + self.subscription_id \ - + '/resourceGroups/' \ - + self.resource_group \ - + '/providers/Microsoft.RecoveryServices' \ - + '/vaults' + '/' \ - + self.name + if self.name is not None: + return '/subscriptions/' \ + + self.subscription_id \ + + '/resourceGroups/' \ + + self.resource_group \ + + '/providers/Microsoft.RecoveryServices' \ + + '/vaults' + '/' \ + + self.name + else: + return '/subscriptions/' \ + + self.subscription_id \ + + '/resourceGroups/' \ + + self.resource_group \ + + '/providers/Microsoft.RecoveryServices' \ + + '/vaults' def exec_module(self, **kwargs): for key in list(self.module_arg_spec.keys()): @@ -160,10 +171,9 @@ class AzureRMRecoveryServicesVaultInfo(AzureRMModuleBaseExt): response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) - changed = True + changed = False response = self.get_recovery_service_vault_info() self.results['response'] = response @@ -188,10 +198,12 @@ class AzureRMRecoveryServicesVaultInfo(AzureRMModuleBaseExt): self.log('Error in fetching Azure Recovery Service Vault Details.') self.fail('Error in fetching Azure Recovery Service Vault Details {0}'.format(str(e))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache.py index b93a52992..5a231cc3e 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache.py @@ -510,8 +510,7 @@ class AzureRMRedisCaches(AzureRMModuleBase): # get management client self._client = self.get_mgmt_svc_client(RedisManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - api_version='2018-03-01', - is_track2=True) + api_version='2018-03-01') # set location resource_group = self.get_resource_group(self.resource_group) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache_info.py index 44e47f4d5..782fb0417 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscache_info.py @@ -269,8 +269,7 @@ class AzureRMRedisCacheInfo(AzureRMModuleBase): # get management client self._client = self.get_mgmt_svc_client(RedisManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - api_version='2018-03-01', - is_track2=True) + api_version='2018-03-01') if self.name: self.results['rediscaches'] = self.get_item() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscachefirewallrule.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscachefirewallrule.py index 67b2c90b6..b0fbdb43e 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscachefirewallrule.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_rediscachefirewallrule.py @@ -176,8 +176,7 @@ class AzureRMRedisCacheFirewallRule(AzureRMModuleBase): # get management client self._client = self.get_mgmt_svc_client(RedisManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - api_version='2018-03-01', - is_track2=True) + api_version='2018-03-01') # check if the firewall rule exists old_response = self.get() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationassignment.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationassignment.py index a70542f80..8cffc7999 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationassignment.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationassignment.py @@ -141,11 +141,9 @@ class AzureRMRegistrationAssignment(AzureRMModuleBaseExt): ), properties=dict( type='dict', - disposition='/properties', options=dict( registration_definition_id=dict( type='str', - disposition='registration_definition_id', required=True ) ) @@ -188,7 +186,6 @@ class AzureRMRegistrationAssignment(AzureRMModuleBaseExt): self.mgmt_client = self.get_mgmt_svc_client(ManagedServicesClient, base_url=self._cloud_environment.endpoints.resource_manager, api_version='2019-09-01', - is_track2=True, suppress_subscription_id=True) old_response = self.get_resource() @@ -200,11 +197,9 @@ class AzureRMRegistrationAssignment(AzureRMModuleBaseExt): if self.state == 'absent': self.to_do = Actions.Delete else: - modifiers = {} - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - self.results['compare'] = [] - if not self.default_compare(modifiers, self.body, old_response, '', self.results): + if self.body.get('properties') is not None and \ + self.body['properties']['registration_definition_id'] != \ + old_response['properties']['registration_definition_id']: self.to_do = Actions.Update if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationassignment_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationassignment_info.py index ef8875f7c..2dabe949e 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationassignment_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationassignment_info.py @@ -126,7 +126,6 @@ class AzureRMRegistrationAssignmentInfo(AzureRMModuleBase): self.mgmt_client = self.get_mgmt_svc_client(ManagedServicesClient, base_url=self._cloud_environment.endpoints.resource_manager, api_version='2020-09-01', - is_track2=True, suppress_subscription_id=True) if (self.scope is not None and self.registration_assignment_id is not None): @@ -168,12 +167,14 @@ class AzureRMRegistrationAssignmentInfo(AzureRMModuleBase): def format_item(self, item): if hasattr(item, 'as_dict'): return [item.as_dict()] - else: + elif item is not None: result = [] items = list(item) for tmp in items: result.append(tmp.as_dict()) return result + else: + return [] def main(): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationdefinition.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationdefinition.py index 0d89da3a9..0582df4cf 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationdefinition.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationdefinition.py @@ -261,63 +261,51 @@ class AzureRMRegistrationDefinition(AzureRMModuleBaseExt): ), properties=dict( type='dict', - disposition='/properties', options=dict( description=dict( type='str', - disposition='description' ), authorizations=dict( type='list', - disposition='authorizations', required=True, elements='dict', options=dict( principal_id=dict( type='str', - disposition='principal_id', required=True ), role_definition_id=dict( type='str', - disposition='role_definition_id', required=True ) ) ), registration_definition_name=dict( type='str', - disposition='registration_definition_name' ), managed_by_tenant_id=dict( type='str', - disposition='managed_by_tenant_id', required=True ) ) ), plan=dict( type='dict', - disposition='/plan', options=dict( name=dict( type='str', - disposition='name', required=True ), publisher=dict( type='str', - disposition='publisher', required=True ), product=dict( type='str', - disposition='product', required=True ), version=dict( type='str', - disposition='version', required=True ) ) @@ -349,8 +337,6 @@ class AzureRMRegistrationDefinition(AzureRMModuleBaseExt): elif kwargs[key] is not None: self.body[key] = kwargs[key] - self.inflate_parameters(self.module_arg_spec, self.body, 0) - if self.registration_definition_id is None: self.registration_definition_id = str(uuid.uuid4()) @@ -365,7 +351,6 @@ class AzureRMRegistrationDefinition(AzureRMModuleBaseExt): self.mgmt_client = self.get_mgmt_svc_client(ManagedServicesClient, base_url=self._cloud_environment.endpoints.resource_manager, api_version='2019-09-01', - is_track2=True, suppress_subscription_id=True) old_response = self.get_resource() @@ -377,11 +362,16 @@ class AzureRMRegistrationDefinition(AzureRMModuleBaseExt): if self.state == 'absent': self.to_do = Actions.Delete else: - modifiers = {} - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - self.results['compare'] = [] - if not self.default_compare(modifiers, self.body, old_response, '', self.results): + if self.body.get('plan') is not None: + if old_response.get('plan') is not None and \ + not all(self.body['plan'][item] == old_response['plan'].get(item) + for item in self.body['plan'].keys()): + self.to_do = Actions.Update + else: + self.to_do = Actions.Update + elif (self.body.get('properties') is not None and + not all(self.body['properties'][item] == old_response['properties'].get(item) + for item in self.body['properties'].keys())): self.to_do = Actions.Update if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationdefinition_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationdefinition_info.py index 1c095420c..cad5b8e2c 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationdefinition_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_registrationdefinition_info.py @@ -190,7 +190,6 @@ class AzureRMRegistrationDefinitionInfo(AzureRMModuleBase): self.mgmt_client = self.get_mgmt_svc_client(ManagedServicesClient, base_url=self._cloud_environment.endpoints.resource_manager, api_version='2019-09-01', - is_track2=True, suppress_subscription_id=True) if self.registration_definition_id is not None: @@ -223,12 +222,14 @@ class AzureRMRegistrationDefinitionInfo(AzureRMModuleBase): def format_item(self, item): if hasattr(item, 'as_dict'): return [item.as_dict()] - else: + elif item is not None: result = [] items = list(item) for tmp in items: result.append(tmp.as_dict()) return result + else: + return [] def main(): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resource.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resource.py index a3a0544e2..4e786332f 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resource.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resource.py @@ -325,7 +325,6 @@ class AzureRMResource(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.state == 'absent': @@ -416,10 +415,15 @@ class AzureRMResource(AzureRMModuleBase): self.polling_timeout, self.polling_interval) if self.state == 'present' and self.method != 'DELETE': - try: - response = json.loads(response.body()) - except Exception: + if hasattr(response, 'body'): + try: + response = json.loads(response.body()) + except Exception: + response = response.body() + elif hasattr(response, 'context'): response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) else: response = None diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resource_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resource_info.py index eb5cd93e4..176be9531 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resource_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_resource_info.py @@ -76,6 +76,13 @@ options: description: - Subresource name. type: str + tags: + description: + - A dictionary of tags to filter on. + - Each key-value pair in the dictionary specifies a tag name and its value to filter on differente resources. + type: dict + required: false + default: {} extends_documentation_fragment: - azure.azcollection.azure @@ -98,6 +105,14 @@ EXAMPLES = ''' azure_rm_resource_info: resource_group: "{{ resource_group }}" resource_type: resources + +- name: Get all snapshots of all resource groups of a subscription but filtering with two tags. + azure_rm_resource_info: + provider: compute + resource_type: snapshots + tags: + enviroment: dev + department: hr ''' RETURN = ''' @@ -346,7 +361,8 @@ class AzureRMResourceInfo(AzureRMModuleBase): ), api_version=dict( type='str' - ) + ), + tags=dict(type='dict', default={}) ) # store the results of the module operation self.results = dict( @@ -370,7 +386,6 @@ class AzureRMResourceInfo(AzureRMModuleBase): for key in self.module_arg_spec: setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) if self.url is None: @@ -450,6 +465,12 @@ class AzureRMResourceInfo(AzureRMModuleBase): self.fail('Failed to parse response: ' + str(e)) if not skiptoken: break + if kwargs['tags']: + filtered_response = [] + for resource in self.results['response']: + if all(resource.get('tags', {}).get(tag_key) == tag_value for tag_key, tag_value in kwargs['tags'].items()): + filtered_response.append(resource) + self.results['response'] = filtered_response return self.results diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_roledefinition.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_roledefinition.py index 8683142d8..86f085099 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_roledefinition.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_roledefinition.py @@ -224,7 +224,6 @@ class AzureRMRoleDefinition(AzureRMModuleBase): # get management client self._client = self.get_mgmt_svc_client(AuthorizationManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version="2018-01-01-preview") self.scope = self.build_scope() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_roledefinition_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_roledefinition_info.py index ce8ee238e..8f7c9ac4d 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_roledefinition_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_roledefinition_info.py @@ -194,7 +194,6 @@ class AzureRMRoleDefinitionInfo(AzureRMModuleBase): # get management client self._client = self.get_mgmt_svc_client(AuthorizationManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version="2018-01-01-preview") if self.id: diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_securitygroup.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_securitygroup.py index 8b25449ca..bf247e216 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_securitygroup.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_securitygroup.py @@ -44,8 +44,11 @@ options: type: str choices: - Udp + - UDP - Tcp + - TCP - Icmp + - ICMP - "*" default: "*" source_port_range: @@ -164,8 +167,11 @@ options: type: str choices: - Udp + - UDP - Tcp + - TCP - Icmp + - ICMP - "*" default: "*" source_port_range: @@ -722,7 +728,7 @@ def create_network_security_group_dict(nsg): rule_spec = dict( name=dict(type='str', required=True), description=dict(type='str'), - protocol=dict(type='str', choices=['Udp', 'Tcp', 'Icmp', '*'], default='*'), + protocol=dict(type='str', choices=['Udp', 'UDP', 'Tcp', 'TCP', 'Icmp', 'ICMP', '*'], default='*'), source_port_range=dict(type='raw', default='*'), destination_port_range=dict(type='raw', default='*'), source_address_prefix=dict(type='raw', default='*'), diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_servicebus_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_servicebus_info.py index 5ccd4dea7..b736eb6c2 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_servicebus_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_servicebus_info.py @@ -378,6 +378,25 @@ servicebuses: "type": "Microsoft.ServiceBus/Namespaces/Queues/AuthorizationRules" } } + private_endpoint_connections: + description: + - Properties of the PrivateEndpointConnection. + type: list + returned: always + sample: [{ + "id": "/subscriptions/xxxxxx/resourceGroups/myRG/providers/Microsoft.ServiceBus/namespaces/fredVM/privateEndpointConnections/xxxxxxxx", + "name": "xxxxxx", + "private_endpoint": { + "id": "/subscriptions/xxxxx/resourceGroups/myRG/providers/Microsoft.Network/privateEndpoints/fredprivateendpoint" + }, + "private_link_service_connection_state": { + "description": "Auto-Approved", + "status": "Approved" + }, + "provisioning_state": "Succeeded", + "type": "Microsoft.ServiceBus/Namespaces/PrivateEndpointConnections" + }] + ''' try: @@ -385,7 +404,6 @@ try: except Exception: # This is handled in azure_rm_common pass - from ansible.module_utils.common.dict_transformations import _camel_to_snake from ansible.module_utils._text import to_native from datetime import datetime, timedelta @@ -484,6 +502,8 @@ class AzureRMServiceBusInfo(AzureRMModuleBase): result[attribute] = to_native(value) elif attribute == 'max_size_in_megabytes': result['max_size_in_mb'] = value + elif attribute == 'private_endpoint_connections': + result['private_endpoint_connections'] = [item.as_dict() for item in value] else: result[attribute] = value if self.show_sas_policies and self.type != 'subscription': diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_snapshot.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_snapshot.py index bd3acd9bd..b3db0a0d7 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_snapshot.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_snapshot.py @@ -142,24 +142,17 @@ class AzureRMSnapshots(AzureRMModuleBaseExt): self.module_arg_spec = dict( resource_group=dict( type='str', - updatable=False, - disposition='resourceGroupName', required=True ), name=dict( type='str', - updatable=False, - disposition='snapshotName', required=True ), location=dict( - type='str', - updatable=False, - disposition='/' + type='str' ), sku=dict( type='dict', - disposition='/', options=dict( name=dict( type='str', @@ -174,29 +167,22 @@ class AzureRMSnapshots(AzureRMModuleBaseExt): ), os_type=dict( type='str', - disposition='/properties/osType', choices=['Windows', 'Linux'] ), incremental=dict(type='bool', default=False), creation_data=dict( type='dict', - disposition='/properties/creationData', options=dict( create_option=dict( type='str', - disposition='createOption', choices=['Import', 'Copy'], ), source_uri=dict( - type='str', - disposition='sourceUri', - purgeIfNone=True + type='str' ), source_id=dict( - type='str', - disposition='sourceResourceId', - purgeIfNone=True + type='str' ) ) ), @@ -233,22 +219,27 @@ class AzureRMSnapshots(AzureRMModuleBaseExt): supports_tags=True) def exec_module(self, **kwargs): - for key in list(self.module_arg_spec.keys()): + for key in list(self.module_arg_spec.keys()) + ['tags']: if hasattr(self, key): setattr(self, key, kwargs[key]) elif kwargs[key] is not None: if key == 'incremental': self.body['properties']['incremental'] = kwargs[key] + elif key == 'os_type': + self.body['properties']['osType'] = kwargs[key] + elif key == 'creation_data': + self.body['properties']['creationData'] = dict() + if kwargs[key].get('create_option') is not None: + self.body['properties']['creationData']['createOption'] = kwargs[key].get('create_option') + self.body['properties']['creationData']['sourceUri'] = kwargs[key].get('source_uri') + self.body['properties']['creationData']['sourceResourceId'] = kwargs[key].get('source_id') else: self.body[key] = kwargs[key] - self.inflate_parameters(self.module_arg_spec, self.body, 0) - old_response = None response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) resource_group = self.get_resource_group(self.resource_group) @@ -283,12 +274,22 @@ class AzureRMSnapshots(AzureRMModuleBaseExt): if self.state == 'absent': self.to_do = Actions.Delete else: - modifiers = {} - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - self.results['compare'] = [] - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - if not self.default_compare(modifiers, self.body, old_response, '', self.results): + if self.body.get('sku') is not None and \ + not all(self.body['sku'][item] == old_response['sku'].get(item) for item in self.body['sku'].keys()): + self.to_do = Actions.Update + if self.body['properties'].get('incremental') is not None and \ + self.body['properties']['incremental'] != old_response['properties']['incremental']: + self.to_do = Actions.Update + if self.body['properties'].get('osType') is not None and \ + self.body['properties']['osType'] != old_response['properties'].get('osType'): + self.to_do = Actions.Update + if self.body['properties'].get('creationData') is not None and \ + not all(self.body['properties']['creationData'][item] == old_response['properties']['creationData'].get(item) + for item in self.body['properties']['creationData'].keys()): + self.to_do = Actions.Update + + update_tags, self.body['tags'] = self.update_tags(old_response.get('tags')) + if update_tags: self.to_do = Actions.Update if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance.py index b59421062..631931afd 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance.py @@ -262,7 +262,7 @@ sql_managed_instance: sample: "/subscription/xxx-xxx/resourceGroups/testRG/providers/Microsoft.Sql/managedInstances/fredsqlinstance" name: description: - - SQL manged instance name. + - SQL managed instance name. returned: always type: str sample: testmanagedinstance diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance_info.py index 5434cb6a4..3a85d00ac 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sqlmanagedinstance_info.py @@ -14,7 +14,7 @@ module: azure_rm_sqlmanagedinstance_info version_added: "0.15.0" short_description: Get Azure SQL managed instance facts description: - - Get facts of Azure SQL manged instance facts. + - Get facts of Azure SQL managed instance facts. options: resource_group: @@ -49,7 +49,7 @@ EXAMPLES = ''' azure_rm_sqlmanagedinstance_info: resource_group: testrg -- name: List SQL manged instance by subscription and filter by tags +- name: List SQL managed instance by subscription and filter by tags azure_rm_sqlmanagedinstance_info: tags: - foo @@ -70,7 +70,7 @@ sql_managed_instance: sample: "/subscription/xxx-xxx/resourceGroups/testRG/providers/Microsoft.Sql/managedInstances/fredsqlinstance" name: description: - - SQL manged instance name. + - SQL managed instance name. returned: always type: str sample: testmanagedinstance diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey.py new file mode 100644 index 000000000..1c7a473b8 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey.py @@ -0,0 +1,266 @@ +#!/usr/bin/python +# +# Copyright (c) 2023 xuzhang3 (@xuzhang3), Fred-sun (@Fred-sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_sshpublickey +version_added: "2.0.0" +short_description: Manage ssh public key with vm +description: + - Create, update or delete the vm public key. +options: + resource_group: + description: + - Name of resource group. + required: true + type: str + location: + description: + - Valid Azure location. Defaults to location of the resource group. + type: str + name: + description: + - The name of the SSH public key. + required: true + type: str + public_key: + description: + - SSH public key used to authenticate to a virtual machine through ssh. + - If this property is not initially provided when the resource is created, the publicKey property will be populated when generateKeyPair is called. + - If the public key is provided upon resource creation, the provided public key needs to be at least 2048-bit and in ssh-rsa format. + type: str + state: + description: + - State of the SSH Public Key. Use C(present) to create or update and C(absent) to delete. + default: present + type: str + choices: + - absent + - present + +extends_documentation_fragment: + - azure.azcollection.azure + - azure.azcollection.azure_tags + +author: + - xuzhang3 (@xuzhang3) + - Fred-sun (@Fred-sun) + +''' + +EXAMPLES = ''' +- name: Create a SSH Public Key + azure_rm_sshpublickey: + resource_group: myResourceGroup + name: mySshPublicKey + public_key: "ssh-rsa ****************************@test.com" + tags: + testing: testing + delete: on-exit + +- name: Generate a pair SSH Public Key + azure_rm_sshpublickey: + resource_group: myResourceGroup + name: mySshPublicKey + tags: + testing: testing + delete: on-exit + +- name: Delete a SSH Public Key + azure_rm_sshpublickey: + resource_group: myResourceGroup + name: mySshPublicKey + state: absent +''' +RETURN = ''' +state: + description: + - Current state of the SSH Public Key. + returned: always + type: complex + contains: + id: + description: + - Resource ID. + returned: always + type: str + sample: /subscriptions/xxxx/resourceGroups/xxx/providers/Microsoft.Compute/sshPublicKeys/mySshPublicKeyName + location: + description: + - The Geo-location where the resource lives. + returned: always + type: str + sample: eastus + name: + description: + - Resource name. + returned: always + type: str + sample: mySshPublicKey + tags: + description: + - Resource tags, such as { 'tags1':'value1' }. + returned: always + type: dict + sample: { 'key1':'value1' } + public_key: + description: + - SSH public key used to authenticate to a virtual machine through ssh. + returned: always + type: str + sample: "ssh-rsa **************@test.com" +''' + +try: + from azure.core.exceptions import ResourceNotFoundError +except ImportError: + # This is handled in azure_rm_common + pass + +from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + + +class AzureRMSshPublicKey(AzureRMModuleBase): + + def __init__(self): + + self.module_arg_spec = dict( + resource_group=dict(type='str', required=True), + name=dict(type='str', required=True), + state=dict(type='str', default='present', choices=['present', 'absent']), + location=dict(type='str'), + public_key=dict(type='str'), + ) + + self.resource_group = None + self.name = None + self.state = None + self.location = None + self.public_key = None + + self.body = dict() + + self.results = dict( + changed=False, + state=dict() + ) + + super(AzureRMSshPublicKey, self).__init__(self.module_arg_spec, + supports_tags=True, + supports_check_mode=True) + + def exec_module(self, **kwargs): + + for key in list(self.module_arg_spec.keys()) + ['tags']: + setattr(self, key, kwargs[key]) + for key in ['tags', 'public_key']: + self.body[key] = kwargs[key] + + resource_group = self.get_resource_group(self.resource_group) + if not self.location: + # Set default location + self.location = resource_group.location + + changed = False + results = dict() + + old_response = self.get_by_name() + + if old_response is not None: + if self.state == 'present': + update_tags, self.body['tags'] = self.update_tags(old_response['tags']) + if update_tags or self.body['public_key'] is not None and self.body['public_key'] != old_response['public_key']: + changed = True + if not self.check_mode: + results = self.update_ssh_public_key(self.body) + else: + results = old_response + else: + changed = True + if not self.check_mode: + results = self.delete_ssh_public_key() + else: + if self.state == 'present': + changed = True + if not self.check_mode: + self.body['location'] = self.location + results = self.create_ssh_public_key(self.body) + else: + changed = False + self.log("The SSH Public Key is not exists") + + self.results['changed'] = changed + self.results['state'] = results + + return self.results + + def get_by_name(self): + response = None + try: + response = self.compute_client.ssh_public_keys.get(self.resource_group, self.name) + + except ResourceNotFoundError as exec: + self.log("Failed to get ssh public keys, Exception as {0}".format(exec)) + + return self.to_dict(response) + + def create_ssh_public_key(self, body): + response = None + try: + if body.get('public_key') is None: + response = self.to_dict(self.compute_client.ssh_public_keys.create(self.resource_group, self.name, body)) + response.update(self.to_dict(self.compute_client.ssh_public_keys.generate_key_pair(self.resource_group, self.name))) + else: + response = self.to_dict(self.compute_client.ssh_public_keys.create(self.resource_group, self.name, body)) + except Exception as exc: + self.fail("Error creating SSH Public Key {0} - {1}".format(self.name, str(exc))) + + return response + + def update_ssh_public_key(self, body): + response = None + try: + response = self.compute_client.ssh_public_keys.update(self.resource_group, self.name, body) + except Exception as exc: + self.fail("Error updating SSH Public Key {0} - {1}".format(self.name, str(exc))) + return self.to_dict(response) + + def delete_ssh_public_key(self): + try: + self.compute_client.ssh_public_keys.delete(self.resource_group, self.name) + except Exception as exc: + self.fail("Error deleting SSH Public Key {0} - {1}".format(self.name, str(exc))) + + def to_dict(self, body): + results = None + if body is not None: + if hasattr(body, 'private_key'): + results = dict( + private_key=body.private_key, + id=body.id, + public_key=body.public_key + ) + else: + results = dict( + id=body.id, + name=body.name, + location=body.location, + tags=body.tags, + public_key=body.public_key + ) + return results + + +def main(): + AzureRMSshPublicKey() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey_info.py new file mode 100644 index 000000000..3a84f2e74 --- /dev/null +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_sshpublickey_info.py @@ -0,0 +1,196 @@ +#!/usr/bin/python +# +# Copyright (c) 2023 xuzhang3 (@xuzhang3), Fred-sun (@Fred-sun) +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: azure_rm_sshpublickey_info + +version_added: "2.0.0" + +short_description: Get Ssh Public Key with VM facts + +description: + - Get Ssh Public Key with VM facts + +options: + resource_group: + description: + - Name of the resource group. + type: str + name: + description: + - Name of the SSH Public Key. + type: str + tags: + description: + - Limit results by providing a list of tags. Format tags as 'key' or 'key:value'. + type: list + elements: str + +extends_documentation_fragment: + - azure.azcollection.azure + +author: + - xuzhang3 (@xuzhang3) + - Fred-sun (@Fred-sun) + +''' + +EXAMPLES = ''' +- name: Get facts of the VM's ssh public key by name + azure_rm_sshpublickey_info: + resource_group: myResourceGroup + name: mysshpublickey + +- name: Get facts of the VM's ssh public key by resource group + azure_rm_sshpublickey_info: + resource_group: myResourceGroup + +- name: Get facts by tags + azure_rm_sshpublickey_info: + resource_group: myResourceGroup + tags: + - testing + - foo:bar +''' + +RETURN = ''' +ssh_keys: + description: + - Current state of the SSH Public Key. + returned: always + type: complex + contains: + id: + description: + - Resource ID. + returned: always + type: str + sample: /subscriptions/xxxx/resourceGroups/xxx/providers/Microsoft.Compute/sshPublicKeys/mySshPublicKeyName + location: + description: + - The Geo-location where the resource lives. + returned: always + type: str + sample: eastus + name: + description: + - Resource name. + returned: always + type: str + sample: mySshPublicKey + tags: + description: + - Resource tags, such as { 'tags1':'value1' }. + returned: always + type: dict + sample: { 'key1':'value1' } + public_key: + description: + - SSH public key used to authenticate to a virtual machine through ssh. + returned: always + type: str + sample: "ssh-rsa **************@test.com" +''' + +try: + from azure.core.exceptions import ResourceNotFoundError +except Exception: + # This is handled in azure_rm_common + pass + +from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase + + +class AzureRMSshPublicKeyInfo(AzureRMModuleBase): + + def __init__(self): + + self.module_arg_spec = dict( + resource_group=dict(type='str'), + name=dict(type='str'), + tags=dict(type='list', elements='str') + ) + + self.results = dict( + changed=False, + ssh_keys=[] + ) + + self.resource_group = None + self.name = None + self.tags = None + + super(AzureRMSshPublicKeyInfo, self).__init__(self.module_arg_spec, + supports_check_mode=True, + supports_tags=False, + facts_module=True) + + def exec_module(self, **kwargs): + for key in self.module_arg_spec: + setattr(self, key, kwargs[key]) + + if self.name and self.resource_group: + response = [self.get_by_name()] + elif self.resource_group: + response = self.list_by_resourcegroup() + else: + response = self.list_all() + + self.results['ssh_keys'] = [self.to_dict(item) for item in response if response is not None] + + return self.results + + def get_by_name(self): + response = None + try: + response = self.compute_client.ssh_public_keys.get(self.resource_group, self.name) + + except ResourceNotFoundError as exec: + self.log("Failed to get ssh public keys, Exception as {0}".format(exec)) + + return response + + def list_by_resourcegroup(self): + response = None + try: + response = self.compute_client.ssh_public_keys.list_by_resource_group(self.resource_group) + except Exception as exec: + self.log("Faild to list ssh public keys by resource group, exception as {0}".format(exec)) + return response + + def list_all(self): + response = None + try: + response = self.compute_client.ssh_public_keys.list_by_subscription() + except Exception as exc: + self.fail("Failed to list all items - {0}".format(str(exc))) + + return response + + def to_dict(self, body): + results = dict() + if body is not None and self.has_tags(body.tags, self.tags): + results = dict( + id=body.id, + name=body.name, + location=body.location, + tags=body.tags, + public_key=body.public_key + ) + return results + + +def main(): + AzureRMSshPublicKeyInfo() + + +if __name__ == '__main__': + main() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount.py index c7c280ef4..42c5b2e42 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount.py @@ -87,6 +87,10 @@ options: - Account HierarchicalNamespace enabled if sets to true. - When I(is_hns_enabled=True), I(kind) cannot be C(Storage). type: bool + enable_nfs_v3: + description: + - NFS 3.0 protocol. + type: bool access_tier: description: - The access tier for this storage account. Required when I(kind=BlobStorage). @@ -240,6 +244,13 @@ options: description: - The absolute path of the custom 404 page. type: str + large_file_shares_state: + description: + - Allow large file shares if sets to Enabled. + type: str + choices: + - Enabled + - Disabled encryption: description: - The encryption settings on the storage account. @@ -333,6 +344,16 @@ EXAMPLES = ''' tags: testing: testing +- name: Create storage account with I(enable_nfs_v3=false) + azure_rm_storageaccount: + resource_group: myResourceGroup + name: c1h0002 + account_type: Premium_LRS + kind: FileStorage + enable_nfs_v3: false + static_website: + enabled: true + - name: configure firewall and virtual networks azure_rm_storageaccount: resource_group: myResourceGroup @@ -462,6 +483,12 @@ state: type: bool returned: always sample: true + enable_nfs_v3: + description: + - NFS 3.0 protocol. + type: bool + returned: always + sample: false location: description: - Valid Azure location. Defaults to location of the resource group. @@ -599,6 +626,12 @@ state: returned: always type: str sample: "Microsoft.Storage/storageAccounts" + large_file_shares_state: + description: + - Allow large file shares if sets to Enabled. + type: str + returned: always + sample: Enabled static_website: description: - Static website configuration for the storage account. @@ -711,6 +744,8 @@ class AzureRMStorageAccount(AzureRMModuleBase): blob_cors=dict(type='list', options=cors_rule_spec, elements='dict'), static_website=dict(type='dict', options=static_website_spec), is_hns_enabled=dict(type='bool'), + large_file_shares_state=dict(type='str', choices=['Enabled', 'Disabled']), + enable_nfs_v3=dict(type='bool'), encryption=dict( type='dict', options=dict( @@ -766,6 +801,8 @@ class AzureRMStorageAccount(AzureRMModuleBase): self.static_website = None self.encryption = None self.is_hns_enabled = None + self.large_file_shares_state = None + self.enable_nfs_v3 = None super(AzureRMStorageAccount, self).__init__(self.module_arg_spec, supports_check_mode=True) @@ -870,6 +907,8 @@ class AzureRMStorageAccount(AzureRMModuleBase): allow_blob_public_access=account_obj.allow_blob_public_access, network_acls=account_obj.network_rule_set, is_hns_enabled=account_obj.is_hns_enabled if account_obj.is_hns_enabled else False, + enable_nfs_v3=account_obj.enable_nfs_v3 if hasattr(account_obj, 'enable_nfs_v3') else None, + large_file_shares_state=account_obj.large_file_shares_state, static_website=dict( enabled=False, index_document=None, @@ -1020,6 +1059,10 @@ class AzureRMStorageAccount(AzureRMModuleBase): self.results['changed'] = True self.update_network_rule_set() + if self.enable_nfs_v3 is not None and bool(self.enable_nfs_v3) != bool(self.account_dict.get('enable_nfs_v3')): + self.results['changed'] = True + self.account_dict['enable_nfs_v3'] = self.enable_nfs_v3 + if self.is_hns_enabled is not None and bool(self.is_hns_enabled) != bool(self.account_dict.get('is_hns_enabled')): self.results['changed'] = True self.account_dict['is_hns_enabled'] = self.is_hns_enabled @@ -1129,6 +1172,21 @@ class AzureRMStorageAccount(AzureRMModuleBase): except Exception as exc: self.fail("Failed to update access tier: {0}".format(str(exc))) + if self.large_file_shares_state is not None: + if self.large_file_shares_state != self.account_dict['large_file_shares_state']: + self.results['changed'] = True + self.account_dict['large_file_shares_state'] = self.large_file_shares_state + + if self.results['changed'] and not self.check_mode: + if self.large_file_shares_state == 'Disabled': + parameters = self.storage_models.StorageAccountUpdateParameters(large_file_shares_state=None) + else: + parameters = self.storage_models.StorageAccountUpdateParameters(large_file_shares_state=self.large_file_shares_state) + try: + self.storage_client.storage_accounts.update(self.resource_group, self.name, parameters) + except Exception as exc: + self.fail("Failed to update large_file_shares_state: {0}".format(str(exc))) + update_tags, self.account_dict['tags'] = self.update_tags(self.account_dict['tags']) if update_tags: self.results['changed'] = True @@ -1198,6 +1256,8 @@ class AzureRMStorageAccount(AzureRMModuleBase): allow_blob_public_access=self.allow_blob_public_access, encryption=self.encryption, is_hns_enabled=self.is_hns_enabled, + enable_nfs_v3=self.enable_nfs_v3, + large_file_shares_state=self.large_file_shares_state, tags=dict() ) if self.tags: @@ -1223,7 +1283,9 @@ class AzureRMStorageAccount(AzureRMModuleBase): allow_blob_public_access=self.allow_blob_public_access, encryption=self.encryption, is_hns_enabled=self.is_hns_enabled, - access_tier=self.access_tier) + enable_nfs_v3=self.enable_nfs_v3, + access_tier=self.access_tier, + large_file_shares_state=self.large_file_shares_state) self.log(str(parameters)) try: poller = self.storage_client.storage_accounts.begin_create(self.resource_group, self.name, parameters) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount_info.py index 75f179b6f..a530459dd 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageaccount_info.py @@ -211,6 +211,12 @@ storageaccounts: type: bool returned: always sample: true + enable_nfs_v3: + description: + - NFS 3.0 protocol. + type: bool + returned: always + sample: false kind: description: - The kind of storage. @@ -509,6 +515,12 @@ storageaccounts: returned: always type: dict sample: { "tag1": "abc" } + large_file_shares_state: + description: + - Allow large file shares if sets to Enabled. + type: str + returned: always + sample: Enabled static_website: description: - Static website configuration for the storage account. @@ -674,6 +686,8 @@ class AzureRMStorageAccountInfo(AzureRMModuleBase): public_network_access=account_obj.public_network_access, allow_blob_public_access=account_obj.allow_blob_public_access, is_hns_enabled=account_obj.is_hns_enabled if account_obj.is_hns_enabled else False, + large_file_shares_state=account_obj.large_file_shares_state, + enable_nfs_v3=account_obj.enable_nfs_v3 if hasattr(account_obj, 'enable_nfs_v3') else None, static_website=dict( enabled=False, index_document=None, diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageblob.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageblob.py index 868069f42..ad54b8422 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageblob.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_storageblob.py @@ -22,6 +22,17 @@ description: - the module can work exclusively in three modes, when C(batch_upload_src) is set, it is working in batch upload mode; when C(src) is set, it is working in upload mode and when C(dst) is set, it is working in dowload mode. options: + auth_mode: + description: + - The mode in which to run the command. C(login) mode will directly use your login credentials for the authentication. + - The legacy C(key) mode will attempt to query for an account key if no authentication parameters for the account are provided. + - Can also be set via the environment variable C(AZURE_STORAGE_AUTH_MODE). + default: key + type: str + choices: + - key + - login + version_added: "1.19.0" storage_account_name: description: - Name of the storage account to use. @@ -214,6 +225,7 @@ except ImportError: pass from ansible_collections.azure.azcollection.plugins.module_utils.azure_rm_common import AzureRMModuleBase +from ansible.module_utils.basic import env_fallback class AzureRMStorageBlob(AzureRMModuleBase): @@ -221,6 +233,12 @@ class AzureRMStorageBlob(AzureRMModuleBase): def __init__(self): self.module_arg_spec = dict( + auth_mode=dict( + type='str', + choices=['key', 'login'], + fallback=(env_fallback, ['AZURE_STORAGE_AUTH_MODE']), + default="key" + ), storage_account_name=dict(required=True, type='str', aliases=['account_name', 'storage_account']), blob=dict(type='str', aliases=['blob_name']), blob_type=dict(type='str', default='block', choices=['block', 'page']), @@ -281,7 +299,7 @@ class AzureRMStorageBlob(AzureRMModuleBase): # add file path validation - self.blob_service_client = self.get_blob_service_client(self.resource_group, self.storage_account_name) + self.blob_service_client = self.get_blob_service_client(self.resource_group, self.storage_account_name, self.auth_mode) self.container_obj = self.get_container() if self.blob: self.blob_obj = self.get_blob() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_subnet.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_subnet.py index ec7117c37..3fbe2b803 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_subnet.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_subnet.py @@ -124,6 +124,7 @@ options: required: True type: str choices: + - Microsoft.ContainerService/managedClusters - Microsoft.Web/serverFarms - Microsoft.ContainerInstance/containerGroups - Microsoft.Netapp/volumes @@ -352,7 +353,8 @@ delegations_spec = dict( 'Microsoft.DBforPostgreSQL/serversv2', 'Microsoft.AzureCosmosDB/clusters', 'Microsoft.MachineLearningServices/workspaces', 'Microsoft.DBforPostgreSQL/singleServers', 'Microsoft.DBforPostgreSQL/flexibleServers', 'Microsoft.DBforMySQL/serversv2', 'Microsoft.DBforMySQL/flexibleServers', 'Microsoft.ApiManagement/service', 'Microsoft.Synapse/workspaces', - 'Microsoft.PowerPlatform/vnetaccesslinks', 'Microsoft.Network/managedResolvers', 'Microsoft.Kusto/clusters'] + 'Microsoft.PowerPlatform/vnetaccesslinks', 'Microsoft.Network/managedResolvers', 'Microsoft.Kusto/clusters', + 'Microsoft.ContainerService/managedClusters'] ), actions=dict( type='list', diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachine.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachine.py index 35435b821..e845e2fa1 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachine.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachine.py @@ -229,6 +229,10 @@ options: description: - Size of OS disk in GB. type: int + os_disk_encryption_set: + description: + - ID of disk encryption set for OS disk. + type: str os_type: description: - Base type of operating system. @@ -245,7 +249,7 @@ options: data_disks: description: - Describes list of data disks. - - Use M(azure.azcollection.azure_rm_mangeddisk) to manage the specific disk. + - Use M(azure.azcollection.azure_rm_manageddisk) to manage the specific disk. type: list elements: dict suboptions: @@ -262,6 +266,10 @@ options: - Size can be changed only when the virtual machine is deallocated. - Not sure when I(managed_disk_id) defined. type: int + disk_encryption_set: + description: + - ID of disk encryption set for data disk. + type: str managed_disk_type: description: - Managed data disk type. @@ -409,6 +417,7 @@ options: zones: description: - A list of Availability Zones for your VM. + - A maximum of one zone can be configured. type: list elements: str license_type: @@ -569,6 +578,33 @@ options: description: - Specifies whether vTPM should be enabled on the virtual machine. type: bool + swap_os_disk: + description: + - The swap OS disk parameters. + type: dict + suboptions: + os_disk_id: + description: + - The swap OS disk's ID. + type: str + os_disk_name: + description: + - The swap OS disk's name. + type: str + os_disk_resource_group: + description: + - The swap OS disk's resource group. + type: str + additional_capabilities: + description: + - Enables or disables a capability on the virtual machine. + type: dict + suboptions: + ultra_ssd_enabled: + description: + - The flag that enables or disables a capability to have one or more managed data disks with UltraSSD_LRS storage account type on the VM. + - Managed disks with storage account type UltraSSD_LRS can be added to a virtual machine set only if this property is enabled. + type: bool extends_documentation_fragment: - azure.azcollection.azure @@ -760,6 +796,26 @@ EXAMPLES = ''' sku: '7.1' version: latest +- name: Update VM to swap OS disk + azure_rm_virtualmachine: + resource_group: "{{ resource_group }}" + name: "vmforimage{{ rpfx }}" + admin_username: testuser + ssh_password_enabled: false + managed_disk_type: Premium_LRS + ssh_public_keys: + - path: /home/testuser/.ssh/authorized_keys + key_data: "ssh-rsa *******************@qq.com" + vm_size: Standard_D4s_v3 + swap_os_disk: + os_disk_name: "{{ os_disk_name }}" + os_disk_resource_group: "{{ os_disk_resource_group }}" + image: + offer: 0001-com-ubuntu-server-focal + publisher: Canonical + sku: 20_04-lts + version: latest + - name: Power Off azure_rm_virtualmachine: resource_group: myResourceGroup @@ -856,6 +912,9 @@ azure_vm: type: dict sample: { "properties": { + "additional_capabilities": { + "ultra_ssd_enabled": false + }, "availabilitySet": { "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroup/myResourceGroup/providers/Microsoft.Compute/availabilitySets/MYAVAILABILITYSET" }, @@ -1088,6 +1147,7 @@ class AzureRMVirtualMachine(AzureRMModuleBase): storage_blob_name=dict(type='str', aliases=['storage_blob']), os_disk_caching=dict(type='str', aliases=['disk_caching'], choices=['ReadOnly', 'ReadWrite']), os_disk_size_gb=dict(type='int'), + os_disk_encryption_set=dict(type='str'), managed_disk_type=dict(type='str', choices=['Standard_LRS', 'StandardSSD_LRS', 'StandardSSD_ZRS', 'Premium_LRS', 'Premium_ZRS', 'UltraSSD_LRS']), os_disk_name=dict(type='str'), proximity_placement_group=dict(type='dict', options=proximity_placement_group_spec), @@ -1106,18 +1166,27 @@ class AzureRMVirtualMachine(AzureRMModuleBase): started=dict(type='bool'), force=dict(type='bool', default=False), generalized=dict(type='bool', default=False), + swap_os_disk=dict( + type='dict', + options=dict( + os_disk_resource_group=dict(type='str'), + os_disk_name=dict(type='str'), + os_disk_id=dict(type='str') + ) + ), data_disks=dict( type='list', elements='dict', options=dict( lun=dict(type='int', required=True), disk_size_gb=dict(type='int'), + disk_encryption_set=dict(type='str'), managed_disk_type=dict(type='str', choices=['Standard_LRS', 'StandardSSD_LRS', 'StandardSSD_ZRS', 'Premium_LRS', 'Premium_ZRS', 'UltraSSD_LRS']), storage_account_name=dict(type='str'), storage_container_name=dict(type='str', default='vhds'), storage_blob_name=dict(type='str'), - caching=dict(type='str', choices=['ReadOnly', 'ReadOnly']) + caching=dict(type='str', choices=['ReadOnly', 'ReadWrite']) ) ), plan=dict(type='dict'), @@ -1149,6 +1218,12 @@ class AzureRMVirtualMachine(AzureRMModuleBase): windows_config=dict(type='dict', options=windows_configuration_spec), linux_config=dict(type='dict', options=linux_configuration_spec), security_profile=dict(type='dict'), + additional_capabilities=dict( + type='dict', + options=dict( + ultra_ssd_enabled=dict(type='bool') + ) + ) ) self.resource_group = None @@ -1172,6 +1247,7 @@ class AzureRMVirtualMachine(AzureRMModuleBase): self.os_type = None self.os_disk_caching = None self.os_disk_size_gb = None + self.os_disk_encryption_set = None self.managed_disk_type = None self.os_disk_name = None self.proximity_placement_group = None @@ -1201,6 +1277,8 @@ class AzureRMVirtualMachine(AzureRMModuleBase): self.linux_config = None self.windows_config = None self.security_profile = None + self.additional_capabilities = None + self.swap_os_disk = None self.results = dict( changed=False, @@ -1209,8 +1287,10 @@ class AzureRMVirtualMachine(AzureRMModuleBase): ansible_facts=dict(azure_vm=None) ) + required_if = [('os_disk_encryption_set', '*', ['managed_disk_type'])] + super(AzureRMVirtualMachine, self).__init__(derived_arg_spec=self.module_arg_spec, - supports_check_mode=True) + supports_check_mode=True, required_if=required_if) @property def boot_diagnostics_present(self): @@ -1277,12 +1357,16 @@ class AzureRMVirtualMachine(AzureRMModuleBase): vm_dict = None image_reference = None custom_image = False + swap_os_disk_flag = False resource_group = self.get_resource_group(self.resource_group) if not self.location: # Set default location self.location = resource_group.location + if self.swap_os_disk is not None: + swap_os_disk = self.get_os_disk(self.swap_os_disk) + self.location = normalize_location_name(self.location) if self.state == 'present': @@ -1411,6 +1495,12 @@ class AzureRMVirtualMachine(AzureRMModuleBase): vm_dict['network_profile']['network_interfaces'] = updated_nics changed = True + if self.swap_os_disk is not None and swap_os_disk.get('name') != vm_dict['storage_profile']['os_disk']['name']: + self.log('CHANGED: Swap virtual machine {0} - OS disk name'.format(self.name)) + differences.append('Swap OS Disk') + changed = True + swap_os_disk_flag = True + if self.os_disk_caching and \ self.os_disk_caching != vm_dict['storage_profile']['os_disk']['caching']: self.log('CHANGED: virtual machine {0} - OS disk caching'.format(self.name)) @@ -1448,7 +1538,7 @@ class AzureRMVirtualMachine(AzureRMModuleBase): self.log('CHANGED: virtual machine {0} - short hostname'.format(self.name)) differences.append('Short Hostname') changed = True - vm_dict['os_orofile']['computer_name'] = self.short_hostname + vm_dict['os_profile']['computer_name'] = self.short_hostname if self.started and vm_dict['powerstate'] not in ['starting', 'running'] and self.allocated: self.log("CHANGED: virtual machine {0} not running and requested state 'running'".format(self.name)) @@ -1479,7 +1569,7 @@ class AzureRMVirtualMachine(AzureRMModuleBase): differences.append('Zones') changed = True - if self.license_type is not None and vm_dict.get('licenseType') != self.license_type: + if self.license_type is not None and vm_dict.get('license_type') != self.license_type: differences.append('License Type') changed = True @@ -1516,7 +1606,7 @@ class AzureRMVirtualMachine(AzureRMModuleBase): if self.security_profile is not None: update_security_profile = False - if 'securityProfile' not in vm_dict.keys(): + if 'security_profile' not in vm_dict.keys(): update_security_profile = True differences.append('security_profile') else: @@ -1547,6 +1637,12 @@ class AzureRMVirtualMachine(AzureRMModuleBase): changed = True differences.append('security_profile') + if self.additional_capabilities is not None: + if 'additional_capabilities' not in vm_dict.keys() or\ + bool(self.additional_capabilities['ultra_ssd_enabled']) != bool(vm_dict['additional_capabilities']['ultra_ssd_enabled']): + changed = True + differences.append('additional_capabilities') + if self.windows_config is not None and vm_dict['os_profile'].get('windows_configuration') is not None: if self.windows_config['enable_automatic_updates'] != vm_dict['os_profile']['windows_configuration']['enable_automatic_updates']: self.fail("(PropertyChangeNotAllowed) Changing property 'windowsConfiguration.enableAutomaticUpdates' is not allowed.") @@ -1559,6 +1655,11 @@ class AzureRMVirtualMachine(AzureRMModuleBase): vm_dict['os_profile']['linux_configuration']['disable_password_authentication']: self.fail("(PropertyChangeNotAllowed) Changing property 'linuxConfiguration.disablePasswordAuthentication' is not allowed.") + current_os_des_id = vm_dict['storage_profile'].get('os_disk', {}).get('managed_disk', {}).get('disk_encryption_set', {}).get('id', None) + if self.os_disk_encryption_set is not None and current_os_des_id is not None: + if self.os_disk_encryption_set != current_os_des_id: + self.fail("(PropertyChangeNotAllowed) Changing property 'storage_profile.os_disk.managed_disk.disk_encryption_set' is not allowed.") + # Defaults for boot diagnostics if 'diagnostics_profile' not in vm_dict: vm_dict['diagnostics_profile'] = {} @@ -1601,6 +1702,29 @@ class AzureRMVirtualMachine(AzureRMModuleBase): vm_dict['tags']['_own_sa_'] = own_sa changed = True + if self.proximity_placement_group is not None: + if vm_dict.get('proximity_placement_group') is None: + changed = True + differences.append('proximity_placement_group') + if self.proximity_placement_group.get('name') is not None and self.proximity_placement_group.get('resource_group') is not None: + proximity_placement_group = self.get_proximity_placement_group(self.proximity_placement_group.get('resource_group'), + self.proximity_placement_group.get('name')) + self.proximity_placement_group['id'] = proximity_placement_group.id + + elif self.proximity_placement_group.get('id') is not None: + if vm_dict['proximity_placement_group'].get('id', "").lower() != self.proximity_placement_group['id'].lower(): + changed = True + differences.append('proximity_placement_group') + elif self.proximity_placement_group.get('name') is not None and self.proximity_placement_group.get('resource_group') is not None: + proximity_placement_group = self.get_proximity_placement_group(self.proximity_placement_group.get('resource_group'), + self.proximity_placement_group.get('name')) + if vm_dict['proximity_placement_group'].get('id', "").lower() != proximity_placement_group.id.lower(): + changed = True + differences.append('proximity_placement_group') + self.proximity_placement_group['id'] = proximity_placement_group.id + else: + self.fail("Parameter error: Please recheck your proximity placement group ") + self.differences = differences elif self.state == 'absent': @@ -1700,6 +1824,11 @@ class AzureRMVirtualMachine(AzureRMModuleBase): vhd = self.compute_models.VirtualHardDisk(uri=requested_vhd_uri) managed_disk = None + if managed_disk and self.os_disk_encryption_set: + managed_disk.disk_encryption_set = self.compute_models.DiskEncryptionSetParameters( + id=self.os_disk_encryption_set + ) + plan = None if self.plan: plan = self.compute_models.Plan(name=self.plan.get('name'), product=self.plan.get('product'), @@ -1865,6 +1994,10 @@ class AzureRMVirtualMachine(AzureRMModuleBase): else: data_disk_vhd = None data_disk_managed_disk = self.compute_models.ManagedDiskParameters(storage_account_type=data_disk['managed_disk_type']) + if data_disk.get('disk_encryption_set'): + data_disk_managed_disk.disk_encryption_set = self.compute_models.DiskEncryptionSetParameters( + id=data_disk['disk_encryption_set'] + ) disk_name = self.name + "-datadisk-" + str(count) count += 1 @@ -1916,6 +2049,12 @@ class AzureRMVirtualMachine(AzureRMModuleBase): ) vm_resource.security_profile = security_profile + if self.additional_capabilities is not None: + additional_capabilities = self.compute_models.AdditionalCapabilities( + ultra_ssd_enabled=self.additional_capabilities.get('ultra_ssd_enabled') + ) + vm_resource.additional_capabilities = additional_capabilities + self.log("Create virtual machine with parameters:") self.create_or_update_vm(vm_resource, 'all_autocreated' in self.remove_on_absent) @@ -1938,11 +2077,18 @@ class AzureRMVirtualMachine(AzureRMModuleBase): ) proximity_placement_group_resource = None - try: - proximity_placement_group_resource = self.compute_models.SubResource(id=vm_dict['proximity_placement_group'].get('id')) - except Exception: - # pass if the proximity Placement Group - pass + if self.proximity_placement_group is not None: + try: + proximity_placement_group_resource = self.compute_models.SubResource(id=self.proximity_placement_group.get('id')) + except Exception: + # pass if the proximity Placement Group + pass + else: + try: + proximity_placement_group_resource = self.compute_models.SubResource(id=vm_dict['proximity_placement_group'].get('id')) + except Exception: + # pass if the proximity Placement Group + pass availability_set_resource = None try: @@ -1984,7 +2130,24 @@ class AzureRMVirtualMachine(AzureRMModuleBase): hardware_profile=self.compute_models.HardwareProfile( vm_size=vm_dict['hardware_profile'].get('vm_size') ), - storage_profile=self.compute_models.StorageProfile( + availability_set=availability_set_resource, + proximity_placement_group=proximity_placement_group_resource, + network_profile=self.compute_models.NetworkProfile( + network_interfaces=nics + ) + ) + + if swap_os_disk_flag: + storage_profile = self.compute_models.StorageProfile( + os_disk=self.compute_models.OSDisk( + name=swap_os_disk.get('name'), + managed_disk=swap_os_disk.get('managed_disk'), + create_option=vm_dict['storage_profile']['os_disk'].get('create_option'), + ), + image_reference=image_reference + ) + else: + storage_profile = self.compute_models.StorageProfile( os_disk=self.compute_models.OSDisk( name=vm_dict['storage_profile']['os_disk'].get('name'), vhd=vhd, @@ -1995,13 +2158,9 @@ class AzureRMVirtualMachine(AzureRMModuleBase): disk_size_gb=vm_dict['storage_profile']['os_disk'].get('disk_size_gb') ), image_reference=image_reference - ), - availability_set=availability_set_resource, - proximity_placement_group=proximity_placement_group_resource, - network_profile=self.compute_models.NetworkProfile( - network_interfaces=nics ) - ) + + vm_resource.storage_profile = storage_profile if self.license_type is not None: vm_resource.license_type = self.license_type @@ -2083,8 +2242,8 @@ class AzureRMVirtualMachine(AzureRMModuleBase): ) else: vm_resource.os_profile.windows_configuration = self.compute_models.WindowsConfiguration( - provision_vm_agent=windows_config.get('provisionVMAgent', True), - enable_automatic_updates=windows_config.get('enableAutomaticUpdates', True) + provision_vm_agent=windows_config.get('provision_vm_agent', True), + enable_automatic_updates=windows_config.get('enable_automatic_updates', True) ) # Add linux configuration, if applicable @@ -2100,12 +2259,12 @@ class AzureRMVirtualMachine(AzureRMModuleBase): ) ssh_config = linux_config.get('ssh', None) if ssh_config: - public_keys = ssh_config.get('publicKeys') + public_keys = ssh_config.get('public_keys') if public_keys: vm_resource.os_profile.linux_configuration.ssh = self.compute_models.SshConfiguration(public_keys=[]) for key in public_keys: vm_resource.os_profile.linux_configuration.ssh.public_keys.append( - self.compute_models.SshPublicKey(path=key['path'], key_data=key['keyData']) + self.compute_models.SshPublicKey(path=key['path'], key_data=key['key_data']) ) # data disk @@ -2116,6 +2275,10 @@ class AzureRMVirtualMachine(AzureRMModuleBase): if data_disk.get('managed_disk'): managed_disk_type = data_disk['managed_disk'].get('storage_account_type') data_disk_managed_disk = self.compute_models.ManagedDiskParameters(storage_account_type=managed_disk_type) + if data_disk.get('disk_encryption_set'): + data_disk_managed_disk.disk_encryption_set = self.compute_models.DiskEncryptionSetParameters( + id=data_disk['disk_encryption_set'] + ) data_disk_vhd = None else: data_disk_vhd = data_disk['vhd']['uri'] @@ -2146,6 +2309,12 @@ class AzureRMVirtualMachine(AzureRMModuleBase): ) vm_resource.security_profile = security_profile + if self.additional_capabilities is not None: + additional_capabilities = self.compute_models.AdditionalCapabilities( + ultra_ssd_enabled=self.additional_capabilities.get('ultra_ssd_enabled') + ) + vm_resource.additional_capabilities = additional_capabilities + self.log("Update virtual machine with parameters:") self.create_or_update_vm(vm_resource, False) @@ -2182,6 +2351,32 @@ class AzureRMVirtualMachine(AzureRMModuleBase): return self.results + def get_os_disk(self, os_disk): + resource_group_name = None + os_disk_name = None + if os_disk.get('os_disk_id') is not None: + os_disk_dict = self.parse_resource_to_dict(os_disk.get('os_disk_id')) + os_disk_name = os_disk_dict.get('name') + resource_group_name = os_disk_dict.get('resource_group') + elif os_disk.get('os_disk_resource_group') is not None and os_disk.get('os_disk_name') is not None: + os_disk_name = os_disk.get('os_disk_name') + resource_group_name = os_disk.get('os_disk_resource_group') + elif os_disk.get('os_disk_name') is not None: + os_disk_name = os_disk.get('name') + resource_group_name = self.resource_group + else: + self.fail("The swap_os_disk must contain one of 'os_disk_name' and 'os_disk_id'") + + try: + os_disk = {} + response = self.compute_client.disks.get(resource_group_name, os_disk_name) + os_disk['name'] = response.name + os_disk['managed_disk'] = dict(id=response.id) + os_disk['create_option'] = response.creation_data.create_option + return os_disk + except Exception as ec: + self.fail('Could not find os disk {0} in resource group {1}'.format(os_disk_name, resource_group_name)) + def get_vm(self): ''' Get the VM with expanded instanceView @@ -2189,7 +2384,23 @@ class AzureRMVirtualMachine(AzureRMModuleBase): :return: VirtualMachine object ''' try: + retry_count = 0 vm = self.compute_client.virtual_machines.get(self.resource_group, self.name, expand='instanceview') + while True: + if retry_count == 20: + self.fail("Error {0} has a provisioning state of Updating. Expecting state to be Successed.".format(self.name)) + + if vm.provisioning_state != 'Succeeded': + retry_count = retry_count + 1 + time.sleep(150) + vm = self.compute_client.virtual_machines.get(self.resource_group, self.name, expand='instanceview') + else: + p_state = None + for s in vm.instance_view.statuses: + if s.code.startswith('PowerState'): + p_state = s.code + if p_state is not None: + break return vm except Exception as exc: self.fail("Error getting virtual machine {0} - {1}".format(self.name, str(exc))) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachine_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachine_info.py index d94f9848e..3df8e2fbc 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachine_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachine_info.py @@ -70,6 +70,12 @@ vms: returned: always type: complex contains: + additional_capabilities: + description: + - Enables or disables a capability on the virtual machine. + type: dict + returned: always + sample: {ultra_ssd_enabled: False} admin_username: description: - Administrator user name. @@ -244,6 +250,12 @@ vms: returned: always type: dict sample: { "key1":"value1" } + vm_agent_version: + description: + - Version of the Azure VM Agent (waagent) running inside the VM. + returned: always + type: str + sample: '2.9.1.1' vm_size: description: - Virtual machine size. @@ -459,6 +471,11 @@ class AzureRMVirtualMachineInfo(AzureRMModuleBase): new_result = {} + if instance.get('vm_agent') is not None: + new_result['vm_agent_version'] = instance['vm_agent'].get('vm_agent_version') + else: + new_result['vm_agent_version'] = 'Unknown' + if vm.security_profile is not None: new_result['security_profile'] = dict() if vm.security_profile.encryption_at_host is not None: @@ -483,6 +500,7 @@ class AzureRMVirtualMachineInfo(AzureRMModuleBase): new_result['vm_size'] = result['hardware_profile']['vm_size'] new_result['proximityPlacementGroup'] = result.get('proximity_placement_group') new_result['zones'] = result.get('zones', None) + new_result['additional_capabilities'] = result.get('additional_capabilities') os_profile = result.get('os_profile') if os_profile is not None: new_result['admin_username'] = os_profile.get('admin_username') diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescaleset.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescaleset.py index 4a64628fb..c4211a971 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescaleset.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescaleset.py @@ -334,6 +334,7 @@ options: choices: - Flexible - Uniform + default: Flexible security_profile: description: - Specifies the Security related profile settings for the virtual machine sclaset. @@ -646,6 +647,7 @@ azure_vmss: ''' # NOQA import base64 +import time try: from azure.core.exceptions import ResourceNotFoundError @@ -723,7 +725,9 @@ class AzureRMVirtualMachineScaleSet(AzureRMModuleBase): scale_in_policy=dict(type='str', choices=['Default', 'OldestVM', 'NewestVM']), terminate_event_timeout_minutes=dict(type='int'), ephemeral_os_disk=dict(type='bool'), - orchestration_mode=dict(type='str', choices=['Uniform', 'Flexible']), + orchestration_mode=dict(type='str', + choices=['Uniform', 'Flexible'], + default='Flexible',), platform_fault_domain_count=dict(type='int', default=1), os_disk_size_gb=dict(type='int'), security_profile=dict( @@ -1375,7 +1379,18 @@ class AzureRMVirtualMachineScaleSet(AzureRMModuleBase): :return: VirtualMachineScaleSet object ''' try: + retry_count = 0 vmss = self.compute_client.virtual_machine_scale_sets.get(self.resource_group, self.name) + while True: + if retry_count == 20: + self.fail("Error {0} has a provisioning state of Updating. Expecting state to be Successed.".format(self.name)) + + if vmss.provisioning_state != 'Succeeded': + retry_count = retry_count + 1 + time.sleep(150) + vmss = self.compute_client.virtual_machine_scale_sets.get(self.resource_group, self.name) + else: + break return vmss except ResourceNotFoundError as exc: self.fail("Error getting virtual machine scale set {0} - {1}".format(self.name, str(exc))) diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescalesetinstance.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescalesetinstance.py index ca20000a8..402af0072 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescalesetinstance.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescalesetinstance.py @@ -165,7 +165,6 @@ class AzureRMVirtualMachineScaleSetInstance(AzureRMModuleBase): setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(ComputeManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2021-04-01') instances = self.get() diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescalesetinstance_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescalesetinstance_info.py index 07b6cf92c..47a3d3318 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescalesetinstance_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualmachinescalesetinstance_info.py @@ -169,7 +169,6 @@ class AzureRMVirtualMachineScaleSetVMInfo(AzureRMModuleBase): setattr(self, key, kwargs[key]) self.mgmt_client = self.get_mgmt_svc_client(ComputeManagementClient, base_url=self._cloud_environment.endpoints.resource_manager, - is_track2=True, api_version='2021-04-01') if (self.instance_id is None): diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualwan.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualwan.py index 38c542695..53bef71eb 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualwan.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_virtualwan.py @@ -229,7 +229,7 @@ except ImportError: class Actions: - NoAction, Create, Update, Delete = range(4) + NoAction, Create, Update, Update_tags, Delete = range(5) class AzureRMVirtualWan(AzureRMModuleBaseExt): @@ -251,45 +251,34 @@ class AzureRMVirtualWan(AzureRMModuleBaseExt): required=True ), disable_vpn_encryption=dict( - type='bool', - disposition='/disable_vpn_encryption' + type='bool' ), virtual_hubs=dict( type='list', elements='dict', - updatable=False, - disposition='/virtual_hubs', options=dict( id=dict( - type='str', - disposition='id' + type='str' ) ) ), vpn_sites=dict( type='list', elements='dict', - updatable=False, - disposition='/vpn_sites', options=dict( id=dict( - type='str', - disposition='id' + type='str' ) ) ), allow_branch_to_branch_traffic=dict( - type='bool', - disposition='/allow_branch_to_branch_traffic' + type='bool' ), allow_vnet_to_vnet_traffic=dict( - type='bool', - updatable=False, - disposition='/allow_vnet_to_vnet_traffic' + type='bool' ), virtual_wan_type=dict( type='str', - disposition='/virtual_wan_type', choices=['Basic', 'Standard'] ), state=dict( @@ -313,14 +302,12 @@ class AzureRMVirtualWan(AzureRMModuleBaseExt): supports_tags=True) def exec_module(self, **kwargs): - for key in list(self.module_arg_spec.keys()): + for key in list(self.module_arg_spec.keys()) + ['tags']: if hasattr(self, key): setattr(self, key, kwargs[key]) elif kwargs[key] is not None: self.body[key] = kwargs[key] - self.inflate_parameters(self.module_arg_spec, self.body, 0) - resource_group = self.get_resource_group(self.resource_group) if self.location is None: # Set default location @@ -339,18 +326,28 @@ class AzureRMVirtualWan(AzureRMModuleBaseExt): if self.state == 'absent': self.to_do = Actions.Delete else: - modifiers = {} - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - self.results['compare'] = [] - if not self.default_compare(modifiers, self.body, old_response, '', self.results): - self.to_do = Actions.Update + compare_list = ['disable_vpn_encryption', 'allow_branch_to_branch_traffic'] + for key in compare_list: + if self.body.get(key) is not None and self.body[key] != old_response[key]: + self.log('parameter {0} does not match the configuration'.format(key)) + self.to_do = Actions.Update + else: + self.body[key] = old_response[key] + + update_tags, self.tags = self.update_tags(old_response.get('tags')) + if update_tags: + self.to_do = Actions.Update_tags if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): self.results['changed'] = True if self.check_mode: return self.results response = self.create_update_resource() + elif self.to_do == Actions.Update_tags: + self.results['changed'] = True + if self.check_mode: + return self.results + response = self.update_resource_tags(dict(tags=self.tags)) elif self.to_do == Actions.Delete: self.results['changed'] = True if self.check_mode: @@ -363,6 +360,18 @@ class AzureRMVirtualWan(AzureRMModuleBaseExt): self.results['state'] = response return self.results + def update_resource_tags(self, tags_parameters): + try: + response = self.network_client.virtual_wans.update_tags(resource_group_name=self.resource_group, + virtual_wan_name=self.name, + wan_parameters=tags_parameters) + if isinstance(response, LROPoller): + response = self.get_poller_result(response) + except Exception as exc: + self.log('Error attempting to Update the VirtualWan instance.') + self.fail('Error Updating the VirtualWan instance tags: {0}'.format(str(exc))) + return response.as_dict() + def create_update_resource(self): try: response = self.network_client.virtual_wans.begin_create_or_update(resource_group_name=self.resource_group, diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vmbackuppolicy.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vmbackuppolicy.py index 5cd10c978..d3584b670 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vmbackuppolicy.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vmbackuppolicy.py @@ -366,7 +366,6 @@ class VMBackupPolicy(AzureRMModuleBaseExt): response = None self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) old_response = self.get_resource() @@ -403,10 +402,12 @@ class VMBackupPolicy(AzureRMModuleBaseExt): self.log('Error in creating Backup Policy.') self.fail('Error in creating Backup Policy {0}'.format(str(e))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vmbackuppolicy_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vmbackuppolicy_info.py index 0aa7b5918..0efe1df6c 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vmbackuppolicy_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vmbackuppolicy_info.py @@ -216,7 +216,6 @@ class BackupPolicyVMInfo(AzureRMModuleBaseExt): self.url = self.get_url() self.mgmt_client = self.get_mgmt_svc_client(GenericRestClient, - is_track2=True, base_url=self._cloud_environment.endpoints.resource_manager) response = self.get_resource() @@ -243,10 +242,12 @@ class BackupPolicyVMInfo(AzureRMModuleBaseExt): except Exception as e: self.log('Backup policy does not exist.') self.fail('Error in fetching VM Backup Policy {0}'.format(str(e))) - try: + if hasattr(response, 'body'): response = json.loads(response.body()) - except Exception: - response = {'text': response.context['deserialized_data']} + elif hasattr(response, 'context'): + response = response.context['deserialized_data'] + else: + self.fail("Create or Updating fail, no match message return, return info as {0}".format(response)) return response diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vpnsite.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vpnsite.py index 32d4fafee..c1b7ff8f8 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vpnsite.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_vpnsite.py @@ -307,7 +307,7 @@ except ImportError: class Actions: - NoAction, Create, Update, Delete = range(4) + NoAction, Create, Update, Delete, Update_tags = range(5) class AzureRMVpnSite(AzureRMModuleBaseExt): @@ -326,92 +326,71 @@ class AzureRMVpnSite(AzureRMModuleBaseExt): ), virtual_wan=dict( type='dict', - disposition='/virtual_wan', options=dict( id=dict( type='str', - disposition='id' ) ) ), device_properties=dict( type='dict', - disposition='/device_properties', options=dict( device_vendor=dict( type='str', - disposition='device_vendor' ), device_model=dict( type='str', - disposition='device_model' ), link_speed_in_mbps=dict( type='int', - disposition='link_speed_in_mbps' ) ) ), ip_address=dict( type='str', - disposition='/ip_address' ), site_key=dict( type='str', no_log=True, - disposition='/site_key' ), address_space=dict( type='dict', - disposition='/address_space', options=dict( address_prefixes=dict( type='list', - disposition='address_prefixes', elements='str' ) ) ), bgp_properties=dict( type='dict', - disposition='/bgp_properties', options=dict( asn=dict( type='int', - disposition='asn' ), bgp_peering_address=dict( type='str', - disposition='bgp_peering_address' ), peer_weight=dict( type='int', - disposition='peer_weight' ), bgp_peering_addresses=dict( type='list', - disposition='bgp_peering_addresses', elements='dict', options=dict( ipconfiguration_id=dict( type='str', - disposition='ipconfiguration_id' ), default_bgp_ip_addresses=dict( type='list', - updatable=False, - disposition='default_bgp_ip_addresses', elements='str' ), custom_bgp_ip_addresses=dict( type='list', - disposition='custom_bgp_ip_addresses', elements='str' ), tunnel_ip_addresses=dict( type='list', - updatable=False, - disposition='tunnel_ip_addresses', elements='str' ) ) @@ -420,50 +399,39 @@ class AzureRMVpnSite(AzureRMModuleBaseExt): ), is_security_site=dict( type='bool', - disposition='/is_security_site' ), vpn_site_links=dict( type='list', - disposition='/vpn_site_links', elements='dict', options=dict( name=dict( type='str', - disposition='name' ), link_properties=dict( type='dict', - disposition='link_properties', options=dict( link_provider_name=dict( type='str', - disposition='link_provider_name' ), link_speed_in_mbps=dict( type='int', - disposition='link_speed_in_mbps' ) ) ), ip_address=dict( type='str', - disposition='ip_address' ), fqdn=dict( type='str', - disposition='fqdn' ), bgp_properties=dict( type='dict', - disposition='bgp_properties', options=dict( asn=dict( type='int', - disposition='asn' ), bgp_peering_address=dict( type='str', - disposition='bgp_peering_address' ) ) ) @@ -471,23 +439,18 @@ class AzureRMVpnSite(AzureRMModuleBaseExt): ), o365_policy=dict( type='dict', - disposition='/o365_policy', options=dict( break_out_categories=dict( type='dict', - disposition='break_out_categories', options=dict( allow=dict( type='bool', - disposition='allow' ), optimize=dict( type='bool', - disposition='optimize' ), default=dict( type='bool', - disposition='default' ) ) ) @@ -514,7 +477,7 @@ class AzureRMVpnSite(AzureRMModuleBaseExt): supports_tags=True) def exec_module(self, **kwargs): - for key in list(self.module_arg_spec.keys()): + for key in list(self.module_arg_spec.keys()) + ['tags']: if hasattr(self, key): setattr(self, key, kwargs[key]) elif kwargs[key] is not None: @@ -540,18 +503,62 @@ class AzureRMVpnSite(AzureRMModuleBaseExt): if self.state == 'absent': self.to_do = Actions.Delete else: - modifiers = {} - self.create_compare_modifiers(self.module_arg_spec, '', modifiers) - self.results['modifiers'] = modifiers - self.results['compare'] = [] - if not self.default_compare(modifiers, self.body, old_response, '', self.results): + if self.body.get('virtual_wan') is not None and self.body['virtual_wan'] != old_response.get('virtual_wan'): self.to_do = Actions.Update + for key in self.body.keys(): + if key == 'address_space': + if old_response.get('address_space') is None or\ + len(self.body['address_space']['address_prefixes']) > len(old_response['address_space']['address_prefixes']) or\ + not all(key in old_response['address_space']['address_prefixes'] for key in self.body['address_space']['address_prefixes']): + self.to_do = Actions.Update + elif key == 'device_properties': + if old_response.get('device_properties') is None or\ + not all(self.body['device_properties'][key] == old_response['device_properties'].get(key) + for key in self.body['device_properties'].keys()): + self.to_do = Actions.Update + elif key == 'o365_policy': + if old_response.get('o365_policy') is None or\ + not all(self.body['o365_policy']['break_out_categories'][key] == old_response['o365_policy']['break_out_categories'].get(key) + for key in self.body['o365_policy']['break_out_categories'].keys()): + self.to_do = Actions.Update + elif key == 'vpn_site_links': + if old_response.get('vpn_site_links') is None or\ + not all(self.body['vpn_site_links'][key] == old_response['vpn_site_links'].get(key) + for key in self.body['vpn_site_links'].keys()): + self.to_do = Actions.Update + elif key == 'bgp_properties': + if old_response.get('bgp_properties') is None: + self.to_do = Actions.Update + else: + for item in self.body['bgp_properties'].keys(): + if item != 'bgp_peering_addresses' and item != 'peer_weight': + if self.body['bgp_properties'][item] != old_response['bgp_properties'].get(item): + self.to_do = Actions.Update + else: + if self.body['bgp_properties'].get('bgp_peering_addresses') is not None: + bgp_address = old_response['bgp_properties']['bgp_peering_addresses'] + if old_response['bgp_properties'].get('bgp_peering_addresses') is None or\ + not all(self.body['bgp_properties']['bgp_peering_addresses'][value] == bgp_address.get(value) + for value in ['ipconfiguration_id', 'custom_bgp_ip_addresses']): + self.to_do = Actions.Update + + elif self.body[key] != old_response.get(key): + self.to_do = Actions.Update + + update_tags, self.tags = self.update_tags(old_response.get('tags')) + if update_tags: + self.to_do = Actions.Update_tags if (self.to_do == Actions.Create) or (self.to_do == Actions.Update): self.results['changed'] = True if self.check_mode: return self.results response = self.create_update_resource() + elif self.to_do == Actions.Update_tags: + self.results['changed'] = True + if self.check_mode: + return self.results + response = self.update_resource_tags(dict(tags=self.tags)) elif self.to_do == Actions.Delete: self.results['changed'] = True if self.check_mode: @@ -565,6 +572,18 @@ class AzureRMVpnSite(AzureRMModuleBaseExt): self.results['state'] = response return self.results + def update_resource_tags(self, tags_parameters): + try: + response = self.network_client.vpn_sites.update_tags(resource_group_name=self.resource_group, + vpn_site_name=self.name, + vpn_site_parameters=tags_parameters) + if isinstance(response, LROPoller): + response = self.get_poller_result(response) + except Exception as exc: + self.log('Error attempting to update the VpnSite instance tags.') + self.fail('Error updating the VpnSite instance: {0}'.format(str(exc))) + return response.as_dict() + def create_update_resource(self): try: response = self.network_client.vpn_sites.begin_create_or_update(resource_group_name=self.resource_group, diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_webapp.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_webapp.py index 05697176b..e58cbcd43 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_webapp.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_webapp.py @@ -76,13 +76,13 @@ options: version: description: - Version of the framework. For Linux web app supported value, see U(https://aka.ms/linux-stacks) for more info. - - C(net_framework) supported value sample, C(v4.0) for .NET 4.6 and C(v3.0) for .NET 3.5. - - C(php) supported value sample, C(5.5), C(5.6), C(7.0). - - C(python) supported value sample, C(2.7), C(3.8), C(3.10). - - C(node) supported value sample, C(6.6), C(6.9). - - C(dotnetcore) supported value sample, C(1.0), C(1.1), C(1.2). + - C(net_framework) supported value sample, C(v4.8) for .NET 4.8 and C(v3.5) for .NET 3.5. + - C(php) supported value sample, C(8.1), C(8.2). + - C(python) supported value sample, C(3.8), C(3.9), C(3.10), C(3.11), C(3.12). + - C(node) supported value sample, C(18), C(20). + - C(dotnetcore) supported value sample, C(8), C(7), C(6). - C(ruby) supported value sample, C(2.3). - - C(java) supported value sample, C(1.9) for Windows web app. C(1.8) for Linux web app. + - C(java) supported value sample, C(21), C(17), C(11) and C(8). type: str required: true settings: @@ -93,14 +93,14 @@ options: java_container: description: - Name of Java container. - - Supported only when I(frameworks=java). Sample values C(Tomcat), C(Jetty). + - Supported only when I(frameworks=java). Sample values C(Tomcat), C(JavaSE), C(RedHat). type: str required: True java_container_version: description: - Version of Java container. - Supported only when I(frameworks=java). - - Sample values for C(Tomcat), C(8.0), C(8.5), C(9.0). For C(Jetty,), C(9.1), C(9.3). + - Sample values for C(Tomcat), C(8.5), C(9.0), C(10.0), C(10.1). type: str required: True @@ -139,6 +139,11 @@ options: - Keeps the app loaded even when there's no traffic. type: bool + http20_enabled: + description: + - Configures a web site to allow clients to connect over HTTP 2.0. + type: bool + min_tls_version: description: - The minimum TLS encryption version required for the app. @@ -289,7 +294,7 @@ EXAMPLES = ''' testkey: testvalue frameworks: - name: "node" - version: "6.6" + version: "18" - name: Create a windows web app with node, php azure_rm_webapp: @@ -302,9 +307,9 @@ EXAMPLES = ''' testkey: testvalue frameworks: - name: "node" - version: 6.6 + version: 18 - name: "php" - version: "7.0" + version: 8.2 - name: Create a stage deployment slot for an existing web app azure_rm_webapp: @@ -494,6 +499,9 @@ class AzureRMWebApps(AzureRMModuleBase): always_on=dict( type='bool', ), + http20_enabled=dict( + type='bool', + ), min_tls_version=dict( type='str', choices=['1.0', '1.1', '1.2'], @@ -583,6 +591,7 @@ class AzureRMWebApps(AzureRMModuleBase): "python_version", "scm_type", "always_on", + "http20_enabled", "min_tls_version", "ftps_state"] @@ -591,7 +600,7 @@ class AzureRMWebApps(AzureRMModuleBase): "https_only"] self.supported_linux_frameworks = ['ruby', 'php', 'python', 'dotnetcore', 'node', 'java'] - self.supported_windows_frameworks = ['net_framework', 'php', 'python', 'node', 'java'] + self.supported_windows_frameworks = ['net_framework', 'php', 'python', 'node', 'java', 'dotnetcore'] super(AzureRMWebApps, self).__init__(derived_arg_spec=self.module_arg_spec, mutually_exclusive=mutually_exclusive, @@ -605,7 +614,7 @@ class AzureRMWebApps(AzureRMModuleBase): if hasattr(self, key): setattr(self, key, kwargs[key]) elif kwargs[key] is not None: - if key in ["scm_type", "always_on", "min_tls_version", "ftps_state"]: + if key in ["scm_type", "always_on", "http20_enabled", "min_tls_version", "ftps_state"]: self.site_config[key] = kwargs[key] old_response = None @@ -655,15 +664,15 @@ class AzureRMWebApps(AzureRMModuleBase): self.site_config['linux_fx_version'] = (self.frameworks[0]['name'] + '|' + self.frameworks[0]['version']).upper() if self.frameworks[0]['name'] == 'java': - if self.frameworks[0]['version'] != '8': - self.fail("Linux web app only supports java 8.") + if self.frameworks[0]['version'] not in ['8', '11', '17', '21']: + self.fail("Linux web app only supports java 8, 11, 17 and 21.") if self.frameworks[0]['settings'] and self.frameworks[0]['settings']['java_container'].lower() != 'tomcat': self.fail("Linux web app only supports tomcat container.") if self.frameworks[0]['settings'] and self.frameworks[0]['settings']['java_container'].lower() == 'tomcat': self.site_config['linux_fx_version'] = 'TOMCAT|' + self.frameworks[0]['settings']['java_container_version'] + '-jre8' else: - self.site_config['linux_fx_version'] = 'JAVA|8-jre8' + self.site_config['linux_fx_version'] = 'JAVA|{0}-jre{0}'.format(self.frameworks[0]['version']) else: for fx in self.frameworks: if fx.get('name') not in self.supported_windows_frameworks: @@ -852,7 +861,7 @@ class AzureRMWebApps(AzureRMModuleBase): # compare xxx_version def is_site_config_changed(self, existing_config): for updatable_property in self.site_config_updatable_properties: - if self.site_config.get(updatable_property): + if updatable_property in self.site_config: if not getattr(existing_config, updatable_property) or \ str(getattr(existing_config, updatable_property)).upper() != str(self.site_config.get(updatable_property)).upper(): return True diff --git a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_webapp_info.py b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_webapp_info.py index af035b152..c0ec6b42d 100644 --- a/ansible_collections/azure/azcollection/plugins/modules/azure_rm_webapp_info.py +++ b/ansible_collections/azure/azcollection/plugins/modules/azure_rm_webapp_info.py @@ -138,6 +138,12 @@ webapps: returned: always type: bool sample: true + http20_enabled: + description: + - Configures a web site to allow clients to connect over HTTP 2.0. + returned: always + type: bool + sample: true min_tls_version: description: - The minimum TLS encryption version required for the app. @@ -486,6 +492,7 @@ class AzureRMWebAppInfo(AzureRMModuleBase): curated_output['frameworks'].append({'name': tmp[0].lower(), 'version': tmp[1]}) curated_output['always_on'] = configuration.get('always_on') + curated_output['http20_enabled'] = configuration.get('http20_enabled') curated_output['ftps_state'] = configuration.get('ftps_state') curated_output['min_tls_version'] = configuration.get('min_tls_version') diff --git a/ansible_collections/azure/azcollection/pr-pipelines.yml b/ansible_collections/azure/azcollection/pr-pipelines.yml index 6f40e066a..7ddcc40dc 100644 --- a/ansible_collections/azure/azcollection/pr-pipelines.yml +++ b/ansible_collections/azure/azcollection/pr-pipelines.yml @@ -19,9 +19,10 @@ parameters: - "2.10" - "2.11" - "2.12" - - "2.13" + - "2.13" # Eol Nov.6 2023 https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html - "2.14" - "2.15" + - "2.16" - "devel" - name: MODULE_NAME displayName: 'Test Module' @@ -85,6 +86,7 @@ parameters: - "azure_rm_notificationhub" - "azure_rm_openshiftmanagedcluster" - "azure_rm_postgresqlserver" + - "azure_rm_postgresqlflexibleserver" - "azure_rm_privatednsrecordset" - "azure_rm_privatednszone" - "azure_rm_privateendpoint" @@ -92,6 +94,7 @@ parameters: - "azure_rm_privatelinkservice" - "azure_rm_privatednszonelink" - "azure_rm_publicipaddress" + - "azure_rm_publicipprefix" - "azure_rm_proximityplacementgroup" - "azure_rm_rediscache" - "azure_rm_resource" @@ -135,6 +138,7 @@ parameters: - "azure_rm_devtestlab" - "azure_rm_sqlmanagedinstance" - "azure_rm_vmssnetworkinterface_info" + - "azure_rm_sshpublickey" - "inventory_azure" - "setup_azure" @@ -169,7 +173,7 @@ jobs: - job: RunTests dependsOn: CreateResourceGroups - timeoutInMinutes: 120 + timeoutInMinutes: 180 variables: TEST_RESOURCE_GROUP: $[ dependencies.CreateResourceGroups.outputs['setvar.resource_group'] ] TEST_RESOURCE_GROUP_SECONDARY: $[ dependencies.CreateResourceGroups.outputs['setvar.resource_group_secondary'] ] diff --git a/ansible_collections/azure/azcollection/requirements-azure.txt b/ansible_collections/azure/azcollection/requirements-azure.txt index 4aae3275d..5fc0064aa 100644 --- a/ansible_collections/azure/azcollection/requirements-azure.txt +++ b/ansible_collections/azure/azcollection/requirements-azure.txt @@ -1,10 +1,10 @@ packaging requests[security] xmltodict -msal==1.23.0 +msgraph-sdk==1.0.0 azure-cli-core==2.34.0 azure-common==1.1.11 -azure-identity==1.7.0 +azure-identity==1.14.0 azure-mgmt-authorization==2.0.0 azure-mgmt-apimanagement==3.0.0 azure-mgmt-batch==16.2.0 @@ -36,12 +36,9 @@ azure-mgmt-trafficmanager==1.0.0b1 azure-mgmt-web==6.1.0 azure-nspkg==2.0.0 azure-storage-blob==12.11.0 -msrest==0.7.1 azure-core==1.28.0 -msrestazure==0.6.4 azure-keyvault==4.2.0 azure-mgmt-keyvault==10.0.0 -azure-graphrbac==0.61.1 azure-mgmt-cosmosdb==6.4.0 azure-mgmt-hdinsight==9.0.0 azure-mgmt-devtestlabs==9.0.0 diff --git a/ansible_collections/azure/azcollection/sanity-requirements-azure.txt b/ansible_collections/azure/azcollection/sanity-requirements-azure.txt index e18c13718..65bf3ad16 100644 --- a/ansible_collections/azure/azcollection/sanity-requirements-azure.txt +++ b/ansible_collections/azure/azcollection/sanity-requirements-azure.txt @@ -1,5 +1,5 @@ voluptuous==0.13.1 pycodestyle==2.8.0 yamllint==1.26.3 -cryptography==41.0.4 +cryptography==42.0.4 pylint==2.13.5 diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/aliases b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/aliases new file mode 100644 index 000000000..3c63edec5 --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/aliases @@ -0,0 +1,3 @@ +cloud/azure +shippable/azure/group15 +destructive diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/meta/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/meta/main.yml new file mode 100644 index 000000000..95e1952f9 --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - setup_azure diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/tasks/main.yml new file mode 100644 index 000000000..dbe625871 --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_accesstoken_info/tasks/main.yml @@ -0,0 +1,13 @@ +- name: Get access token for graphql + azure.azcollection.azure_rm_accesstoken_info: + scopes: + - https://graph.microsoft.com/.default + register: result + +- name: Assert the facts + ansible.builtin.assert: + that: + - result is not changed + - result is not failed + - "'access_token' in result" + - "'expires_on' in result" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adapplication/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adapplication/tasks/main.yml index 99813a48d..d19e0b8cd 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adapplication/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adapplication/tasks/main.yml @@ -1,12 +1,10 @@ - name: Set variables ansible.builtin.set_fact: - tenant_id: "{{ azure_tenant }}" display_name: "app{{ resource_group | hash('sha1') | truncate(20, True, '') }}" run_once: true - name: Create application azure_rm_adapplication: - tenant: "{{ tenant_id }}" display_name: "{{ display_name }}" register: create_output @@ -16,7 +14,6 @@ - name: Create application again idempotent test azure_rm_adapplication: - tenant: "{{ tenant_id }}" app_id: "{{ create_output.app_id }}" register: output @@ -26,9 +23,8 @@ - name: Create application with more parameter azure_rm_adapplication: - tenant: "{{ tenant_id }}" display_name: "{{ display_name }}-01" - available_to_other_tenants: false + sign_in_audience: AzureADandPersonalMicrosoftAccount credential_description: "for test" end_date: 2021-10-01 start_date: 2021-05-18 @@ -50,25 +46,29 @@ - name: Get ad app info by object id azure_rm_adapplication_info: object_id: "{{ create_output.object_id }}" - tenant: "{{ tenant_id }}" register: output - name: Get ad app info by app id azure_rm_adapplication_info: app_id: "{{ create_output.app_id }}" - tenant: "{{ tenant_id }}" register: output +- name: Get ad app info by display name + azure_rm_adapplication_info: + app_display_name: "{{ create_output.app_display_name }}" + register: display_name_test_output + - name: Assert the application facts ansible.builtin.assert: that: - output.applications[0].app_display_name == "{{ display_name }}" - output.applications | length == 1 + - display_name_test_output.applications[0].app_display_name == "{{ display_name }}" + - display_name_test_output.applications | length == 1 - name: Delete ad app by app id azure_rm_adapplication: app_id: "{{ create_output.app_id }}" - tenant: "{{ tenant_id }}" state: absent register: output @@ -79,7 +79,6 @@ - name: Delete ad app by app id azure_rm_adapplication: app_id: "{{ second_output.app_id }}" - tenant: "{{ tenant_id }}" state: absent register: output @@ -90,7 +89,6 @@ - name: Get ad app info by app id azure_rm_adapplication_info: app_id: "{{ create_output.app_id }}" - tenant: "{{ tenant_id }}" register: output - name: Assert there is no application diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adgroup/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adgroup/tasks/main.yml index b10580e65..9415c6ee3 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adgroup/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adgroup/tasks/main.yml @@ -1,6 +1,5 @@ - name: Set variables ansible.builtin.set_fact: - tenant_id: "{{ azure_tenant }}" resource_prefix: "{{ 999999999999999999994 | random | to_uuid }}" run_once: true @@ -8,24 +7,23 @@ azure_rm_adgroup_info: attribute_name: "displayName" attribute_value: "{{ resource_prefix }}-Group-Root" - tenant: "{{ tenant_id }}" register: get_nonexistent_group_display_name_shouldfail failed_when: - get_nonexistent_group_display_name_shouldfail.ad_groups != [] - name: Create Group Root azure_rm_adgroup: - tenant: "{{ tenant_id }}" display_name: "{{ resource_prefix }}-Group-Root" mail_nickname: "{{ resource_prefix }}-Group-Root" + description: 'for test' state: 'present' register: group_create_changed_shouldpass - name: Create Group Should Return Not Changed azure_rm_adgroup: - tenant: "{{ tenant_id }}" display_name: "{{ resource_prefix }}-Group-Root" mail_nickname: "{{ resource_prefix }}-Group-Root" + description: 'for test' state: 'present' register: group_create_unchanged_shouldpass @@ -43,17 +41,16 @@ - name: Return previously created group using object_id azure_rm_adgroup_info: object_id: "{{ group_create_unchanged_shouldpass.object_id }}" - tenant: "{{ tenant_id }}" register: get_created_object_id_shouldpass - name: Assert Returns are Equal to Created Group ansible.builtin.assert: that: - get_created_object_id_shouldpass.ad_groups[0].object_id == group_create_unchanged_shouldpass.object_id + - get_created_object_id_shouldpass.ad_groups[0].description == 'for test' - name: Create Group Member 1 azure_rm_adgroup: - tenant: "{{ tenant_id }}" display_name: "{{ resource_prefix }}-Group-Member-1" mail_nickname: "{{ resource_prefix }}-Group-Member-1" state: 'present' @@ -61,7 +58,6 @@ - name: Create Group Member 2 azure_rm_adgroup: - tenant: "{{ tenant_id }}" display_name: "{{ resource_prefix }}-Group-Member-2" mail_nickname: "{{ resource_prefix }}-Group-Member-2" state: 'present' @@ -69,13 +65,12 @@ - name: Ensure member is in group using display_name and mail_nickname azure_rm_adgroup: - tenant: "{{ tenant_id }}" display_name: "{{ resource_prefix }}-Group-Root" mail_nickname: "{{ resource_prefix }}-Group-Root" state: 'present' present_members: - - "https://graph.windows.net/{{ tenant_id }}/directoryObjects/{{ create_pass_first.object_id }}" - - "https://graph.windows.net/{{ tenant_id }}/directoryObjects/{{ create_pass_second.object_id }}" + - "{{ create_pass_first.object_id }}" + - "{{ create_pass_second.object_id }}" register: add_pass - name: Validate members are in the group @@ -86,11 +81,10 @@ - name: Ensure member is in group that is already present using object_id azure_rm_adgroup: - tenant: "{{ tenant_id }}" object_id: "{{ group_create_changed_shouldpass.object_id }}" state: 'present' present_members: - - "https://graph.windows.net/{{ tenant_id }}/directoryObjects/{{ create_pass_first.object_id }}" + - "{{ create_pass_first.object_id }}" register: add_already_present_member_to_group_shouldpass - name: Validate nothing changed from already present member @@ -100,7 +94,6 @@ - name: Ensure member is not in group using object_id azure_rm_adgroup: - tenant: "{{ tenant_id }}" object_id: "{{ group_create_changed_shouldpass.object_id }}" state: 'present' absent_members: @@ -115,7 +108,6 @@ - name: Ensure member is not in group that is already not in group using display_name and mail_nickname azure_rm_adgroup: - tenant: "{{ tenant_id }}" display_name: "{{ resource_prefix }}-Group-Root" mail_nickname: "{{ resource_prefix }}-Group-Root" state: 'present' @@ -131,14 +123,12 @@ - name: Return a specific group using object_id azure_rm_adgroup_info: object_id: "{{ group_create_changed_shouldpass.object_id }}" - tenant: "{{ tenant_id }}" register: object_id_shouldpass - name: Return a specific group using object_id and return_owners azure_rm_adgroup_info: object_id: "{{ group_create_changed_shouldpass.object_id }}" return_owners: true - tenant: "{{ tenant_id }}" register: object_id_return_owners_shouldpass - name: Return a specific group using object_id and return_owners and return_group_members @@ -146,41 +136,35 @@ object_id: "{{ group_create_changed_shouldpass.object_id }}" return_owners: true return_group_members: true - tenant: "{{ tenant_id }}" register: object_id_return_owners_and_group_members_shouldpass - name: Return a specific group using object_id and member_groups azure_rm_adgroup_info: object_id: "{{ group_create_changed_shouldpass.object_id }}" return_member_groups: true - tenant: "{{ tenant_id }}" register: object_id_return_member_groups_shouldpass - name: Return a specific group using object_id and check_membership azure_rm_adgroup_info: object_id: "{{ group_create_changed_shouldpass.object_id }}" check_membership: "{{ create_pass_first.object_id }}" - tenant: "{{ tenant_id }}" register: object_id_return_check_membership_shouldpass - name: Return a specific group using displayName attribute azure_rm_adgroup_info: attribute_name: "displayName" attribute_value: "{{ group_create_changed_shouldpass.display_name }}" - tenant: "{{ tenant_id }}" register: displayname_attribute_shouldpass - name: Return a specific group using mailNickname filter azure_rm_adgroup_info: odata_filter: "mailNickname eq '{{ group_create_changed_shouldpass.mail_nickname }}'" - tenant: "{{ tenant_id }}" register: mailnickname_filter_shouldpass - name: Return a different group using displayName attribute azure_rm_adgroup_info: attribute_name: "displayName" attribute_value: "{{ create_pass_second.display_name }}" - tenant: "{{ tenant_id }}" register: displayname_attribute_different_shouldpass - name: Assert All Returns Are Equal @@ -196,7 +180,6 @@ - name: Delete group Group Root on object_id azure_rm_adgroup: - tenant: "{{ tenant_id }}" object_id: "{{ group_create_unchanged_shouldpass.object_id }}" state: 'absent' register: group_delete_group_root_shouldpass @@ -204,14 +187,12 @@ - name: Try to return now deleted group Group Root using object_id azure_rm_adgroup_info: object_id: "{{ group_create_unchanged_shouldpass.object_id }}" - tenant: "{{ tenant_id }}" register: get_deleted_object_group_root_shouldfail failed_when: - - '"failed to get ad group info Resource" not in get_deleted_object_group_root_shouldfail.msg' + - '"does not exist or one of its queried" not in get_deleted_object_group_root_shouldfail.msg' - name: Delete group Group Member 1 on object_id azure_rm_adgroup: - tenant: "{{ tenant_id }}" object_id: "{{ create_pass_first.object_id }}" state: 'absent' register: group_delete_group_member_1_shouldpass @@ -219,14 +200,12 @@ - name: Try to return now deleted group Group Member 1 using object_id azure_rm_adgroup_info: object_id: "{{ create_pass_first.object_id }}" - tenant: "{{ tenant_id }}" register: get_deleted_object_group_member_1_shouldfail failed_when: - - '"failed to get ad group info Resource" not in get_deleted_object_group_member_1_shouldfail.msg' + - '"does not exist or one of its queried" not in get_deleted_object_group_member_1_shouldfail.msg' - name: Delete group Group Member 2 on object_id azure_rm_adgroup: - tenant: "{{ tenant_id }}" object_id: "{{ create_pass_second.object_id }}" state: 'absent' register: group_delete_group_member_2_shouldpass @@ -234,7 +213,6 @@ - name: Try to return now deleted group Group Member 2 using object_id azure_rm_adgroup_info: object_id: "{{ create_pass_second.object_id }}" - tenant: "{{ tenant_id }}" register: get_deleted_object_group_member_2_shouldfail failed_when: - - '"failed to get ad group info Resource" not in get_deleted_object_group_member_2_shouldfail.msg' + - '"does not exist or one of its queried" not in get_deleted_object_group_member_2_shouldfail.msg' diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adpassword/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adpassword/tasks/main.yml index f430af17f..60c78ea80 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adpassword/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adpassword/tasks/main.yml @@ -1,14 +1,11 @@ - name: Set variables ansible.builtin.set_fact: app_id: "e0a62513-1d81-480e-a6dc-5c99cdd58d9a" - tenant_id: "72f988bf-86f1-41af-91ab-2d7cd011db47" app_object_id: "b52e8275-a1ee-4c4a-86ff-15992e0920ed" - name: Create first ad password by app_id azure_rm_adpassword: app_id: "{{ app_id }}" - value: "Password@032900001" - tenant: "{{ tenant_id }}" state: present register: ad_fact @@ -19,8 +16,6 @@ - name: Create second ad password by app_object_id azure_rm_adpassword: - value: "Password@032900002" - tenant: "{{ tenant_id }}" app_object_id: "{{ app_object_id }}" state: present register: ad_fact02 @@ -33,12 +28,10 @@ - name: Create ad service principal azure_rm_adserviceprincipal: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" state: present - name: Get ad service principal info azure_rm_adserviceprincipal_info: - tenant: "{{ tenant_id }}" app_id: "{{ app_id }}" register: sp_info - name: Print Service principals facts @@ -47,8 +40,6 @@ - name: Create third ad password by service_principal_object_id azure_rm_adpassword: - value: "Password@032900003" - tenant: "{{ tenant_id }}" service_principal_object_id: "{{ sp_info.service_principals[0].object_id }}" state: present register: ad_fact03 @@ -61,8 +52,6 @@ - name: Can't update ad password azure_rm_adpassword: app_id: "{{ app_id }}" - value: "Password@032900003" - tenant: "{{ tenant_id }}" key_id: "{{ ad_fact.key_id }}" app_object_id: "{{ app_object_id }}" state: present @@ -72,7 +61,6 @@ - name: Get ad password info azure_rm_adpassword_info: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" key_id: "{{ ad_fact.key_id }}" app_object_id: "{{ app_object_id }}" register: ad_info @@ -87,7 +75,6 @@ azure_rm_adpassword: app_id: "{{ app_id }}" key_id: "{{ ad_fact.key_id }}" - tenant: "{{ tenant_id }}" app_object_id: "{{ app_object_id }}" state: absent register: output @@ -100,7 +87,6 @@ - name: Delete all ad password azure_rm_adpassword: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" app_object_id: "{{ app_object_id }}" state: absent register: output diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adserviceprincipal/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adserviceprincipal/tasks/main.yml index b138740d6..a861afb7b 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adserviceprincipal/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_adserviceprincipal/tasks/main.yml @@ -1,18 +1,15 @@ - name: Set variables ansible.builtin.set_fact: app_id: "e0a62513-1d81-480e-a6dc-5c99cdd58d9a" - tenant_id: "72f988bf-86f1-41af-91ab-2d7cd011db47" - name: Delete ad service principal azure_rm_adserviceprincipal: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" state: absent - name: Create ad service principal azure_rm_adserviceprincipal: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" state: present register: ad_fact @@ -24,7 +21,6 @@ - name: Create ad service principal (idempontent) azure_rm_adserviceprincipal: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" state: present register: output @@ -36,7 +32,6 @@ - name: Get ad service principal info by app_id azure_rm_adserviceprincipal_info: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" register: ad_info - name: Assert The ad service principals facts @@ -48,14 +43,12 @@ - name: Update ad service principal app_role_assignmentrequired to True azure_rm_adserviceprincipal: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" app_role_assignment_required: true state: present register: output - name: Get ad service principal info by object_id azure_rm_adserviceprincipal_info: - tenant: "{{ tenant_id }}" object_id: "{{ ad_info.service_principals[0].object_id }}" register: ad_info @@ -68,7 +61,6 @@ - name: Delete ad service principal azure_rm_adserviceprincipal: app_id: "{{ app_id }}" - tenant: "{{ tenant_id }}" state: absent register: output diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_aduser/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_aduser/tasks/main.yml index e3c9225e6..c02a263bb 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_aduser/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_aduser/tasks/main.yml @@ -1,6 +1,5 @@ - name: Prepare facts ansible.builtin.set_fact: - tenant_id: "{{ azure_tenant }}" user_id: "user{{ 999999999999999999994 | random | to_uuid }}@contoso.com" object_id: "{{ 999999999999999999994 | random | to_uuid }}" user_principal_name: "{{ 999999999999999999994 | random | to_uuid }}" @@ -9,7 +8,6 @@ - name: Create test user azure_rm_aduser: user_principal_name: "{{ user_id }}" - tenant: "{{ tenant_id }}" state: "present" account_enabled: true display_name: "Test_{{ user_principal_name }}_Display_Name" @@ -26,7 +24,6 @@ - name: Try to update existing user - idempotent check azure_rm_aduser: user_principal_name: "{{ user_id }}" - tenant: "{{ tenant_id }}" state: "present" display_name: "Test_{{ user_principal_name }}_Display_Name" mail_nickname: "Test_{{ user_principal_name }}_mail_nickname" @@ -43,7 +40,6 @@ - name: User_principal_name Should Pass azure_rm_aduser_info: user_principal_name: "{{ user_id }}" - tenant: "{{ tenant_id }}" register: get_user_should_pass - name: Assert user was created and account is enabled @@ -55,7 +51,6 @@ - name: Update test user azure_rm_aduser: user_principal_name: "{{ user_id }}" - tenant: "{{ tenant_id }}" state: "present" account_enabled: false register: update_user_should_pass @@ -63,7 +58,6 @@ - name: User_principal_name on updated user Should Pass azure_rm_aduser_info: user_principal_name: "{{ user_id }}" - tenant: "{{ tenant_id }}" register: get_updated_user_should_pass - name: Assert user was updated and account is disabled @@ -75,14 +69,12 @@ - name: Delete test user azure_rm_aduser: user_principal_name: "{{ user_id }}" - tenant: "{{ tenant_id }}" state: "absent" register: delete_user_should_pass - name: User_principal_name Should Fail azure_rm_aduser_info: user_principal_name: "{{ user_id }}" - tenant: "{{ tenant_id }}" register: get_user_should_fail ignore_errors: true @@ -91,21 +83,8 @@ that: - "get_user_should_fail['failed'] == True" -- name: Run with bad tenant Should Fail - azure_rm_aduser_info: - user_principal_name: "{{ user_id }}" - tenant: None - register: missing_tenant - ignore_errors: true - -- name: Assert task failed - ansible.builtin.assert: - that: - - "missing_tenant['failed'] == True" - - name: Missing any identifiers Should Fail azure_rm_aduser_info: - tenant: "{{ tenant_id }}" register: missing_any_identifiers ignore_errors: true @@ -118,7 +97,6 @@ azure_rm_aduser_info: user_principal_name: "{{ user_id }}" object_id: "{{ object_id }}" - tenant: "{{ tenant_id }}" register: too_many_identifiers ignore_errors: true @@ -130,7 +108,6 @@ - name: Missing attribute_value Should Fail azure_rm_aduser_info: attribute_name: proxyAddresses - tenant: "{{ tenant_id }}" register: missing_attribute_value ignore_errors: true @@ -142,7 +119,6 @@ - name: Missing attribute_name Should Fail azure_rm_aduser_info: attribute_value: SMTP:user@contoso.com - tenant: "{{ tenant_id }}" register: missing_attribute_name ignore_errors: true @@ -155,7 +131,6 @@ azure_rm_aduser_info: all: true user_principal_name: "{{ user_id }}" - tenant: "{{ tenant_id }}" register: using_all_with_principal_name ignore_errors: true diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_aksagentpool/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_aksagentpool/tasks/main.yml index 26f71c211..7c255f9ad 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_aksagentpool/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_aksagentpool/tasks/main.yml @@ -33,6 +33,42 @@ outbound_type: loadBalancer register: output +- name: Get managecluster admin credentials + azure_rm_akscredentials_info: + resource_group: "{{ resource_group }}" + cluster_name: "min{{ rpfx }}" + show_admin_credentials: true + register: output + +- name: Verify that the cluster credentials are successfully obtained + ansible.builtin.assert: + that: + - output.cluster_credentials | length == 1 + +- name: Get managecluster user credentials + azure_rm_akscredentials_info: + resource_group: "{{ resource_group }}" + cluster_name: "min{{ rpfx }}" + show_user_credentials: true + register: output + +- name: Verify that the cluster credentials are successfully obtained + ansible.builtin.assert: + that: + - output.cluster_credentials | length == 1 + +- name: Get managecluster monitor user credentials + azure_rm_akscredentials_info: + resource_group: "{{ resource_group }}" + cluster_name: "min{{ rpfx }}" + show_monitor_credentials: true + register: output + +- name: Verify that the cluster credentials are successfully obtained + ansible.builtin.assert: + that: + - output.cluster_credentials | length == 1 + - name: Get cluster's node agent pool info azure_rm_aksagentpool_info: resource_group: "{{ resource_group }}" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_apimanagement/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_apimanagement/tasks/main.yml index d7d9b5fc5..2ca941b51 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_apimanagement/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_apimanagement/tasks/main.yml @@ -14,7 +14,7 @@ sku_name: Developer sku_capacity: 1 -- name: Pause for 60 mimutes to create api mangement +- name: Pause for 60 minutes to create api management ansible.builtin.pause: minutes: 60 changed_when: true diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_autoscale/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_autoscale/tasks/main.yml index 4a19ee340..a70411975 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_autoscale/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_autoscale/tasks/main.yml @@ -34,6 +34,7 @@ tier: Standard managed_disk_type: Standard_LRS os_disk_caching: ReadWrite + orchestration_mode: Uniform image: offer: 0001-com-ubuntu-server-focal publisher: Canonical diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_bastionhost/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_bastionhost/tasks/main.yml index e38f91eac..ac7340c4b 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_bastionhost/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_bastionhost/tasks/main.yml @@ -50,7 +50,7 @@ id: "{{ publicip_output.publicipaddresses[0].id }}" private_ip_allocation_method: Dynamic sku: - name: Standard + name: Basic enable_tunneling: false enable_shareable_link: false enable_ip_connect: false @@ -74,7 +74,7 @@ id: "{{ publicip_output.publicipaddresses[0].id }}" private_ip_allocation_method: Dynamic sku: - name: Standard + name: Basic enable_tunneling: false enable_shareable_link: false enable_ip_connect: false @@ -102,7 +102,7 @@ id: "{{ publicip_output.publicipaddresses[0].id }}" private_ip_allocation_method: Dynamic sku: - name: Standard + name: Basic enable_tunneling: false enable_shareable_link: false enable_ip_connect: false @@ -118,9 +118,9 @@ that: - not output.changed -- name: Pause for 20 mimutes to Bastion host updating +- name: Pause for 15 mimutes to Bastion host updating ansible.builtin.command: - sleep 1200 + sleep 900 changed_when: true - name: Update bastion host @@ -135,7 +135,7 @@ id: "{{ publicip_output.publicipaddresses[0].id }}" private_ip_allocation_method: Dynamic sku: - name: Basic + name: Standard enable_tunneling: true enable_shareable_link: true enable_ip_connect: true @@ -166,7 +166,12 @@ - output.bastion_host[0].enable_shareable_link == true - output.bastion_host[0].enable_tunneling == true - output.bastion_host[0].scale_units == 8 - - output.bastion_host[0].sku.name == 'Basic' + - output.bastion_host[0].sku.name == 'Standard' + +- name: Pause for 15 mimutes to Bastion host deleting + ansible.builtin.command: + sleep 900 + changed_when: true - name: Delete bastion host azure_rm_bastionhost: diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_cdnprofile/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_cdnprofile/tasks/main.yml index 92012c6f5..a537f1d8b 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_cdnprofile/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_cdnprofile/tasks/main.yml @@ -24,7 +24,8 @@ - name: Check there is no CDN profile created ansible.builtin.assert: - { that: "{{ fact.cdnprofiles | length }} == 0" } + that: + - fact.cdnprofiles | length == 0 - name: Create a CDN profile azure_rm_cdnprofile: diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_datalakestore/aliases b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_datalakestore/aliases index 5d29c6c4d..6feba04aa 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_datalakestore/aliases +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_datalakestore/aliases @@ -1,3 +1,4 @@ cloud/azure shippable/azure/group10 destructive +disabled diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_datalakestore/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_datalakestore/tasks/main.yml index c72dfc2ce..8dc08f8b7 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_datalakestore/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_datalakestore/tasks/main.yml @@ -71,7 +71,7 @@ - output.changed - output.state.virtual_network_rules | length == 1 - output.state.virtual_network_rules[0].name == "vnet_rule_1" - - output.state.virtual_network_rules[0].subnet_id == "{{ subnet_output.state.id }}" + - output.state.virtual_network_rules[0].subnet_id == subnet_output.state.id - name: Update data lake store to change encryption state that must fail azure_rm_datalakestore: @@ -154,7 +154,7 @@ - output.state.trusted_id_provider_state == "Disabled" - output.state.virtual_network_rules | length == 1 - output.state.virtual_network_rules[0].name == "vnet_rule_1" - - output.state.virtual_network_rules[0].subnet_id == "{{ subnet_output.state.id }}" + - output.state.virtual_network_rules[0].subnet_id == subnet_output.state.id - name: Create new data lake store (Idempotence) azure_rm_datalakestore: diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/lookup_plugins/azure_service_principal_attribute.py b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/lookup_plugins/azure_service_principal_attribute.py deleted file mode 100644 index c6f488f13..000000000 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/lookup_plugins/azure_service_principal_attribute.py +++ /dev/null @@ -1,92 +0,0 @@ -# (c) 2018 Yunge Zhu, -# (c) 2017 Ansible Project -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -DOCUMENTATION = """ -lookup: azure_service_principal_attribute - -requirements: - - azure-graphrbac - -author: - - Yunge Zhu - -version_added: "2.7" - -short_description: Look up Azure service principal attributes. - -description: - - Describes object id of your Azure service principal account. -options: - azure_client_id: - description: azure service principal client id. - azure_secret: - description: azure service principal secret - azure_tenant: - description: azure tenant - azure_cloud_environment: - description: azure cloud environment -""" - -EXAMPLES = """ -set_fact: - object_id: "{{ lookup('azure_service_principal_attribute', - azure_client_id=azure_client_id, - azure_secret=azure_secret, - azure_tenant=azure_secret) }}" -""" - -RETURN = """ -_raw: - description: - Returns object id of service principal. -""" - -from ansible.errors import AnsibleError -from ansible.plugins.lookup import LookupBase -from ansible.module_utils._text import to_native - -try: - from azure.common.credentials import ServicePrincipalCredentials - from azure.graphrbac import GraphRbacManagementClient - from azure.cli.core import cloud as azure_cloud -except ImportError: - raise AnsibleError( - "The lookup azure_service_principal_attribute requires azure.graphrbac, msrest") - - -class LookupModule(LookupBase): - def run(self, terms, variables, **kwargs): - - self.set_options(direct=kwargs) - - credentials = {} - credentials['azure_client_id'] = self.get_option('azure_client_id', None) - credentials['azure_secret'] = self.get_option('azure_secret', None) - credentials['azure_tenant'] = self.get_option('azure_tenant', 'common') - - if credentials['azure_client_id'] is None or credentials['azure_secret'] is None: - raise AnsibleError("Must specify azure_client_id and azure_secret") - - _cloud_environment = azure_cloud.AZURE_PUBLIC_CLOUD - if self.get_option('azure_cloud_environment', None) is not None: - cloud_environment = azure_cloud.get_cloud_from_metadata_endpoint(credentials['azure_cloud_environment']) - - try: - azure_credentials = ServicePrincipalCredentials(client_id=credentials['azure_client_id'], - secret=credentials['azure_secret'], - tenant=credentials['azure_tenant'], - resource=_cloud_environment.endpoints.active_directory_graph_resource_id) - - client = GraphRbacManagementClient(azure_credentials, credentials['azure_tenant'], - base_url=_cloud_environment.endpoints.active_directory_graph_resource_id) - - response = list(client.service_principals.list(filter="appId eq '{0}'".format(credentials['azure_client_id']))) - sp = response[0] - - return sp.object_id.split(',') - except Exception as ex: - raise AnsibleError("Failed to get service principal object id: %s" % to_native(ex)) - return False diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/tasks/main.yml index 0d805598e..ea767ed63 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_diskencryptionset/tasks/main.yml @@ -7,7 +7,7 @@ - name: Lookup service principal object id ansible.builtin.set_fact: - object_id: "{{ lookup('azure_service_principal_attribute', + object_id: "{{ lookup('azure.azcollection.azure_service_principal_attribute', azure_client_id=azure_client_id, azure_secret=azure_secret, azure_tenant=tenant_id) }}" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_gallery/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_gallery/tasks/main.yml index b9705dc34..8270b04ce 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_gallery/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_gallery/tasks/main.yml @@ -3,6 +3,64 @@ rpfx: "{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}" run_once: true +- name: Lookup service principal object id + ansible.builtin.set_fact: + object_id: "{{ lookup('azure.azcollection.azure_service_principal_attribute', + azure_client_id=azure_client_id, + azure_secret=azure_secret, + azure_tenant=azure_tenant) }}" + register: object_id_facts + +- name: Create a key vault + azure_rm_keyvault: + resource_group: "{{ resource_group }}" + vault_name: "myvault{{ rpfx }}" + enabled_for_disk_encryption: true + vault_tenant: "{{ azure_tenant }}" + sku: + name: standard + family: A + access_policies: + - tenant_id: "{{ azure_tenant }}" + object_id: "{{ object_id }}" + keys: + - get + - list + - wrapkey + - unwrapkey + - create + - update + - import + - delete + - backup + - restore + - recover + - purge + +- name: Create a key in key vault + azure_rm_keyvaultkey: + key_name: testkey + keyvault_uri: https://myvault{{ rpfx }}.vault.azure.net + +- name: Get latest version of key + azure_rm_keyvaultkey_info: + vault_uri: https://myvault{{ rpfx }}.vault.azure.net + name: testkey + register: results + +- name: Assert the key vault facts + ansible.builtin.set_fact: + key_url: "{{ results['keys'][0]['kid'] }}" + +- name: Create disk encryption set + azure_rm_diskencryptionset: + resource_group: "{{ resource_group }}" + name: "des{{ rpfx }}" + source_vault: "myvault{{ rpfx }}" + key_url: "{{ key_url }}" + state: present + register: des_results + - name: Create virtual network azure_rm_virtualnetwork: resource_group: "{{ resource_group }}" @@ -53,11 +111,6 @@ name: "vmforimage{{ rpfx }}" register: output -- name: Pause for 10 mimutes to VM updating - ansible.builtin.command: - sleep 600 - changed_when: true - - name: Create a snapshot by importing an unmanaged blob from the same subscription. azure_rm_snapshot: resource_group: "{{ resource_group }}" @@ -151,7 +204,7 @@ name: myGallery{{ rpfx }} register: output -- name: Assedrt the gallery facts +- name: Assert the gallery facts ansible.builtin.assert: that: - not output.changed @@ -174,6 +227,10 @@ offer: myOfferName sku: mySkuName description: Image Description + hypervgeneration: V2 + features: + - name: SecurityType + value: TrustedLaunch register: output - name: Assert the gallery image created @@ -194,6 +251,10 @@ offer: myOfferName sku: mySkuName description: Image Description + hypervgeneration: V2 + features: + - name: SecurityType + value: TrustedLaunch register: output - name: Assert the gallery image idempotent result @@ -214,6 +275,10 @@ offer: myOfferName sku: mySkuName description: Image Description XXXs + hypervgeneration: V2 + features: + - name: SecurityType + value: TrustedLaunch register: output - name: Assert the gallery image updated @@ -254,10 +319,21 @@ target_regions: - name: eastus regional_replica_count: 1 + encryption: + data_disk_images: + - disk_encryption_set_id: "{{ des_results.state.id }}" + os_disk_image: + disk_encryption_set_id: "{{ des_results.state.id }}" - name: westus regional_replica_count: 2 + encryption: + data_disk_images: + - disk_encryption_set_id: "{{ des_results.state.id }}" + os_disk_image: + disk_encryption_set_id: "{{ des_results.state.id }}" storage_account_type: Standard_ZRS - managed_image: + storage_profile: + source_image: name: testimagea resource_group: "{{ resource_group }}" register: output @@ -282,10 +358,21 @@ target_regions: - name: eastus regional_replica_count: 1 + encryption: + data_disk_images: + - disk_encryption_set_id: "{{ des_results.state.id }}" + os_disk_image: + disk_encryption_set_id: "{{ des_results.state.id }}" - name: westus regional_replica_count: 2 + encryption: + data_disk_images: + - disk_encryption_set_id: "{{ des_results.state.id }}" + os_disk_image: + disk_encryption_set_id: "{{ des_results.state.id }}" storage_account_type: Standard_ZRS - managed_image: + storage_profile: + source_image: name: testimagea resource_group: "{{ resource_group }}" register: output @@ -310,10 +397,21 @@ target_regions: - name: eastus regional_replica_count: 1 + encryption: + data_disk_images: + - disk_encryption_set_id: "{{ des_results.state.id }}" + os_disk_image: + disk_encryption_set_id: "{{ des_results.state.id }}" - name: westus regional_replica_count: 2 + encryption: + data_disk_images: + - disk_encryption_set_id: "{{ des_results.state.id }}" + os_disk_image: + disk_encryption_set_id: "{{ des_results.state.id }}" storage_account_type: Standard_ZRS - managed_image: + storage_profile: + source_image: name: testimagea resource_group: "{{ resource_group }}" register: output diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/lookup_plugins/azure_service_principal_attribute.py b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/lookup_plugins/azure_service_principal_attribute.py deleted file mode 100644 index c6f488f13..000000000 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/lookup_plugins/azure_service_principal_attribute.py +++ /dev/null @@ -1,92 +0,0 @@ -# (c) 2018 Yunge Zhu, -# (c) 2017 Ansible Project -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -DOCUMENTATION = """ -lookup: azure_service_principal_attribute - -requirements: - - azure-graphrbac - -author: - - Yunge Zhu - -version_added: "2.7" - -short_description: Look up Azure service principal attributes. - -description: - - Describes object id of your Azure service principal account. -options: - azure_client_id: - description: azure service principal client id. - azure_secret: - description: azure service principal secret - azure_tenant: - description: azure tenant - azure_cloud_environment: - description: azure cloud environment -""" - -EXAMPLES = """ -set_fact: - object_id: "{{ lookup('azure_service_principal_attribute', - azure_client_id=azure_client_id, - azure_secret=azure_secret, - azure_tenant=azure_secret) }}" -""" - -RETURN = """ -_raw: - description: - Returns object id of service principal. -""" - -from ansible.errors import AnsibleError -from ansible.plugins.lookup import LookupBase -from ansible.module_utils._text import to_native - -try: - from azure.common.credentials import ServicePrincipalCredentials - from azure.graphrbac import GraphRbacManagementClient - from azure.cli.core import cloud as azure_cloud -except ImportError: - raise AnsibleError( - "The lookup azure_service_principal_attribute requires azure.graphrbac, msrest") - - -class LookupModule(LookupBase): - def run(self, terms, variables, **kwargs): - - self.set_options(direct=kwargs) - - credentials = {} - credentials['azure_client_id'] = self.get_option('azure_client_id', None) - credentials['azure_secret'] = self.get_option('azure_secret', None) - credentials['azure_tenant'] = self.get_option('azure_tenant', 'common') - - if credentials['azure_client_id'] is None or credentials['azure_secret'] is None: - raise AnsibleError("Must specify azure_client_id and azure_secret") - - _cloud_environment = azure_cloud.AZURE_PUBLIC_CLOUD - if self.get_option('azure_cloud_environment', None) is not None: - cloud_environment = azure_cloud.get_cloud_from_metadata_endpoint(credentials['azure_cloud_environment']) - - try: - azure_credentials = ServicePrincipalCredentials(client_id=credentials['azure_client_id'], - secret=credentials['azure_secret'], - tenant=credentials['azure_tenant'], - resource=_cloud_environment.endpoints.active_directory_graph_resource_id) - - client = GraphRbacManagementClient(azure_credentials, credentials['azure_tenant'], - base_url=_cloud_environment.endpoints.active_directory_graph_resource_id) - - response = list(client.service_principals.list(filter="appId eq '{0}'".format(credentials['azure_client_id']))) - sp = response[0] - - return sp.object_id.split(',') - except Exception as ex: - raise AnsibleError("Failed to get service principal object id: %s" % to_native(ex)) - return False diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/tasks/main.yml index 07f324d22..ef6b53a4d 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvault/tasks/main.yml @@ -6,7 +6,7 @@ - name: Lookup service principal object id ansible.builtin.set_fact: - object_id: "{{ lookup('azure_service_principal_attribute', + object_id: "{{ lookup('azure.azcollection.azure_service_principal_attribute', azure_client_id=azure_client_id, azure_secret=azure_secret, azure_tenant=tenant_id) }}" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/lookup_plugins/azure_service_principal_attribute.py b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/lookup_plugins/azure_service_principal_attribute.py deleted file mode 100644 index c6f488f13..000000000 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/lookup_plugins/azure_service_principal_attribute.py +++ /dev/null @@ -1,92 +0,0 @@ -# (c) 2018 Yunge Zhu, -# (c) 2017 Ansible Project -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -DOCUMENTATION = """ -lookup: azure_service_principal_attribute - -requirements: - - azure-graphrbac - -author: - - Yunge Zhu - -version_added: "2.7" - -short_description: Look up Azure service principal attributes. - -description: - - Describes object id of your Azure service principal account. -options: - azure_client_id: - description: azure service principal client id. - azure_secret: - description: azure service principal secret - azure_tenant: - description: azure tenant - azure_cloud_environment: - description: azure cloud environment -""" - -EXAMPLES = """ -set_fact: - object_id: "{{ lookup('azure_service_principal_attribute', - azure_client_id=azure_client_id, - azure_secret=azure_secret, - azure_tenant=azure_secret) }}" -""" - -RETURN = """ -_raw: - description: - Returns object id of service principal. -""" - -from ansible.errors import AnsibleError -from ansible.plugins.lookup import LookupBase -from ansible.module_utils._text import to_native - -try: - from azure.common.credentials import ServicePrincipalCredentials - from azure.graphrbac import GraphRbacManagementClient - from azure.cli.core import cloud as azure_cloud -except ImportError: - raise AnsibleError( - "The lookup azure_service_principal_attribute requires azure.graphrbac, msrest") - - -class LookupModule(LookupBase): - def run(self, terms, variables, **kwargs): - - self.set_options(direct=kwargs) - - credentials = {} - credentials['azure_client_id'] = self.get_option('azure_client_id', None) - credentials['azure_secret'] = self.get_option('azure_secret', None) - credentials['azure_tenant'] = self.get_option('azure_tenant', 'common') - - if credentials['azure_client_id'] is None or credentials['azure_secret'] is None: - raise AnsibleError("Must specify azure_client_id and azure_secret") - - _cloud_environment = azure_cloud.AZURE_PUBLIC_CLOUD - if self.get_option('azure_cloud_environment', None) is not None: - cloud_environment = azure_cloud.get_cloud_from_metadata_endpoint(credentials['azure_cloud_environment']) - - try: - azure_credentials = ServicePrincipalCredentials(client_id=credentials['azure_client_id'], - secret=credentials['azure_secret'], - tenant=credentials['azure_tenant'], - resource=_cloud_environment.endpoints.active_directory_graph_resource_id) - - client = GraphRbacManagementClient(azure_credentials, credentials['azure_tenant'], - base_url=_cloud_environment.endpoints.active_directory_graph_resource_id) - - response = list(client.service_principals.list(filter="appId eq '{0}'".format(credentials['azure_client_id']))) - sp = response[0] - - return sp.object_id.split(',') - except Exception as ex: - raise AnsibleError("Failed to get service principal object id: %s" % to_native(ex)) - return False diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/tasks/main.yml index 869cb7257..4eb819546 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultkey/tasks/main.yml @@ -6,7 +6,7 @@ - name: Lookup service principal object id ansible.builtin.set_fact: - object_id: "{{ lookup('azure_service_principal_attribute', + object_id: "{{ lookup('azure.azcollection.azure_service_principal_attribute', azure_client_id=azure_client_id, azure_secret=azure_secret, azure_tenant=tenant_id) }}" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/lookup_plugins/azure_service_principal_attribute.py b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/lookup_plugins/azure_service_principal_attribute.py deleted file mode 100644 index c6f488f13..000000000 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/lookup_plugins/azure_service_principal_attribute.py +++ /dev/null @@ -1,92 +0,0 @@ -# (c) 2018 Yunge Zhu, -# (c) 2017 Ansible Project -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -DOCUMENTATION = """ -lookup: azure_service_principal_attribute - -requirements: - - azure-graphrbac - -author: - - Yunge Zhu - -version_added: "2.7" - -short_description: Look up Azure service principal attributes. - -description: - - Describes object id of your Azure service principal account. -options: - azure_client_id: - description: azure service principal client id. - azure_secret: - description: azure service principal secret - azure_tenant: - description: azure tenant - azure_cloud_environment: - description: azure cloud environment -""" - -EXAMPLES = """ -set_fact: - object_id: "{{ lookup('azure_service_principal_attribute', - azure_client_id=azure_client_id, - azure_secret=azure_secret, - azure_tenant=azure_secret) }}" -""" - -RETURN = """ -_raw: - description: - Returns object id of service principal. -""" - -from ansible.errors import AnsibleError -from ansible.plugins.lookup import LookupBase -from ansible.module_utils._text import to_native - -try: - from azure.common.credentials import ServicePrincipalCredentials - from azure.graphrbac import GraphRbacManagementClient - from azure.cli.core import cloud as azure_cloud -except ImportError: - raise AnsibleError( - "The lookup azure_service_principal_attribute requires azure.graphrbac, msrest") - - -class LookupModule(LookupBase): - def run(self, terms, variables, **kwargs): - - self.set_options(direct=kwargs) - - credentials = {} - credentials['azure_client_id'] = self.get_option('azure_client_id', None) - credentials['azure_secret'] = self.get_option('azure_secret', None) - credentials['azure_tenant'] = self.get_option('azure_tenant', 'common') - - if credentials['azure_client_id'] is None or credentials['azure_secret'] is None: - raise AnsibleError("Must specify azure_client_id and azure_secret") - - _cloud_environment = azure_cloud.AZURE_PUBLIC_CLOUD - if self.get_option('azure_cloud_environment', None) is not None: - cloud_environment = azure_cloud.get_cloud_from_metadata_endpoint(credentials['azure_cloud_environment']) - - try: - azure_credentials = ServicePrincipalCredentials(client_id=credentials['azure_client_id'], - secret=credentials['azure_secret'], - tenant=credentials['azure_tenant'], - resource=_cloud_environment.endpoints.active_directory_graph_resource_id) - - client = GraphRbacManagementClient(azure_credentials, credentials['azure_tenant'], - base_url=_cloud_environment.endpoints.active_directory_graph_resource_id) - - response = list(client.service_principals.list(filter="appId eq '{0}'".format(credentials['azure_client_id']))) - sp = response[0] - - return sp.object_id.split(',') - except Exception as ex: - raise AnsibleError("Failed to get service principal object id: %s" % to_native(ex)) - return False diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/tasks/main.yml index d91641d80..cc228c2d7 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_keyvaultsecret/tasks/main.yml @@ -6,7 +6,7 @@ - name: Lookup service principal object id ansible.builtin.set_fact: - object_id: "{{ lookup('azure_service_principal_attribute', + object_id: "{{ lookup('azure.azcollection.azure_service_principal_attribute', azure_client_id=azure_client_id, azure_secret=azure_secret, azure_tenant=tenant_id) }}" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_openshiftmanagedcluster/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_openshiftmanagedcluster/tasks/main.yml index 969347b8d..3dd784e8a 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_openshiftmanagedcluster/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_openshiftmanagedcluster/tasks/main.yml @@ -114,6 +114,50 @@ ansible.builtin.assert: that: output['clusters'] | length >= 1 +- name: Fetch kubeconfig file to register + azure_rm_openshiftmanagedclusterkubeconfig_info: + name: "{{ cluster_name }}" + resource_group: "{{ resource_group }}" + register: kubeconfig_reg + +- name: Assert the kubeconfig file facts + ansible.builtin.assert: + that: kubeconfig_reg['kubeconfig'] | length >= 1 + +- name: Fetch kubeconfig file with specific name + azure_rm_openshiftmanagedclusterkubeconfig_info: + name: "{{ cluster_name }}" + resource_group: "{{ resource_group }}" + path: "/home/testuser/{{ cluster_name }}" + +- name: Check for created named kubeconfig file + ansible.builtin.stat: + path: "/home/testuser/{{ cluster_name }}" + register: named_kubeconf_file + +- name: Assert kubeconfig file creation with specific name + ansible.builtin.assert: + that: + - named_kubeconf_file.stat.exists + - named_kubeconf_file.stat.size != 0 + +- name: Fetch kubeconfig file with default name (kubeconfig) + azure_rm_openshiftmanagedclusterkubeconfig_info: + name: "{{ cluster_name }}" + resource_group: "{{ resource_group }}" + path: "/home/testuser/" + +- name: Check for created default kubeconfig file + ansible.builtin.stat: + path: "/home/testuser/kubeconfig" + register: default_kubeconf_file + +- name: Assert kubeconfig file creation with default name + ansible.builtin.assert: + that: + - default_kubeconf_file.stat.exists + - default_kubeconf_file.stat.size != 0 + - name: Delete openshift cluster azure_rm_openshiftmanagedcluster: resource_group: "{{ resource_group }}" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/aliases b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/aliases new file mode 100644 index 000000000..5d29c6c4d --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/aliases @@ -0,0 +1,3 @@ +cloud/azure +shippable/azure/group10 +destructive diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/meta/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/meta/main.yml new file mode 100644 index 000000000..95e1952f9 --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - setup_azure diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/tasks/main.yml new file mode 100644 index 000000000..2add54e1e --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_postgresqlflexibleserver/tasks/main.yml @@ -0,0 +1,356 @@ +- name: Prepare random number + ansible.builtin.set_fact: + rpfx: "{{ resource_group | hash('md5') | truncate(8, True, '') }}" + new_resource_group: "{{ resource_group }}-02" + run_once: true + +- name: Create a new resource group + azure_rm_resourcegroup: + name: "{{ new_resource_group }}" + location: southeastasia + +- name: Create post gresql flexible server (check mode) + azure_rm_postgresqlflexibleserver: + resource_group: "{{ new_resource_group }}" + name: postflexible{{ rpfx }} + sku: + name: Standard_B1ms + tier: Burstable + administrator_login: azureuser + administrator_login_password: Fred@0329 + version: 12 + storage: + storage_size_gb: 128 + fully_qualified_domain_name: st-private-dns-zone.postgres.database.azure.com + backup: + backup_retention_days: 7 + geo_redundant_backup: Disabled + network: + public_network_access: Disabled + maintenance_window: + custom_window: Enabled + start_hour: 8 + start_minute: 4 + day_of_week: 3 + availability_zone: 2 + create_mode: Create + check_mode: true + +- name: Create post gresql flexible server + azure_rm_postgresqlflexibleserver: + resource_group: "{{ new_resource_group }}" + name: postflexible{{ rpfx }} + sku: + name: Standard_B1ms + tier: Burstable + administrator_login: azureuser + administrator_login_password: Fred@0329 + version: 12 + storage: + storage_size_gb: 128 + fully_qualified_domain_name: st-private-dns-zone.postgres.database.azure.com + backup: + backup_retention_days: 7 + geo_redundant_backup: Disabled + network: + public_network_access: Disabled + maintenance_window: + custom_window: Enabled + start_hour: 8 + start_minute: 4 + day_of_week: 3 + availability_zone: 2 + create_mode: Create + register: output + +- name: Assert the post grep sql server create success + ansible.builtin.assert: + that: + - output.changed + +- name: Create post gresql flexible server (Idempotent Test) + azure_rm_postgresqlflexibleserver: + resource_group: "{{ new_resource_group }}" + name: postflexible{{ rpfx }} + sku: + name: Standard_B1ms + tier: Burstable + administrator_login: azureuser + administrator_login_password: Fred@0329 + version: 12 + storage: + storage_size_gb: 128 + fully_qualified_domain_name: st-private-dns-zone.postgres.database.azure.com + backup: + backup_retention_days: 7 + geo_redundant_backup: Disabled + network: + public_network_access: Disabled + maintenance_window: + custom_window: Enabled + start_hour: 8 + start_minute: 4 + day_of_week: 3 + availability_zone: 2 + create_mode: Create + register: output + +- name: Assert the post grep sql server create success + ansible.builtin.assert: + that: + - not output.changed + +- name: Update post gresql flexible server with multiple parameters + azure_rm_postgresqlflexibleserver: + resource_group: "{{ new_resource_group }}" + name: postflexible{{ rpfx }} + sku: + name: Standard_B1ms + tier: Burstable + administrator_login: azureuser + administrator_login_password: Fred@0329 + version: 12 + storage: + storage_size_gb: 256 + fully_qualified_domain_name: st-private-dns-zone.postgres.database.azure.com + backup: + backup_retention_days: 7 + geo_redundant_backup: Disabled + network: + public_network_access: Disabled + maintenance_window: + custom_window: Enabled + start_hour: 10 + start_minute: 6 + day_of_week: 6 + availability_zone: 2 + create_mode: Create + tags: + key1: value1 + key2: value2 + register: output + +- name: Assert the post grep sql server update success + ansible.builtin.assert: + that: + - output.changed + +- name: Gather facts postgresql flexible Server + azure_rm_postgresqlflexibleserver_info: + resource_group: "{{ new_resource_group }}" + name: postflexible{{ rpfx }} + register: output + +- name: Assert the post gresql server is well created + ansible.builtin.assert: + that: + - output.servers[0].tags | length == 2 + - output.servers[0].storage.storage_size_gb == 256 + - output.servers[0].maintenance_window.custom_window == 'Enabled' + - output.servers[0].maintenance_window.day_of_week == 6 + - output.servers[0].maintenance_window.start_hour == 10 + - output.servers[0].maintenance_window.start_minute == 6 + +- name: Create a post gresql flexible database(check mode) + azure_rm_postgresqlflexibledatabase: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + name: database{{ rpfx }} + collation: en_US.utf8 + charset: UTF8 + check_mode: true + +- name: Create a post gresql flexible database + azure_rm_postgresqlflexibledatabase: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + name: database{{ rpfx }} + collation: en_US.utf8 + charset: UTF8 + register: output + +- name: Assert the post gresql flexible database created success + ansible.builtin.assert: + that: + - output.changed + +- name: Create a post gresql flexible database(Idempotent test) + azure_rm_postgresqlflexibledatabase: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + name: database{{ rpfx }} + collation: en_US.utf8 + charset: UTF8 + register: output + +- name: Assert the post gresql flexible database no changed + ansible.builtin.assert: + that: + - not output.changed + +- name: Get the post gresql flexibe database facts + azure_rm_postgresqlflexibledatabase_info: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + name: database{{ rpfx }} + register: output + +- name: Assert the post gresql flexible database facts + ansible.builtin.assert: + that: + - output.databases[0].collation == 'en_US.utf8' + - output.databases[0].charset == 'UTF8' + +- name: Delete the post gresql flexibe database + azure_rm_postgresqlflexibledatabase: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + name: database{{ rpfx }} + state: absent + register: output + +- name: Assert the post gresql flexible database deleted + ansible.builtin.assert: + that: + - output.changed + +- name: Create a post gresql flexible firwall rule (Check mode) + azure_rm_postgresqlflexiblefirewallrule: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + name: firewall{{ rpfx }} + start_ip_address: 10.0.0.15 + end_ip_address: 10.0.0.20 + check_mode: true + +- name: Create the post gresql flexible firwall rule + azure_rm_postgresqlflexiblefirewallrule: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + name: firewall{{ rpfx }} + start_ip_address: 10.0.0.15 + end_ip_address: 10.0.0.20 + register: output + +- name: Assert the post grepsql flexible firewall rule created well + ansible.builtin.assert: + that: + - output.changed + +- name: Create the post gresql flexible firwall rule (Idempotent test) + azure_rm_postgresqlflexiblefirewallrule: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + name: firewall{{ rpfx }} + start_ip_address: 10.0.0.15 + end_ip_address: 10.0.0.20 + register: output + +- name: Assert the post grepsql flexible firewall rule support idempotent test + ansible.builtin.assert: + that: + - not output.changed + +- name: Update the post gresql flexible firwall rule + azure_rm_postgresqlflexiblefirewallrule: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + name: firewall{{ rpfx }} + start_ip_address: 10.0.0.16 + end_ip_address: 10.0.0.18 + register: output + +- name: Assert the post grepsql flexible server update well + ansible.builtin.assert: + that: + - output.changed + +- name: Get the post gresql flexible firwall rule facts + azure_rm_postgresqlflexiblefirewallrule_info: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + name: firewall{{ rpfx }} + register: output + +- name: Assert the post gresql flexible firewall rule facts + ansible.builtin.assert: + that: + - output.firewall_rules[0].start_ip_address == '10.0.0.16' + - output.firewall_rules[0].end_ip_address == '10.0.0.18' + +- name: Delete the post gresql flexible firwall rule + azure_rm_postgresqlflexiblefirewallrule: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + name: firewall{{ rpfx }} + state: absent + register: output + +- name: Assert the post grepsql flexible server delete well + ansible.builtin.assert: + that: + - output.changed + +- name: List the post gresql flexible config facts + azure_rm_postgresqlflexibleconfiguration_info: + resource_group: "{{ new_resource_group }}" + server_name: postflexible{{ rpfx }} + register: output + +- name: Assert the post gresql flexible server configuration + ansible.builtin.assert: + that: + - output.settings | length > 0 + +- name: Stop the post gresql flexible server + azure_rm_postgresqlflexibleserver: + resource_group: "{{ new_resource_group }}" + name: postflexible{{ rpfx }} + is_stop: true + register: output + +- name: Assert the post grep sql server stop success + ansible.builtin.assert: + that: + - output.changed + +- name: Pause for 10 mimutes + ansible.builtin.pause: + minutes: 10 + changed_when: true + +- name: Restart post gresql flexible server + azure_rm_postgresqlflexibleserver: + resource_group: "{{ new_resource_group }}" + name: postflexible{{ rpfx }} + is_restart: true + register: output + +- name: Assert the post grep sql server restart success + ansible.builtin.assert: + that: + - output.changed + +- name: Delete post gresql flexible server + azure_rm_postgresqlflexibleserver: + resource_group: "{{ new_resource_group }}" + name: postflexible{{ rpfx }} + state: absent + register: output + +- name: Assert the post gresql server is well deleted + ansible.builtin.assert: + that: + - output.changed + +- name: Delete the new resource group + azure_rm_resourcegroup: + name: "{{ new_resource_group }}" + force_delete_nonempty: true + state: absent + register: output + +- name: Assert the resource group is well deleted + ansible.builtin.assert: + that: + - output.changed diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks/main.yml index b5fc3e1f1..7b41ba31a 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_privateendpointdnszonegroup/tasks/main.yml @@ -118,7 +118,7 @@ - output.state.private_dns_zone_configs[0].record_sets | length == 1 - output.state.private_dns_zone_configs[0].record_sets[0].fqdn == 'postgresqlsrv-{{ rpfx }}.privatelink.postgres.database.azure.com' - output.state.private_dns_zone_configs[0].record_sets[0].ip_addresses | length == 1 - - output.state.private_dns_zone_configs[0].record_sets[0].ip_addresses[0] is match('^10.1.*') + - output.state.private_dns_zone_configs[0].record_sets[0].ip_addresses[0] is match('10.1.*') - output.state.private_dns_zone_configs[0].record_sets[0].provisioning_state == 'Succeeded' - output.state.private_dns_zone_configs[0].record_sets[0].record_set_name == 'postgresqlsrv-{{ rpfx }}' - output.state.private_dns_zone_configs[0].record_sets[0].record_type == 'A' @@ -158,7 +158,7 @@ - output.groups[0].private_dns_zone_configs[0].record_sets | length == 1 - output.groups[0].private_dns_zone_configs[0].record_sets[0].fqdn == 'postgresqlsrv-{{ rpfx }}.privatelink.postgres.database.azure.com' - output.groups[0].private_dns_zone_configs[0].record_sets[0].ip_addresses | length == 1 - - output.groups[0].private_dns_zone_configs[0].record_sets[0].ip_addresses[0] is match('^10.1.*') + - output.groups[0].private_dns_zone_configs[0].record_sets[0].ip_addresses[0] is match('10.1.*') - output.groups[0].private_dns_zone_configs[0].record_sets[0].provisioning_state == 'Succeeded' - output.groups[0].private_dns_zone_configs[0].record_sets[0].record_set_name == 'postgresqlsrv-{{ rpfx }}' - output.groups[0].private_dns_zone_configs[0].record_sets[0].record_type == 'A' @@ -183,7 +183,7 @@ - output.groups[0].private_dns_zone_configs[0].record_sets | length == 1 - output.groups[0].private_dns_zone_configs[0].record_sets[0].fqdn == 'postgresqlsrv-{{ rpfx }}.privatelink.postgres.database.azure.com' - output.groups[0].private_dns_zone_configs[0].record_sets[0].ip_addresses | length == 1 - - output.groups[0].private_dns_zone_configs[0].record_sets[0].ip_addresses[0] is match('^10.1.*') + - output.groups[0].private_dns_zone_configs[0].record_sets[0].ip_addresses[0] is match('10.1.*') - output.groups[0].private_dns_zone_configs[0].record_sets[0].provisioning_state == 'Succeeded' - output.groups[0].private_dns_zone_configs[0].record_sets[0].record_set_name == 'postgresqlsrv-{{ rpfx }}' - output.groups[0].private_dns_zone_configs[0].record_sets[0].record_type == 'A' @@ -211,7 +211,7 @@ - output.state.private_dns_zone_configs[0].record_sets | length == 1 - output.state.private_dns_zone_configs[0].record_sets[0].fqdn == 'postgresqlsrv-{{ rpfx }}.privatelink.postgres.database.azure.com' - output.state.private_dns_zone_configs[0].record_sets[0].ip_addresses | length == 1 - - output.state.private_dns_zone_configs[0].record_sets[0].ip_addresses[0] is match('^10.1.*') + - output.state.private_dns_zone_configs[0].record_sets[0].ip_addresses[0] is match('10.1.*') - output.state.private_dns_zone_configs[0].record_sets[0].provisioning_state == 'Succeeded' - output.state.private_dns_zone_configs[0].record_sets[0].record_set_name == 'postgresqlsrv-{{ rpfx }}' - output.state.private_dns_zone_configs[0].record_sets[0].record_type == 'A' diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/aliases b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/aliases new file mode 100644 index 000000000..aa77c071a --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/aliases @@ -0,0 +1,3 @@ +cloud/azure +shippable/azure/group2 +destructive diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/meta/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/meta/main.yml new file mode 100644 index 000000000..95e1952f9 --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - setup_azure diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/tasks/main.yml new file mode 100644 index 000000000..d229bc68b --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_publicipprefix/tasks/main.yml @@ -0,0 +1,102 @@ +- name: Create random variable + ansible.builtin.set_fact: + rpfx: "{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}" + +- name: Create public ip prefix (Check mode) + azure_rm_publicipprefix: + resource_group: "{{ resource_group }}" + name: "pipprefix{{ rpfx }}" + zones: + - 1 + public_ip_address_version: IPV4 + prefix_length: 29 + sku: + name: Standard + tier: Regional + tags: + testing: testing + check_mode: true + +- name: Create public ip prefix + azure_rm_publicipprefix: + resource_group: "{{ resource_group }}" + name: "pipprefix{{ rpfx }}" + zones: + - 1 + public_ip_address_version: IPV4 + prefix_length: 29 + sku: + name: Standard + tier: Regional + tags: + testing: testing + register: output + +- name: Assert the public IP prefix is well created + ansible.builtin.assert: + that: + - output.changed + +- name: Create public ip prefix (Idempotent test) + azure_rm_publicipprefix: + resource_group: "{{ resource_group }}" + name: "pipprefix{{ rpfx }}" + zones: + - 1 + public_ip_address_version: IPV4 + prefix_length: 29 + sku: + name: Standard + tier: Regional + tags: + testing: testing + register: output + +- name: Assert the public IP prefix no change + ansible.builtin.assert: + that: + - not output.changed + +- name: Update public ip prefix (Update tags) + azure_rm_publicipprefix: + resource_group: "{{ resource_group }}" + name: "pipprefix{{ rpfx }}" + zones: + - 1 + public_ip_address_version: IPV4 + prefix_length: 29 + sku: + name: Standard + tier: Regional + tags: + testing2: testing2 + register: output + +- name: Assert the public IP prefix change + ansible.builtin.assert: + that: + - output.changed + +- name: Gather facts for a public ip prefix + azure_rm_publicipprefix_info: + resource_group: "{{ resource_group }}" + name: "pipprefix{{ rpfx }}" + register: output + +- name: Assert the public IP prefix facts + ansible.builtin.assert: + that: + - output.publicipprefixes[0].tags | length == 2 + - output.publicipprefixes[0].prefix_length == 29 + +- name: Delete the public IP prefix + azure_rm_publicipprefix: + resource_group: "{{ resource_group }}" + name: "pipprefix{{ rpfx }}" + state: absent + register: output + +- name: Assert the public IP prefix deleted + ansible.builtin.assert: + that: + - output.changed diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_registrationassignment/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_registrationassignment/tasks/main.yml index 05cc5d552..f1b2adca7 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_registrationassignment/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_registrationassignment/tasks/main.yml @@ -64,7 +64,7 @@ - name: Assert the registration assignment facts ansible.builtin.assert: that: - - output.registration_assignments[0].properties.registration_definition_id == "{{ output1.state.id }}" + - output.registration_assignments[0].properties.registration_definition_id == output1.state.id - name: Get all RegistrationAssignment azure_rm_registrationassignment_info: diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_registrationdefinition/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_registrationdefinition/tasks/main.yml index 3a5d58143..60093bc9f 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_registrationdefinition/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_registrationdefinition/tasks/main.yml @@ -100,7 +100,7 @@ - name: Assert the registration definition info ansible.builtin.assert: that: - - output.registration_definitions[0].name == "{{ output1.state.name }}" + - output.registration_definitions[0].name == output1.state.name - output.registration_definitions[0].properties.authorizations[0].principal_id == "{{ principal_id }}" - output.registration_definitions[0].properties.authorizations[0].role_definition_id == "{{ role_definition_id }}" - output.registration_definitions[0].properties.provisioning_state == "Succeeded" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_roleassignment/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_roleassignment/tasks/main.yml index e918bdc19..00cf42cf9 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_roleassignment/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_roleassignment/tasks/main.yml @@ -1,6 +1,6 @@ - name: Setup basic facts ansible.builtin.set_fact: - uuid: bb21a88b-30e1-42b5-84e8-1d3f322de033 + uuid: "{{ (2**128) | random | to_uuid }}" # Disk Backup Reader, unlikely to be already assigned in ansible-test resource groups. az_role_definition_guid: '3e5e47e6-65f7-47ef-90b5-e5dd4d455f24' diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_securitygroup/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_securitygroup/tasks/main.yml index 6dc584a6f..af71a3046 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_securitygroup/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_securitygroup/tasks/main.yml @@ -33,7 +33,8 @@ register: output - name: Assert resource created ansible.builtin.assert: - that: "{{ output.state.rules | length }} == 2" + that: + - output.state.rules | length == 2 - name: Gather facts by tags azure_rm_securitygroup_info: @@ -80,7 +81,7 @@ - name: Assert resource updated ansible.builtin.assert: that: - - "{{ output.state.rules | length }} == 4" + - output.state.rules | length== 4 - output.state.rules[0].source_address_prefix == '174.108.158.0/24' - name: Gather facts after update @@ -197,8 +198,8 @@ - name: Assert resource created ansible.builtin.assert: that: - - "{{ output.state.rules | length }} == 1" - - "{{ output.state.rules[0].source_address_prefixes | length }} == 3" + - output.state.rules | length == 1 + - output.state.rules[0].source_address_prefixes | length == 3 - not output.state.rules[0].source_address_prefix - name: Create security group with source_address_prefixes(idempotent) @@ -248,7 +249,7 @@ ansible.builtin.assert: that: - output.changed - - "{{ output.state.rules | length }} == 2" + - output.state.rules | length == 2 # Use azure_rm_resource module to create with uppercase protocol name - name: Create security group with uppercase protocol name diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/aliases b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/aliases new file mode 100644 index 000000000..5d29c6c4d --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/aliases @@ -0,0 +1,3 @@ +cloud/azure +shippable/azure/group10 +destructive diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/meta/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/meta/main.yml new file mode 100644 index 000000000..95e1952f9 --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - setup_azure diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/tasks/main.yml new file mode 100644 index 000000000..fa7981b52 --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_sshpublickey/tasks/main.yml @@ -0,0 +1,70 @@ +- name: Prepare random number + ansible.builtin.set_fact: + rpfx: "{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}" + +- name: Create a new SSH Public Key + azure_rm_sshpublickey: + resource_group: "{{ resource_group }}" + name: sshpublic{{ rpfx }} + public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCoit3vZKD1Nf6ZZQImq5sRiv0r986/oz+zBezfXPWVKiCgy1TIyX+kGuMNhXcS9rTelXmIo2g3hvw2P/elSilaNkmuDE9otszATeOjPORoIrTcEd2N7vZUpwP7Ekmp+OZ/4ROG4dEuD2PVygmajYvNAayU8Ghdk/sAqLSOJ5FoPa3DO/1JUX81VzFQyfwtcstCsUouIft0GQ0QbSrXEMmtqylU/TstQZdupdWLxaLLRyTb57X43FUWM28lC/HczCPE3TX8gxZAzPTwA7yWp8Mum+QLC7IiKEAMbyVotzbtkcWU6BJd8uOGEQaHbJqoXOhmPKFMdHyhmT43fckS2mh6dSU0z8WiNC/CyCtsavZy0LSXEyPWL1bTDouHePygPXd1sN1GhCtk65tPYncbZavFuI7PcN0yxpjZWATdP79TU5cPYwZl2SZMhtBrR/ll/HLP88CgXIqZ1wsLM+ek76WqHLlhA5UK7KSE8z2qOdnsmH8uTRe4MrqmM9C5VCgjS18= test@test.com" + tags: + key1: value1 + key2: value2 + register: output + +- name: Assert the SSH Public Key created + ansible.builtin.assert: + that: + - output.changed + +- name: Create a new SSH Public Key (Idempotent test) + azure_rm_sshpublickey: + resource_group: "{{ resource_group }}" + name: sshpublic{{ rpfx }} + public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCoit3vZKD1Nf6ZZQImq5sRiv0r986/oz+zBezfXPWVKiCgy1TIyX+kGuMNhXcS9rTelXmIo2g3hvw2P/elSilaNkmuDE9otszATeOjPORoIrTcEd2N7vZUpwP7Ekmp+OZ/4ROG4dEuD2PVygmajYvNAayU8Ghdk/sAqLSOJ5FoPa3DO/1JUX81VzFQyfwtcstCsUouIft0GQ0QbSrXEMmtqylU/TstQZdupdWLxaLLRyTb57X43FUWM28lC/HczCPE3TX8gxZAzPTwA7yWp8Mum+QLC7IiKEAMbyVotzbtkcWU6BJd8uOGEQaHbJqoXOhmPKFMdHyhmT43fckS2mh6dSU0z8WiNC/CyCtsavZy0LSXEyPWL1bTDouHePygPXd1sN1GhCtk65tPYncbZavFuI7PcN0yxpjZWATdP79TU5cPYwZl2SZMhtBrR/ll/HLP88CgXIqZ1wsLM+ek76WqHLlhA5UK7KSE8z2qOdnsmH8uTRe4MrqmM9C5VCgjS18= test@test.com" + tags: + key1: value1 + key2: value2 + register: output + +- name: Assert the SSH Public key no changed + ansible.builtin.assert: + that: + - not output.changed + +- name: Update SSH Public Key with tags and public key + azure_rm_sshpublickey: + resource_group: "{{ resource_group }}" + name: sshpublic{{ rpfx }} + public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCoit3vZKD1Nf6ZZQImq5sRiv0r986/oz+zBezfXPWVKiCgy1TIyX+kGuMNhXcS9rTelXmIo2g3hvw2P/elSilaNkmuDE9otszATeOjPORoIrTcEd2N7vZUpwP7Ekmp+OZ/4ROG4dEuD2PVygmajYvNAayU8Ghdk/sAqLSOJ5FoPa3DO/1JUX81VzFQyfwtcstCsUouIft0GQ0QbSrXEMmtqylU/TstQZdupdWLxaLLRyTb57X43FUWM28lC/HczCPE3TX8gxZAzPTwA7yWp8Mum+QLC7IiKEAMbyVotzbtkcWU6BJd8uOGEQaHbJqoXOhmPKFMdHyhmT43fckS2mh6dSU0z8WiNC/CyCtsavZy0LSXEyPWL1bTDouHePygPXd1sN1GhCtk65tPYncbZavFuI7PcN0yxpjZWATdP79TU5cPYwZl2SZMhtBrR/ll/HLP88CgXIqZ1wsLM+ek76WqHLlhA5UK7KSE8z2qOdnsmH8uTRe4MrqmM9C5VCgjS18= test@test.com" + tags: + key3: value3 + register: output + +- name: Assert the SSH Public key Updated + ansible.builtin.assert: + that: + - output.changed + +- name: Get ssh public keys by name + azure_rm_sshpublickey_info: + resource_group: "{{ resource_group }}" + name: sshpublic{{ rpfx }} + register: output + +- name: Assert the SSH Public Kyes facts + ansible.builtin.assert: + that: + - output.ssh_keys[0].tags | length == 3 + +- name: Delete a new SSH Public Key + azure_rm_sshpublickey: + resource_group: "{{ resource_group }}" + name: sshpublic{{ rpfx }} + state: absent + register: output + +- name: Assert the SSH Public Key deleted + ansible.builtin.assert: + that: + - output.changed diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageaccount/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageaccount/tasks/main.yml index dfeabed07..942d4888a 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageaccount/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageaccount/tasks/main.yml @@ -139,6 +139,7 @@ resource_group: "{{ resource_group }}" name: "{{ storage_account_name_default }}06" account_type: Standard_LRS + large_file_shares_state: Enabled kind: StorageV2 is_hns_enabled: true register: output @@ -146,6 +147,7 @@ ansible.builtin.assert: that: - output.changed + - output.state.large_file_shares_state == 'Enabled' - name: Gather facts of storage account azure_rm_storageaccount_info: @@ -157,6 +159,7 @@ that: - "output.storageaccounts | length == 1" - output.storageaccounts[0].is_hns_enabled == true + - output.storageaccounts[0].large_file_shares_state == 'Enabled' - name: Create storage account with static website enabled azure_rm_storageaccount: @@ -598,3 +601,4 @@ - "{{ storage_account_name_default }}03" - "{{ storage_account_name_default }}04" - "{{ storage_account_name_default }}05" + - "{{ storage_account_name_default }}06" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageblob/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageblob/tasks/main.yml index 307d52d27..98cd3dc38 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageblob/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_storageblob/tasks/main.yml @@ -11,12 +11,14 @@ - name: Create container azure_rm_storageblob: + auth_mode: login resource_group: "{{ resource_group }}" account_name: "{{ storage_account }}" container_name: my-blobs - name: Force upload blob azure_rm_storageblob: + auth_mode: login resource_group: "{{ resource_group }}" account_name: "{{ storage_account }}" container_name: my-blobs diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_trafficmanagerprofile/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_trafficmanagerprofile/tasks/main.yml index 6e2a7f342..e1b93935d 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_trafficmanagerprofile/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_trafficmanagerprofile/tasks/main.yml @@ -33,7 +33,9 @@ register: fact - name: Check there is no Traffic Manager profile created - ansible.builtin.assert: { that: "{{ fact.tms | length }} == 0" } + ansible.builtin.assert: + that: + - fact.tms | length == 0 - name: Create a Traffic Manager profile azure_rm_trafficmanagerprofile: @@ -69,7 +71,7 @@ - name: Assert fact returns the created one ansible.builtin.assert: that: - - "fact.tms | length == 1" + - fact.tms | length == 1 - fact.tms[0].id == tm.id - fact.tms[0].endpoints | length == 0 @@ -261,7 +263,7 @@ - name: Assert the traffic manager profile is still there ansible.builtin.assert: that: - - "fact.tms | length == 1" + - fact.tms | length == 1 - fact.tms[0].id == tm.id - fact.tms[0].endpoints | length == 1 @@ -286,4 +288,4 @@ - name: Assert fact returns empty ansible.builtin.assert: that: - - "fact.tms | length == 0" + - fact.tms | length == 0 diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/inventory.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/inventory.yml index 88172852a..63ba77727 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/inventory.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/inventory.yml @@ -40,6 +40,10 @@ all: network: 10.42.7.0/24 subnet: 10.42.7.0/28 + azure_test_encrypted: + network: 10.42.8.0/24 + subnet: 10.42.8.0/28 + vars: ansible_connection: local ansible_python_interpreter: "{{ ansible_playbook_python }}" @@ -55,6 +59,7 @@ all: security_group: "{{ 'sg' ~ uid_short }}" public_ip_name: "{{ 'ip' ~ uid_short }}" interface_name: "{{ 'int' ~ uid_short }}" + des_name: "{{ 'des' ~ uid_short }}" ssh_keys: - path: '/home/chouseknecht/.ssh/authorized_keys' diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_deallocate.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_deallocate.yml index 09bb56e9c..e1ba515d7 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_deallocate.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_deallocate.yml @@ -25,10 +25,6 @@ name: "{{ vm_name }}" register: vm_state -- name: Pause for 10 mimutes to VM updating - ansible.builtin.command: sleep 600 - changed_when: true - - name: Restart the virtual machine azure_rm_virtualmachine: resource_group: "{{ resource_group }}" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_dual_nic.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_dual_nic.yml index f6865b2e7..c2802868e 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_dual_nic.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_dual_nic.yml @@ -118,10 +118,6 @@ name: "{{ vm_name }}" register: vm_state -- name: Pause for 10 mimutes to VM updating - ansible.builtin.command: sleep 600 - changed_when: true - - name: Generalize VM azure_rm_virtualmachine: resource_group: "{{ resource_group }}" # Should this be resource_group_secondary? diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_encrypted.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_encrypted.yml new file mode 100644 index 000000000..c43d09a61 --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_encrypted.yml @@ -0,0 +1,107 @@ +- name: Set variables + ansible.builtin.include_tasks: setup.yml + +- name: Set up disk encryption sets + ansible.builtin.include_tasks: setup_des.yml + +- name: Create VM with encrypted disks + azure_rm_virtualmachine: + resource_group: "{{ resource_group }}" + name: "{{ vm_name }}" + admin_username: "testuser" + ssh_password_enabled: false + ssh_public_keys: + - path: /home/testuser/.ssh/authorized_keys + key_data: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfoYlIV4lTPZTv7hXaVwQQuqBgGs4yeNRX0SPo2+HQt9u4X7IGwrtXc0nEUm6LfaCikMH58bOL8f20NTGz285kxdFHZRcBXtqmnMz2rXwhK9gwq5h1khc+GzHtdcJXsGA4y0xuaNcidcg04jxAlN/06fwb/VYwwWTVbypNC0gpGEpWckCNm8vlDlA55sU5et0SZ+J0RKVvEaweUOeNbFZqckGPA384imfeYlADppK/7eAxqfBVadVvZG8IJk4yvATgaIENIFj2cXxqu2mQ/Bp5Wr45uApvJsFXmi+v/nkiOEV1QpLOnEwAZo6EfFS4CCQtsymxJCl1PxdJ5LD4ZOtP xiuxi.sun@qq.com" + vm_size: Standard_B1ms + virtual_network: "{{ network_name }}" + os_disk_encryption_set: "{{ des_results.state.id }}" + managed_disk_type: Standard_LRS + image: + offer: 0001-com-ubuntu-server-focal + publisher: Canonical + sku: 20_04-lts + version: latest + register: vm_output + +- name: Query auto created security group before deleting + azure_rm_securitygroup_info: + resource_group: "{{ resource_group }}" + name: "{{ vm_name }}01" + register: nsg_result + +- name: Assert that security group were exist before deleting + ansible.builtin.assert: + that: + - nsg_result.securitygroups | length == 1 + - nsg_result.securitygroups[0].network_interfaces | length == 1 + +- name: Delete VM + azure_rm_virtualmachine: + resource_group: "{{ resource_group }}" + name: "{{ vm_name }}" + remove_on_absent: all_autocreated + state: absent + +- name: Destroy encrypted OS disk + azure_rm_manageddisk: + resource_group: "{{ resource_group }}" + name: "{{ vm_name }}" + state: absent + +- name: Destroy auto created NIC + azure_rm_networkinterface: + resource_group: "{{ resource_group }}" + name: "{{ vm_name }}01" + state: absent + register: nic_result + +- name: Destroy security group + azure_rm_securitygroup: + resource_group: "{{ resource_group }}" + name: "{{ vm_name }}01" + state: absent + +- name: Destroy auto created public IP + azure_rm_publicipaddress: + resource_group: "{{ resource_group }}" + name: "{{ vm_name }}01" + state: absent + +- name: Destroy subnet + azure_rm_subnet: + resource_group: "{{ resource_group }}" + virtual_network: "{{ network_name }}" + name: "{{ subnet_name }}" + state: absent + +- name: Destroy virtual network + azure_rm_virtualnetwork: + resource_group: "{{ resource_group }}" + name: "{{ network_name }}" + state: absent + +- name: Destroy availability set + azure_rm_availabilityset: + resource_group: "{{ resource_group }}" + name: "{{ availability_set }}" + state: absent + +- name: Destroy storage account + azure_rm_storageaccount: + resource_group: "{{ resource_group }}" + name: "{{ storage_account }}" + force_delete_nonempty: true + state: absent + +- name: Destroy disk encryption set + azure_rm_diskencryptionset: + resource_group: "{{ resource_group }}" + name: "{{ des_name }}" + state: absent + +- name: Destroy key vault + azure_rm_keyvault: + vault_name: "{{ vault_name }}" + resource_group: "{{ resource_group }}" + state: absent diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_ephemeral_os.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_ephemeral_os.yml index 1b18c71ef..cbb184ef3 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_ephemeral_os.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_ephemeral_os.yml @@ -32,10 +32,6 @@ name: "{{ vm_name }}" register: vm_state -- name: Pause for 10 mimutes to VM updating - ansible.builtin.command: sleep 600 - changed_when: true - - name: Generalize VM azure_rm_virtualmachine: resource_group: "{{ resource_group }}" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_public_ip.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_public_ip.yml index 2ee786b34..f24be88e2 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_public_ip.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/azure_test_public_ip.yml @@ -92,10 +92,6 @@ name: "{{ vm_name }}" register: vm_state -- name: Pause for 10 mimutes to VM updating - ansible.builtin.command: sleep 600 - changed_when: true - - name: Enable boot diagnostics on an existing VM for the first time without specifying a storage account azure_rm_virtualmachine: resource_group: "{{ resource_group }}" diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/setup_des.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/setup_des.yml new file mode 100644 index 000000000..afdde8440 --- /dev/null +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachine/tasks/setup_des.yml @@ -0,0 +1,94 @@ +- name: Set vault name + ansible.builtin.set_fact: + vault_name: "kv{{ uid_short }}{{ '%m%d%H%M%S' | strftime }}" + +- name: Lookup service principal object id + ansible.builtin.set_fact: + object_id: "{{ lookup('azure.azcollection.azure_service_principal_attribute', + azure_client_id=azure_client_id, + azure_secret=azure_secret, + azure_tenant=azure_tenant) }}" + register: object_id_facts + +- name: Create a key vault + azure_rm_keyvault: + resource_group: "{{ resource_group }}" + vault_name: "{{ vault_name }}" + enabled_for_disk_encryption: true + enable_purge_protection: true + vault_tenant: "{{ azure_tenant }}" + sku: + name: standard + family: A + access_policies: + - tenant_id: "{{ azure_tenant }}" + object_id: "{{ object_id }}" + keys: + - get + - list + - wrapkey + - unwrapkey + - create + - update + - import + - delete + - backup + - restore + - recover + - purge + +- name: Create a key in key vault + azure_rm_keyvaultkey: + key_name: testkey + keyvault_uri: https://{{ vault_name }}.vault.azure.net + +- name: Get latest version of key + azure_rm_keyvaultkey_info: + vault_uri: https://{{ vault_name }}.vault.azure.net + name: testkey + register: results + +- name: Assert the key vault facts + ansible.builtin.set_fact: + key_url: "{{ results['keys'][0]['kid'] }}" + +- name: Create disk encryption set + azure_rm_diskencryptionset: + resource_group: "{{ resource_group }}" + name: "{{ des_name }}" + source_vault: "{{ vault_name }}" + key_url: "{{ key_url }}" + state: present + register: des_results + +- name: Grant DES access to key vault + azure_rm_keyvault: + resource_group: "{{ resource_group }}" + vault_name: "{{ vault_name }}" + enabled_for_disk_encryption: true + enable_purge_protection: true + vault_tenant: "{{ azure_tenant }}" + sku: + name: standard + family: A + access_policies: + - tenant_id: "{{ azure_tenant }}" + object_id: "{{ object_id }}" + keys: + - get + - list + - wrapkey + - unwrapkey + - create + - update + - import + - delete + - backup + - restore + - recover + - purge + - object_id: "{{ des_results.state.identity.principal_id }}" + keys: + - get + - wrapkey + - unwrapkey diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachinescaleset/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachinescaleset/tasks/main.yml index 98f51ee9f..c3c5336ae 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachinescaleset/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_virtualmachinescaleset/tasks/main.yml @@ -21,24 +21,28 @@ resource_group: "{{ resource_group }}" allocation_method: Static name: testPublicIP + sku: Standard - name: Create load balancer azure_rm_loadbalancer: resource_group: "{{ resource_group }}" name: testLB public_ip_address_name: testPublicIP + sku: Standard - name: Create public IP address 1 azure_rm_publicipaddress: resource_group: "{{ resource_group }}" allocation_method: Static name: testPublicIP1 + sku: Standard - name: Create load balancer 1 azure_rm_loadbalancer: resource_group: "{{ resource_group }}" name: testLB1 public_ip_address_name: testPublicIP1 + sku: Standard - name: Create network security group within same resource group of VMSS. azure_rm_securitygroup: @@ -78,9 +82,6 @@ resource_group: "{{ resource_group }}" name: "vmforimage{{ rpfx }}" register: vm_state -- name: Pause for 10 mimutes to VM updating - ansible.builtin.command: sleep 600 - changed_when: true - name: Generalize VM azure_rm_virtualmachine: resource_group: "{{ resource_group }}" @@ -196,6 +197,7 @@ priority: Spot eviction_policy: Deallocate single_placement_group: true + orchestration_mode: Uniform ssh_password_enabled: false ssh_public_keys: - path: /home/testuser/.ssh/authorized_keys @@ -253,6 +255,7 @@ managed_disk_type: Standard_LRS os_disk_caching: ReadWrite single_placement_group: true + orchestration_mode: Uniform image: offer: 0001-com-ubuntu-server-focal publisher: Canonical @@ -297,6 +300,7 @@ managed_disk_type: Standard_LRS os_disk_caching: ReadWrite single_placement_group: true + orchestration_mode: Uniform image: offer: 0001-com-ubuntu-server-focal publisher: Canonical @@ -346,6 +350,7 @@ os_disk_caching: ReadWrite custom_data: "#cloud-config" single_placement_group: true + orchestration_mode: Uniform image: offer: 0001-com-ubuntu-server-focal publisher: Canonical @@ -383,6 +388,7 @@ os_disk_caching: ReadWrite custom_data: "#cloud-config" single_placement_group: true + orchestration_mode: Uniform image: offer: 0001-com-ubuntu-server-focal publisher: Canonical @@ -455,6 +461,7 @@ data_disks: "{{ body.data_disks }}" overprovision: "{{ body.overprovision }}" single_placement_group: true + orchestration_mode: Uniform register: results - name: Assert that nothing was changed @@ -608,6 +615,7 @@ security_group: testNetworkSecurityGroup enable_accelerated_networking: true single_placement_group: true + orchestration_mode: Uniform register: results check_mode: true @@ -635,6 +643,7 @@ security_group: testNetworkSecurityGroup enable_accelerated_networking: true single_placement_group: true + orchestration_mode: Uniform register: results - name: Assert that VMSS ran @@ -664,6 +673,7 @@ security_group: testNetworkSecurityGroup enable_accelerated_networking: true single_placement_group: true + orchestration_mode: Uniform register: results - name: Assert that nothing has changed @@ -691,6 +701,7 @@ security_group: testNetworkSecurityGroup enable_accelerated_networking: true single_placement_group: true + orchestration_mode: Uniform register: results - name: Assert that something has changed @@ -719,6 +730,7 @@ name: testNetworkSecurityGroup2 resource_group: "{{ resource_group_secondary }}" single_placement_group: true + orchestration_mode: Uniform register: results # disable for now @@ -756,6 +768,7 @@ name: testNetworkSecurityGroup2 resource_group: "{{ resource_group_secondary }}" single_placement_group: true + orchestration_mode: Uniform register: results - name: Assert vmss created @@ -786,6 +799,7 @@ name: testNetworkSecurityGroup2 resource_group: "{{ resource_group_secondary }}" single_placement_group: true + orchestration_mode: Uniform ignore_errors: true register: ignore_errors_register @@ -815,6 +829,7 @@ upgrade_policy: Manual enable_accelerated_networking: true single_placement_group: true + orchestration_mode: Uniform register: results ignore_errors: true diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_webapp/tasks/main.yml b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_webapp/tasks/main.yml index 42a3abe3c..6b8128eb3 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_webapp/tasks/main.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/azure_rm_webapp/tasks/main.yml @@ -83,7 +83,7 @@ plan: "{{ win_plan_name }}" frameworks: - name: "java" - version: "1.8" + version: "17" settings: java_container: "Tomcat" java_container_version: "8.0" @@ -115,7 +115,7 @@ plan: "{{ win_plan_name }}" frameworks: - name: "java" - version: "1.7" + version: "17" settings: java_container: "Tomcat" java_container_version: "8.5" @@ -230,7 +230,7 @@ name: "{{ linux_plan_name }}" frameworks: - name: node - version: "6.6" + version: "18" register: output - name: Should be idempotent with linux web app created @@ -242,7 +242,7 @@ name: "{{ linux_plan_name }}" frameworks: - name: node - version: "6.6" + version: "18" register: output - name: Assert idempotent @@ -258,7 +258,7 @@ name: "{{ linux_plan_name }}" frameworks: - name: node - version: "6.9" + version: "20" register: output - name: Assert the web app was created @@ -300,9 +300,9 @@ plan: "{{ win_plan_name }}" frameworks: - name: "python" - version: "2.7" + version: "3.11" - name: "java" - version: "1.8" + version: "17" register: fail_win_java_version_mutual_exclusive failed_when: 'fail_win_java_version_mutual_exclusive.msg != "Java is mutually exclusive with other frameworks."' @@ -315,9 +315,9 @@ name: "{{ linux_plan_name }}" frameworks: - name: "python" - version: "2.7" + version: "3.11" - name: "node" - version: "6.6" + version: "18" register: fail_linux_one_framework_only failed_when: fail_linux_one_framework_only.msg != "Can specify one framework only for Linux web app." @@ -354,7 +354,7 @@ - name: Create a web app with various site config params azure_rm_webapp: - resource_group: "{{ resource_group }}" + resource_group: "{{ linux_app_plan_resource_group }}" name: "{{ linux_app_name }}-siteconfig" plan: resource_group: "{{ linux_app_plan_resource_group }}" @@ -379,7 +379,7 @@ - name: Create a web app with various site config params - idempotent azure_rm_webapp: - resource_group: "{{ resource_group }}" + resource_group: "{{ linux_app_plan_resource_group }}" name: "{{ linux_app_name }}-siteconfig" plan: resource_group: "{{ linux_app_plan_resource_group }}" @@ -404,7 +404,7 @@ - name: Get facts for site config params azure_rm_webapp_info: - resource_group: "{{ resource_group }}" + resource_group: "{{ linux_app_plan_resource_group }}" name: "{{ linux_app_name }}-siteconfig" register: facts - name: Assert site config params meet expectations @@ -413,10 +413,11 @@ - facts.webapps[0].always_on - facts.webapps[0].min_tls_version == '1.2' - facts.webapps[0].ftps_state == 'Disabled' + - not facts.webapps[0].http20_enabled - name: Update web app with various site config params - single change azure_rm_webapp: - resource_group: "{{ resource_group }}" + resource_group: "{{ linux_app_plan_resource_group }}" name: "{{ linux_app_name }}-siteconfig" plan: resource_group: "{{ linux_app_plan_resource_group }}" @@ -441,7 +442,7 @@ - name: Get facts for site config params azure_rm_webapp_info: - resource_group: "{{ resource_group }}" + resource_group: "{{ linux_app_plan_resource_group }}" name: "{{ linux_app_name }}-siteconfig" register: facts - name: Assert site config params meet expectations @@ -450,6 +451,111 @@ - facts.webapps[0].always_on - facts.webapps[0].min_tls_version == '1.2' - facts.webapps[0].ftps_state == 'FtpsOnly' + - not facts.webapps[0].http20_enabled + +- name: Create a web app with HTTP 2.0 + azure_rm_webapp: + resource_group: "{{ linux_app_plan_resource_group }}" + name: "{{ linux_app_name }}-http20" + plan: + resource_group: "{{ linux_app_plan_resource_group }}" + name: "{{ linux_app_name }}-http20-plan" + is_linux: true + sku: S1 + frameworks: + - name: java + version: "8" + settings: + java_container: "tomcat" + java_container_version: "8.5" + client_affinity_enabled: false + https_only: true + always_on: true + min_tls_version: "1.2" + ftps_state: "Disabled" + http20_enabled: true + register: output +- name: Assert the web app was created + ansible.builtin.assert: + that: output.changed + +- name: Create a web app with HTTP 2.0 - idempotent + azure_rm_webapp: + resource_group: "{{ linux_app_plan_resource_group }}" + name: "{{ linux_app_name }}-http20" + plan: + resource_group: "{{ linux_app_plan_resource_group }}" + name: "{{ linux_app_name }}-http20-plan" + is_linux: true + sku: S1 + frameworks: + - name: java + version: "8" + settings: + java_container: "tomcat" + java_container_version: "8.5" + client_affinity_enabled: false + https_only: true + always_on: true + min_tls_version: "1.2" + ftps_state: "Disabled" + http20_enabled: true + register: output +- name: Assert the web app not changed + ansible.builtin.assert: + that: not output.changed + +- name: Get facts for HTTP 2.0 appp + azure_rm_webapp_info: + resource_group: "{{ linux_app_plan_resource_group }}" + name: "{{ linux_app_name }}-http20" + register: facts +- name: Assert site config params meet expectations + ansible.builtin.assert: + that: + - facts.webapps[0].always_on + - facts.webapps[0].min_tls_version == '1.2' + - facts.webapps[0].ftps_state == 'Disabled' + - facts.webapps[0].http20_enabled + +- name: Update web app to disable HTTP 2.0 + azure_rm_webapp: + resource_group: "{{ linux_app_plan_resource_group }}" + name: "{{ linux_app_name }}-http20" + plan: + resource_group: "{{ linux_app_plan_resource_group }}" + name: "{{ linux_app_name }}-http20-plan" + is_linux: true + sku: S1 + frameworks: + - name: java + version: "8" + settings: + java_container: "tomcat" + java_container_version: "8.5" + client_affinity_enabled: false + https_only: true + always_on: true + min_tls_version: "1.2" + ftps_state: "Disabled" + http20_enabled: false + register: output +- name: Assert the web app was updated + ansible.builtin.assert: + that: output.changed + +- name: Get facts for HTTP 2.0 appp + azure_rm_webapp_info: + resource_group: "{{ linux_app_plan_resource_group }}" + name: "{{ linux_app_name }}-http20" + register: facts +- name: Assert site config params meet expectations + ansible.builtin.assert: + that: + - facts.webapps[0].always_on + - facts.webapps[0].min_tls_version == '1.2' + - facts.webapps[0].ftps_state == 'Disabled' + - not facts.webapps[0].http20_enabled - name: Create a webapp slot (Check mode) azure_rm_webappslot: diff --git a/ansible_collections/azure/azcollection/tests/integration/targets/inventory_azure/playbooks/test_inventory.yml b/ansible_collections/azure/azcollection/tests/integration/targets/inventory_azure/playbooks/test_inventory.yml index b00e48247..acfed0606 100644 --- a/ansible_collections/azure/azcollection/tests/integration/targets/inventory_azure/playbooks/test_inventory.yml +++ b/ansible_collections/azure/azcollection/tests/integration/targets/inventory_azure/playbooks/test_inventory.yml @@ -7,10 +7,6 @@ - name: Set facts ansible.builtin.include_vars: vars.yml - - name: Pause for 10 mimutes for updating - ansible.builtin.command: sleep 600 - changed_when: false - - name: Refresh inventory ansible.builtin.meta: refresh_inventory diff --git a/ansible_collections/azure/azcollection/tests/sanity/ignore-2.13.txt b/ansible_collections/azure/azcollection/tests/sanity/ignore-2.13.txt deleted file mode 100644 index 44a2ab267..000000000 --- a/ansible_collections/azure/azcollection/tests/sanity/ignore-2.13.txt +++ /dev/null @@ -1,18 +0,0 @@ -plugins/modules/azure_rm_apimanagement.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_dnsrecordset.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_gallery.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_galleryimage.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_galleryimageversion.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_managementgroup.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_registrationdefinition.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_registrationassignment.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_virtualwan.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_snapshot.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_vpnsite.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_batchaccount.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_azurefirewall.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_apimanagementservice.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_openshiftmanagedcluster.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_privatednsrecordset.py validate-modules:invalid-ansiblemodule-schema -tests/utils/shippable/check_matrix.py replace-urlopen -tests/utils/shippable/timing.py shebang diff --git a/ansible_collections/azure/azcollection/tests/sanity/ignore-2.14.txt b/ansible_collections/azure/azcollection/tests/sanity/ignore-2.14.txt deleted file mode 100644 index 44a2ab267..000000000 --- a/ansible_collections/azure/azcollection/tests/sanity/ignore-2.14.txt +++ /dev/null @@ -1,18 +0,0 @@ -plugins/modules/azure_rm_apimanagement.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_dnsrecordset.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_gallery.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_galleryimage.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_galleryimageversion.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_managementgroup.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_registrationdefinition.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_registrationassignment.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_virtualwan.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_snapshot.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_vpnsite.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_batchaccount.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_azurefirewall.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_apimanagementservice.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_openshiftmanagedcluster.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_privatednsrecordset.py validate-modules:invalid-ansiblemodule-schema -tests/utils/shippable/check_matrix.py replace-urlopen -tests/utils/shippable/timing.py shebang diff --git a/ansible_collections/azure/azcollection/tests/sanity/ignore-2.15.txt b/ansible_collections/azure/azcollection/tests/sanity/ignore-2.15.txt deleted file mode 100644 index 44a2ab267..000000000 --- a/ansible_collections/azure/azcollection/tests/sanity/ignore-2.15.txt +++ /dev/null @@ -1,18 +0,0 @@ -plugins/modules/azure_rm_apimanagement.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_dnsrecordset.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_gallery.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_galleryimage.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_galleryimageversion.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_managementgroup.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_registrationdefinition.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_registrationassignment.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_virtualwan.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_snapshot.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_vpnsite.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_batchaccount.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_azurefirewall.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_apimanagementservice.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_openshiftmanagedcluster.py validate-modules:invalid-ansiblemodule-schema -plugins/modules/azure_rm_privatednsrecordset.py validate-modules:invalid-ansiblemodule-schema -tests/utils/shippable/check_matrix.py replace-urlopen -tests/utils/shippable/timing.py shebang diff --git a/ansible_collections/azure/azcollection/tests/utils/ado/ado.sh b/ansible_collections/azure/azcollection/tests/utils/ado/ado.sh index bd8a195b3..4bae8b5d4 100755 --- a/ansible_collections/azure/azcollection/tests/utils/ado/ado.sh +++ b/ansible_collections/azure/azcollection/tests/utils/ado/ado.sh @@ -69,7 +69,7 @@ pip install -I -r "${TEST_DIR}/sanity-requirements-azure.txt" pip install ansible-lint -timeout=90 +timeout=180 if [ "$4" = "all" ] then diff --git a/ansible_collections/azure/azcollection/tests/utils/shippable/check_matrix.py b/ansible_collections/azure/azcollection/tests/utils/shippable/check_matrix.py index 96a377589..614396581 100755 --- a/ansible_collections/azure/azcollection/tests/utils/shippable/check_matrix.py +++ b/ansible_collections/azure/azcollection/tests/utils/shippable/check_matrix.py @@ -9,7 +9,7 @@ import os import re import sys import time -from ansible.module_utils.urls import open_url as urlopen +from ansible.module_utils.urls import open_url try: from typing import NoReturn @@ -41,7 +41,7 @@ def main(): # type: () -> None for attempts_remaining in range(4, -1, -1): try: - jobs = json.loads(urlopen('https://api.shippable.com/jobs?runIds=%s' % run_id).read()) + jobs = json.loads(open_url('https://api.shippable.com/jobs?runIds=%s' % run_id).read()) if not isinstance(jobs, list): raise Exception('Shippable run %s data is not a list.' % run_id) diff --git a/ansible_collections/azure/azcollection/tests/utils/shippable/timing.py b/ansible_collections/azure/azcollection/tests/utils/shippable/timing.py index d9456855d..55728eab6 100755 --- a/ansible_collections/azure/azcollection/tests/utils/shippable/timing.py +++ b/ansible_collections/azure/azcollection/tests/utils/shippable/timing.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.6 +#!/usr/bin/env python from __future__ import (absolute_import, division, print_function) __metaclass__ = type diff --git a/ansible_collections/cisco/asa/.ansible-lint b/ansible_collections/cisco/asa/.ansible-lint new file mode 100644 index 000000000..8d9bb70b8 --- /dev/null +++ b/ansible_collections/cisco/asa/.ansible-lint @@ -0,0 +1,5 @@ +--- +profile: production + +exclude_paths: + - changelogs/changelog.yaml diff --git a/ansible_collections/cisco/asa/.github/workflows/lint.yml b/ansible_collections/cisco/asa/.github/workflows/lint.yml index 853e4b69c..fbac38cbf 100644 --- a/ansible_collections/cisco/asa/.github/workflows/lint.yml +++ b/ansible_collections/cisco/asa/.github/workflows/lint.yml @@ -8,5 +8,6 @@ jobs: name: Ansible Lint runs-on: ubuntu-latest steps: + - uses: actions/checkout@v4 - name: Run ansible-lint uses: ansible/ansible-lint@main diff --git a/ansible_collections/cisco/asa/.github/workflows/tests.yml b/ansible_collections/cisco/asa/.github/workflows/tests.yml index 0fb4cc0cf..506c33aa0 100644 --- a/ansible_collections/cisco/asa/.github/workflows/tests.yml +++ b/ansible_collections/cisco/asa/.github/workflows/tests.yml @@ -1,5 +1,5 @@ --- -name: test_collection +name: CI concurrency: group: ${{ github.head_ref || github.run_id }} @@ -12,11 +12,10 @@ on: # yamllint disable-line rule:truthy schedule: - cron: '0 0 * * *' - jobs: changelog: uses: ansible-network/github_actions/.github/workflows/changelog.yml@main - if: github.event_name != 'schedule' + if: github.event_name == 'pull_request' sanity: uses: ansible-network/github_actions/.github/workflows/sanity.yml@main unit-galaxy: @@ -28,7 +27,7 @@ jobs: git+https://github.com/ansible-collections/ansible.utils.git git+https://github.com/ansible-collections/ansible.netcommon.git all_green: - if: ${{ always() && (github.event_name != 'schedule') }} + if: ${{ always() }} needs: - changelog - sanity diff --git a/ansible_collections/cisco/asa/.pre-commit-config.yaml b/ansible_collections/cisco/asa/.pre-commit-config.yaml index 77ff23f3d..fe243a843 100644 --- a/ansible_collections/cisco/asa/.pre-commit-config.yaml +++ b/ansible_collections/cisco/asa/.pre-commit-config.yaml @@ -23,7 +23,7 @@ repos: - id: add-trailing-comma - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.0.3" + rev: "v4.0.0-alpha.8" hooks: - id: prettier entry: env CI=1 bash -c "prettier --list-different . || ec=$? && prettier --loglevel=error --write . && exit $ec" @@ -34,13 +34,13 @@ repos: - prettier-plugin-toml - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort name: Sort import statements using isort args: ["--filter-files"] - repo: https://github.com/psf/black - rev: 23.10.1 + rev: 23.12.1 hooks: - id: black diff --git a/ansible_collections/cisco/asa/CHANGELOG.rst b/ansible_collections/cisco/asa/CHANGELOG.rst index 39bdff83c..d7fdfb3e3 100644 --- a/ansible_collections/cisco/asa/CHANGELOG.rst +++ b/ansible_collections/cisco/asa/CHANGELOG.rst @@ -5,6 +5,27 @@ Cisco Asa Collection Release Notes .. contents:: Topics +v5.0.1 +====== + +Bugfixes +-------- + +- Prevents module_defaults from were being incorrectly applied to the platform action, instead of the concerned module. + +v5.0.0 +====== + +Release Summary +--------------- + +Starting from this release, the minimum `ansible-core` version this collection requires is `2.14.0`. The last known version compatible with ansible-core<2.14 is `v4.0.3`. + +Major Changes +------------- + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. + v4.0.3 ====== diff --git a/ansible_collections/cisco/asa/FILES.json b/ansible_collections/cisco/asa/FILES.json index 5d2cc3c89..37b5b3188 100644 --- a/ansible_collections/cisco/asa/FILES.json +++ b/ansible_collections/cisco/asa/FILES.json @@ -8,80 +8,87 @@ "format": 1 }, { - "name": ".github", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".ansible-lint", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c", "format": 1 }, { - "name": ".github/workflows", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "469d2028bce417a69822005f81cd8144549ef7391813d27a37b0c94bdce5921d", "format": 1 }, { - "name": ".github/workflows/ack.yml", + "name": ".isort.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24c6fbafaa69e3e3ee696f2cefa5120794b62cef7e870553dddce8b8af0a127c", + "chksum_sha256": "4e11dfc2dddd670a70b23d3c1504e08c2d3175a3b7323d912d94fa40c18d524a", "format": 1 }, { - "name": ".github/workflows/codecoverage.yml", + "name": "docs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "docs/cisco.asa.asa_command_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8bbcae622f5e51798b577df290135e846244399c2a6ccbfedac523b38a8330a3", + "chksum_sha256": "de89e062700396aecebc8688205cf4bb67f6c823f59ade25c8d0941e7f95e80e", "format": 1 }, { - "name": ".github/workflows/lint.yml", + "name": "docs/cisco.asa.asa_config_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5f88713a9a457040f5019604498e2e783aefb40ea70d667b969c213f5758116", + "chksum_sha256": "c19c1548c0df6b695ad7ca78e96e75acfd23f8298502bc4ece7713b9fc036951", "format": 1 }, { - "name": ".github/workflows/push.yml", + "name": "docs/cisco.asa.asa_acls_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab12fa802baf5f9545109b311f6bac5b76ae1a404a60d20a32481d41b06d901c", + "chksum_sha256": "4bf9ceee633d44f4509326f63e3c9f5aa7e21dfe85e1460ee899c4d155e54215", "format": 1 }, { - "name": ".github/workflows/release.yml", + "name": "docs/cisco.asa.asa_ogs_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1", + "chksum_sha256": "2187a61050ddfc69156df4780558b2f2fca740ebb5e1a17bf197ba220362e2f8", "format": 1 }, { - "name": ".github/workflows/tests.yml", + "name": "docs/cisco.asa.asa_facts_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4f91a01c164850068d354337e1e18eb370fa87ed19023526987de3e79a5f6ede", + "chksum_sha256": "54782ce3a5835e74bc09a4ec6fd3bd833230f10485bac2d7d1c374676192b925", "format": 1 }, { - "name": ".github/CODEOWNERS", + "name": "docs/cisco.asa.asa_cliconf.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ad972424785be2caafac8900de928fb6dee9fdd793c66da9439f19ec031b72d6", "format": 1 }, { - "name": ".github/dependabot.yml", + "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461", + "chksum_sha256": "8cba1f82f03d027e6835a30731a1827a527196c036d170fed3e8f57394936ca2", "format": 1 }, { - "name": ".github/release-drafter.yml", + "name": "codecov.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", + "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2", "format": 1 }, { @@ -109,7 +116,7 @@ "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29d60ece077d15d48396df191a66424227181af47ee96ee8857f0000223ab6a3", + "chksum_sha256": "888e07188798b19da3e154bbdf0993c74875dbd44e77082cec9bcb6824eb5bbd", "format": 1 }, { @@ -120,1774 +127,1816 @@ "format": 1 }, { - "name": "docs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "docs/cisco.asa.asa_acls_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4bf9ceee633d44f4509326f63e3c9f5aa7e21dfe85e1460ee899c4d155e54215", - "format": 1 - }, - { - "name": "docs/cisco.asa.asa_cliconf.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ad972424785be2caafac8900de928fb6dee9fdd793c66da9439f19ec031b72d6", - "format": 1 - }, - { - "name": "docs/cisco.asa.asa_command_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "de89e062700396aecebc8688205cf4bb67f6c823f59ade25c8d0941e7f95e80e", - "format": 1 - }, - { - "name": "docs/cisco.asa.asa_config_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cc3c3963268c8bc964ffefdc2d18bd767f74fdbddbddda33af421d8e9e6e41a0", - "format": 1 - }, - { - "name": "docs/cisco.asa.asa_facts_module.rst", + "name": "tox.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54782ce3a5835e74bc09a4ec6fd3bd833230f10485bac2d7d1c374676192b925", + "chksum_sha256": "c3d0045e391c8743eef92c7f130b1d800d7bfc38952a8537d13c7401a8f45e11", "format": 1 }, { - "name": "docs/cisco.asa.asa_ogs_module.rst", + "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2187a61050ddfc69156df4780558b2f2fca740ebb5e1a17bf197ba220362e2f8", + "chksum_sha256": "883b106f13b0c6536f55619685ddca25968b4167dedb12e08fa37c93f4c63b25", "format": 1 }, { - "name": "meta", + "name": "tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "meta/runtime.yml", + "name": "tests/config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "483de672a6e528a7f5f2cd50f5d8d6a650b29e9ed55d72b0cb0965742286facb", + "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e", "format": 1 }, { - "name": "plugins", + "name": "tests/sanity", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/sanity/ignore-2.10.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8000e45c60499f99ceece9b4c2e153a0b50d02906850dcfc758d08c42b9ac066", "format": 1 }, { - "name": "plugins/action/__init__.py", + "name": "tests/sanity/ignore-2.9.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8000e45c60499f99ceece9b4c2e153a0b50d02906850dcfc758d08c42b9ac066", "format": 1 }, { - "name": "plugins/action/asa.py", + "name": "tests/sanity/ignore-2.11.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c", + "chksum_sha256": "a726fa26f4d91f96be9d8d98ab93c32b82bc16a69f9ab116ddeee2c042cbe4b1", "format": 1 }, { - "name": "plugins/cliconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/sanity/ignore-2.12.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5e57cb2fa7cd31227fcf1fd7085c7213f560ce12895b80211aeba768ec9de041", "format": 1 }, { - "name": "plugins/cliconf/__init__.py", + "name": "tests/sanity/ignore-2.16.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d", "format": 1 }, { - "name": "plugins/cliconf/asa.py", + "name": "tests/sanity/ignore-2.17.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dda3e968fc69abbddc6f0742420d8b0e11e2d44358a20239025a6f54ebc4f41c", + "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d", "format": 1 }, { - "name": "plugins/doc_fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/sanity/ignore-2.13.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d", "format": 1 }, { - "name": "plugins/doc_fragments/__init__.py", + "name": "tests/sanity/ignore-2.14.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d", "format": 1 }, { - "name": "plugins/doc_fragments/asa.py", + "name": "tests/sanity/ignore-2.15.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "130cf43f0307ebbc4bc121d6b0616af8895c602bc9bc3e2abd0341fd10a49500", + "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d", "format": 1 }, { - "name": "plugins/module_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/.gitignore", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", "format": 1 }, { - "name": "plugins/module_utils/network", + "name": "tests/integration", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa", + "name": "tests/integration/targets", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/argspec", + "name": "tests/integration/targets/asa_facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/argspec/acls", + "name": "tests/integration/targets/asa_facts/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/argspec/acls/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/asa/argspec/acls/acls.py", + "name": "tests/integration/targets/asa_facts/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fcae6ce706327a09b0ab8b82c91a55186f9974e5a0e190a5188c49bcc8cb93e7", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "plugins/module_utils/network/asa/argspec/facts", + "name": "tests/integration/targets/asa_facts/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/argspec/facts/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/asa/argspec/facts/facts.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "58646002557f192f15baf87346550ea1a6b37b36596b47bc66a1465540e26e01", - "format": 1 - }, - { - "name": "plugins/module_utils/network/asa/argspec/ogs", + "name": "tests/integration/targets/asa_facts/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/argspec/ogs/__init__.py", + "name": "tests/integration/targets/asa_facts/tests/cli/invalid_subset.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "2667b18d98a0879804b84662b77a1337b2d5b13e6eb8dfa4ebcae52f1547f713", "format": 1 }, { - "name": "plugins/module_utils/network/asa/argspec/ogs/ogs.py", + "name": "tests/integration/targets/asa_facts/tests/cli/default_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d0487f754e8a1b8968ec7cda2bab9849ed0a920dfc9da1d77930c821b613bdc", + "chksum_sha256": "5bda0a98b84f8436c2a3d5ad6f22d3d63a5ed61e8173793e0d0f9cbc78c8c376", "format": 1 }, { - "name": "plugins/module_utils/network/asa/argspec/__init__.py", + "name": "tests/integration/targets/asa_facts/tests/cli/all_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "90f62bf5f42692f354534580d39774a8b65e1194b6fa268e1a81e2083c39b7e8", "format": 1 }, { - "name": "plugins/module_utils/network/asa/config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/asa_facts/tests/cli/not_hardware.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0733ddb2fcf5a9e2d272f413b41df5d537db53231e049c10497a282e45f2885c", "format": 1 }, { - "name": "plugins/module_utils/network/asa/config/acls", + "name": "tests/integration/targets/asa_facts/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/config/acls/__init__.py", + "name": "tests/integration/targets/asa_facts/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c", "format": 1 }, { - "name": "plugins/module_utils/network/asa/config/acls/acls.py", + "name": "tests/integration/targets/asa_facts/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54d4f42507c10b4b994457008be4c8377e78ea71f719f1a08c8a8fe39793ba1d", + "chksum_sha256": "615d4358df331e4239442a5b6656390598bf4e857bd6acd1bad18cee0542e6c2", "format": 1 }, { - "name": "plugins/module_utils/network/asa/config/ogs", + "name": "tests/integration/targets/asa_config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/config/ogs/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/asa/config/ogs/ogs.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fff92969cf78d6efb283bec90fcdf347f34c63011f01e97a06eeafce6bb6aea3", + "name": "tests/integration/targets/asa_config/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/config/__init__.py", + "name": "tests/integration/targets/asa_config/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "plugins/module_utils/network/asa/facts", + "name": "tests/integration/targets/asa_config/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/facts/acls", + "name": "tests/integration/targets/asa_config/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/facts/acls/__init__.py", + "name": "tests/integration/targets/asa_config/tests/cli/toplevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c3ce7a4e25b93db51b50f5025d899b6e84319439679cfe420ed2034ec9656d3c", "format": 1 }, { - "name": "plugins/module_utils/network/asa/facts/acls/acls.py", + "name": "tests/integration/targets/asa_config/tests/cli/backup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b7289bcc81ad8747f031c4deb4c888e8eabed74ce40b5e0930d6c7e199fd8325", + "chksum_sha256": "b9a3f2fd164079dba1ce9b9d7c54f229b882c3d0bfd3adca82371c365383c89e", "format": 1 }, { - "name": "plugins/module_utils/network/asa/facts/legacy", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "plugins/module_utils/network/asa/facts/legacy/__init__.py", + "name": "tests/integration/targets/asa_config/tests/cli/sublevel_strict.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "1ea488e47a54ebbc99e07ef5fb149f267e1c90fb1a3efb47c596f4ba9b1988e8", "format": 1 }, { - "name": "plugins/module_utils/network/asa/facts/legacy/base.py", + "name": "tests/integration/targets/asa_config/tests/cli/save_when.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1d90560b4d39f8e0adbe73753790528ba39dbe4b7edc70d8089706da1a84823e", + "chksum_sha256": "3b5c27c229aa6cad17c276c37fdfdcd6599921f9cfe5872cb4b5ce6e5b9ae64f", "format": 1 }, { - "name": "plugins/module_utils/network/asa/facts/ogs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/asa_config/tests/cli/toplevel_after.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0d5ab0be030639871c9d7d686ade4cafae0c8459eb0216579659aa0ea597ec49", "format": 1 }, { - "name": "plugins/module_utils/network/asa/facts/ogs/__init__.py", + "name": "tests/integration/targets/asa_config/tests/cli/more_system.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "7f0f4407ef0031cc4f52d2df23780638286bbd7efcf2de58d5beedfc42e85548", "format": 1 }, { - "name": "plugins/module_utils/network/asa/facts/ogs/ogs.py", + "name": "tests/integration/targets/asa_config/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4889d0ef1f24d9aebaf0653e16669f19277989efb52ee0042f49fcd5cd903162", + "chksum_sha256": "64c12ec0001e3a74b2eb4544ddfc7b6fd9b47120613675c836dceede1efecd14", "format": 1 }, { - "name": "plugins/module_utils/network/asa/facts/__init__.py", + "name": "tests/integration/targets/asa_config/tests/cli/toplevel_before.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9811b1ef10b4e55b09414219c3ee8eaa915ef4927fd52c6cbc266d052576475d", "format": 1 }, { - "name": "plugins/module_utils/network/asa/facts/facts.py", + "name": "tests/integration/targets/asa_config/tests/cli/sublevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "974b74159f6d3e59e5a56f8677c26e470860eae57ecb53c91c3e5cefe552df91", + "chksum_sha256": "153e3da671217a483d8e6b8c3d6d10873164a3faa9f6af410125cba547e44027", "format": 1 }, { - "name": "plugins/module_utils/network/asa/providers", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/asa_config/tests/cli/sublevel_block.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "88b1cda079ba825b4c9d70fb3bfef738d6c02b4a75afc6aca262baf1bbab004c", "format": 1 }, { - "name": "plugins/module_utils/network/asa/providers/__init__.py", + "name": "tests/integration/targets/asa_config/tests/cli/sublevel_strict_mul_parents.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ea1fe24ae755b8040528bee28a832a6a87a1be74bd5d74695f84040de83d161b", "format": 1 }, { - "name": "plugins/module_utils/network/asa/providers/module.py", + "name": "tests/integration/targets/asa_config/tests/cli/force.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b87ca2036255d1dcd9080d73f0997df1a19af0fa9466f84e3a7eef8a803de9a", + "chksum_sha256": "3a84229b96d4ab9bbabfa9dfc4045008a0476b2cd2dc9fd8ef565dcbaebd1b91", "format": 1 }, { - "name": "plugins/module_utils/network/asa/providers/providers.py", + "name": "tests/integration/targets/asa_config/tests/cli/defaults.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d12b31ea6902b70db0eb9e71564b586d4e62b90655345669eb372f1f3f9c9cc", + "chksum_sha256": "380fa6f2c2dd6dd83478737e5e6752ef011256e76292d422c01a9e324c4810b9", "format": 1 }, { - "name": "plugins/module_utils/network/asa/rm_templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/asa_config/tests/cli/sublevel_exact.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2a8ee340d192f59f19bafb617a8138e3e1c6b1b4962b66a2c93b9e5c940f7245", "format": 1 }, { - "name": "plugins/module_utils/network/asa/rm_templates/acls.py", + "name": "tests/integration/targets/asa_config/tests/cli/removal_error.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f244c13a86b80d08dae36977a2c7344baf8913b00df67128fc0caf4c7eb81865", + "chksum_sha256": "a25a6865359950d61ae00f6bdd47fd4f952521ca0525bcf863741618cf23b2ca", "format": 1 }, { - "name": "plugins/module_utils/network/asa/rm_templates/ogs.py", + "name": "tests/integration/targets/asa_config/tests/cli/toplevel_nonidempotent.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff869d21e976eeeef522b52b44df1c276e97dbb90cee0aa13a9eedc42570ae0b", + "chksum_sha256": "cdbbf917190b6c099d6205a64342c7dcd91ed499f2a81e024d4b28e27f7b53bf", "format": 1 }, { - "name": "plugins/module_utils/network/asa/utils", + "name": "tests/integration/targets/asa_config/tests/redirection", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/utils/__init__.py", + "name": "tests/integration/targets/asa_config/tests/redirection/shortname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "6dbd8ee31865bbe879cb1a8b35b25bd529a84f8820525a0388a38ba147a66f66", "format": 1 }, { - "name": "plugins/module_utils/network/asa/utils/utils.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "869e911f1d710075554251977a255d09e8054cecce9ba0910f1b52027fc81c2f", + "name": "tests/integration/targets/asa_config/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration/targets/asa_config/templates/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/asa/asa.py", + "name": "tests/integration/targets/asa_config/templates/defaults/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e924eeba5d9c9489c645c7bea52c1ef6ebcb0cb22c70746b78fd25f2fd385a85", + "chksum_sha256": "fb99eb6895703bb60ee1260b4fda100bc0715b494b276bd30af5f86140e3636c", "format": 1 }, { - "name": "plugins/module_utils/__init__.py", + "name": "tests/integration/targets/asa_config/templates/basic", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/asa_config/templates/basic/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "65308b2b6c691f26581d2c167f0bee0c6175d39279ec8578bb86ca795d7de6fb", "format": 1 }, { - "name": "plugins/modules", + "name": "tests/integration/targets/asa_config/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/__init__.py", + "name": "tests/integration/targets/asa_config/tasks/redirection.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "090d83ccf27d81d1b7d2baace335d2ff9082f7cd8f79b6958daefdc33b8b17e3", "format": 1 }, { - "name": "plugins/modules/asa_acls.py", + "name": "tests/integration/targets/asa_config/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b56a38b92596b7d22ebc6bed87c1587a7732f4a3d7680e274d0afa3553067490", + "chksum_sha256": "56c0833e7848214f8dcfeffcd6d4d37828d80f9366ceef5eb25c61b0228979c1", "format": 1 }, { - "name": "plugins/modules/asa_command.py", + "name": "tests/integration/targets/asa_config/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9fbb4c90a18d3945dfd710c5dbd17f8b81780528e2a9bb8fe3c6136acc76a907", + "chksum_sha256": "4c98b618972ade76b972540d358cfee5e45ec0501c17df5120227fddd0ff3a83", "format": 1 }, { - "name": "plugins/modules/asa_config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5210224a3e633f4611401d71d0bb9699827647d3900547ed4f9bb0a27e099640", + "name": "tests/integration/targets/asa_smoke", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/asa_facts.py", + "name": "tests/integration/targets/asa_smoke/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/asa_smoke/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "17fc0b752d583d54f38f878f8122a7fe8db0319b7fbee1519577b588d4034b6c", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "plugins/modules/asa_ogs.py", + "name": "tests/integration/targets/asa_smoke/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/asa_smoke/tests/caching.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "278c499570e2f0cf5a2c6a48929e9c40530e00ab0ecc4945689858e689808119", + "chksum_sha256": "4a956e5bd4218f18bd151bb253589e06d96f0ca012afeeb815a77f6213148945", "format": 1 }, { - "name": "plugins/terminal", + "name": "tests/integration/targets/asa_smoke/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/terminal/__init__.py", + "name": "tests/integration/targets/asa_smoke/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c", "format": 1 }, { - "name": "plugins/terminal/asa.py", + "name": "tests/integration/targets/asa_smoke/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b24a952d8c6d070d4e29c7a6a58d6bc3c0f17741df33ad56b213b87372854f1", + "chksum_sha256": "835db3bc2ab92dd760d6730f09922b1e5b90395db7d11c7e374c0ba09f78daf7", "format": 1 }, { - "name": "tests", + "name": "tests/integration/targets/asa_command", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration", + "name": "tests/integration/targets/asa_command/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/asa_command/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/asa_acls", + "name": "tests/integration/targets/asa_command/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_acls/defaults", + "name": "tests/integration/targets/asa_command/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_acls/defaults/main.yaml", + "name": "tests/integration/targets/asa_command/tests/cli/bad_operator.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "05d50d802310ba9d35f203b94bcd61bcad7f1a6cb06b678f8c95d4a56fd12c64", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/asa_command/tests/cli/timeout.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1fd92e197c788c603c8f4d8f4641d4fd93dd0484f10a1ed0402e54ff526f8080", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/meta/main.yaml", + "name": "tests/integration/targets/asa_command/tests/cli/output.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "e3f0e7ba5086de752b9a87fcac7187b27960487ef1264ed6eb82933ee5560fc9", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tasks", + "name": "tests/integration/targets/asa_command/tests/cli/contains.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "03fe833b91682e8d58be13ac1e75c06dc58430cfdc4db46b55a1204e34352d60", + "format": 1 + }, + { + "name": "tests/integration/targets/asa_command/tests/cli/invalid.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "854f342de74002bcae25bc676898bac7c44dccbcb17680ee98ff7d105cccef80", + "format": 1 + }, + { + "name": "tests/integration/targets/asa_command/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tasks/cli.yaml", + "name": "tests/integration/targets/asa_command/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a22906fff9c3194905ad30497e247fa66145b848ec502e050b17332bd3cb148c", + "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tasks/main.yaml", + "name": "tests/integration/targets/asa_command/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c", + "chksum_sha256": "4c98b618972ade76b972540d358cfee5e45ec0501c17df5120227fddd0ff3a83", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests", + "name": "tests/integration/targets/asa_ogs", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli", + "name": "tests/integration/targets/asa_ogs/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/asa_ogs/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a3f566b6a9c72ca243265852b24e9d5a01f4b30b68058134001ecc88b75c00f3", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/_populate_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "84d196a881a4bc595bc580973d383ec06e46907bdb2188a786d1e080a9729199", + "name": "tests/integration/targets/asa_ogs/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/_populate_network_og.yaml", + "name": "tests/integration/targets/asa_ogs/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82201b0b674b40da9d8f1df8d332a5b0a92453962aa5d995398b61d271d60819", + "chksum_sha256": "1418941753a214f960e5772742927306c42e64decf1f0cc4b7445167801ac377", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4cf464b3bd8b5375ce936a39c61b4778d28ea9c92c1fc32669149d5dbcb1168e", + "name": "tests/integration/targets/asa_ogs/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/_remove_og_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "386c512bf4a392dfcd2c508a47a29ec7c45729775e0e209c76de3e5095eef7a3", + "name": "tests/integration/targets/asa_ogs/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/deleted.yaml", + "name": "tests/integration/targets/asa_ogs/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eee00a3f750a8b6a6faf31771d210cf6b69745511007de23c4506728d18c1033", + "chksum_sha256": "2a00f9c6f94bdf5e1f2dc3431cab004b36946ca4baee07cece978f42254f2806", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/asa_ogs/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8428ddd338848c6456cd8c991af2ee7dac84d296244187e99086166e552fac7", + "chksum_sha256": "b46fa5bf7986ea33e69d718395dcd529756fae19695d858bb5f2cfddb69acf32", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/gathered.yaml", + "name": "tests/integration/targets/asa_ogs/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "35bd267dd0c46ac2d87aba919a0d375caf5dbdd8202d58fc07c9e13a63fe6fea", + "chksum_sha256": "abad4da95ec7d092272595de5569c28efef79203ef5de89e9b6455df5d0702ed", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/merged.yaml", + "name": "tests/integration/targets/asa_ogs/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9601c55b51df1f3e8883106d1253fba4a9126420350a45a75d3486802533ec94", + "chksum_sha256": "afe118ea3be25d57e9ab26348bdd52bc4b840490a85f11b9f79563a92eb51834", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/overridden.yaml", + "name": "tests/integration/targets/asa_ogs/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dbf4e1e8f6ccffbb68cd5b42c3012ffcd8a91f4af94bc045bc73b82907c79f39", + "chksum_sha256": "e775a90f35bf1d02c36f75947efd359595085f0b8d7cda9e70b295a064cb0840", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/parsed.yaml", + "name": "tests/integration/targets/asa_ogs/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d30d81ec523819eb2f59f34323392b89b8fa243485bcf1ce627a9d537e80adc", + "chksum_sha256": "c12d15a33e441f5b5a1462c660d899ed33f258f437e81f1cf7954c11e50bed73", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/rendered.yaml", + "name": "tests/integration/targets/asa_ogs/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ee80f2ddb0cd38198407d0499e9af0f4f6a4240e5e1dcdf0bc4cf73f907d040f", + "chksum_sha256": "6bdc390ed516bdb772e8b3e4e9498bb9f8e48c7a023d08e919809e66e62dd979", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/replaced.yaml", + "name": "tests/integration/targets/asa_ogs/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70fac1dc646c612f07d014d12796fe67e2799f711dca91d18761dd0a2aceef9f", + "chksum_sha256": "f149bbc1ec48feedc896079f15994dd6a5175514dc026e7d12fa417b88d48728", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/tests/cli/rtt.yaml", + "name": "tests/integration/targets/asa_ogs/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7c3c0039b62a050d223a0324c538214989cdfb4ea11a95807519a980f157b0a", + "chksum_sha256": "b902fb274a202ee8efbbe72f3a824a7b390d585235f3e5d9ec3a48682be07a3a", "format": 1 }, { - "name": "tests/integration/targets/asa_acls/vars", + "name": "tests/integration/targets/asa_ogs/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a7f127a390e99667637b87bd4e9297e6d5cafd88d873587ae03cf88f88ec5288", + "format": 1 + }, + { + "name": "tests/integration/targets/asa_ogs/tests/cli/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0ab9e8d1c4ab5c6c8cff5dbcbd6de19807bc8a736ec05cac65a7358f3d919b1e", + "format": 1 + }, + { + "name": "tests/integration/targets/asa_ogs/tests/cli/_populate_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2ef178de83b73bbcbb57eec0a53bf1916400afe2a306df42e7421fb7bd1b49a4", + "format": 1 + }, + { + "name": "tests/integration/targets/asa_ogs/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_acls/vars/main.yaml", + "name": "tests/integration/targets/asa_ogs/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1d217a7fa8decd498e4dd9c715bfaf8d560a734eded627b20dbc09cc7c7b0151", + "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c", "format": 1 }, { - "name": "tests/integration/targets/asa_command", + "name": "tests/integration/targets/asa_ogs/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7c0ac0f39eb8cbe127ea8c3f461dbbe9ebbc956b1bc3040ef6e4a56564ce4d30", + "format": 1 + }, + { + "name": "tests/integration/targets/asa_acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_command/defaults", + "name": "tests/integration/targets/asa_acls/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_command/defaults/main.yaml", + "name": "tests/integration/targets/asa_acls/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/asa_command/tasks", + "name": "tests/integration/targets/asa_acls/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_command/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4c98b618972ade76b972540d358cfee5e45ec0501c17df5120227fddd0ff3a83", - "format": 1 - }, - { - "name": "tests/integration/targets/asa_command/tasks/main.yaml", + "name": "tests/integration/targets/asa_acls/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c", + "chksum_sha256": "1d217a7fa8decd498e4dd9c715bfaf8d560a734eded627b20dbc09cc7c7b0151", "format": 1 }, { - "name": "tests/integration/targets/asa_command/tests", + "name": "tests/integration/targets/asa_acls/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_command/tests/cli", + "name": "tests/integration/targets/asa_acls/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_command/tests/cli/bad_operator.yaml", + "name": "tests/integration/targets/asa_acls/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05d50d802310ba9d35f203b94bcd61bcad7f1a6cb06b678f8c95d4a56fd12c64", + "chksum_sha256": "4cf464b3bd8b5375ce936a39c61b4778d28ea9c92c1fc32669149d5dbcb1168e", "format": 1 }, { - "name": "tests/integration/targets/asa_command/tests/cli/contains.yaml", + "name": "tests/integration/targets/asa_acls/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "03fe833b91682e8d58be13ac1e75c06dc58430cfdc4db46b55a1204e34352d60", + "chksum_sha256": "eee00a3f750a8b6a6faf31771d210cf6b69745511007de23c4506728d18c1033", "format": 1 }, { - "name": "tests/integration/targets/asa_command/tests/cli/invalid.yaml", + "name": "tests/integration/targets/asa_acls/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "854f342de74002bcae25bc676898bac7c44dccbcb17680ee98ff7d105cccef80", + "chksum_sha256": "b8428ddd338848c6456cd8c991af2ee7dac84d296244187e99086166e552fac7", "format": 1 }, { - "name": "tests/integration/targets/asa_command/tests/cli/output.yaml", + "name": "tests/integration/targets/asa_acls/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3f0e7ba5086de752b9a87fcac7187b27960487ef1264ed6eb82933ee5560fc9", + "chksum_sha256": "dbf4e1e8f6ccffbb68cd5b42c3012ffcd8a91f4af94bc045bc73b82907c79f39", "format": 1 }, { - "name": "tests/integration/targets/asa_command/tests/cli/timeout.yaml", + "name": "tests/integration/targets/asa_acls/tests/cli/_remove_og_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1fd92e197c788c603c8f4d8f4641d4fd93dd0484f10a1ed0402e54ff526f8080", - "format": 1 - }, - { - "name": "tests/integration/targets/asa_config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "386c512bf4a392dfcd2c508a47a29ec7c45729775e0e209c76de3e5095eef7a3", "format": 1 }, { - "name": "tests/integration/targets/asa_config/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/asa_acls/tests/cli/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "35bd267dd0c46ac2d87aba919a0d375caf5dbdd8202d58fc07c9e13a63fe6fea", "format": 1 }, { - "name": "tests/integration/targets/asa_config/defaults/main.yaml", + "name": "tests/integration/targets/asa_acls/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "4d30d81ec523819eb2f59f34323392b89b8fa243485bcf1ce627a9d537e80adc", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/asa_acls/tests/cli/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "70fac1dc646c612f07d014d12796fe67e2799f711dca91d18761dd0a2aceef9f", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tasks/cli.yaml", + "name": "tests/integration/targets/asa_acls/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c98b618972ade76b972540d358cfee5e45ec0501c17df5120227fddd0ff3a83", + "chksum_sha256": "9601c55b51df1f3e8883106d1253fba4a9126420350a45a75d3486802533ec94", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tasks/main.yaml", + "name": "tests/integration/targets/asa_acls/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56c0833e7848214f8dcfeffcd6d4d37828d80f9366ceef5eb25c61b0228979c1", + "chksum_sha256": "a3f566b6a9c72ca243265852b24e9d5a01f4b30b68058134001ecc88b75c00f3", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tasks/redirection.yaml", + "name": "tests/integration/targets/asa_acls/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "090d83ccf27d81d1b7d2baace335d2ff9082f7cd8f79b6958daefdc33b8b17e3", + "chksum_sha256": "f7c3c0039b62a050d223a0324c538214989cdfb4ea11a95807519a980f157b0a", "format": 1 }, { - "name": "tests/integration/targets/asa_config/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/asa_acls/tests/cli/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ee80f2ddb0cd38198407d0499e9af0f4f6a4240e5e1dcdf0bc4cf73f907d040f", "format": 1 }, { - "name": "tests/integration/targets/asa_config/templates/basic", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/asa_acls/tests/cli/_populate_network_og.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "82201b0b674b40da9d8f1df8d332a5b0a92453962aa5d995398b61d271d60819", "format": 1 }, { - "name": "tests/integration/targets/asa_config/templates/basic/config.j2", + "name": "tests/integration/targets/asa_acls/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "65308b2b6c691f26581d2c167f0bee0c6175d39279ec8578bb86ca795d7de6fb", + "chksum_sha256": "84d196a881a4bc595bc580973d383ec06e46907bdb2188a786d1e080a9729199", "format": 1 }, { - "name": "tests/integration/targets/asa_config/templates/defaults", + "name": "tests/integration/targets/asa_acls/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_config/templates/defaults/config.j2", + "name": "tests/integration/targets/asa_acls/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fb99eb6895703bb60ee1260b4fda100bc0715b494b276bd30af5f86140e3636c", + "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/asa_acls/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a22906fff9c3194905ad30497e247fa66145b848ec502e050b17332bd3cb148c", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli", + "name": "tests/integration/targets/asa_acls/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/backup.yaml", + "name": "tests/integration/targets/asa_acls/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b9a3f2fd164079dba1ce9b9d7c54f229b882c3d0bfd3adca82371c365383c89e", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/basic.yaml", + "name": "tests/integration/target-prefixes.network", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64c12ec0001e3a74b2eb4544ddfc7b6fd9b47120613675c836dceede1efecd14", + "chksum_sha256": "14f51b782822dec130f35894d08367652be7b29aa19102314e5f049ddc307445", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/defaults.yaml", + "name": "tests/integration/network-integration.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "380fa6f2c2dd6dd83478737e5e6752ef011256e76292d422c01a9e324c4810b9", + "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/force.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3a84229b96d4ab9bbabfa9dfc4045008a0476b2cd2dc9fd8ef565dcbaebd1b91", + "name": "tests/unit", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/more_system.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7f0f4407ef0031cc4f52d2df23780638286bbd7efcf2de58d5beedfc42e85548", + "name": "tests/unit/compat", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/removal_error.yaml", + "name": "tests/unit/compat/mock.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a25a6865359950d61ae00f6bdd47fd4f952521ca0525bcf863741618cf23b2ca", + "chksum_sha256": "b91b074a0bb9cfda8560f02aa3cefe0bfaae9b045f8386597bfe342f1e5a0717", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/save_when.yaml", + "name": "tests/unit/compat/unittest.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b5c27c229aa6cad17c276c37fdfdcd6599921f9cfe5872cb4b5ce6e5b9ae64f", + "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/sublevel.yaml", + "name": "tests/unit/compat/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "153e3da671217a483d8e6b8c3d6d10873164a3faa9f6af410125cba547e44027", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/sublevel_block.yaml", + "name": "tests/unit/requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "88b1cda079ba825b4c9d70fb3bfef738d6c02b4a75afc6aca262baf1bbab004c", + "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/sublevel_exact.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2a8ee340d192f59f19bafb617a8138e3e1c6b1b4962b66a2c93b9e5c940f7245", + "name": "tests/unit/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/sublevel_strict.yaml", + "name": "tests/unit/modules/conftest.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ea488e47a54ebbc99e07ef5fb149f267e1c90fb1a3efb47c596f4ba9b1988e8", + "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/sublevel_strict_mul_parents.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ea1fe24ae755b8040528bee28a832a6a87a1be74bd5d74695f84040de83d161b", + "name": "tests/unit/modules/network", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/toplevel.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c3ce7a4e25b93db51b50f5025d899b6e84319439679cfe420ed2034ec9656d3c", + "name": "tests/unit/modules/network/asa", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/toplevel_after.yaml", + "name": "tests/unit/modules/network/asa/asa_module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0d5ab0be030639871c9d7d686ade4cafae0c8459eb0216579659aa0ea597ec49", + "chksum_sha256": "92f0ead04504c5da2ad3d7b613b9832ad0f22fc379eee5b3c9be347064213b18", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/toplevel_before.yaml", + "name": "tests/unit/modules/network/asa/test_asa_acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9811b1ef10b4e55b09414219c3ee8eaa915ef4927fd52c6cbc266d052576475d", + "chksum_sha256": "2725a0d5d4a680c056a3d644f824257f18af756aa028980c864ff495afb1692a", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/cli/toplevel_nonidempotent.yaml", + "name": "tests/unit/modules/network/asa/test_asa_ogs.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cdbbf917190b6c099d6205a64342c7dcd91ed499f2a81e024d4b28e27f7b53bf", + "chksum_sha256": "68ad856224f437cdd22a45a3a8412f71fb9158f70558b9206d96da84280d9e03", "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/redirection", + "name": "tests/unit/modules/network/asa/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_config/tests/redirection/shortname.yaml", + "name": "tests/unit/modules/network/asa/fixtures/asa_facts_show_version", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6dbd8ee31865bbe879cb1a8b35b25bd529a84f8820525a0388a38ba147a66f66", + "chksum_sha256": "740b1ca496b3d669bc243713a931477f995ccdc458c3d15e95de89adacf81f3d", "format": 1 }, { - "name": "tests/integration/targets/asa_facts", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/asa/fixtures/asa_facts_show_memory", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ac8a97005ae66296bad1abcba64857ed3b9a9a3cdd3bc94c5b41272193458e32", "format": 1 }, { - "name": "tests/integration/targets/asa_facts/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/asa/fixtures/asa_og_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8c324a36273027bf40c6aa8003cc355200cfbf67e34ab630e406f74c87a40aee", "format": 1 }, { - "name": "tests/integration/targets/asa_facts/defaults/main.yaml", + "name": "tests/unit/modules/network/asa/fixtures/asa_ogs_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "ed1061977da5661fcb73e4399908fd271914e714716942cc9bfffaec4a82e90a", "format": 1 }, { - "name": "tests/integration/targets/asa_facts/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/asa/fixtures/asa_facts_dir", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5e44f9ecbe09cf864c3d107d24eed7e34baa78b45a9edda1b35c28d232434ae9", "format": 1 }, { - "name": "tests/integration/targets/asa_facts/tasks/cli.yaml", + "name": "tests/unit/modules/network/asa/fixtures/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "615d4358df331e4239442a5b6656390598bf4e857bd6acd1bad18cee0542e6c2", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/asa_facts/tasks/main.yaml", + "name": "tests/unit/modules/network/asa/fixtures/asa_acls_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c", + "chksum_sha256": "877c2b14dbd661c2235be0269f9e7ee0eeedc86ca3abc9b2883df838a2af2b99", "format": 1 }, { - "name": "tests/integration/targets/asa_facts/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/asa/test_asa_facts.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e21775c2419e680466d71213ce3ffd68d9b460e0ad4f1a0eb50e22c5c6462957", "format": 1 }, { - "name": "tests/integration/targets/asa_facts/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/asa/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/asa_facts/tests/cli/all_facts.yaml", + "name": "tests/unit/modules/network/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "90f62bf5f42692f354534580d39774a8b65e1194b6fa268e1a81e2083c39b7e8", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/asa_facts/tests/cli/default_facts.yaml", + "name": "tests/unit/modules/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5bda0a98b84f8436c2a3d5ad6f22d3d63a5ed61e8173793e0d0f9cbc78c8c376", + "chksum_sha256": "f2cca5cec1121f8e27ef6f4c0611b6ec246d47610f6411f2dc511cde612174c0", "format": 1 }, { - "name": "tests/integration/targets/asa_facts/tests/cli/invalid_subset.yaml", + "name": "tests/unit/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2667b18d98a0879804b84662b77a1337b2d5b13e6eb8dfa4ebcae52f1547f713", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/asa_facts/tests/cli/not_hardware.yaml", + "name": "tests/unit/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0733ddb2fcf5a9e2d272f413b41df5d537db53231e049c10497a282e45f2885c", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs", + "name": "tests/unit/mock", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/mock/yaml_helper.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "134eef238c83a9611799871b743e49e9bfbcd8bdddf2cc6a7bf69fd1000345b3", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/defaults/main.yaml", + "name": "tests/unit/mock/loader.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "bdaecf94a3bba53aa135687aecc6fc2c45f7ec5e85f5d2556f5a269aa3fe0c8a", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/mock/path.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1042460934c45b35a3bd39c9ddb9b06f25986c251c6ce9f5288e32406d2e2034", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tasks/cli.yaml", + "name": "tests/unit/mock/vault_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c0ac0f39eb8cbe127ea8c3f461dbbe9ebbc956b1bc3040ef6e4a56564ce4d30", + "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tasks/main.yaml", + "name": "tests/unit/mock/procenv.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c", + "chksum_sha256": "d4362cb826d0529ad37056279571952424c356db10971c024fbab4ec382563d9", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/mock/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "bindep.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "104adbad1acc69a10523807ae1b14344dddd76b712907ddc2b3ddf656d2c69c0", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/_parsed.cfg", + "name": ".pre-commit-config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b902fb274a202ee8efbbe72f3a824a7b390d585235f3e5d9ec3a48682be07a3a", + "chksum_sha256": "2362c3114e5a6bd09e7809ca3b7f07bb49de8022acc9da443220f66cd1f637e3", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/_populate_config.yaml", + "name": ".yamllint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ef178de83b73bbcbb57eec0a53bf1916400afe2a306df42e7421fb7bd1b49a4", + "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2a00f9c6f94bdf5e1f2dc3431cab004b36946ca4baee07cece978f42254f2806", + "name": "meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/deleted.yaml", + "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b46fa5bf7986ea33e69d718395dcd529756fae19695d858bb5f2cfddb69acf32", + "chksum_sha256": "5672e56b9931aa53ca58c3b166b83499535042e17a88fbc87bc7311309bb90a7", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/empty_config.yaml", + "name": "test-requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "abad4da95ec7d092272595de5569c28efef79203ef5de89e9b6455df5d0702ed", + "chksum_sha256": "92e26f12b6e7c3d4c8e73859c9dbbc26591dc317c0ba8bcfc98eadfe1fdefa25", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/gathered.yaml", + "name": "pyproject.toml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e775a90f35bf1d02c36f75947efd359595085f0b8d7cda9e70b295a064cb0840", + "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/merged.yaml", + "name": "LICENSE", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f149bbc1ec48feedc896079f15994dd6a5175514dc026e7d12fa417b88d48728", + "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/overridden.yaml", + "name": ".gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "afe118ea3be25d57e9ab26348bdd52bc4b840490a85f11b9f79563a92eb51834", + "chksum_sha256": "e620f88c2366ee31df48a1a4efc69c2b06cfe8bef75979f9d6e32f0a872b2644", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/parsed.yaml", + "name": ".prettierignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c12d15a33e441f5b5a1462c660d899ed33f258f437e81f1cf7954c11e50bed73", + "chksum_sha256": "9881cacd6494858bc3c50f32917a7971c275f5dbeaa27d438985eacb344f9857", "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0ab9e8d1c4ab5c6c8cff5dbcbd6de19807bc8a736ec05cac65a7358f3d919b1e", + "name": "plugins", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6bdc390ed516bdb772e8b3e4e9498bb9f8e48c7a023d08e919809e66e62dd979", + "name": "plugins/module_utils", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/tests/cli/rtt.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a7f127a390e99667637b87bd4e9297e6d5cafd88d873587ae03cf88f88ec5288", + "name": "plugins/module_utils/network", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/vars", + "name": "plugins/module_utils/network/asa", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_ogs/vars/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1418941753a214f960e5772742927306c42e64decf1f0cc4b7445167801ac377", + "name": "plugins/module_utils/network/asa/config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_smoke", + "name": "plugins/module_utils/network/asa/config/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_smoke/defaults", + "name": "plugins/module_utils/network/asa/config/acls/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "plugins/module_utils/network/asa/config/acls/acls.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "54d4f42507c10b4b994457008be4c8377e78ea71f719f1a08c8a8fe39793ba1d", + "format": 1 + }, + { + "name": "plugins/module_utils/network/asa/config/ogs", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_smoke/defaults/main.yaml", + "name": "plugins/module_utils/network/asa/config/ogs/ogs.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "fff92969cf78d6efb283bec90fcdf347f34c63011f01e97a06eeafce6bb6aea3", "format": 1 }, { - "name": "tests/integration/targets/asa_smoke/tasks", + "name": "plugins/module_utils/network/asa/config/ogs/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "plugins/module_utils/network/asa/config/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "plugins/module_utils/network/asa/utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_smoke/tasks/cli.yaml", + "name": "plugins/module_utils/network/asa/utils/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "835db3bc2ab92dd760d6730f09922b1e5b90395db7d11c7e374c0ba09f78daf7", + "chksum_sha256": "869e911f1d710075554251977a255d09e8054cecce9ba0910f1b52027fc81c2f", "format": 1 }, { - "name": "tests/integration/targets/asa_smoke/tasks/main.yaml", + "name": "plugins/module_utils/network/asa/utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba31c87031318be43a61d696eab1ba755270c889cd5ae5dd78effad49953342c", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/asa_smoke/tests", + "name": "plugins/module_utils/network/asa/facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/asa_smoke/tests/caching.yaml", + "name": "plugins/module_utils/network/asa/facts/legacy", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/asa/facts/legacy/base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a956e5bd4218f18bd151bb253589e06d96f0ca012afeeb815a77f6213148945", + "chksum_sha256": "1d90560b4d39f8e0adbe73753790528ba39dbe4b7edc70d8089706da1a84823e", "format": 1 }, { - "name": "tests/integration/network-integration.cfg", + "name": "plugins/module_utils/network/asa/facts/legacy/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/target-prefixes.network", + "name": "plugins/module_utils/network/asa/facts/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14f51b782822dec130f35894d08367652be7b29aa19102314e5f049ddc307445", + "chksum_sha256": "974b74159f6d3e59e5a56f8677c26e470860eae57ecb53c91c3e5cefe552df91", "format": 1 }, { - "name": "tests/sanity", + "name": "plugins/module_utils/network/asa/facts/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.10.txt", + "name": "plugins/module_utils/network/asa/facts/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8000e45c60499f99ceece9b4c2e153a0b50d02906850dcfc758d08c42b9ac066", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "plugins/module_utils/network/asa/facts/acls/acls.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b7289bcc81ad8747f031c4deb4c888e8eabed74ce40b5e0930d6c7e199fd8325", + "format": 1 + }, + { + "name": "plugins/module_utils/network/asa/facts/ogs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/asa/facts/ogs/ogs.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4889d0ef1f24d9aebaf0653e16669f19277989efb52ee0042f49fcd5cd903162", + "format": 1 + }, + { + "name": "plugins/module_utils/network/asa/facts/ogs/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/sanity/ignore-2.11.txt", + "name": "plugins/module_utils/network/asa/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a726fa26f4d91f96be9d8d98ab93c32b82bc16a69f9ab116ddeee2c042cbe4b1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/sanity/ignore-2.12.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5e57cb2fa7cd31227fcf1fd7085c7213f560ce12895b80211aeba768ec9de041", + "name": "plugins/module_utils/network/asa/providers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.13.txt", + "name": "plugins/module_utils/network/asa/providers/providers.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d", + "chksum_sha256": "2d12b31ea6902b70db0eb9e71564b586d4e62b90655345669eb372f1f3f9c9cc", "format": 1 }, { - "name": "tests/sanity/ignore-2.14.txt", + "name": "plugins/module_utils/network/asa/providers/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/sanity/ignore-2.15.txt", + "name": "plugins/module_utils/network/asa/providers/module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d", + "chksum_sha256": "9b87ca2036255d1dcd9080d73f0997df1a19af0fa9466f84e3a7eef8a803de9a", "format": 1 }, { - "name": "tests/sanity/ignore-2.16.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d", + "name": "plugins/module_utils/network/asa/rm_templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.17.txt", + "name": "plugins/module_utils/network/asa/rm_templates/ogs.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a01d39f278abada36c8f698d56c3a0c17efdf85178ceba34c1dc3c523679b9d", + "chksum_sha256": "ff869d21e976eeeef522b52b44df1c276e97dbb90cee0aa13a9eedc42570ae0b", "format": 1 }, { - "name": "tests/sanity/ignore-2.9.txt", + "name": "plugins/module_utils/network/asa/rm_templates/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8000e45c60499f99ceece9b4c2e153a0b50d02906850dcfc758d08c42b9ac066", + "chksum_sha256": "f244c13a86b80d08dae36977a2c7344baf8913b00df67128fc0caf4c7eb81865", "format": 1 }, { - "name": "tests/unit", + "name": "plugins/module_utils/network/asa/argspec", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/compat", + "name": "plugins/module_utils/network/asa/argspec/facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/compat/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/compat/mock.py", + "name": "plugins/module_utils/network/asa/argspec/facts/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b91b074a0bb9cfda8560f02aa3cefe0bfaae9b045f8386597bfe342f1e5a0717", + "chksum_sha256": "58646002557f192f15baf87346550ea1a6b37b36596b47bc66a1465540e26e01", "format": 1 }, { - "name": "tests/unit/compat/unittest.py", + "name": "plugins/module_utils/network/asa/argspec/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/mock", + "name": "plugins/module_utils/network/asa/argspec/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/mock/__init__.py", + "name": "plugins/module_utils/network/asa/argspec/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/mock/loader.py", + "name": "plugins/module_utils/network/asa/argspec/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bdaecf94a3bba53aa135687aecc6fc2c45f7ec5e85f5d2556f5a269aa3fe0c8a", + "chksum_sha256": "fcae6ce706327a09b0ab8b82c91a55186f9974e5a0e190a5188c49bcc8cb93e7", "format": 1 }, { - "name": "tests/unit/mock/path.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1042460934c45b35a3bd39c9ddb9b06f25986c251c6ce9f5288e32406d2e2034", + "name": "plugins/module_utils/network/asa/argspec/ogs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/mock/procenv.py", + "name": "plugins/module_utils/network/asa/argspec/ogs/ogs.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d4362cb826d0529ad37056279571952424c356db10971c024fbab4ec382563d9", + "chksum_sha256": "5d0487f754e8a1b8968ec7cda2bab9849ed0a920dfc9da1d77930c821b613bdc", "format": 1 }, { - "name": "tests/unit/mock/vault_helper.py", + "name": "plugins/module_utils/network/asa/argspec/ogs/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/mock/yaml_helper.py", + "name": "plugins/module_utils/network/asa/argspec/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "134eef238c83a9611799871b743e49e9bfbcd8bdddf2cc6a7bf69fd1000345b3", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/asa/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/asa/asa.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e924eeba5d9c9489c645c7bea52c1ef6ebcb0cb22c70746b78fd25f2fd385a85", "format": 1 }, { - "name": "tests/unit/modules/network/asa", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/asa/fixtures", + "name": "plugins/doc_fragments", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/asa/fixtures/__init__.py", + "name": "plugins/doc_fragments/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/asa/fixtures/asa_acls_config.cfg", + "name": "plugins/doc_fragments/asa.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "877c2b14dbd661c2235be0269f9e7ee0eeedc86ca3abc9b2883df838a2af2b99", + "chksum_sha256": "130cf43f0307ebbc4bc121d6b0616af8895c602bc9bc3e2abd0341fd10a49500", "format": 1 }, { - "name": "tests/unit/modules/network/asa/fixtures/asa_facts_dir", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5e44f9ecbe09cf864c3d107d24eed7e34baa78b45a9edda1b35c28d232434ae9", + "name": "plugins/cliconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/asa/fixtures/asa_facts_show_memory", + "name": "plugins/cliconf/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac8a97005ae66296bad1abcba64857ed3b9a9a3cdd3bc94c5b41272193458e32", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/asa/fixtures/asa_facts_show_version", + "name": "plugins/cliconf/asa.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "740b1ca496b3d669bc243713a931477f995ccdc458c3d15e95de89adacf81f3d", + "chksum_sha256": "dda3e968fc69abbddc6f0742420d8b0e11e2d44358a20239025a6f54ebc4f41c", "format": 1 }, { - "name": "tests/unit/modules/network/asa/fixtures/asa_og_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8c324a36273027bf40c6aa8003cc355200cfbf67e34ab630e406f74c87a40aee", + "name": "plugins/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/asa/fixtures/asa_ogs_config.cfg", + "name": "plugins/modules/asa_ogs.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed1061977da5661fcb73e4399908fd271914e714716942cc9bfffaec4a82e90a", + "chksum_sha256": "278c499570e2f0cf5a2c6a48929e9c40530e00ab0ecc4945689858e689808119", "format": 1 }, { - "name": "tests/unit/modules/network/asa/__init__.py", + "name": "plugins/modules/asa_facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "17fc0b752d583d54f38f878f8122a7fe8db0319b7fbee1519577b588d4034b6c", "format": 1 }, { - "name": "tests/unit/modules/network/asa/asa_module.py", + "name": "plugins/modules/asa_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "92f0ead04504c5da2ad3d7b613b9832ad0f22fc379eee5b3c9be347064213b18", + "chksum_sha256": "9fbb4c90a18d3945dfd710c5dbd17f8b81780528e2a9bb8fe3c6136acc76a907", "format": 1 }, { - "name": "tests/unit/modules/network/asa/test_asa_acls.py", + "name": "plugins/modules/asa_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2725a0d5d4a680c056a3d644f824257f18af756aa028980c864ff495afb1692a", + "chksum_sha256": "a9677bf1c1b654f58c292bf1eaab9e7d9fe3531e8eccbb7c7b03235ef2a0abb5", "format": 1 }, { - "name": "tests/unit/modules/network/asa/test_asa_facts.py", + "name": "plugins/modules/asa_acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e21775c2419e680466d71213ce3ffd68d9b460e0ad4f1a0eb50e22c5c6462957", + "chksum_sha256": "b56a38b92596b7d22ebc6bed87c1587a7732f4a3d7680e274d0afa3553067490", "format": 1 }, { - "name": "tests/unit/modules/network/asa/test_asa_ogs.py", + "name": "plugins/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "68ad856224f437cdd22a45a3a8412f71fb9158f70558b9206d96da84280d9e03", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "plugins/terminal", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/__init__.py", + "name": "plugins/terminal/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/conftest.py", + "name": "plugins/terminal/asa.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048", + "chksum_sha256": "3b24a952d8c6d070d4e29c7a6a58d6bc3c0f17741df33ad56b213b87372854f1", "format": 1 }, { - "name": "tests/unit/modules/utils.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f2cca5cec1121f8e27ef6f4c0611b6ec246d47610f6411f2dc511cde612174c0", + "name": "plugins/action", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/__init__.py", + "name": "plugins/action/ogs.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c", "format": 1 }, { - "name": "tests/unit/requirements.txt", + "name": "plugins/action/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", + "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c", "format": 1 }, { - "name": "tests/.gitignore", + "name": "plugins/action/config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", + "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c", "format": 1 }, { - "name": ".gitignore", + "name": "plugins/action/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e620f88c2366ee31df48a1a4efc69c2b06cfe8bef75979f9d6e32f0a872b2644", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": ".isort.cfg", + "name": "plugins/action/command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4e11dfc2dddd670a70b23d3c1504e08c2d3175a3b7323d912d94fa40c18d524a", + "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c", "format": 1 }, { - "name": ".pre-commit-config.yaml", + "name": "plugins/action/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e58624a7144289a17cc3adc6b49c11ab58d9c9e80a05c4240a36b4b3968f368", + "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c", "format": 1 }, { - "name": ".prettierignore", + "name": "plugins/action/asa.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9881cacd6494858bc3c50f32917a7971c275f5dbeaa27d438985eacb344f9857", + "chksum_sha256": "7b92aa8d78762e91888d71583077ff00c127ebcde8551b94e6b96e495943157c", "format": 1 }, { - "name": ".yamllint", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", + "name": ".github", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "CHANGELOG.rst", + "name": ".github/dependabot.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ebc72b854489f94f781844c4c506df9f923573b633e2a45a0b8170d696cb292c", + "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461", "format": 1 }, { - "name": "LICENSE", + "name": ".github/workflows", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".github/workflows/ack.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "chksum_sha256": "24c6fbafaa69e3e3ee696f2cefa5120794b62cef7e870553dddce8b8af0a127c", "format": 1 }, { - "name": "README.md", + "name": ".github/workflows/push.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5554553376536ef1033fa36e0c81cd23362e19b76b1462562ead08c0202ea23", + "chksum_sha256": "ab12fa802baf5f9545109b311f6bac5b76ae1a404a60d20a32481d41b06d901c", "format": 1 }, { - "name": "bindep.txt", + "name": ".github/workflows/lint.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "104adbad1acc69a10523807ae1b14344dddd76b712907ddc2b3ddf656d2c69c0", + "chksum_sha256": "4aeac57f14d48d82a859c822f84a0573419958bc70708f19caa6daac5c771ff9", "format": 1 }, { - "name": "codecov.yml", + "name": ".github/workflows/codecoverage.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2", + "chksum_sha256": "8bbcae622f5e51798b577df290135e846244399c2a6ccbfedac523b38a8330a3", "format": 1 }, { - "name": "pyproject.toml", + "name": ".github/workflows/release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc", + "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1", "format": 1 }, { - "name": "requirements.txt", + "name": ".github/workflows/tests.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "883b106f13b0c6536f55619685ddca25968b4167dedb12e08fa37c93f4c63b25", + "chksum_sha256": "b9ea02b4481063bd0aff87fb00917fba18afe89405d0aef219993f36f4bfe14c", "format": 1 }, { - "name": "test-requirements.txt", + "name": ".github/release-drafter.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eaa5e13a5ebe3344585b2e5ac61a6974a6d5b132f13a815d3a0f68c36ecfe8ad", + "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", "format": 1 }, { - "name": "tox.ini", + "name": ".github/CODEOWNERS", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3d0045e391c8743eef92c7f130b1d800d7bfc38952a8537d13c7401a8f45e11", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 } ], diff --git a/ansible_collections/cisco/asa/MANIFEST.json b/ansible_collections/cisco/asa/MANIFEST.json index d8f452300..99747eae6 100644 --- a/ansible_collections/cisco/asa/MANIFEST.json +++ b/ansible_collections/cisco/asa/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "cisco", "name": "asa", - "version": "4.0.3", + "version": "5.0.1", "authors": [ "Ansible Security Community (ansible-security)" ], @@ -17,7 +17,7 @@ "license": [], "license_file": "LICENSE", "dependencies": { - "ansible.netcommon": ">=2.5.1" + "ansible.netcommon": ">=6.0.0" }, "repository": "https://github.com/ansible-collections/cisco.asa", "documentation": null, @@ -28,7 +28,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "12ce03a7723c4c84e304c5ca4c2e1e909423ee63faecd32e9418d7e5ad7d0123", + "chksum_sha256": "87992149a312c8be931d6d3e682e38feb95d091ad791f9158c19103494452f21", "format": 1 }, "format": 1 diff --git a/ansible_collections/cisco/asa/README.md b/ansible_collections/cisco/asa/README.md index 81870ffef..2ca17c688 100644 --- a/ansible_collections/cisco/asa/README.md +++ b/ansible_collections/cisco/asa/README.md @@ -1,13 +1,14 @@ # CISCO ASA Ansible Collection [![CI](https://zuul-ci.org/gated.svg)](https://dashboard.zuul.ansible.com/t/ansible/project/github.com/ansible-collections/cisco.asa) +[![CI](https://github.com/ansible-collections/cisco.asa/actions/workflows/tests.yml/badge.svg?branch=main&event=schedule)](https://github.com/ansible-collections/cisco.asa/actions/workflows/tests.yml) The Ansible Cisco ASA collection includes a variety of Ansible content to help automate the management of Cisco ASA firewall appliances. ## Ansible version compatibility -This collection has been tested against following Ansible versions: **>=2.9.10**. +This collection has been tested against following Ansible versions: **>=2.14.0**. For collections that support Ansible 2.9, please ensure you update your `network_os` to use the fully qualified collection name (for example, `cisco.ios.ios`). @@ -92,7 +93,7 @@ ansible_python_interpreter=python #### Using the modules with Fully Qualified Collection Name (FQCN) -You can either call modules by their Fully Qualified Collection Namespace (FQCN), like `cisco.asa.asa_acls`, or you can call modules by their short name if you list the `cisco.asa` collection in the playbook's `collections`, as follows: +You can either call modules by their Fully Qualified Collection Name (FQCN), like `cisco.asa.asa_acls`, or you can call modules by their short name if you list the `cisco.asa` collection in the playbook's `collections`, as follows: ```yaml --- diff --git a/ansible_collections/cisco/asa/changelogs/changelog.yaml b/ansible_collections/cisco/asa/changelogs/changelog.yaml index d0f0d4e3a..9dbfd2c43 100644 --- a/ansible_collections/cisco/asa/changelogs/changelog.yaml +++ b/ansible_collections/cisco/asa/changelogs/changelog.yaml @@ -204,3 +204,22 @@ releases: - codecov_pr.yml - lint_fixtures.yaml release_date: "2023-10-31" + 5.0.0: + changes: + major_changes: + - Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions + are EoL now. + release_summary: + Starting from this release, the minimum `ansible-core` version + this collection requires is `2.14.0`. The last known version compatible with + fragments: + - lint_fixtures.yaml + release_date: "2023-11-30" + 5.0.1: + changes: + bugfixes: + - Prevents module_defaults from were being incorrectly applied to the platform + action, instead of the concerned module. + fragments: + - fix_module_defaults.yaml + release_date: "2024-01-31" diff --git a/ansible_collections/cisco/asa/docs/cisco.asa.asa_config_module.rst b/ansible_collections/cisco/asa/docs/cisco.asa.asa_config_module.rst index c3a2ed106..61a2551a0 100644 --- a/ansible_collections/cisco/asa/docs/cisco.asa.asa_config_module.rst +++ b/ansible_collections/cisco/asa/docs/cisco.asa.asa_config_module.rst @@ -80,7 +80,7 @@ Parameters -
This is a dict object containing configurable options related to backup file path. The value of this option is read only when backup is set to yes, if backup is set to no this option will be silently ignored.
+
This is a dict object containing configurable options related to backup file path. The value of this option is read only when backup is set to true, if backup is set to no this option will be silently ignored.
@@ -360,7 +360,6 @@ Examples - message-length maximum 512 match: line parents: [policy-map type inspect dns PM-DNS, parameters] - authorize: yes auth_pass: cisco username: admin password: cisco @@ -370,7 +369,7 @@ Examples lines: - ikev1 pre-shared-key MyS3cretVPNK3y parents: tunnel-group 1.1.1.1 ipsec-attributes - passwords: yes + passwords: true - name: attach ASA acl on interface vlan13/nameif cloud13 cisco.asa.asa_config: @@ -414,7 +413,7 @@ Examples cisco.asa.asa_config: lines: - access-group cloud-acl_access_in in interface cloud13 - backup: yes + backup: true backup_options: filename: backup.cfg dir_path: /home/user @@ -446,7 +445,7 @@ Common return values are documented `here string - when backup is yes + when backup is true
The full path to the backup file

diff --git a/ansible_collections/cisco/asa/meta/runtime.yml b/ansible_collections/cisco/asa/meta/runtime.yml index 35f1e5f93..f52e66c08 100644 --- a/ansible_collections/cisco/asa/meta/runtime.yml +++ b/ansible_collections/cisco/asa/meta/runtime.yml @@ -1,27 +1,6 @@ --- -requires_ansible: ">=2.9.10" +requires_ansible: ">=2.14.0" plugin_routing: - action: - asa_acls: - redirect: cisco.asa.asa - acls: - redirect: cisco.asa.asa - asa_command: - redirect: cisco.asa.asa - command: - redirect: cisco.asa.asa - asa_config: - redirect: cisco.asa.asa - config: - redirect: cisco.asa.asa - asa_facts: - redirect: cisco.asa.asa - facts: - redirect: cisco.asa.asa - asa_ogs: - redirect: cisco.asa.asa - ogs: - redirect: cisco.asa.asa modules: acls: redirect: cisco.asa.asa_acls diff --git a/ansible_collections/cisco/asa/plugins/action/acls.py b/ansible_collections/cisco/asa/plugins/action/acls.py new file mode 100644 index 000000000..4d4fcf32f --- /dev/null +++ b/ansible_collections/cisco/asa/plugins/action/acls.py @@ -0,0 +1,55 @@ +# +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . +# +from __future__ import absolute_import, division, print_function + + +__metaclass__ = type + +from ansible.utils.display import Display +from ansible_collections.ansible.netcommon.plugins.action.network import ( + ActionModule as ActionNetworkModule, +) + + +display = Display() + + +class ActionModule(ActionNetworkModule): + def run(self, tmp=None, task_vars=None): + del tmp # tmp no longer has any effect + + module_name = self._task.action.split(".")[-1] + self._config_module = True if module_name in ["asa_config", "config"] else False + persistent_connection = self._play_context.connection.split(".")[-1] + warnings = [] + + if persistent_connection not in ("network_cli"): + return { + "failed": True, + "msg": "Connection type %s is not valid for this module" + % self._play_context.connection, + } + + result = super(ActionModule, self).run(task_vars=task_vars) + if warnings: + if "warnings" in result: + result["warnings"].extend(warnings) + else: + result["warnings"] = warnings + return result diff --git a/ansible_collections/cisco/asa/plugins/action/command.py b/ansible_collections/cisco/asa/plugins/action/command.py new file mode 100644 index 000000000..4d4fcf32f --- /dev/null +++ b/ansible_collections/cisco/asa/plugins/action/command.py @@ -0,0 +1,55 @@ +# +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . +# +from __future__ import absolute_import, division, print_function + + +__metaclass__ = type + +from ansible.utils.display import Display +from ansible_collections.ansible.netcommon.plugins.action.network import ( + ActionModule as ActionNetworkModule, +) + + +display = Display() + + +class ActionModule(ActionNetworkModule): + def run(self, tmp=None, task_vars=None): + del tmp # tmp no longer has any effect + + module_name = self._task.action.split(".")[-1] + self._config_module = True if module_name in ["asa_config", "config"] else False + persistent_connection = self._play_context.connection.split(".")[-1] + warnings = [] + + if persistent_connection not in ("network_cli"): + return { + "failed": True, + "msg": "Connection type %s is not valid for this module" + % self._play_context.connection, + } + + result = super(ActionModule, self).run(task_vars=task_vars) + if warnings: + if "warnings" in result: + result["warnings"].extend(warnings) + else: + result["warnings"] = warnings + return result diff --git a/ansible_collections/cisco/asa/plugins/action/config.py b/ansible_collections/cisco/asa/plugins/action/config.py new file mode 100644 index 000000000..4d4fcf32f --- /dev/null +++ b/ansible_collections/cisco/asa/plugins/action/config.py @@ -0,0 +1,55 @@ +# +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . +# +from __future__ import absolute_import, division, print_function + + +__metaclass__ = type + +from ansible.utils.display import Display +from ansible_collections.ansible.netcommon.plugins.action.network import ( + ActionModule as ActionNetworkModule, +) + + +display = Display() + + +class ActionModule(ActionNetworkModule): + def run(self, tmp=None, task_vars=None): + del tmp # tmp no longer has any effect + + module_name = self._task.action.split(".")[-1] + self._config_module = True if module_name in ["asa_config", "config"] else False + persistent_connection = self._play_context.connection.split(".")[-1] + warnings = [] + + if persistent_connection not in ("network_cli"): + return { + "failed": True, + "msg": "Connection type %s is not valid for this module" + % self._play_context.connection, + } + + result = super(ActionModule, self).run(task_vars=task_vars) + if warnings: + if "warnings" in result: + result["warnings"].extend(warnings) + else: + result["warnings"] = warnings + return result diff --git a/ansible_collections/cisco/asa/plugins/action/facts.py b/ansible_collections/cisco/asa/plugins/action/facts.py new file mode 100644 index 000000000..4d4fcf32f --- /dev/null +++ b/ansible_collections/cisco/asa/plugins/action/facts.py @@ -0,0 +1,55 @@ +# +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . +# +from __future__ import absolute_import, division, print_function + + +__metaclass__ = type + +from ansible.utils.display import Display +from ansible_collections.ansible.netcommon.plugins.action.network import ( + ActionModule as ActionNetworkModule, +) + + +display = Display() + + +class ActionModule(ActionNetworkModule): + def run(self, tmp=None, task_vars=None): + del tmp # tmp no longer has any effect + + module_name = self._task.action.split(".")[-1] + self._config_module = True if module_name in ["asa_config", "config"] else False + persistent_connection = self._play_context.connection.split(".")[-1] + warnings = [] + + if persistent_connection not in ("network_cli"): + return { + "failed": True, + "msg": "Connection type %s is not valid for this module" + % self._play_context.connection, + } + + result = super(ActionModule, self).run(task_vars=task_vars) + if warnings: + if "warnings" in result: + result["warnings"].extend(warnings) + else: + result["warnings"] = warnings + return result diff --git a/ansible_collections/cisco/asa/plugins/action/ogs.py b/ansible_collections/cisco/asa/plugins/action/ogs.py new file mode 100644 index 000000000..4d4fcf32f --- /dev/null +++ b/ansible_collections/cisco/asa/plugins/action/ogs.py @@ -0,0 +1,55 @@ +# +# (c) 2016 Red Hat Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . +# +from __future__ import absolute_import, division, print_function + + +__metaclass__ = type + +from ansible.utils.display import Display +from ansible_collections.ansible.netcommon.plugins.action.network import ( + ActionModule as ActionNetworkModule, +) + + +display = Display() + + +class ActionModule(ActionNetworkModule): + def run(self, tmp=None, task_vars=None): + del tmp # tmp no longer has any effect + + module_name = self._task.action.split(".")[-1] + self._config_module = True if module_name in ["asa_config", "config"] else False + persistent_connection = self._play_context.connection.split(".")[-1] + warnings = [] + + if persistent_connection not in ("network_cli"): + return { + "failed": True, + "msg": "Connection type %s is not valid for this module" + % self._play_context.connection, + } + + result = super(ActionModule, self).run(task_vars=task_vars) + if warnings: + if "warnings" in result: + result["warnings"].extend(warnings) + else: + result["warnings"] = warnings + return result diff --git a/ansible_collections/cisco/asa/plugins/modules/asa_config.py b/ansible_collections/cisco/asa/plugins/modules/asa_config.py index 793844f83..0430a0fda 100644 --- a/ansible_collections/cisco/asa/plugins/modules/asa_config.py +++ b/ansible_collections/cisco/asa/plugins/modules/asa_config.py @@ -95,7 +95,7 @@ options: value is not given, the backup file is written to the C(backup) folder in the playbook root directory. If the directory does not exist, it is created. type: bool - default: no + default: false config: description: - The C(config) argument allows the playbook designer to supply the base configuration @@ -125,7 +125,7 @@ options: backup_options: description: - This is a dict object containing configurable options related to backup file - path. The value of this option is read only when C(backup) is set to I(yes), + path. The value of this option is read only when C(backup) is set to I(true), if C(backup) is set to I(no) this option will be silently ignored. suboptions: filename: @@ -182,7 +182,6 @@ EXAMPLES = """ - message-length maximum 512 match: line parents: [policy-map type inspect dns PM-DNS, parameters] - authorize: yes auth_pass: cisco username: admin password: cisco @@ -192,7 +191,7 @@ EXAMPLES = """ lines: - ikev1 pre-shared-key MyS3cretVPNK3y parents: tunnel-group 1.1.1.1 ipsec-attributes - passwords: yes + passwords: true - name: attach ASA acl on interface vlan13/nameif cloud13 cisco.asa.asa_config: @@ -236,7 +235,7 @@ EXAMPLES = """ cisco.asa.asa_config: lines: - access-group cloud-acl_access_in in interface cloud13 - backup: yes + backup: true backup_options: filename: backup.cfg dir_path: /home/user @@ -254,7 +253,7 @@ updates: sample: ['...', '...'] backup_path: description: The full path to the backup file - returned: when backup is yes + returned: when backup is true type: str sample: /playbooks/ansible/backup/asa_config.2016-07-16@22:28:34 """ diff --git a/ansible_collections/cisco/asa/test-requirements.txt b/ansible_collections/cisco/asa/test-requirements.txt index 8002336b1..fa1e9fd35 100644 --- a/ansible_collections/cisco/asa/test-requirements.txt +++ b/ansible_collections/cisco/asa/test-requirements.txt @@ -1,8 +1,8 @@ -black==22.3.0 ; python_version > '3.5' +black==23.3.0 ; python_version >= '3.7' flake8 mock ; python_version < '3.5' pexpect pytest-xdist yamllint -coverage==4.5.4 -git+https://github.com/ansible-community/pytest-ansible-units.git +pytest-ansible ; python_version >= '3.9' +git+https://github.com/ansible-community/pytest-ansible-units.git ; python_version < '3.9' diff --git a/ansible_collections/cisco/asa/tests/config.yml b/ansible_collections/cisco/asa/tests/config.yml new file mode 100644 index 000000000..c26ea5966 --- /dev/null +++ b/ansible_collections/cisco/asa/tests/config.yml @@ -0,0 +1,3 @@ +--- +modules: + python_requires: ">=3.9" diff --git a/ansible_collections/cisco/intersight/CHANGELOG.md b/ansible_collections/cisco/intersight/CHANGELOG.md index 1ed1a5e3e..fac62949e 100644 --- a/ansible_collections/cisco/intersight/CHANGELOG.md +++ b/ansible_collections/cisco/intersight/CHANGELOG.md @@ -1,5 +1,8 @@ # cisco.intersight Ansible Collection Changelog +## Version 2.0.9 +- Fix issue #114 to support $count query param + ## Version 2.0.8 - Fix issue #111 to allow User Policy updates diff --git a/ansible_collections/cisco/intersight/FILES.json b/ansible_collections/cisco/intersight/FILES.json index 95315ee60..fff54d97f 100644 --- a/ansible_collections/cisco/intersight/FILES.json +++ b/ansible_collections/cisco/intersight/FILES.json @@ -46,7 +46,7 @@ "name": "CHANGELOG.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "184c0ed03fe6bbd200481b356aab0a3e8c92fbb08bcf3ca6057c53fac6e65e1d", + "chksum_sha256": "a5b35131740307d42fbd05f3ae58102a6efc3fadbc2fa484e51cb46f92e9faeb", "format": 1 }, { @@ -88,7 +88,7 @@ "name": "plugins/module_utils/intersight.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4b3f573930d8818604518a9f0131e4f12dbea0509b1158f4fd8004e0967a3a3d", + "chksum_sha256": "a5608cbf9e6abd118ac846b95204afe39ff4aad15c34c2f324cdb78e6b87d1c6", "format": 1 }, { @@ -329,6 +329,13 @@ "chksum_sha256": "7c2c5a08115b656eb0cefca6ba606233b8c8e5ea9ead6f1138ad7da31b317ac7", "format": 1 }, + { + "name": "playbooks/count_vms.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6d4c73d070fa70eead9a41b3f4062398586d6ddca57a077a208d827baba110ae", + "format": 1 + }, { "name": "playbooks/roles", "ftype": "dir", diff --git a/ansible_collections/cisco/intersight/MANIFEST.json b/ansible_collections/cisco/intersight/MANIFEST.json index 990405175..59a47d8be 100644 --- a/ansible_collections/cisco/intersight/MANIFEST.json +++ b/ansible_collections/cisco/intersight/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "cisco", "name": "intersight", - "version": "2.0.8", + "version": "2.0.9", "authors": [ "David Soper (@dsoper2)" ], @@ -27,7 +27,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7958d8bc5047610831777f3a56171c17f505aff4bd24acfe861039c60da2c771", + "chksum_sha256": "c34815de4b4e930a5a0d62ab855cb1cbfeb27876d40417b91496c934042a9222", "format": 1 }, "format": 1 diff --git a/ansible_collections/cisco/intersight/playbooks/count_vms.yml b/ansible_collections/cisco/intersight/playbooks/count_vms.yml new file mode 100644 index 000000000..9590a4804 --- /dev/null +++ b/ansible_collections/cisco/intersight/playbooks/count_vms.yml @@ -0,0 +1,26 @@ +--- +- name: Get count + hosts: localhost + connection: local + gather_facts: false + vars: + # Create an anchor for api_info that can be used throughout the file + api_info: &api_info + # if api_key vars are omitted, INTERSIGHT_API_KEY_ID, INTERSIGHT_API_PRIVATE_KEY, + # and INTERSIGHT_API_URI environment variables used for API key data + api_private_key: "{{ api_private_key | default(omit) }}" + api_key_id: "{{ api_key_id | default(omit) }}" + api_uri: "{{ api_uri | default(omit) }}" + validate_certs: "{{ validate_certs | default(omit) }}" + tasks: + # Get a count of the VM hosts + - name: "Get VM Count" + cisco.intersight.intersight_rest_api: + <<: *api_info + resource_path: /virtualization/VirtualMachines + query_params: + $count: true + register: resp + - name: "Print VM count" + ansible.builtin.debug: + msg: "VM count {{ resp.count }}" diff --git a/ansible_collections/cisco/intersight/plugins/module_utils/intersight.py b/ansible_collections/cisco/intersight/plugins/module_utils/intersight.py index 143cd7d25..552afebb7 100644 --- a/ansible_collections/cisco/intersight/plugins/module_utils/intersight.py +++ b/ansible_collections/cisco/intersight/plugins/module_utils/intersight.py @@ -360,6 +360,7 @@ class IntersightModule(): else: # return the 1st list element self.result['api_response'] = response['Results'][0] + self.result['count'] = response.get('Count') self.result['trace_id'] = response.get('trace_id') def configure_resource(self, moid, resource_path, body, query_params, update_method=''): diff --git a/ansible_collections/cisco/ios/.ansible-lint b/ansible_collections/cisco/ios/.ansible-lint index 8d9bb70b8..d2869106c 100644 --- a/ansible_collections/cisco/ios/.ansible-lint +++ b/ansible_collections/cisco/ios/.ansible-lint @@ -1,5 +1,7 @@ --- + profile: production -exclude_paths: - - changelogs/changelog.yaml +# exclude_paths: + +# - changelogs/changelog.yaml diff --git a/ansible_collections/cisco/ios/.flake8 b/ansible_collections/cisco/ios/.flake8 index 4795515e8..03be69242 100644 --- a/ansible_collections/cisco/ios/.flake8 +++ b/ansible_collections/cisco/ios/.flake8 @@ -39,19 +39,14 @@ extend-exclude = # IMPORTANT: avoid using ignore option, always use extend-ignore instead # Completely and unconditionally ignore the following errors: extend-ignore = - # Safeguard neutering of flake8-quotes : https://github.com/zheller/flake8-quotes/issues/105 - Q, - # annoy black by allowing white space before : https://github.com/psf/black/issues/315 - E203, - # duplicate of pylint W0611 (unused-import) - F401, - # duplicate of pylint E0602 (undefined-variable) - F821, - # duplicate of pylint W0612 (unused-variable) F841, + # line-length + E501, + # module level import not at top of file + E402 # Accessibility/large fonts and PEP8 unfriendly: -max-line-length = 100 +max-line-length = 120 # Allow certain violations in certain files: # Please keep both sections of this list sorted, as it will be easier for others to find and add entries in the future @@ -62,7 +57,7 @@ per-file-ignores = # these will need to be added to that line as well. - # S101: Allow the use of assert within the tests directory, since tests require it. + # S101: Allow the use of assert within the tests directory, since tests require it. tests/**.py: S101 # The following were present during the initial implementation. diff --git a/ansible_collections/cisco/ios/.github/workflows/ack.yml b/ansible_collections/cisco/ios/.github/workflows/ack.yml deleted file mode 100644 index fda595dc5..000000000 --- a/ansible_collections/cisco/ios/.github/workflows/ack.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml -name: ack - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - pull_request_target: - types: [opened, labeled, unlabeled, synchronize] - -jobs: - ack: - uses: ansible/devtools/.github/workflows/ack.yml@main diff --git a/ansible_collections/cisco/ios/.github/workflows/check_label.yml b/ansible_collections/cisco/ios/.github/workflows/check_label.yml new file mode 100644 index 000000000..b120bfa32 --- /dev/null +++ b/ansible_collections/cisco/ios/.github/workflows/check_label.yml @@ -0,0 +1,11 @@ +--- +name: "Check label" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + pull_request_target: + types: [opened, labeled, unlabeled, synchronize] +jobs: + check_label: + uses: ansible/ansible-content-actions/.github/workflows/check_label.yaml@main diff --git a/ansible_collections/cisco/ios/.github/workflows/codecoverage.yml b/ansible_collections/cisco/ios/.github/workflows/codecoverage.yml index c2a7ad60d..3e0f17919 100644 --- a/ansible_collections/cisco/ios/.github/workflows/codecoverage.yml +++ b/ansible_collections/cisco/ios/.github/workflows/codecoverage.yml @@ -1,8 +1,9 @@ --- -name: code_coverage +name: "Code coverage" on: # yamllint disable-line rule:truthy push: + branches: [main] pull_request: branches: [ main ] diff --git a/ansible_collections/cisco/ios/.github/workflows/draft_release.yml b/ansible_collections/cisco/ios/.github/workflows/draft_release.yml new file mode 100644 index 000000000..33a890a57 --- /dev/null +++ b/ansible_collections/cisco/ios/.github/workflows/draft_release.yml @@ -0,0 +1,18 @@ +--- +name: "Draft release" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + workflow_dispatch: +env: + NAMESPACE: ${{ github.repository_owner }} + COLLECTION_NAME: ios + ANSIBLE_COLLECTIONS_PATHS: ./ +jobs: + update_release_draft: + uses: ansible/ansible-content-actions/.github/workflows/draft_release.yaml@main + with: + repo: ${{ github.event.pull_request.head.repo.full_name }} + secrets: + BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/cisco/ios/.github/workflows/lint.yml b/ansible_collections/cisco/ios/.github/workflows/lint.yml deleted file mode 100644 index fbac38cbf..000000000 --- a/ansible_collections/cisco/ios/.github/workflows/lint.yml +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: ansible-lint -on: # yamllint disable-line rule:truthy - pull_request: - branches: ["main"] -jobs: - build: - name: Ansible Lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Run ansible-lint - uses: ansible/ansible-lint@main diff --git a/ansible_collections/cisco/ios/.github/workflows/push.yml b/ansible_collections/cisco/ios/.github/workflows/push.yml deleted file mode 100644 index 2e144f623..000000000 --- a/ansible_collections/cisco/ios/.github/workflows/push.yml +++ /dev/null @@ -1,38 +0,0 @@ ---- -# push workflow is shared and expected to perform actions after a merge happens -# on a maintenance branch (default or release). For example updating the -# draft release-notes. -# based on great work from -# https://github.com/T-Systems-MMS/ansible-collection-icinga-director -name: push - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - # # auto generate changelog and add PR by ansibuddy - # push: - # # branches to consider in the event; optional, defaults to all - # branches: - # - main - # - 'releases/**' - # - 'stable/**' - # # Prevent a 2nd run after the changelog is updated - # paths-ignore: - # - CHANGELOG.rst - # - changelogs/changelog.yaml - workflow_dispatch: - -env: - NAMESPACE: cisco - COLLECTION_NAME: ios - ANSIBLE_COLLECTIONS_PATHS: ./ - -jobs: - update_release_draft: - uses: ansible/devtools/.github/workflows/push_network.yml@main - with: - repo: ansible-collections/cisco.ios - secrets: - BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/cisco/ios/.github/workflows/release.yml b/ansible_collections/cisco/ios/.github/workflows/release.yml index eb04259d1..6dbb1aa39 100644 --- a/ansible_collections/cisco/ios/.github/workflows/release.yml +++ b/ansible_collections/cisco/ios/.github/workflows/release.yml @@ -1,12 +1,12 @@ --- -name: release +name: "Release collection" on: # yamllint disable-line rule:truthy release: types: [published] jobs: release: - uses: ansible/devtools/.github/workflows/release_collection.yml@main + uses: ansible/ansible-content-actions/.github/workflows/release.yaml@main with: environment: release secrets: diff --git a/ansible_collections/cisco/ios/.github/workflows/tests.yml b/ansible_collections/cisco/ios/.github/workflows/tests.yml index 2c1d85055..bf7ade86c 100644 --- a/ansible_collections/cisco/ios/.github/workflows/tests.yml +++ b/ansible_collections/cisco/ios/.github/workflows/tests.yml @@ -1,5 +1,5 @@ --- -name: CI +name: "CI" concurrency: group: ${{ github.head_ref || github.run_id }} @@ -12,15 +12,18 @@ on: # yamllint disable-line rule:truthy schedule: - cron: '0 0 * * *' - jobs: changelog: - uses: ansible-network/github_actions/.github/workflows/changelog.yml@main - if: github.event_name != 'schedule' + uses: ansible/ansible-content-actions/.github/workflows/changelog.yaml@main + if: github.event_name == 'pull_request' + build-import: + uses: ansible/ansible-content-actions/.github/workflows/build_import.yaml@main + ansible-lint: + uses: ansible/ansible-content-actions/.github/workflows/ansible_lint.yaml@main sanity: - uses: ansible-network/github_actions/.github/workflows/sanity.yml@main + uses: ansible/ansible-content-actions/.github/workflows/sanity.yaml@main unit-galaxy: - uses: ansible-network/github_actions/.github/workflows/unit_galaxy.yml@main + uses: ansible/ansible-content-actions/.github/workflows/unit.yaml@main unit-source: uses: ansible-network/github_actions/.github/workflows/unit_source.yml@main with: @@ -31,16 +34,19 @@ jobs: if: ${{ always() }} needs: - changelog + - build-import - sanity - unit-galaxy - - unit-source + - ansible-lint runs-on: ubuntu-latest steps: - run: >- python -c "assert 'failure' not in set([ '${{ needs.changelog.result }}', + '${{ needs.build-import.result }}', '${{ needs.sanity.result }}', - '${{ needs.unit-galaxy.result }}', + '${{ needs.unit-galaxy.result }}' + '${{ needs.ansible-lint.result }}' '${{ needs.unit-source.result }}' ])" diff --git a/ansible_collections/cisco/ios/.pre-commit-config.yaml b/ansible_collections/cisco/ios/.pre-commit-config.yaml index 275086d8d..031505895 100644 --- a/ansible_collections/cisco/ios/.pre-commit-config.yaml +++ b/ansible_collections/cisco/ios/.pre-commit-config.yaml @@ -23,7 +23,7 @@ repos: - id: add-trailing-comma - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.1.0" + rev: "v4.0.0-alpha.8" hooks: - id: prettier entry: env CI=1 bash -c "prettier --list-different . || ec=$? && prettier --loglevel=error --write . && exit $ec" @@ -34,13 +34,18 @@ repos: - prettier-plugin-toml - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort name: Sort import statements using isort args: ["--filter-files"] - repo: https://github.com/psf/black - rev: 23.11.0 + rev: 24.3.0 hooks: - id: black + + - repo: https://github.com/pycqa/flake8 + rev: 7.0.0 + hooks: + - id: flake8 diff --git a/ansible_collections/cisco/ios/CHANGELOG.rst b/ansible_collections/cisco/ios/CHANGELOG.rst index 1dcb5aa02..9fdf040df 100644 --- a/ansible_collections/cisco/ios/CHANGELOG.rst +++ b/ansible_collections/cisco/ios/CHANGELOG.rst @@ -5,6 +5,123 @@ Cisco Ios Collection Release Notes .. contents:: Topics +v8.0.0 +====== + +Major Changes +------------- + +- Update the netcommon base version 6.1.0 to support cli_restore plugin. + +Minor Changes +------------- + +- Add support for cli_restore functionality. +- Please refer the PR to know more about core changes (https://github.com/ansible-collections/ansible.netcommon/pull/618). +- cli_restore module is part of netcommon. + +v7.0.0 +====== + +Major Changes +------------- + +- ios_ntp - Remove deprecated ntp legacy module + +Removed Features (previously deprecated) +---------------------------------------- + +- Deprecated ios_ntp module in favor of ios_ntp_global. + +v6.1.4 +====== + +Bugfixes +-------- + +- ios_acls - update module to apply remarks entry with sequence numbers. +- ios_bgp_address_family - description attribute, evalutated as complex object casted to string. +- ios_bgp_global - description attribute, evalutated as complex object casted to string. +- ios_interfaces - description attribute, evalutated as complex object casted to string. +- ios_prefix_lists - description attribute, evalutated as complex object casted to string. +- ios_route_maps - description attribute, evalutated as complex object casted to string. + +v6.1.3 +====== + +Bugfixes +-------- + +- ios_acls - Adds back existing remarks for an ace entry when updated with replaced or overridden state, as all remarks for a specific sequence gets removed when ace entry is updated. +- ios_bgp_global - Shutdown attributes generates negate command on set as false. +- ios_vrf - Update and add missing argspec keys that define the attributes. + +Documentation Changes +--------------------- + +- ios_vrf - Update and add missing documentation for ios_vrf module. + +v6.1.2 +====== + +Bugfixes +-------- + +- ios_acls - Fix replaced state to consider remarks and ace entries while comparing configuration. +- ios_acls - correctly match the different line for ACL without sequence number +- ios_acls - take correctly in case where we want to push an ACL from a different type +- ios_ospfv2 - Fix improper rendering of admin_distance attribute. +- ios_snmp_server - fixed config issue with snmp user password update being idempotent on consecutive runs. +- ios_user - Fix configuration of hashed passwords and secrets. + +v6.1.1 +====== + +Bugfixes +-------- + +- Prevents module_defaults from were being incorrectly applied to the platform action, instead of the concerned module. +- ios_vlans - fixes behaviour of shutdown attribute with action states. + +v6.1.0 +====== + +Minor Changes +------------- + +- ios_bgp_global - added 'bgp.default.ipv4_unicast' and 'bgp.default.route_target.filter' key +- ios_l3_interfaces - added 'autostate', 'mac_address', 'ipv4.source_interface', and 'ipv6.enable' key +- ios_vlans - Add purged state to deal with toplevel vlan and vlan configuration config. + +Bugfixes +-------- + +- ios_bgp_global - fix template attribute to generate configuration commands. +- ios_l3_interfaces - remove validation from ipv6 address parameter. +- ios_snmp_server - fix group and user IPv6 ACL commands. +- ios_user - fix configuration of user with hashed password. +- ios_user - fixed configuration removal of ssh users using purge. +- ios_vlans - Make behaviour of the action states consistent. +- ios_vlans - Top level configuration attribute is not required, the module works with vlan and vlan configuration both. + +v6.0.0 +====== + +Release Summary +--------------- + +Starting from this release, the minimum `ansible-core` version this collection requires is `2.14.0`. The last known version compatible with ansible-core<2.14 is `v5.3.0`. + +Major Changes +------------- + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. + +Removed Features (previously deprecated) +---------------------------------------- + +- Removed previously deprecated ios_bgp module in favor of ios_bgp_global and ios_bgp_address_family. + v5.3.0 ====== @@ -569,7 +686,7 @@ Documentation Changes New Modules ----------- -- ios_hostname - hostname resource module +- ios_hostname - Resource module to configure hostname. v2.6.0 ====== @@ -600,7 +717,7 @@ Documentation Changes New Modules ----------- -- ios_snmp_server - snmp_server resource module +- ios_snmp_server - Resource module to configure snmp server. v2.5.0 ====== @@ -633,7 +750,7 @@ Documentation Changes New Modules ----------- -- ios_ntp_global - ntp_global resource module +- ios_ntp_global - Resource module to configure NTP. v2.4.0 ====== @@ -720,8 +837,8 @@ Bugfixes New Modules ----------- -- ios_logging_global - Logging resource module. -- ios_prefix_lists - Prefix Lists resource module. +- ios_logging_global - Resource module to configure logging. +- ios_prefix_lists - Resource module to configure prefix lists. v2.1.0 ====== @@ -745,7 +862,7 @@ Bugfixes New Modules ----------- -- ios_route_maps - Route Maps resource module. +- ios_route_maps - Resource module to configure route maps. v2.0.1 ====== @@ -790,7 +907,7 @@ Bugfixes New Modules ----------- -- ios_bgp_address_family - BGP Address Family resource module. +- ios_bgp_address_family - Resource module to configure BGP Address family. v1.3.0 ====== @@ -813,7 +930,7 @@ Bugfixes New Modules ----------- -- ios_bgp_global - BGP Global resource module +- ios_bgp_global - Resource module to configure BGP. v1.2.1 ====== @@ -844,7 +961,7 @@ Bugfixes New Modules ----------- -- ios_ospf_interfaces - OSPF Interfaces resource module +- ios_ospf_interfaces - Resource module to configure OSPF interfaces. v1.1.0 ====== @@ -865,7 +982,7 @@ Bugfixes New Modules ----------- -- ios_ospfv3 - OSPFv3 resource module +- ios_ospfv3 - Resource module to configure OSPFv3. v1.0.3 ====== @@ -917,34 +1034,26 @@ Cliconf New Modules ----------- -- ios_acl_interfaces - ACL interfaces resource module -- ios_acls - ACLs resource module -- ios_banner - Manage multiline banners on Cisco IOS devices -- ios_bgp - Configure global BGP protocol settings on Cisco IOS. -- ios_command - Run commands on remote devices running Cisco IOS -- ios_config - Manage Cisco IOS configuration sections -- ios_facts - Collect facts from remote devices running Cisco IOS -- ios_interface - (deprecated, removed after 2022-06-01) Manage Interface on Cisco IOS network devices -- ios_interfaces - Interfaces resource module -- ios_l2_interface - (deprecated, removed after 2022-06-01) Manage Layer-2 interface on Cisco IOS devices. -- ios_l2_interfaces - L2 interfaces resource module -- ios_l3_interface - (deprecated, removed after 2022-06-01) Manage Layer-3 interfaces on Cisco IOS network devices. -- ios_l3_interfaces - L3 interfaces resource module -- ios_lacp - LACP resource module -- ios_lacp_interfaces - LACP interfaces resource module -- ios_lag_interfaces - LAG interfaces resource module -- ios_linkagg - Manage link aggregation groups on Cisco IOS network devices -- ios_lldp - Manage LLDP configuration on Cisco IOS network devices. -- ios_lldp_global - LLDP resource module -- ios_lldp_interfaces - LLDP interfaces resource module -- ios_logging - Manage logging on network devices -- ios_ntp - Manages core NTP configuration. -- ios_ospfv2 - OSPFv2 resource module -- ios_ping - Tests reachability using ping from Cisco IOS network devices -- ios_static_route - (deprecated, removed after 2022-06-01) Manage static IP routes on Cisco IOS network devices -- ios_static_routes - Static routes resource module -- ios_system - Manage the system attributes on Cisco IOS devices -- ios_user - Manage the aggregate of local users on Cisco IOS device -- ios_vlan - (deprecated, removed after 2022-06-01) Manage VLANs on IOS network devices -- ios_vlans - VLANs resource module -- ios_vrf - Manage the collection of VRF definitions on Cisco IOS devices +- ios_acl_interfaces - Resource module to configure ACL interfaces. +- ios_acls - Resource module to configure ACLs. +- ios_banner - Module to configure multiline banners. +- ios_command - Module to run commands on remote devices. +- ios_config - Module to manage configuration sections. +- ios_facts - Module to collect facts from remote devices. +- ios_interfaces - Resource module to configure interfaces. +- ios_l2_interfaces - Resource module to configure L2 interfaces. +- ios_l3_interfaces - Resource module to configure L3 interfaces. +- ios_lacp - Resource module to configure LACP. +- ios_lacp_interfaces - Resource module to configure LACP interfaces. +- ios_lag_interfaces - Resource module to configure LAG interfaces. +- ios_linkagg - Module to configure link aggregation groups. +- ios_lldp - (deprecated, removed after 2024-06-01) Manage LLDP configuration on Cisco IOS network devices. +- ios_lldp_global - Resource module to configure LLDP. +- ios_lldp_interfaces - Resource module to configure LLDP interfaces. +- ios_ospfv2 - Resource module to configure OSPFv2. +- ios_ping - Tests reachability using ping from IOS switch. +- ios_static_routes - Resource module to configure static routes. +- ios_system - Module to manage the system attributes. +- ios_user - Module to manage the aggregates of local users. +- ios_vlans - Resource module to configure VLANs. +- ios_vrf - Module to configure VRF definitions. diff --git a/ansible_collections/cisco/ios/FILES.json b/ansible_collections/cisco/ios/FILES.json index 93015a7cb..e53a66d62 100644 --- a/ansible_collections/cisco/ios/FILES.json +++ b/ansible_collections/cisco/ios/FILES.json @@ -8,80 +8,80 @@ "format": 1 }, { - "name": "codecov.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2", + "name": ".github", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "LICENSE", + "name": ".github/dependabot.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461", "format": 1 }, { - "name": ".yamllint", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", + "name": ".github/workflows", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "requirements.txt", + "name": ".github/workflows/codecoverage.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "47d9fe78273fd64c750e78a317b1a59a6f87ebb93d8d4cf9ae6d98a0f2fc9f9e", + "chksum_sha256": "57e1fa3c1edef3b462e23b36f5ea116f8675a71d7f49731193e38b708c859742", "format": 1 }, { - "name": "meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".github/workflows/draft_release.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fa1789eadc286843dc2ced7f596d7dc49bd098cc2d816800c66659641cda298c", "format": 1 }, { - "name": "meta/runtime.yml", + "name": ".github/workflows/check_label.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "12277ae9f6f950b1b0bcbef81136879cabb0ecde5c7f464592000d7e964bd0ca", + "chksum_sha256": "9eb6abad2038b10cd6ea70310aa88d163f10c374d1728df29bb553eff2acfaba", "format": 1 }, { - "name": "meta/__init__.py", + "name": ".github/workflows/tests.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "162f3fb34963b1ec1e673de3506a5627b03a083fc97b9359758c8663dca87cc0", "format": 1 }, { - "name": "mypy.ini", + "name": ".github/workflows/release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5cc01a9c3e2a80b779ca004be5e4df814eebd494db650387b1bde98267a0b317", + "chksum_sha256": "2e3f90a3147d93b97347d8418352f23e201417e05539a466399dd258a65d699c", "format": 1 }, { - "name": ".config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".github/CODEOWNERS", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": ".config/dictionary.txt", + "name": ".github/release-drafter.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b504c990735c090ba655b9acdcc12a537ebf7d2e101b308ef1edc8543d9ed804", + "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", "format": 1 }, { - "name": "README.md", + "name": ".darglint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b78d164194085339590122e47cd810abad85929a0b0934ae0baecdf5234817f5", + "chksum_sha256": "954a7045c6fa17fddfe80995f7f8251efb6df1a2b05eaf479afca6bbc6dfd4f2", "format": 1 }, { @@ -92,878 +92,864 @@ "format": 1 }, { - "name": "plugins/terminal", + "name": "plugins/doc_fragments", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/terminal/ios.py", + "name": "plugins/doc_fragments/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8924640c75e1b992771d6b42d29a581ca03cdb594aa0cf3071b60aee9551f848", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/terminal/__init__.py", + "name": "plugins/doc_fragments/ios.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "183557f42150c3888baca407c30a651bb6d0c70a06ac55f409b271323dfcbacf", "format": 1 }, { - "name": "plugins/inventory", + "name": "plugins/lookup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/inventory/__init__.py", + "name": "plugins/lookup/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/cache", + "name": "plugins/action", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/cache/__init__.py", + "name": "plugins/action/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/cliconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/l2_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/cliconf/ios.py", + "name": "plugins/action/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c8e1266fc9979ffe143c1c97308ba48fac1a8b9a88ca2fbae116a52520dd6db", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/cliconf/__init__.py", + "name": "plugins/action/lldp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/plugin_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/facts.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/plugin_utils/__init__.py", + "name": "plugins/action/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/acl_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_facts.py", + "name": "plugins/action/vrf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "972575a88e6eaf128ecf1def334d75e696c872077ea91a5414a32dafb4866143", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_evpn_global.py", + "name": "plugins/action/bgp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b39999ffe208c5d9c8486d1bbf1fb8403aeb12df591bb83f284cd4a36a8aef1", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_linkagg.py", + "name": "plugins/action/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "187e709f0befcb38f03ee1c255f87bb373f5d1cc6eedbb3aaa0b65d29d193da7", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_l3_interfaces.py", + "name": "plugins/action/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4638e9583cab76097431b4f3d58906b5de755dd4251f831f85ad7b686d91f973", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_prefix_lists.py", + "name": "plugins/action/command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a5937aafcc9ffa0ea3bb0c118aafe6f51e599038092aac782e80470c17f2be54", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_bgp_global.py", + "name": "plugins/action/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a7ccab9fecf8b77b750367f9bb26f78d68116658d1e0df3f7a9222cc9ce2368", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_evpn_evi.py", + "name": "plugins/action/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "648b3f87f6eaa9d4c154175f4e1678ac4cce819db19e87bf3715deb1e0ae64f1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/ios_lag_interfaces.py", + "name": "plugins/action/system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "15ab6e5cb7cd7556ec0a828795d5eebc0e3a12779de558d8c95c5c519e52b47b", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_lldp_global.py", + "name": "plugins/action/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6ed88f852a8fe1eee3d14965ba9700efcc11dfb4786169fa9f0ffff1888c54b", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_command.py", + "name": "plugins/action/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d472c553267cd83de3d89409d05556068511b522139903551605098c26e81b0a", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_ntp.py", + "name": "plugins/action/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "60f03c439ea2646c81a9d78e4fa0b5a99fcabd51e3ec9056397d3397b9b50a13", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_vxlan_vtep.py", + "name": "plugins/action/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3817c3561c4521f0d75e464101d50b45872da612cc463ad1d6d99a1233b95d82", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_banner.py", + "name": "plugins/action/linkagg.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3080e91ec01655a266e3052ce6b7d20f20a575adef570293e9b5d4c91e706010", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/__init__.py", + "name": "plugins/action/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_acls.py", + "name": "plugins/action/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d77e989734fcc228ba09fe0729353f598845030e5a450c6057106ece50a3ebb", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_lacp.py", + "name": "plugins/action/service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c38d69e1f6cbf52fdd84449b019b337962afdd3685d38e8635bd80c79fc28d9", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_bgp_address_family.py", + "name": "plugins/action/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e3d38788590802b2c9007594d0b008532e9314bc44e8a8c17083c1f70c0a35e", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_lldp.py", + "name": "plugins/action/banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed7f699ea8b847870a2f99e9d42ecf55bb70cd2d1f38d39b65f6b35ea7bf7739", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_logging_global.py", + "name": "plugins/action/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74ba47a819e4473bdc366272680c4351f2a0cc8b95001ef437d7018011134e7c", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_ping.py", + "name": "plugins/action/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "abd66507a7d8a768518d0925de79e6b81f8fea7a23f087177932df20f5702715", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_ntp_global.py", + "name": "plugins/action/user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "76d59f676f660789f3ed3793b2b48672d240efe238a20f92c336515e1002b4b2", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_ospfv3.py", + "name": "plugins/action/ios.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "15b349ce09d6168c98525de1a9225f510909629e737c754412168ee5e1800e1a", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_ospf_interfaces.py", + "name": "plugins/action/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59e0db107b7b050f2d6910f14301bc17d72432526d96dee97d62d99c58502e15", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_ospfv2.py", + "name": "plugins/action/logging.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64ed9313605ffaaae2385dc9d4a2b41e566dc760d2e5c4a2bc5fa0aeb9357982", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_route_maps.py", + "name": "plugins/action/ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8944dc9ce33fd98c154ac00a97ebf73fab242a3d42a11b0fda3a5b9a5556445", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_snmp_server.py", + "name": "plugins/action/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "816d1f4bcf90311e4402e74d4bb76aa5fd78326535b2bd4860bce1957b091c8a", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_bgp.py", + "name": "plugins/action/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0db4f0011ef38cce8fe177deab111257d3012ab7e25d5cb5680a8d9b8640e2be", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_config.py", + "name": "plugins/action/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bcac658cede985e299d5e1d0079309784b1886e61bf5e789e8721975eeca0a51", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_user.py", + "name": "plugins/action/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec8c31c038a8a573be22c6cc7781b18f51fc3c35a9990d81f7fc51e30db66a37", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_lacp_interfaces.py", + "name": "plugins/action/config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "16c553e3997af81f7fe41232b71f9548ab567a5430356e2904573441a1254ab5", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_acl_interfaces.py", + "name": "plugins/action/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba34b07e15d390595759f5bda5f78d022cf3bde78d960c3a944b29b4ac78df0b", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_lldp_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bf57b49a9b78774f084d3bb6d1e6b3d8b69ab19c7f544e1c621dbcf75b0b740e", + "name": "plugins/cache", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/ios_hostname.py", + "name": "plugins/cache/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb285380781590a0c9712994169f032e2158e1a081c39ca587cf9b708835aea8", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/ios_static_routes.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "005f38e5c7349ba72fe3a68bc0c55f2f88a0ea8569f72265a69eeaa8a0709a66", + "name": "plugins/inventory", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/ios_interfaces.py", + "name": "plugins/inventory/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dbc7c65001c2d571718846580485ff91cc1937dc7b8c621c4593e84b1dfe7e41", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/ios_l2_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8aa17b7de5645ef7d089251107a7c479c0c33a6078c87e319a5e0612f448e05c", + "name": "plugins/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/ios_vrf.py", + "name": "plugins/modules/ios_vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d61b581c7b35b4c0ae9c56c2971fe32f9af84b86a84f01a91913d15fcb733c8", + "chksum_sha256": "3897ab55eed7ce1de5b147dbafcc16005b8a3c0dd6139ef46f7406696153cd22", "format": 1 }, { - "name": "plugins/modules/ios_vlans.py", + "name": "plugins/modules/ios_bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2343fe7113565914f6bc257a500e7d86a936969dfa86baee79f2eb4beebaaff3", + "chksum_sha256": "3b9b312d3fb290ad3b748f8ab433a074a9796d1f9ce95c0effe353656b16bee2", "format": 1 }, { - "name": "plugins/modules/ios_service.py", + "name": "plugins/modules/ios_lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e4d9a134d041cf48669cbdb6cde10dd2337a8f6a577c967d0db062fecb3eec33", + "chksum_sha256": "b6ed88f852a8fe1eee3d14965ba9700efcc11dfb4786169fa9f0ffff1888c54b", "format": 1 }, { - "name": "plugins/modules/ios_system.py", + "name": "plugins/modules/ios_lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04f36c07687618fd2cff763acdb88f9b1b4f600ca554d626abddff78d16887e0", - "format": 1 - }, - { - "name": "plugins/doc_fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "bf57b49a9b78774f084d3bb6d1e6b3d8b69ab19c7f544e1c621dbcf75b0b740e", "format": 1 }, { - "name": "plugins/doc_fragments/ios.py", + "name": "plugins/modules/ios_l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "183557f42150c3888baca407c30a651bb6d0c70a06ac55f409b271323dfcbacf", + "chksum_sha256": "8aa17b7de5645ef7d089251107a7c479c0c33a6078c87e319a5e0612f448e05c", "format": 1 }, { - "name": "plugins/doc_fragments/__init__.py", + "name": "plugins/modules/ios_hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/lookup", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "bb285380781590a0c9712994169f032e2158e1a081c39ca587cf9b708835aea8", "format": 1 }, { - "name": "plugins/lookup/__init__.py", + "name": "plugins/modules/ios_lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/filter", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "5c38d69e1f6cbf52fdd84449b019b337962afdd3685d38e8635bd80c79fc28d9", "format": 1 }, { - "name": "plugins/filter/__init__.py", + "name": "plugins/modules/ios_facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "972575a88e6eaf128ecf1def334d75e696c872077ea91a5414a32dafb4866143", "format": 1 }, { - "name": "plugins/module_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/ios_lldp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ed7f699ea8b847870a2f99e9d42ecf55bb70cd2d1f38d39b65f6b35ea7bf7739", "format": 1 }, { - "name": "plugins/module_utils/__init__.py", + "name": "plugins/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/ios_ospfv3.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "15b349ce09d6168c98525de1a9225f510909629e737c754412168ee5e1800e1a", "format": 1 }, { - "name": "plugins/module_utils/network/__init__.py", + "name": "plugins/modules/ios_service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e4d9a134d041cf48669cbdb6cde10dd2337a8f6a577c967d0db062fecb3eec33", "format": 1 }, { - "name": "plugins/module_utils/network/ios", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/ios_l3_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8affa943f54d1729e00666e43580c3d03d936d67ea56dd001fb856108b2b65c8", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/ios_config.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bcac658cede985e299d5e1d0079309784b1886e61bf5e789e8721975eeca0a51", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/bgp_global.py", + "name": "plugins/modules/ios_bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dca0cb13b6e26be815be0020643a86a88a7ce39cad897bdc7f369feb7ccbf614", + "chksum_sha256": "fd47cae1f8a8d041da43172d14cbd75bd5fb54419d8558186c823a75dc22e8b5", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/evpn_global.py", + "name": "plugins/modules/ios_snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "249fe0eba1589f0bdb2ba5510fa5e8f0b885e989121347301c41e44a108dfe2b", + "chksum_sha256": "816d1f4bcf90311e4402e74d4bb76aa5fd78326535b2bd4860bce1957b091c8a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/lag_interfaces.py", + "name": "plugins/modules/ios_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde795fceb364b30850bb9c04ac589c84896800e1729ebe0c9a9c3478f4722b2", + "chksum_sha256": "d472c553267cd83de3d89409d05556068511b522139903551605098c26e81b0a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/interfaces.py", + "name": "plugins/modules/ios_acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "01ee7704f1fbcefbe1c43dcf83c782817ccd2ae09d1fe9532d667b5bfcf962d1", + "chksum_sha256": "ba34b07e15d390595759f5bda5f78d022cf3bde78d960c3a944b29b4ac78df0b", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/bgp_address_family.py", + "name": "plugins/modules/ios_linkagg.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29e1cfe2d4c8064d04f53bdae1c971f631be6f0844a3ff5df9347aab1c6c0dff", + "chksum_sha256": "dff3a9d857515f74e56eebac1b59c9e8b45475e9cbd2d25ecbb9de73280baa68", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/static_routes.py", + "name": "plugins/modules/ios_acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aee1c6a1aca4f66c407d9a805b12471d1ed27959ed486bf46b34569c7a30d79e", + "chksum_sha256": "9807470479f124d8529fe6d7b2b14f25941c7817b4bf11389f2d694288925861", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/hostname.py", + "name": "plugins/modules/ios_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd7353433ed688982b69d5f12378ff56bb0b399f0734e27b1571a86a14384253", + "chksum_sha256": "cb8b637e1f752a56bde1835241d53a5cf12d02bed53a280cf052a46b44d314a8", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/vxlan_vtep.py", + "name": "plugins/modules/ios_banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "982beb248da55ccc7ecf9fa011237ce35cdb9360467e8917d4ca599913ea2255", + "chksum_sha256": "3080e91ec01655a266e3052ce6b7d20f20a575adef570293e9b5d4c91e706010", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/ntp_global.py", + "name": "plugins/modules/ios_vrf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b678c59980cd60b4ab5e3cc4911f1dead04603b229b1519d74ea69b94951906b", + "chksum_sha256": "f040be5c941c61ee4bb90bb467b456254b1775de48fbb99f157e61e05bf766ad", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/snmp_server.py", + "name": "plugins/modules/ios_ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4584df761d31b13f2375279763059612816a629e584c16a4572ab991df128f3b", + "chksum_sha256": "abd66507a7d8a768518d0925de79e6b81f8fea7a23f087177932df20f5702715", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/__init__.py", + "name": "plugins/modules/ios_vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b77581c23e8dd35a0d9bdd448a3638ce38e9779e2a41f86f008739d85120fd92", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/ospfv3.py", + "name": "plugins/modules/ios_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dbd8f6a15c395b673de496acf55ac661dbf4911c6bf767b121a47240550ec2fb", + "chksum_sha256": "dbc7c65001c2d571718846580485ff91cc1937dc7b8c621c4593e84b1dfe7e41", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/service.py", + "name": "plugins/modules/ios_system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a3a79e6c58e4de26c7d6e759b48befd4c79c541924c27ae6aad77f267e49aac", + "chksum_sha256": "04f36c07687618fd2cff763acdb88f9b1b4f600ca554d626abddff78d16887e0", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/route_maps.py", + "name": "plugins/modules/ios_ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b3ba655a290e50e5ace24b073656b5eb5aed5b1589c4e693ae5e38aca29ee941", + "chksum_sha256": "59e0db107b7b050f2d6910f14301bc17d72432526d96dee97d62d99c58502e15", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/l2_interfaces.py", + "name": "plugins/modules/ios_evpn_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "38538d11bfe3e802bebb0e784aacd68b06f83229e706087a9471713311e459fd", + "chksum_sha256": "0d7a613d4b97452d3866af5e913c5509a624d552a8e0c31029aeea9460799c6e", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/acl_interfaces.py", + "name": "plugins/modules/ios_evpn_evi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff8d18baa44b30871ea6d13392254549e24830173ed5d8184a221d1e6a069ba4", + "chksum_sha256": "eb607f361b27e065a8f659bbefdda3b313f1ea3d80394b328120847c2be6f2d5", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/ospfv2.py", + "name": "plugins/modules/ios_route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23b21c827433ed747a30839619719620c43d616420f4b39e3f9b07611b2da091", + "chksum_sha256": "a8944dc9ce33fd98c154ac00a97ebf73fab242a3d42a11b0fda3a5b9a5556445", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/acls.py", + "name": "plugins/modules/ios_prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e77900337a8d62303dc9365f0974278f9111ccc1efe24a33dc491e826bdb13c2", + "chksum_sha256": "a5937aafcc9ffa0ea3bb0c118aafe6f51e599038092aac782e80470c17f2be54", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/l3_interfaces.py", + "name": "plugins/modules/ios_ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ab404b96774116937c242b64b9e72fef658603adbfb92ac51c70561e8513eca", + "chksum_sha256": "76d59f676f660789f3ed3793b2b48672d240efe238a20f92c336515e1002b4b2", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/ping.py", + "name": "plugins/modules/ios_logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b1f3a2280507d4b378e65de305f7c0b9512106ea50adb00615cb834366540087", + "chksum_sha256": "74ba47a819e4473bdc366272680c4351f2a0cc8b95001ef437d7018011134e7c", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/ospf_interfaces.py", + "name": "plugins/modules/ios_static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6e8876d90d0af81d076a4a10aca05c03ee0502b58e6ab3dc20e89dad38dda87", + "chksum_sha256": "005f38e5c7349ba72fe3a68bc0c55f2f88a0ea8569f72265a69eeaa8a0709a66", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/logging_global.py", + "name": "plugins/modules/ios_lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "841f75df76900bfdcae91e9d7e44bfaf394e0d75b2a8d3e38e8e0b8e62997a33", + "chksum_sha256": "16c553e3997af81f7fe41232b71f9548ab567a5430356e2904573441a1254ab5", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/prefix_lists.py", + "name": "plugins/modules/ios_ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c88d89b37339555efa1ad535ff0850e6624177208edc9e32078df5b79ea07ce", + "chksum_sha256": "64ed9313605ffaaae2385dc9d4a2b41e566dc760d2e5c4a2bc5fa0aeb9357982", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/evpn_evi.py", + "name": "plugins/modules/ios_lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c224d0295c96f2645cd41d4fe3dff84d527e48c28a9122f0c35374045147d0c1", + "chksum_sha256": "15ab6e5cb7cd7556ec0a828795d5eebc0e3a12779de558d8c95c5c519e52b47b", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers", + "name": "plugins/module_utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/module.py", + "name": "plugins/module_utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41e79a9b0ff1082f7cfd7356a0638c4c84ad9df056b5298a4a68a6afd663e573", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli", + "name": "plugins/module_utils/network", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/__init__.py", + "name": "plugins/module_utils/network/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config", + "name": "plugins/module_utils/network/ios", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/base.py", + "name": "plugins/module_utils/network/ios/utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba52ed9fa57f47249591b68367d04f0d70d86df7b651be27d578408924547687", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/__init__.py", + "name": "plugins/module_utils/network/ios/utils/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "859374075d189f310c3ec91517f81e97111b6aba318644cd5769c889391e2b5f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/bgp", + "name": "plugins/module_utils/network/ios/rm_templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py", + "name": "plugins/module_utils/network/ios/rm_templates/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05f60415ef9fc10d6349d9a21a2bd7ae64059cad21081ba3c1b619d5a67ecf62", + "chksum_sha256": "38538d11bfe3e802bebb0e784aacd68b06f83229e706087a9471713311e459fd", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "dd7353433ed688982b69d5f12378ff56bb0b399f0734e27b1571a86a14384253", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/bgp/process.py", + "name": "plugins/module_utils/network/ios/rm_templates/evpn_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c67a39dd2dfe3459a294045e83843d6169452bb20964249c2516f0b55025ddb", + "chksum_sha256": "249fe0eba1589f0bdb2ba5510fa5e8f0b885e989121347301c41e44a108dfe2b", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py", + "name": "plugins/module_utils/network/ios/rm_templates/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31ecceba4cfd7b5c5e9ac4508fb23295420cf8eec49edf7ccb194002e73245fa", + "chksum_sha256": "ff8d18baa44b30871ea6d13392254549e24830173ed5d8184a221d1e6a069ba4", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/providers.py", + "name": "plugins/module_utils/network/ios/rm_templates/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "282be606081a1895bce9320c131e547a2567b1f97071a21489f244bb066f547c", + "chksum_sha256": "6f73dd148de05082a9fe6bda1ee98ed978ff3eb784fab8e2f4d39f8b4be5efdf", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cde795fceb364b30850bb9c04ac589c84896800e1729ebe0c9a9c3478f4722b2", "format": 1 }, { - "name": "plugins/module_utils/network/ios/ios.py", + "name": "plugins/module_utils/network/ios/rm_templates/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c8f19b937a299add5e06e503feb5671c9233948f7eac8f73059b4eed31d00d0", + "chksum_sha256": "b678c59980cd60b4ab5e3cc4911f1dead04603b229b1519d74ea69b94951906b", "format": 1 }, { - "name": "plugins/module_utils/network/ios/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/facts/bgp_address_family", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/snmp_server.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2242ad92c639b8ba94555ceaf0a8b03e6474b118dd03a745a07a1d79cd10f8f2", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/ios/rm_templates/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d02fd4c43363ca7df4e9e9879e4cea873334bc4ce10f86e7bd7ae0df041fa6a6", + "chksum_sha256": "7e020c96b0f338987d398ddb205e20b6bc9984ee2f9aa2fb1d91291714158e1a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "dbd8f6a15c395b673de496acf55ac661dbf4911c6bf767b121a47240550ec2fb", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/static_routes", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/bgp_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e63de89c1832db959e7cdddda37baf350dee719ab1a702cf9f039cf756f99061", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/static_routes/static_routes.py", + "name": "plugins/module_utils/network/ios/rm_templates/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4219bf270bcc7f6c374128d1c721ade8c3f1622da5a7377ca6115973ab0b183b", + "chksum_sha256": "841f75df76900bfdcae91e9d7e44bfaf394e0d75b2a8d3e38e8e0b8e62997a33", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/static_routes/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "4a3a79e6c58e4de26c7d6e759b48befd4c79c541924c27ae6aad77f267e49aac", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/prefix_lists", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/ospf_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f6e8876d90d0af81d076a4a10aca05c03ee0502b58e6ab3dc20e89dad38dda87", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/evpn_evi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c224d0295c96f2645cd41d4fe3dff84d527e48c28a9122f0c35374045147d0c1", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/ios/rm_templates/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb75d959c5be987f0bca13bda393af91ce11f97885fa64a22a6f1e5df4bf0bf8", + "chksum_sha256": "62bcf00cf29f836f2307ef4fa5ca20fd389bec0ab825c54e98f1246be1df9e8c", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vxlan_vtep", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/route_maps.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "067d135760cdcf59985c9479e468232d9699649daf3354cf328660acd36f97a0", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vxlan_vtep/vxlan_vtep.py", + "name": "plugins/module_utils/network/ios/rm_templates/vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe7e6cd2e81720a21b23cd45a7893776528e66f9a236713e8fb97239966d8c4f", + "chksum_sha256": "982beb248da55ccc7ecf9fa011237ce35cdb9360467e8917d4ca599913ea2255", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vxlan_vtep/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cb9300a8408af5162e90bf6454d16cc1a1dea83ff67585ad2f0394990ac19e81", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/hostname", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/ping.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b1f3a2280507d4b378e65de305f7c0b9512106ea50adb00615cb834366540087", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/hostname/hostname.py", + "name": "plugins/module_utils/network/ios/rm_templates/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b66f9bbe31ee1de7a4acefb0fe020180477a46c7ed4787955bf5f11a714e9b3e", + "chksum_sha256": "5d2cd6f3c8e8a4c1b877d949e5868f51a9909011894e949ef729428bf75e1bdb", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/hostname/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5321943611897741c7d43b18f8540a1d9cf127dd62d38622b0b3d9611423e129", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/static_routes.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "aee1c6a1aca4f66c407d9a805b12471d1ed27959ed486bf46b34569c7a30d79e", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8c05a82ce71ca9ebeb5df66b257d7cdbd1b5da644c9e6c95abc77296e50a93f4", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/ios/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c0f5296b417c1eba895f8c8843cc99411f4a96fa560243ef92bf166776b3df3", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/facts", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { @@ -988,304 +974,311 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv2", + "name": "plugins/module_utils/network/ios/facts/facts.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3950613aa65fc8444a44e4f02726d8f211c5e4564f179e4dae38b9dd7d16d443", + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/facts/vxlan_vtep", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv2/__init__.py", + "name": "plugins/module_utils/network/ios/facts/vxlan_vtep/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/ios/facts/vxlan_vtep/vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "113b67eaa8aa54c14a3044bef9bc27b185d3ef024cb4f8c17715a2b9a9837137", + "chksum_sha256": "fe7e6cd2e81720a21b23cd45a7893776528e66f9a236713e8fb97239966d8c4f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/logging_global", + "name": "plugins/module_utils/network/ios/facts/legacy", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/logging_global/__init__.py", + "name": "plugins/module_utils/network/ios/facts/legacy/base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "10afffae4140e201461d7fa9554cc10fb1bda3c55adb88b61df1430b0369ace6", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/logging_global/logging_global.py", + "name": "plugins/module_utils/network/ios/facts/legacy/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70ccc9337540a7335478531f5d86a6a8e7769693ca56178dc405484c4954c99a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv3", + "name": "plugins/module_utils/network/ios/facts/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv3/__init__.py", + "name": "plugins/module_utils/network/ios/facts/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/ios/facts/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ada439ee84e0d1a2ab7301e2e54e82160f60e969a79a2d004ff0e834c61c1cb8", + "chksum_sha256": "113b67eaa8aa54c14a3044bef9bc27b185d3ef024cb4f8c17715a2b9a9837137", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/legacy", + "name": "plugins/module_utils/network/ios/facts/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/legacy/base.py", + "name": "plugins/module_utils/network/ios/facts/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10afffae4140e201461d7fa9554cc10fb1bda3c55adb88b61df1430b0369ace6", + "chksum_sha256": "2c67945d2e056b94dd9d7b778d3f7dc2881ebb00192882d846db863701f612fe", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/legacy/__init__.py", + "name": "plugins/module_utils/network/ios/facts/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l2_interfaces", + "name": "plugins/module_utils/network/ios/facts/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8e711de61f5a2efc9b7c93a3f591fbcbbe96cccdfd8bfac0e62346d281b58537", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26ecb4ba4028670a5fdf7a70fa0b551a5a068db5730b721815659e618e1ec2de", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospf_interfaces", + "name": "plugins/module_utils/network/ios/facts/route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/route_maps/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/route_maps/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6246168ca839894fb46959c82ac239133251c370565901795cf361d9e3c46e7", + "chksum_sha256": "c7f2359e2128b9e5591db197d33fbcf002f07eb23c078dbfe9af3fc3cbc18a0f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/route_maps", + "name": "plugins/module_utils/network/ios/facts/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/route_maps/__init__.py", + "name": "plugins/module_utils/network/ios/facts/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "26ecb4ba4028670a5fdf7a70fa0b551a5a068db5730b721815659e618e1ec2de", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/route_maps/route_maps.py", + "name": "plugins/module_utils/network/ios/facts/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7f2359e2128b9e5591db197d33fbcf002f07eb23c078dbfe9af3fc3cbc18a0f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acl_interfaces", + "name": "plugins/module_utils/network/ios/facts/lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "96b35fdb9298af93724292ddb020ef441a25cbb787af940f806a3bd7417bf1d7", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e711de61f5a2efc9b7c93a3f591fbcbbe96cccdfd8bfac0e62346d281b58537", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_global", + "name": "plugins/module_utils/network/ios/facts/evpn_evi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_global/__init__.py", + "name": "plugins/module_utils/network/ios/facts/evpn_evi/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_global/lldp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "392c897fb49431138840ba657137fe5b7a0bc77aec11eab9daf3ab79c7002c36", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/facts/__init__.py", + "name": "plugins/module_utils/network/ios/facts/evpn_evi/evpn_evi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "7a7116deaeadef9990039d9e3a307d8e654e82105bfba539fa5d9d2998451272", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/snmp_server", + "name": "plugins/module_utils/network/ios/facts/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/ios/facts/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a7f3abe73e700e987574e96c8f8d3631473cdd9254ff9dcbfa843fe99ed9742", + "chksum_sha256": "b66f9bbe31ee1de7a4acefb0fe020180477a46c7ed4787955bf5f11a714e9b3e", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/snmp_server/__init__.py", + "name": "plugins/module_utils/network/ios/facts/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lacp_interfaces", + "name": "plugins/module_utils/network/ios/facts/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21e764a5334f2bf9f4f9f642677acd7c333f65fac11664bbede8e37c4bcae070", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/lldp_interfaces/lldp_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0c0f5296b417c1eba895f8c8843cc99411f4a96fa560243ef92bf166776b3df3", + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/evpn_evi", + "name": "plugins/module_utils/network/ios/facts/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/evpn_evi/__init__.py", + "name": "plugins/module_utils/network/ios/facts/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/evpn_evi/evpn_evi.py", + "name": "plugins/module_utils/network/ios/facts/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a7116deaeadef9990039d9e3a307d8e654e82105bfba539fa5d9d2998451272", + "chksum_sha256": "392c897fb49431138840ba657137fe5b7a0bc77aec11eab9daf3ab79c7002c36", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/service", + "name": "plugins/module_utils/network/ios/facts/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/service/__init__.py", + "name": "plugins/module_utils/network/ios/facts/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/service/service.py", + "name": "plugins/module_utils/network/ios/facts/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "efc3f3c00bcf17a9b56cd293e545cc6d38c096d0eebe1e72dfa00bc83bbb3846", + "chksum_sha256": "1a7f3abe73e700e987574e96c8f8d3631473cdd9254ff9dcbfa843fe99ed9742", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acls", + "name": "plugins/module_utils/network/ios/facts/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acls/__init__.py", + "name": "plugins/module_utils/network/ios/facts/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acls/acls.py", + "name": "plugins/module_utils/network/ios/facts/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe000519557ac7521aab1d74348c9374a90d8ddce5806e683637751d3c6b5048", + "chksum_sha256": "cb75d959c5be987f0bca13bda393af91ce11f97885fa64a22a6f1e5df4bf0bf8", "format": 1 }, { @@ -1331,374 +1324,353 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lag_interfaces", + "name": "plugins/module_utils/network/ios/facts/l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96b35fdb9298af93724292ddb020ef441a25cbb787af940f806a3bd7417bf1d7", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "59320bb4d3a93f8477f0b5e6a3931304863aa5d6484cd0b2b867673b04c09037", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vlans", + "name": "plugins/module_utils/network/ios/facts/service", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vlans/vlans.py", + "name": "plugins/module_utils/network/ios/facts/service/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "547db84d096fb43a0552766c18b1fe9464037591f9ac948497d6816ec88b2b78", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vlans/__init__.py", + "name": "plugins/module_utils/network/ios/facts/service/service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "efc3f3c00bcf17a9b56cd293e545cc6d38c096d0eebe1e72dfa00bc83bbb3846", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/interfaces", + "name": "plugins/module_utils/network/ios/facts/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/interfaces/interfaces.py", + "name": "plugins/module_utils/network/ios/facts/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c67945d2e056b94dd9d7b778d3f7dc2881ebb00192882d846db863701f612fe", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "3558df7ede6d65335368161e22f5048625681c70c47ae090ea011cd7fdd4bc68", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l3_interfaces", + "name": "plugins/module_utils/network/ios/facts/bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6caa00263da8ce34f349a42e997a0ddd63954a3fe92e0e2499e9ad489a77f195", + "chksum_sha256": "2c5b22c31105d761f61e72d0ce69751647260fe17604eb8acb6a05022ab06d5a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/bgp_global", + "name": "plugins/module_utils/network/ios/facts/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "97e15a6d847dec5b142a7aa1e49c23c3f8d23b2cb966475ca2f4db5b998ce245", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/facts/bgp_global/__init__.py", + "name": "plugins/module_utils/network/ios/facts/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/facts.py", + "name": "plugins/module_utils/network/ios/facts/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3583f4fe6da74bc42f7c9406a5e51c4d4aa3000183ad49b826bfd802f0c0ed52", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/argspec", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "4219bf270bcc7f6c374128d1c721ade8c3f1622da5a7377ca6115973ab0b183b", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_address_family", + "name": "plugins/module_utils/network/ios/facts/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/ios/facts/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "897b1f1139b38bc098a6d8cf92b47ff1d3145596f6e7b2cee75d191a96ac1283", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/ios/facts/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "70ccc9337540a7335478531f5d86a6a8e7769693ca56178dc405484c4954c99a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/static_routes", + "name": "plugins/module_utils/network/ios/facts/ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/static_routes/static_routes.py", + "name": "plugins/module_utils/network/ios/facts/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b93019ca688aa2b3c9ffaed228a4d8c01258b5034d588be516deef2e37603e4", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/static_routes/__init__.py", + "name": "plugins/module_utils/network/ios/facts/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c6246168ca839894fb46959c82ac239133251c370565901795cf361d9e3c46e7", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/prefix_lists", + "name": "plugins/module_utils/network/ios/facts/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/ios/facts/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/ios/facts/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c45218163937496cae4e1594682a2a34b9e4933933ed5aba4c5115e34c79babb", + "chksum_sha256": "d02fd4c43363ca7df4e9e9879e4cea873334bc4ce10f86e7bd7ae0df041fa6a6", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep", + "name": "plugins/module_utils/network/ios/facts/vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep/vxlan_vtep.py", + "name": "plugins/module_utils/network/ios/facts/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d173f9688ac144daa92782712e98c919fdf2bf16cbc67df8901f24d49271329f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep/__init__.py", + "name": "plugins/module_utils/network/ios/facts/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "db60ef97e24dd8cae240c045a31e378b0c4ef70f88437d6a5ec50db3bcdb009c", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/hostname", + "name": "plugins/module_utils/network/ios/facts/lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/hostname/hostname.py", + "name": "plugins/module_utils/network/ios/facts/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c54693851f2ac212f5f30d3ac4062ce8c11c8ec8cf464ac95620c12b685d081", + "chksum_sha256": "21e764a5334f2bf9f4f9f642677acd7c333f65fac11664bbede8e37c4bcae070", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/hostname/__init__.py", + "name": "plugins/module_utils/network/ios/facts/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces", + "name": "plugins/module_utils/network/ios/facts/ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c27fc5f34d7ac72f7e07e97409531470bb55a0e552bfd989a5d9b69f1dd9ac74", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/argspec/lacp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "ada439ee84e0d1a2ab7301e2e54e82160f60e969a79a2d004ff0e834c61c1cb8", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lacp/lacp.py", + "name": "plugins/module_utils/network/ios/ios.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89db25fde82eb1ec3f45c141805d2f47ececbd6c2af2e2550c021935065c1ed7", + "chksum_sha256": "8c8f19b937a299add5e06e503feb5671c9233948f7eac8f73059b4eed31d00d0", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lacp/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "plugins/module_utils/network/ios/argspec", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv2", + "name": "plugins/module_utils/network/ios/argspec/lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv2/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "89db25fde82eb1ec3f45c141805d2f47ececbd6c2af2e2550c021935065c1ed7", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/ios/argspec/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dcedd4871d07466c1151ca66b038663800525dcd467928d46020dc3341d2b9ad", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/logging_global", + "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/logging_global/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/logging_global/logging_global.py", + "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep/vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05483c5a5defc62aae5f5f4413d7a0eeaf5949abe12673e879368fc628ff9784", + "chksum_sha256": "d173f9688ac144daa92782712e98c919fdf2bf16cbc67df8901f24d49271329f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv3", + "name": "plugins/module_utils/network/ios/argspec/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv3/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/ios/argspec/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "966dc855301946bcffa53d43f3bc2a86835131c35ad14a48422f355379bc7738", + "chksum_sha256": "dcedd4871d07466c1151ca66b038663800525dcd467928d46020dc3341d2b9ad", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l2_interfaces", + "name": "plugins/module_utils/network/ios/argspec/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a393a0e39a619c48351e257131f34e581756ea196feaa0579e06ca2ab980e4a1", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5457f6be5b2efdc9cd5d0c33500fdcc8cd857c299441ea5cfad0325c0960c57e", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces", + "name": "plugins/module_utils/network/ios/argspec/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "4bd638f26736e99f9344760db34a47fa9a0e05132a6ae6e8ee45e01f81888064", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c91be7d7581d9aae2657187c3e4e0233d0b86e7886d174a1803df99fafcc5be", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { @@ -1723,199 +1695,178 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acl_interfaces", + "name": "plugins/module_utils/network/ios/argspec/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5457f6be5b2efdc9cd5d0c33500fdcc8cd857c299441ea5cfad0325c0960c57e", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4bd638f26736e99f9344760db34a47fa9a0e05132a6ae6e8ee45e01f81888064", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lldp_global", + "name": "plugins/module_utils/network/ios/argspec/lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lldp_global/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/argspec/lldp_global/lldp_global.py", + "name": "plugins/module_utils/network/ios/argspec/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4053cf17588d3f40e96123a5a0adbd48b9aad14450a70a612b6c7244b137c189", + "chksum_sha256": "d74d58b5cf7ad1ddb524b74f220ae5af7314b646139fa2bda4d9126c185e43e0", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/snmp_server", + "name": "plugins/module_utils/network/ios/argspec/evpn_evi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/ios/argspec/evpn_evi/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6edeffac28f4315f61fc610de0ca688fcbbaa224fce0e5fecd8084bb1a7bf8eb", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/snmp_server/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/evpn_evi/evpn_evi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e657aa784d67f251088a2cb86faa901fd53513c936d887aa4045c9d8026f5ace", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ping", + "name": "plugins/module_utils/network/ios/argspec/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ping/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "1c54693851f2ac212f5f30d3ac4062ce8c11c8ec8cf464ac95620c12b685d081", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ping/ping.py", + "name": "plugins/module_utils/network/ios/argspec/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8280adf6fec29f9ded0d547a41cff6b2c822d1a53a56008e7fa890397dd569f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/facts", + "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/facts/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/facts/facts.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4d3340a5018ae4c06ca1d4fed2b7e307feaba807408f949b4d6b89ef2ff7408f", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "66630ccb587e57b78f8b61fbf6e499f0ffdf5a886cd6afa119dbe4552b812942", + "chksum_sha256": "c27fc5f34d7ac72f7e07e97409531470bb55a0e552bfd989a5d9b69f1dd9ac74", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/evpn_evi", + "name": "plugins/module_utils/network/ios/argspec/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/evpn_evi/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/evpn_evi/evpn_evi.py", + "name": "plugins/module_utils/network/ios/argspec/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e657aa784d67f251088a2cb86faa901fd53513c936d887aa4045c9d8026f5ace", + "chksum_sha256": "4053cf17588d3f40e96123a5a0adbd48b9aad14450a70a612b6c7244b137c189", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/service", + "name": "plugins/module_utils/network/ios/argspec/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/service/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/service/service.py", + "name": "plugins/module_utils/network/ios/argspec/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82d5f1b9d574c4753c3e7acee9c3ec0da539fdd67257f44e2ddebe976b9990a3", + "chksum_sha256": "6edeffac28f4315f61fc610de0ca688fcbbaa224fce0e5fecd8084bb1a7bf8eb", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acls", + "name": "plugins/module_utils/network/ios/argspec/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acls/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acls/acls.py", + "name": "plugins/module_utils/network/ios/argspec/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aee0703ab5ab05bc8845c32332b051ef94361f2256b01f9bb08efa7c1748256a", + "chksum_sha256": "c45218163937496cae4e1594682a2a34b9e4933933ed5aba4c5115e34c79babb", "format": 1 }, { @@ -1961,563 +1912,584 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lag_interfaces", + "name": "plugins/module_utils/network/ios/argspec/facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/facts/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d74d58b5cf7ad1ddb524b74f220ae5af7314b646139fa2bda4d9126c185e43e0", + "chksum_sha256": "4d3340a5018ae4c06ca1d4fed2b7e307feaba807408f949b4d6b89ef2ff7408f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vlans", + "name": "plugins/module_utils/network/ios/argspec/l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vlans/vlans.py", + "name": "plugins/module_utils/network/ios/argspec/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bcb614781b29a9fd793ffd5eb53a4b7feb0a93db84c2ca40e53fcb828192a6e4", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vlans/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8d9df43341b3bd98923cd796466dad9677bb2a2f8a6bf2e3a772244d0532767e", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/interfaces", + "name": "plugins/module_utils/network/ios/argspec/service", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/interfaces/interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/service/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a393a0e39a619c48351e257131f34e581756ea196feaa0579e06ca2ab980e4a1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/service/service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "82d5f1b9d574c4753c3e7acee9c3ec0da539fdd67257f44e2ddebe976b9990a3", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l3_interfaces", + "name": "plugins/module_utils/network/ios/argspec/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fa202b891eca20e325fd07cfe7bb8c8b62ae8c1c0f90986fc2d11ebd60ee4116", + "chksum_sha256": "aee0703ab5ab05bc8845c32332b051ef94361f2256b01f9bb08efa7c1748256a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_global", + "name": "plugins/module_utils/network/ios/argspec/ping", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py", + "name": "plugins/module_utils/network/ios/argspec/ping/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5cfd5f037bbe2a36ecaa598d0510c195fcec9100b82ca6fa6a5cd0a5051be051", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_global/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/ping/ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "f8280adf6fec29f9ded0d547a41cff6b2c822d1a53a56008e7fa890397dd569f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/bgp_address_family", + "name": "plugins/module_utils/network/ios/argspec/bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/ios/argspec/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "460ceeee40e7598109073d42741b0dffe67fe70c66a325e6c1fb0cfd7c509375", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "764927615985c9f0e7ef1f523a1eeade921a44f59e591cc189ce92ffd0966576", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/static_routes", + "name": "plugins/module_utils/network/ios/argspec/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/static_routes/static_routes.py", + "name": "plugins/module_utils/network/ios/argspec/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5120bfb8491af8a7eba0fe9aa34aed7584b68f52c893e1503a09c4553f09ab53", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/static_routes/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5b93019ca688aa2b3c9ffaed228a4d8c01258b5034d588be516deef2e37603e4", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/prefix_lists", + "name": "plugins/module_utils/network/ios/argspec/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/ios/argspec/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cf110869b334a0434d5455afb0f908ab7791e2826f3cb86786cf6b61d493f3fe", + "chksum_sha256": "05483c5a5defc62aae5f5f4413d7a0eeaf5949abe12673e879368fc628ff9784", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vxlan_vtep", + "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vxlan_vtep/vxlan_vtep.py", + "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "207545a5f0ceff4d0b5263f455bca714143347f279555c7669d470e63745b76d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vxlan_vtep/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "7c91be7d7581d9aae2657187c3e4e0233d0b86e7886d174a1803df99fafcc5be", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/hostname", + "name": "plugins/module_utils/network/ios/argspec/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/hostname/hostname.py", + "name": "plugins/module_utils/network/ios/argspec/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a3ee876a751592ce69707eb7d89fe013d8659752a50246b6b85b209f0afa4a4", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/hostname/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "897b1f1139b38bc098a6d8cf92b47ff1d3145596f6e7b2cee75d191a96ac1283", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_interfaces", + "name": "plugins/module_utils/network/ios/argspec/vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3949fb9c8b9448e84fce989aaec57be482668c7920451aea2423d725bbe0987", + "chksum_sha256": "a3383e378f7dd6d8cb0016e37921ac12301eb9e6866275d17defca986bf89035", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp", + "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp/lacp.py", + "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "300ba5cb0ef7e095c22f44d5f6b97949745d772edd1da67d8bb258e9da2a3c81", + "chksum_sha256": "66630ccb587e57b78f8b61fbf6e499f0ffdf5a886cd6afa119dbe4552b812942", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv2", + "name": "plugins/module_utils/network/ios/argspec/ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv2/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/ios/argspec/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bddbd16a2f3a16949e7d6d68aeae72c33916badfc79cd03549d5f8d7b7063daa", + "chksum_sha256": "966dc855301946bcffa53d43f3bc2a86835131c35ad14a48422f355379bc7738", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/logging_global", + "name": "plugins/module_utils/network/ios/config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/logging_global/__init__.py", + "name": "plugins/module_utils/network/ios/config/lacp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/config/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "300ba5cb0ef7e095c22f44d5f6b97949745d772edd1da67d8bb258e9da2a3c81", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/logging_global/logging_global.py", + "name": "plugins/module_utils/network/ios/config/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e3cc535a16266ea929afad7724c40519bc119627f8312411fedea16ab1a624f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv3", + "name": "plugins/module_utils/network/ios/config/vxlan_vtep", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv3/__init__.py", + "name": "plugins/module_utils/network/ios/config/vxlan_vtep/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/ios/config/vxlan_vtep/vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "736eb6daa9c808d54ce49fe1d90dde283856c61fbe5e6f7e13553c955ca4ad76", + "chksum_sha256": "207545a5f0ceff4d0b5263f455bca714143347f279555c7669d470e63745b76d", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l2_interfaces", + "name": "plugins/module_utils/network/ios/config/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/ios/config/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d7deaadebc8d74f00864d4d87666c974297fa01637522c6a5438193953dfdab", + "chksum_sha256": "bddbd16a2f3a16949e7d6d68aeae72c33916badfc79cd03549d5f8d7b7063daa", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospf_interfaces", + "name": "plugins/module_utils/network/ios/config/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d76972dfae66d04dadb152c4f023e58aaef97df0c1ae88e33bdc3d7cf0be2b45", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/ios/config/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "383eeb77e1dfebff8ea69cad713d8e3f3468e91a07cc57de5ebbf4bdc1aa75d7", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/route_maps", + "name": "plugins/module_utils/network/ios/config/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/route_maps/__init__.py", + "name": "plugins/module_utils/network/ios/config/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c703e02ad4dce33a34ba9c3400cf40c69681fd582d0e58e50abd50a416c4d638", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/route_maps/route_maps.py", + "name": "plugins/module_utils/network/ios/config/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1b3a698c940c2092d72f35fc6839e5f5a91bff84f34ebbcb492f7f89e3ff9b1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acl_interfaces", + "name": "plugins/module_utils/network/ios/config/route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/route_maps/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/ios/config/route_maps/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c703e02ad4dce33a34ba9c3400cf40c69681fd582d0e58e50abd50a416c4d638", + "chksum_sha256": "371c1bf37a31ec94b5cda763d46013c978403a88cbfd901baec4e05e1644a724", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_global", + "name": "plugins/module_utils/network/ios/config/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_global/__init__.py", + "name": "plugins/module_utils/network/ios/config/l2_interfaces/l2_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3d7deaadebc8d74f00864d4d87666c974297fa01637522c6a5438193953dfdab", + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/config/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_global/lldp_global.py", + "name": "plugins/module_utils/network/ios/config/lag_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/config/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e138aaf2b9b9eb6f546d25f0957bec353342b61f8047f97f7e882c71e1422e9", + "chksum_sha256": "295679089484f01af9517b998fb2e0caf5d810436bcf8e40e261a309b81b5865", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/__init__.py", + "name": "plugins/module_utils/network/ios/config/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/snmp_server", + "name": "plugins/module_utils/network/ios/config/evpn_evi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/ios/config/evpn_evi/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78f688254f56593bdbf0e8a42f53f99e14a14ba3f0d010feb0d3363269691996", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/snmp_server/__init__.py", + "name": "plugins/module_utils/network/ios/config/evpn_evi/evpn_evi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "534f88e839f73905c4eba1522537b7ae4b1fa6352ff1b3ae994d98c7b9b2a544", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ping", + "name": "plugins/module_utils/network/ios/config/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ping/__init__.py", + "name": "plugins/module_utils/network/ios/config/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "2a3ee876a751592ce69707eb7d89fe013d8659752a50246b6b85b209f0afa4a4", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ping/ping.py", + "name": "plugins/module_utils/network/ios/config/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59aaa34239c2ffb3176d64799286da43cd062d2b4fc22893990bcf03c9103961", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp_interfaces", + "name": "plugins/module_utils/network/ios/config/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/ios/config/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dbc626e83c3d4ce8c8aa42ee8903738f6ac2b1e16e8cda34dba4eebfdaebc01a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/lldp_interfaces/lldp_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d3949fb9c8b9448e84fce989aaec57be482668c7920451aea2423d725bbe0987", + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/config/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/evpn_evi", + "name": "plugins/module_utils/network/ios/config/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/evpn_evi/__init__.py", + "name": "plugins/module_utils/network/ios/config/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/evpn_evi/evpn_evi.py", + "name": "plugins/module_utils/network/ios/config/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "534f88e839f73905c4eba1522537b7ae4b1fa6352ff1b3ae994d98c7b9b2a544", + "chksum_sha256": "5e138aaf2b9b9eb6f546d25f0957bec353342b61f8047f97f7e882c71e1422e9", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/service", + "name": "plugins/module_utils/network/ios/config/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/service/__init__.py", + "name": "plugins/module_utils/network/ios/config/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/service/service.py", + "name": "plugins/module_utils/network/ios/config/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e81e0457003ea7380ead5e8550544b20ed8d05bdb2e4ced4a21d99c7319c345", + "chksum_sha256": "addd5b7ee358b6faefebf98793f270f21c2584114f2066d08743add965dc5f6c", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acls", + "name": "plugins/module_utils/network/ios/config/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acls/__init__.py", + "name": "plugins/module_utils/network/ios/config/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acls/acls.py", + "name": "plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41b94b7f5977a81c90a558ef1e7e80cbeccf17cff3068c19fc3af31612c25921", + "chksum_sha256": "cf110869b334a0434d5455afb0f908ab7791e2826f3cb86786cf6b61d493f3fe", "format": 1 }, { @@ -2563,87 +2535,87 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lag_interfaces", + "name": "plugins/module_utils/network/ios/config/l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/ios/config/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "295679089484f01af9517b998fb2e0caf5d810436bcf8e40e261a309b81b5865", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9c8b711012e2b25b8a2ecdc0d10581981ca1e99d0910cc70344091a1f2386780", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vlans", + "name": "plugins/module_utils/network/ios/config/service", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vlans/vlans.py", + "name": "plugins/module_utils/network/ios/config/service/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8fa9b1e49d5701c3308565b55f231299f7a6d986f4c8698c1b2d7d7d6b807476", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vlans/__init__.py", + "name": "plugins/module_utils/network/ios/config/service/service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "2e81e0457003ea7380ead5e8550544b20ed8d05bdb2e4ced4a21d99c7319c345", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/interfaces", + "name": "plugins/module_utils/network/ios/config/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/interfaces/interfaces.py", + "name": "plugins/module_utils/network/ios/config/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d76972dfae66d04dadb152c4f023e58aaef97df0c1ae88e33bdc3d7cf0be2b45", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8c7c3550d9f5bc131536a6b86f51a50f663b00321d6e1ee4e54d7d8e43ea4601", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l3_interfaces", + "name": "plugins/module_utils/network/ios/config/ping", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/ping/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/ios/config/ping/ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80d5e6e948da92d2ed41df019bc761282b0d9220c25c53c7fd4e6efa7c30281a", + "chksum_sha256": "59aaa34239c2ffb3176d64799286da43cd062d2b4fc22893990bcf03c9103961", "format": 1 }, { @@ -2654,2033 +2626,1543 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/bgp_global/bgp_global.py", + "name": "plugins/module_utils/network/ios/config/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab439c9625cb093beca2e87390a97baa4ecd7be4c483e6c4ad15158b19e04bfa", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/bgp_global/__init__.py", + "name": "plugins/module_utils/network/ios/config/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ce94cfe092d61a9de61960b016d90eb10869f3621c8d835f4ad5f9b03b3afeaa", "format": 1 }, { - "name": "plugins/module_utils/network/ios/utils", + "name": "plugins/module_utils/network/ios/config/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/utils/__init__.py", + "name": "plugins/module_utils/network/ios/config/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/utils/utils.py", + "name": "plugins/module_utils/network/ios/config/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf2039ac32f07f4585257dd7ac39ea79bd3a7e4a0954b5666461f36094dc7361", + "chksum_sha256": "5120bfb8491af8a7eba0fe9aa34aed7584b68f52c893e1503a09c4553f09ab53", "format": 1 }, { - "name": "plugins/action", + "name": "plugins/module_utils/network/ios/config/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/bgp_global.py", + "name": "plugins/module_utils/network/ios/config/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/lacp.py", + "name": "plugins/module_utils/network/ios/config/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "9e3cc535a16266ea929afad7724c40519bc119627f8312411fedea16ab1a624f", "format": 1 }, { - "name": "plugins/action/vlans.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/config/ospf_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/lag_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", - "format": 1 - }, - { - "name": "plugins/action/user.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", - "format": 1 - }, - { - "name": "plugins/action/interfaces.py", + "name": "plugins/module_utils/network/ios/config/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/linkagg.py", + "name": "plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "383eeb77e1dfebff8ea69cad713d8e3f3468e91a07cc57de5ebbf4bdc1aa75d7", "format": 1 }, { - "name": "plugins/action/bgp_address_family.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/config/bgp_address_family", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/system.py", + "name": "plugins/module_utils/network/ios/config/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/static_routes.py", + "name": "plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "460ceeee40e7598109073d42741b0dffe67fe70c66a325e6c1fb0cfd7c509375", "format": 1 }, { - "name": "plugins/action/hostname.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/config/vlans", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/lacp_interfaces.py", + "name": "plugins/module_utils/network/ios/config/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/logging.py", + "name": "plugins/module_utils/network/ios/config/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "936a5ee66ddac54f3bf82be305f6f0c40e29d5783a5db95f7c22e66f75f68ee5", "format": 1 }, { - "name": "plugins/action/ntp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/config/lacp_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/ntp.py", + "name": "plugins/module_utils/network/ios/config/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "dbc626e83c3d4ce8c8aa42ee8903738f6ac2b1e16e8cda34dba4eebfdaebc01a", "format": 1 }, { - "name": "plugins/action/ios.py", + "name": "plugins/module_utils/network/ios/config/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/snmp_server.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/config/ospfv3", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/__init__.py", + "name": "plugins/module_utils/network/ios/config/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/ospfv3.py", + "name": "plugins/module_utils/network/ios/config/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "736eb6daa9c808d54ce49fe1d90dde283856c61fbe5e6f7e13553c955ca4ad76", "format": 1 }, { - "name": "plugins/action/service.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/providers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/route_maps.py", + "name": "plugins/module_utils/network/ios/providers/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/bgp.py", + "name": "plugins/module_utils/network/ios/providers/providers.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "282be606081a1895bce9320c131e547a2567b1f97071a21489f244bb066f547c", "format": 1 }, { - "name": "plugins/action/l2_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/terminal", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/command.py", + "name": "plugins/terminal/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/acl_interfaces.py", + "name": "plugins/terminal/ios.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "2a6048a34e92899b3ae64a00d92dd6fff82bdb17f3065bfd2acce4cb94c1d7d6", "format": 1 }, { - "name": "plugins/action/ospfv2.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/cliconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/config.py", + "name": "plugins/cliconf/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/acls.py", + "name": "plugins/cliconf/ios.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "d7aba72972fc76fe4ff311096e72347c1be5a3d8cd2fbcdf44447a02e76ffb85", "format": 1 }, { - "name": "plugins/action/lldp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/plugin_utils", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/l3_interfaces.py", + "name": "plugins/plugin_utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/ping.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/filter", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/ospf_interfaces.py", + "name": "plugins/filter/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/lldp_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/logging_global.py", + "name": "meta/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/prefix_lists.py", + "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "ffdb23b4e35b69fbd30d065a11f01c54f7ff093c0cbdb1601fcd9449fd4e88e7", "format": 1 }, { - "name": "plugins/action/banner.py", + "name": ".ansible-lint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "856f0e6918f45626935cfc1f99dc19e9bb367c10482e490ad3595c3f92b7ee84", "format": 1 }, { - "name": "plugins/action/vrf.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": ".config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/facts.py", + "name": ".config/dictionary.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "b504c990735c090ba655b9acdcc12a537ebf7d2e101b308ef1edc8543d9ed804", "format": 1 }, { - "name": "plugins/action/lldp_global.py", + "name": ".pre-commit-config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "9702099b03b60d629847b7a305a1e9557d5229f5d406e0346dc6dbcb0722fefe", "format": 1 }, { - "name": ".ansible-lint", + "name": "pyproject.toml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c", + "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc", "format": 1 }, { - "name": "test-requirements.txt", + "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef11b7e31c53ed88a2352faacda33806dda00f45d4e9cce540a40e6a47ccbe73", + "chksum_sha256": "68ff7eb1cebf6fcee44618f9a029ed45ccde0a8dcd97e8faebf3a8ebc113a7de", "format": 1 }, { - "name": "tests", + "name": "changelogs", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity", + "name": "changelogs/fragments", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.9.txt", + "name": "changelogs/fragments/.keep", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd021dfbe2578d6984075377ccfa70ef38c5643a3c9828b3b639c4751c964967", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/sanity/ignore-2.13.txt", + "name": "changelogs/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "chksum_sha256": "337a1b5254e78eb8982998815aec7e88f9d63d46e1a70c46268683a5513191f1", "format": 1 }, { - "name": "tests/sanity/ignore-2.11.txt", + "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81071aa2e12650110cdf71d787e2703af0ed3028873f7a51d71f6684dd0afc84", + "chksum_sha256": "636aee6b5f5dd00c3e3a25a13e451f7ed19fa31698b9de95c9f8b6f28519257e", "format": 1 }, { - "name": "tests/sanity/ignore-2.10.txt", + "name": ".isort.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4abd57a7ab2a407892bb5873028919109aaa28d5fed12c2a0e4b9691076d713e", + "chksum_sha256": "f287de31c528e7d37475770952855fb25ec053d0bcaedd577091d13807b4c5dc", "format": 1 }, { - "name": "tests/sanity/ignore-2.14.txt", + "name": ".yamllint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", "format": 1 }, { - "name": "tests/sanity/ignore-2.17.txt", + "name": "test-requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "chksum_sha256": "0c5ac3417352160300a61814db3a245f2ff474f0a3f49e32de12ade27c4156be", "format": 1 }, { - "name": "tests/sanity/ignore-2.16.txt", + "name": ".prettierignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "chksum_sha256": "87f689e56b912f78012677dba2e0237a65f7b3c1f903006cddefab21bf0689f2", "format": 1 }, { - "name": "tests/sanity/ignore-2.12.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "name": "tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.15.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "name": "tests/integration", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/__init__.py", + "name": "tests/integration/target-prefixes.network", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "39053a91dac30879cf24512c4234e519681a1e88be8af8b18415df87fa4b9006", "format": 1 }, { - "name": "tests/config.yml", + "name": "tests/integration/network-integration.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "de5087316490411841c67aa3307cfdd3acaea09875c9b4dee6852bca7c120764", + "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d", "format": 1 }, { - "name": "tests/unit", + "name": "tests/integration/targets", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/requirements.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", + "name": "tests/integration/targets/ios_hostname", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins", + "name": "tests/integration/targets/ios_hostname/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/__init__.py", + "name": "tests/integration/targets/ios_hostname/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/unit/plugins/cliconf", + "name": "tests/integration/targets/ios_hostname/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cliconf/__init__.py", + "name": "tests/integration/targets/ios_hostname/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "febb64d561f5a456e89d59fb77210502df86daa4eca07014b96993b76d0bc5ba", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/test_ios.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f46dc137e8680947b460f18c891b28964607d14143c57a7fb7fc85d8e8b956aa", - "format": 1 - }, - { - "name": "tests/unit/plugins/cliconf/fixtures", + "name": "tests/integration/targets/ios_hostname/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/__init__.py", + "name": "tests/integration/targets/ios_hostname/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos", + "name": "tests/integration/targets/ios_hostname/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_version", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e18e1a4f1640ca226a2f0d067a422af58218fa7f191a8b71394432a56177c7fd", + "name": "tests/integration/targets/ios_hostname/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_startup-config", + "name": "tests/integration/targets/ios_hostname/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1a135373ce559af818475189bbfc8ff838f5891869b62e159e38ac4c30b3284", + "chksum_sha256": "e42472783ff99e3351a0a581b2ddcdaca689eb9cb8044af829d580473e17ac35", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos/__init__.py", + "name": "tests/integration/targets/ios_hostname/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "909ad0ac69441e0c20405814bade15872ccc23e5b736632efcfd2880d863c6d7", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_running-config", + "name": "tests/integration/targets/ios_hostname/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1a135373ce559af818475189bbfc8ff838f5891869b62e159e38ac4c30b3284", + "chksum_sha256": "6cd846336af90bbf055ebce81f350f2187733b3580f5c227b07ad766e6c4bf9f", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_chassis", + "name": "tests/integration/targets/ios_hostname/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ab5008e1e19a8b1995b8c284856ae37ae5d242975b81057a3f0127fafa0f7a2", + "chksum_sha256": "0a18425a89f8e85573729e8c29b8c45e491dd6814b221f9d42a0acf0960689e8", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/nos", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_hostname/tests/cli/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9313132bb4ea08fdfebbd76b6376eda299d1e61fef0b62973309894399193613", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/nos/show_version", + "name": "tests/integration/targets/ios_hostname/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a21600440d1fbd2208fd81eeeaa632cfdf6b69c060bcff46e5a3f4a5f5c26f68", + "chksum_sha256": "334a751e168137370f8d5baaae2c017e63cd9870191a2476633bdb33f5aec915", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/nos/__init__.py", + "name": "tests/integration/targets/ios_hostname/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5b7529ae69029b3e22b4dec95b722595deebe267cb2f2735a85fd53a4c82bac8", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/nos/show_running-config", + "name": "tests/integration/targets/ios_hostname/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42f2e50d84821d1ce5c9ddfa082e7a6086254ef9908166a0d4523a3dc5b6b2df", + "chksum_sha256": "070883e8b78940daa953461fd32520d1bef4bdf4cf98664b3e82c7d0fae842b6", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/nos/show_chassis", + "name": "tests/integration/targets/ios_hostname/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2890b7a8db9c1e8954a186fa311c8a2b44477b1d04bff9c32bf75b7797b4533", + "chksum_sha256": "8f0c8602b6863de3c09c0f29fb3fbe83fc0afa94d1358db7cb974628c616ebc4", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/ios", + "name": "tests/integration/targets/ios_hostname/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/ios/show_version", + "name": "tests/integration/targets/ios_hostname/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "28896cfd7a101f137f8433db1efdb33343aa43425aaedc2d4f7eebec7e71204d", + "chksum_sha256": "9e463dfec9973774a7a87d75f8e492a829e08a207f7330616a23032087174429", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/ios/__init__.py", + "name": "tests/integration/targets/ios_hostname/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/unit/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration/targets/ios_lldp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/mock", + "name": "tests/integration/targets/ios_lldp/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/mock/vault_helper.py", + "name": "tests/integration/targets/ios_lldp/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/unit/mock/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration/targets/ios_lldp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/mock/procenv.py", + "name": "tests/integration/targets/ios_lldp/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e869c848191bb9586fa25214c452cd18497a737e30ff2747977f8b8d4da620c7", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/unit/mock/loader.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b", + "name": "tests/integration/targets/ios_lldp/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/mock/yaml_helper.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fa89194ba60856f51500efdd1f802c5ca3b2e4ded9461d7b88847c427a43a958", + "name": "tests/integration/targets/ios_lldp/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/mock/path.py", + "name": "tests/integration/targets/ios_lldp/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "920ca3acb70a819bba26034101cf1e8497e8a5445f220a4df0cbacca03b21bd7", + "chksum_sha256": "9f61afc65151115e5a86c79276acf3c3ced37cd6df01cf54550ef54252792ec7", "format": 1 }, { - "name": "tests/unit/modules", + "name": "tests/integration/targets/ios_lldp/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/__init__.py", + "name": "tests/integration/targets/ios_lldp/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b0906e69a469f54c61369370c1de70ece7ed9341c9647ae69f471544fad206e4", "format": 1 }, { - "name": "tests/unit/modules/conftest.py", + "name": "tests/integration/targets/ios_lldp/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "354440d86f684a9641f329807a687fe71fc66ab901207f7a166ecfa648935488", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/unit/modules/utils.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fec06b445abd9398a3dbed94e82c9e76f7daa125c13f09e7842a24aefbb216ee", + "name": "tests/integration/targets/ios_system", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network", + "name": "tests/integration/targets/ios_system/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/__init__.py", + "name": "tests/integration/targets/ios_system/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/unit/modules/network/ios", + "name": "tests/integration/targets/ios_system/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_service.py", + "name": "tests/integration/targets/ios_system/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c00bb9aff720be808ece114a8c4e3f18e4dff823186aa69f2502638a0f8658c2", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_acl_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "226ee34e9d64f4c1b63bee3030d846dffcf85bcb4f04a71e893bf0bb07b44ee1", + "name": "tests/integration/targets/ios_system/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_lacp_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d4ff68a41cb3751290da98519066dec8a071eb335b3edfb59511e5ae34567c9e", + "name": "tests/integration/targets/ios_system/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_logging_global.py", + "name": "tests/integration/targets/ios_system/tests/cli/set_domain_name.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c06d947da67fb9595e789d26315d77f41cec2f9aa346d9fce452be9f15abc1d2", + "chksum_sha256": "4bc85f65fcaa284e9503fe5643f16111f14daf7ba677abd84daa04302f8b007d", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_ntp.py", + "name": "tests/integration/targets/ios_system/tests/cli/set_hostname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d2987bd3aa0842cc1aa97484424f9098814f539bccba1d94c12bf33d51200365", + "chksum_sha256": "810d48f3ce471254c763859c7d33ad70b06aaa28b45712179b4794f3b5a667c5", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_lldp_global.py", + "name": "tests/integration/targets/ios_system/tests/cli/set_lookup_source.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cdfcb9c7988f951aeb3e45819d62db13c4974b0772c96937a15388cb3c2f2084", + "chksum_sha256": "10e512f2cf5dc0fe7c9d3cb0188fc3dc96dffa68beb61895d88c8dc422c886e7", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_ospfv3.py", + "name": "tests/integration/targets/ios_system/tests/cli/set_domain_list.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8171f1e8dab0e2da0cafc913dbc92d80f144acfaea650dbe1b029eebe28ccaa0", + "chksum_sha256": "592210cc1bf19177523967179ec83b786b9c60d9341acdb087e739911876007b", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_hostname.py", + "name": "tests/integration/targets/ios_system/tests/cli/set_name_servers.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8fd5109de3a0c00ef3bfc89d6673ef6ecd0b9ecc52742ec3215768172a2bb30", + "chksum_sha256": "b59e7228e155bfcbaa1863f12fbbdc641e01c2fdef2d6bd4f4aeb2f3fa96bddf", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_lag_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5c5afac7db102eec9b01bb5f185afb06fb118cb01c7ec2393af4a37c9829fc89", + "name": "tests/integration/targets/ios_system/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_vxlan_vtep.py", + "name": "tests/integration/targets/ios_system/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "df24e333fa123be819420f2086e938d257e35283352cfff3ba34df001f9c2262", + "chksum_sha256": "68e898ba92f5164ddc8cc51967c5e2876e9002699d528634a67f2183dd558d39", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_vrf.py", + "name": "tests/integration/targets/ios_system/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29d5dd5eb47eda13e50282508895716ec7d64cc528aae244ed02744f0891d5b3", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_ping.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b4b15f4a2ee334263a07bc2083dc599423f3cf5c34175d4b30e888fa99c932eb", + "name": "tests/integration/targets/ios_banner", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_ospf_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c3be97fd55cc742ad99ba812a26f13a25dbf18857f037854b563873f3522dc21", + "name": "tests/integration/targets/ios_banner/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_evpn_global.py", + "name": "tests/integration/targets/ios_banner/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb1f69e919e200020e995d8794f0f030bd284b68b39013c31326394693b60afe", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_lacp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ec2e679151350238a5994704b6b6536b0b1592e7d1dbbfcdc96b20a52820122b", + "name": "tests/integration/targets/ios_banner/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_acls.py", + "name": "tests/integration/targets/ios_banner/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fec5deeba545dbd9a3f0a08d8013929ec7f163487a8dbb476c269d39488bc1cc", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_snmp_server.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d3d27b8a357a47365f026dbcdf7a1b3e2317e30a21df3f7070a99b65a7bd6adb", + "name": "tests/integration/targets/ios_banner/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration/targets/ios_banner/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_bgp_global.py", + "name": "tests/integration/targets/ios_banner/tests/cli/basic-motd.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "689d3fd1c81b87dac82c7758c3c1721d93b83a5affb05d02a5afe43b89a33439", + "chksum_sha256": "2f9346d2348dd942748aa47f61b6aff3cf6e6ad48f94121546f09266930d371b", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_vlans.py", + "name": "tests/integration/targets/ios_banner/tests/cli/basic-login.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f888b8198120a922adf3fd3a8788186da0958fa1ceb4c383f67f4e92189a42aa", + "chksum_sha256": "455be068cdb2741b681458831a33abbe656d86186a21d5dec3425add135dc14a", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_bgp.py", + "name": "tests/integration/targets/ios_banner/tests/cli/multiple-login-exec.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "16e9b1cc88b73924484d635ee5a75a1906cb759e11316cc3ca2bc6884e03d216", + "chksum_sha256": "4c2ad7f508adfa637bf8f80e8afb4c68eeb24061eb0e54b670cb020133a38f63", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_l3_interfaces.py", + "name": "tests/integration/targets/ios_banner/tests/cli/basic-no-login.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8fb3d1e70ac009d24328fe3680aaf7a62cd5382b8b985c5f41be8ab7aba03a9b", + "chksum_sha256": "3deefaccfe8f72086372732ab08319268107114dc4cf238dfef54e2974b29b26", "format": 1 }, { - "name": "tests/unit/modules/network/ios/ios_module.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8a08cf8bab33ef88408880ffc6f8034be5e532945ca4f79d82b213426104876c", + "name": "tests/integration/targets/ios_banner/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_command.py", + "name": "tests/integration/targets/ios_banner/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b4f793aecb789530a6f3f0001fafbe618ffcdc464ca69ed105bed3bf070e8de", + "chksum_sha256": "eebaf78d8d30ccd861ee6d250aec3bc87871e249b6875f8b0f44a4a3fc828680", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_facts.py", + "name": "tests/integration/targets/ios_banner/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "205430daf9d063ed7424fee04dd5fc937fc12771b13281a096ed259e394d166a", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_l2_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5f8c15e6ef5a1e936ff5be4975802e5653150bb926dd50ad90baa27747332733", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_user.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "af31457a05a3722eb39dbae567dcb89310cc242300e97b4f58cdfa7d8385fb84", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_evpn_evi.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e029ae1db0cc2e55e9a3b1ce9ff340f6f6a6cec55d49645adfd57f269ce7a1e9", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_lldp_inteface.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "aaefaf4ab2bfd58d99396bb634db067b881eecd359dab67de6fc872b46869853", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_bgp_address_family.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e262dda143867de45a2cf8344627aa9fd2cbe3c209c07a58c6b34d0cbbcbf58a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_banner.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3f093e6f88c6c61cc9bf8f3d2f3e8bdc31d7462f5312506255e645fb55efd70", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_route_maps.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cc1fd7c6b70d2f623e2f348da1b65652e6fbee1b10911531d43bc2ce034b9d5d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_prefix_lists.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "017a9454d003407820fda4a0b61662bc7a4cccc82afeb867bf015fc210c11f1f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures", + "name": "tests/integration/targets/ios_vxlan_vtep", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_user_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "92081628d201c43cc40e2022f0ebac80f1ee5c1e78e19479d0b94780945a9657", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/show_version", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dc71e5e1dc8e16c64ad26477c7b0dc0d0278a20be9dc4a6d53224328f239f79b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_route_maps.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a2764456add35e41e5109cefb0694cd6a708bcf77239259b47ed60d86fa06856", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_ntp_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2dc4f5c356e2ba9f40ec1ad94b5bc4e597c39657662156764465f156ab6cd7cd", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_vlan_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "73a0c5b62bea4279d25deae4c2e04bf12c53fc3784297675a92eb98c911696fc", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ip_interface", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_lldp", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ad64c29374175a8d737d01ae856c16364c442fca9ea7b9447ab8f22d9ed78dad", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config_ios12.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2923b7e2af16ca384a4c44c7fc1c9944367fffc1769b9ee6c41d73a9e0a2c1fb", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_banner_show_banner.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fcbd9e21fbc41c072eed699ebf08ba9fc0e86b9084e4e54eb701cc12d4c764d0", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_switch_virtual", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "db1b7ead274089538a05952a47f1e7800560ca1a552adc345c34dc2ab4c4f9de", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_memory_statistics", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "38375b22d4c94dad4289ad32a3360980e0e8f30d69c4a0c2ab1d8181d4fb811b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_config_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6fe81e446733fef4e3643a80042ab4111b9b0c927599c4b5972ecea4c18b4ffd", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_prefix_lists.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ipv6_interface", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_config_defaults.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "114e89387a2b3cb37c475ed22f287f83dd93bd16a51845286b27f8355d1ae0e5", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_config_src.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "57d42d2e8e8b7a4b6cae566115ee42fecea077b525cace10cefc3b7dbd85f033", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1cfa8bf44c06737f51019c8a3d7a6987fb91cb55c72a3a4a883f0eb75f13c27f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_logging_global.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "89a3006dad756d356d14bf9704c493b1ebac4267dca6344c6af536d53dd1bbf4", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_10.255.255.250_repeat_2", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f6102ec8eb37947bb6892dbb4c1252c794ef52376540c9d8ce2b9753aa613685", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_cdp", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5abf76b46295216c079870fba8c70f8f6064ccd667e80d91e31b47ab84f6fd70", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_vlans_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9e3b415848259747054d6586d9a85787a48f2a5d3fd5866c41f8b050eadfae90", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_l2_interfaces.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "743adf2fb8dcad62933e91c19b47b2b0437868c7e50db9a4e556431ed696f2f5", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_size_1400", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "825819c8953b25588aadeb8264ebc23a52d06537049b7e3f4f0b9edfda1b7e45", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_bgp_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8e1448b74254646dea1644addbebf552013bc999c32b8a90f3141fadfd2e045c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv2.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f557ec41733d7040f5585b79e18b88623ace43d899ac80edc055e01c469240c1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_cdp_neighbors_detail", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6e29939eafbbdcd5d64d8558cf6f5fe9d7fa1b806e62b5f19b65b0401c9c9c44", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_virtual_switch", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a3c3bbfb2fdcb11e3f9721d7596800690969e51e7fc66ee2e5adae3b524f7177", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_repeat_2", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4962134fb2b2230a111b5b94f904ba094c12d0e0775e22c50b3db6599dbfcb36", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_inventory", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "695c97917cde02fca97d816d92429a12142d6400180388630847a6938513829f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_banner_show_running_config_ios12.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ed9d617788c3a95226fda5a0dfa4271afe77626709937b27a3af70ffde7af53a", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_vrf_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9ee43d746654712aed9c1163d6130a7b6de350a3efef3e6e228355378b20be50", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "547917e90b62a4ef7eb05c6a2527019acf8e3790d7d5a0c9f6b24af6a82a2fb3", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_l3_interfaces.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2836ef546936bc7b3ff57cd557f54d5c5024ecbf64451cbb4f0d9c937cdb71c6", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/configure_terminal", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv3.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b45b7eafd03c14cb0a9737561ddd60b86b708aabe1223697376c56066fabb29c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_lldp_neighbors_detail", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "11544c73f3e88ab5384140abf1bedd0c2501f4ed13132ab56bd22a53909183b0", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_size_1400_df-bit", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c8452a768d797ca829ff18314236a7275cf03a14f751c6f53c8b6711bc8a1d7f", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_system_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ecb0f88d690961592ffec4c1dbeebb4b6883ed2fee08fd60117a3b7937b37949", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_dir", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bf4241a7402fd70614b668b90da04f80c7430f8f4535a1eb0a40e989a1d9d48b", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_version", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a6290b0be0cd8622c90617eace7c4c8bb1508a77d33c2b0e7bb9d6f7f8967282", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_processes_cpu", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e8edd6276089ec830cb2978305dcff0f77cbe3a39f393eb0969c671a981d8d89", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ee85caaab9dcd66f7884d65ec2258b31e6e293815063df652bf5e855c4eb9e62", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_ntp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "40f53692102deb7518dcd712d547f7c69eb91ef39368f2580fae05c19007a8f1", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_static_routes.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "21fb9e42e6cd9ad1100664fd9547d6e42780dd49021fb75c61695fbb75171063", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_system.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f8bcc32990f03f7c3fcd480ba2166364190e718787fac98303dc45fe829dd545", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e4cde58f50818e45a86e4a41b795090fb15f98dbba58287705de31c480d0e28e", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios/test_ios_ospfv2.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8ea2f5f1e4b14adda3c4a1e59b0ee3ee8ddf6cc65bb102efcf0a5def60f41a3b", - "format": 1 - }, - { - "name": "tests/unit/compat", + "name": "tests/integration/targets/ios_vxlan_vtep/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/compat/unittest.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81", - "format": 1 - }, - { - "name": "tests/unit/compat/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/compat/mock.py", + "name": "tests/integration/targets/ios_vxlan_vtep/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ef8138e4a1226b85dfb3567d9be04aaef39270af32ae62765b745f8f46cb0ec", - "format": 1 - }, - { - "name": "tests/integration", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_logging_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tasks", + "name": "tests/integration/targets/ios_vxlan_vtep/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "16f3cc0b8e2e2d5d9776298fab6f9d5648e4c35498db7605af69c8e97e122464", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_logging_global/tasks/cli.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "7bbcfaab60d1b44f73192415eef696368496e56fecd0d5f6384a36f6ed0bf500", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/meta", + "name": "tests/integration/targets/ios_vxlan_vtep/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/meta/main.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/defaults", + "name": "tests/integration/targets/ios_vxlan_vtep/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_logging_global/tests", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/parsed.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "67f3d6703dbc41fb80ddc9360a8fd99addc2dbd17258b2e3d4bfc859c604d867", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b22fb7585f08098afcf881010b4d9348529e0f722c139b763f6b0c158965d9", + "chksum_sha256": "0b9a801456bd9db90925de5fb3ddf02130ebf6e4de5abbc8dd0a3d8785ade822", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f014b1c94475c54528d1f3680735baaf6f2e8f4712df5a77665b969c98a16228", + "chksum_sha256": "23ba22f2eacb69c8cda7d4bc0b8ffb9b9b4e3c8c2499e8512fdd09ed136e051f", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f808045f76ecfd2f709fb9a4af7907660e8dfb4efa55fefc3744c32da9c20bf9", + "chksum_sha256": "149f7e871cffbb37baa730d0dc0a4964723f90d64d0f0a409ebd923b743e682a", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4573b578a199c5195348871a4f8d0b0daee309e9ee60368db6968c6e64ee15f7", + "chksum_sha256": "9c7f20dee20d06af4441f5369836e86db1aba0bda93cb50caa49e6041ae98dba", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f25d81fb7693d57c2abd74e8739be232a9cbedbba1e9f8699050d04ea18d2b38", + "chksum_sha256": "c56eb808c76e38656a84bb5e725dc14af02482efdb85d2246613aff63e9b52cb", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "09a264fcae252de2ac6ee85b8af26b74cc369cb29dc450cb21eb209818796182", + "chksum_sha256": "5665b8e91a6bb98092632ca9952389b634005325762d970aa987bf0523ccc882", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ecf2a5261b5c148d8c8142586318132ac92fd1663b20e91a2504ca2c2f9596c", + "chksum_sha256": "6e7e8c2edb74ee0476b0c4d83a52c84e4230c16e3c3d051c63c6fc63018c4211", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "94cb8dc2e04d8643d4feeedaaf3eb159c60bb1a997c8186a0ad7f33912a8b945", + "chksum_sha256": "2dbca0fd8e9d00593a5785ab68cb246e21a2ac99fff6970ff150710c246f1927", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7961543ce55fd097ff5b420ecabd3926f29b8631d0ef0e0a802ca601a177e2d0", + "chksum_sha256": "61c3a851e2d056cec1479981c331fd2a4c1126bb8bbacd5c38ed0b4e4ff026c0", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6752b5ded2fc4b5361215ef8163a1ac17f48da2d1a26796414a2f7d7d4aab1f3", + "chksum_sha256": "7d54c5dd89c14a5b02575b8e80f647bc66ba075563571e876e5d471beca81c10", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_vlan_vrf_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d8b45e3678e544bb5e707a93e1155402218b01bb88ba710417db77102a7bb634", + "chksum_sha256": "455e27f59263b50ef9ec28db7556b9746070f5672cabe83cb0c03f6103ca3918", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/vars", + "name": "tests/integration/targets/ios_vxlan_vtep/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/vars/main.yaml", + "name": "tests/integration/targets/ios_vxlan_vtep/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54432abdc418154d2bc2d0a75a1a26d387c2ef5cc217cdcd6ddeb6cc19bc9ad5", + "chksum_sha256": "7607c1041a822e911d328c572b5986636a52054bad2895b89c4beb7861755017", "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_vxlan_vtep/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests/tasks", + "name": "tests/integration/targets/ios_command", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests/tasks/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "044df3cbbc253645266ad8c2a377e8758a8fd53c7a7398818eeb2fe0220e0a1f", - "format": 1 - }, - { - "name": "tests/integration/targets/prepare_ios_tests/meta", + "name": "tests/integration/targets/ios_command/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests/meta/main.yaml", + "name": "tests/integration/targets/ios_command/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests/templates", + "name": "tests/integration/targets/ios_command/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests/templates/config.j2", + "name": "tests/integration/targets/ios_command/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke", + "name": "tests/integration/targets/ios_command/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tasks", + "name": "tests/integration/targets/ios_command/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tasks/main.yaml", + "name": "tests/integration/targets/ios_command/tests/cli/invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f9fa924aaef2895a7bc9899ba35028617be0e242888fd3558903a9a5c621bf2", + "chksum_sha256": "9a5de37d3a4e9c0a0deb381515d7aad38814e2573570881499c2f37d01c33148", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tasks/cli.yaml", + "name": "tests/integration/targets/ios_command/tests/cli/error_regex.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6cdc2604047d999342d2e29f3a546b9f8ceab22e37c2d4eaed5fb596bd4cd2f0", + "chksum_sha256": "9d8673ef0e332533bc520e1fc69282244014b33fe4fd67c9df97fb0c45389b35", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_command/tests/cli/timeout.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "99999a86b0c912cd067669a525d1e0032db4e19aac5fedec7593bfc8868ae37b", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/meta/main.yaml", + "name": "tests/integration/targets/ios_command/tests/cli/cli_command.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "765a06846e98c1bc59b769855ba3c28f6ed2b7f8301b1aef0b8f0a9a4aef4863", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_command/tests/cli/bad_operator.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "114c1244968981a22617d661fe4e9de4734037af8970bce9b0c5b79102f8ae6e", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/defaults/main.yaml", + "name": "tests/integration/targets/ios_command/tests/cli/output.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "90067084bae011b7afc19fc1569700cf0007d29ae86d423be0111fbdb7d9bf8d", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_command/tests/cli/contains.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ac41c0332715a477675065b303c059029f452524c9613bfa6837221b3c8a4748", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tests/cli", + "name": "tests/integration/targets/ios_command/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tests/cli/misc_tests.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7eb9e4e697c8432c1a40e9408f7638d887c347aec871bfa157bbd7c3f0586b95", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_smoke/tests/cli/common_config.yaml", + "name": "tests/integration/targets/ios_command/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3cadb8dae7de5b5be84fcab95fd6e5f65816069841a996010af41c32b8438897", + "chksum_sha256": "cbea343b9422e831a52eac293e12796cebaba8432a2a7c3ea24f3d7cfde98a01", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tests/cli/caching.yaml", + "name": "tests/integration/targets/ios_command/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "618ffe0e7bbd5a6d4e6172cdcca046317acbb06f8dc8b4de4e214fec6e642640", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/templates", + "name": "tests/integration/targets/ios_ping", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/templates/defaults", + "name": "tests/integration/targets/ios_ping/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/templates/defaults/config.j2", + "name": "tests/integration/targets/ios_ping/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ospfv2", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tasks", + "name": "tests/integration/targets/ios_ping/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tasks/main.yaml", + "name": "tests/integration/targets/ios_ping/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf9e0e41402b83f7506fedba9515bd73a0fef00d77e63f09f9b2eda0ee5c3754", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "name": "tests/integration/targets/ios_ping/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/meta", + "name": "tests/integration/targets/ios_ping/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/meta/main.yaml", + "name": "tests/integration/targets/ios_ping/tests/cli/ping.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "beb45b19b88ea64c61e0d67d7769275c18e3c12a0c572bea86d171bada913956", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/defaults", + "name": "tests/integration/targets/ios_ping/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/defaults/main.yaml", + "name": "tests/integration/targets/ios_ping/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "d4fb9eae8dce0d7933579bdf2d3f8795995a4058621bb90be902cecbb7fda0da", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests", + "name": "tests/integration/targets/ios_ping/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli", + "name": "tests/integration/targets/ios_static_routes/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_static_routes/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be91779003c353db09835a7ade40aa7e16311e93c3a111335d4caea13b27c3a4", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fcfa39efe63ec56350bd75b0b4ded134aa99c4f1a810039fcf0744eed952a0fd", + "name": "tests/integration/targets/ios_static_routes/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_static_routes/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8554a710fa447dcbe0f7f0097a0f81b7129deecd19b5f4f6caafaf80bef690f8", + "chksum_sha256": "9cbfbd72a07c59fa3718d4dd77eda9cfc144ecbd081561172b9cf09c5eeadf53", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b2013ced0c8268e36db6925558607e68fddb5887092aa3d520a2b6e1318fc7fb", + "name": "tests/integration/targets/ios_static_routes/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/_initial_vrf_setup.yaml", + "name": "tests/integration/targets/ios_static_routes/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c35a0a936bc8f7a82cefc3c831cfed82f738026c5b5cf5832c06ed42f7098309", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/rtt.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3e11b9f26e0eb1e022969d8091b88bd0c02cb8e4e12649c63d2f526009bd6ec7", + "name": "tests/integration/targets/ios_static_routes/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "71aad36583afacee1f2d50726b8a99cffc3e17566f1297f8c06cda6cdb9483c5", + "name": "tests/integration/targets/ios_static_routes/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/_remove_extra_ipv6_data.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be6663b98bbde670ccf5f4c019cc50bcf3461c7f1df79d59206e0dec1f9c87de", + "chksum_sha256": "a6ceabecece292ded2c58a0da2f9f147af26de4c6428584afa2f0c456afc5061", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_static_routes/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "030a148d0e9b7d4e89581f3b82aeb06ce828a2a494fcebecac6a99a5fd9be893", + "chksum_sha256": "854a251b2b1da970c8de705b4a7d5605c18e2107d157feee9496805b811943a7", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/_initial_setup_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1995543982bd7f2a4aee73e5a9fce445b21af1d6ffb5f410d34b372dcd904ae", + "chksum_sha256": "59e9f957b72ad03c69b153719c63dfa82fc76462044bf190464dd27e23b38ce8", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/_add_extra_ipv6_data.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c2c2d35e0efc547f71effa33a8e7de17a8c8447b28d79a00d0ad56fe4a29d130", + "chksum_sha256": "27fca9065f41504020492968e54b2e06402c06e0125a486302d1917a63ac1f43", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e36682d7d591a6ebd1311a1b34bfbeb402c35f98f14f9d9521a9839f1a5fc081", + "chksum_sha256": "e971b8839367066f0b190610a58229ed0599df3e17c4f97244b641a620b0e781", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c2988c367bd38b6fc431b3184c661086ae4bab311882e80c941cae6db04344c", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ospfv2/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "d94e463bdb85337d3eec7c13b3a6f08547817fcb70bacc4b842ffe40fe11c13f", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/vars/main.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8649ac5af985e516bc0be12ea860f9ada7a4454ab14ecf2d056dc16565a95e55", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "ab4fe0e6c364f83917063a0918a0cb632f8f9d26f6d4bca6c667e1e2e1181cd9", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/tasks/main.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b0906e69a469f54c61369370c1de70ece7ed9341c9647ae69f471544fad206e4", + "chksum_sha256": "a789e3b6c7198a508bf40cd4e3cb57e546cda7632199c859f9099f6fb88f0f95", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/tasks/cli.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "0283a6e9bffb601b04610bc3005eecafab4424e7adffc0cd92d5f2ec80854451", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_static_routes/tests/cli/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "45bc3228d1228672490f41f89975c552acc03459b8d0879185ec00e9ae72e411", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/meta/main.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "923d1055671a7fc041e16e4b245f7b31451ccee290adc60cc145da9e23101c29", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_static_routes/tests/cli/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c356f5c2db3137413b1235ce6ae54d6b2a5dc02f41074c65f2a0ba23370e3c38", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/defaults/main.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "dcdb366f9c765b9c097f4c406703abd2c9a03a524a6eb1d19b352d93fa2deef2", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/tests", + "name": "tests/integration/targets/ios_static_routes/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_static_routes/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "38d132ea3d937d0294148c6f3a04d55737b22d89d81da2b9a62d2f143db5c577", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/tests/cli/basic.yaml", + "name": "tests/integration/targets/ios_static_routes/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f61afc65151115e5a86c79276acf3c3ced37cd6df01cf54550ef54252792ec7", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global", + "name": "tests/integration/targets/ios_route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tasks", + "name": "tests/integration/targets/ios_route_maps/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "40cba4a01ca4d7671041cd1c34aad247ab33b8027f3143233bab09d039780e3d", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_evpn_global/tasks/cli.yaml", + "name": "tests/integration/targets/ios_route_maps/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/meta", + "name": "tests/integration/targets/ios_route_maps/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/meta/main.yaml", + "name": "tests/integration/targets/ios_route_maps/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "707242064a446604688cfa42b04d777ff801846293ade1154dcb3e82a9badfb8", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/defaults", + "name": "tests/integration/targets/ios_route_maps/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/defaults/main.yaml", + "name": "tests/integration/targets/ios_route_maps/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests", + "name": "tests/integration/targets/ios_route_maps/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli", + "name": "tests/integration/targets/ios_route_maps/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf27aff9be6f72a1bac5da95577b426f851356b9afa907bc35a5100f51b3500c", + "chksum_sha256": "3c56d9e9cfa1c23282710af3f23af288e856f3ff9134cc411a498b186c2df4c4", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "df48d4875d6c309498c93bf1654170b5de8dd36f00cad9b7dda06fa0ec6135d8", + "chksum_sha256": "49d07d449a90342c4a3b2605f7d2e5a99c3c04952701ea4a1d8b29b02577fa49", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c950ea407d98e84ee9ef11ae5f11cdd1402a460f48159591eed290af69aa730", + "chksum_sha256": "85fea8de40eb500f7b93f6842ded059cc8f3e346d902a06028a4869db7e19b01", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6e04317befb43f382b3b5e4e37757fd905ea5f8099327bb255ce3031da38285", + "chksum_sha256": "df41c3a26d7834ab66fdfe1b2faade9c312e8225c7bc99d736308371f3600ea2", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b7ddb734d42978b5ebb82d436a354e8fae2fce18e60a1546f2d519cead08390", + "chksum_sha256": "7f164fe2b72297a0ed83c0dfde78abb1673ebf7715469c55d263904c54e75e8d", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_route_maps/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54905a1be066debe036046408f5d40d3ceeccee3074090e3d1c459aeb4355e67", + "chksum_sha256": "d0f8053909d848db5a593451794962888efd2e041f710294929ca1bdde0caff8", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cb6068d536690bed4bb86b5901cc97b78325b5ff9a6104805278172427c9af3", + "chksum_sha256": "b4046f281274bc9935c8cde1acc6b9be307f1b7ef9fb583957e1322b0c082d60", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c1eda73556b1082527e3387499aa6a6d5d6734bcdd7070409964563ef73734b", + "chksum_sha256": "ac7be197d9f1c5d050d19763c77777eb76e358ee919bb8f9cbb9f9844dc88223", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0e4acad796d01a6db7a44d08d8ae4a7eefa3da818382224189c30eb5c6bbd92", + "chksum_sha256": "9107ec621b5c648121c0917cd969eb12895ff1bbd5164798902d8fade0887608", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ee5e0cd3f90d1d5461cc3de8eec434fbb245688d2c99d12a477d0ee565f19c9", + "chksum_sha256": "9991663c3944fd60eb5c0dd904a88348ce7ebdb04550a3e596b92b67c312a8fc", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/vars", + "name": "tests/integration/targets/ios_route_maps/tests/cli/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ff7c6c2838c19016776a01f6d6704aada960e930a0829c0e47e847c70144b9f7", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_route_maps/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/vars/main.yaml", + "name": "tests/integration/targets/ios_route_maps/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a930c7415288124acd312b6bc09b1120f8f8085b31c7267a1e183467377b70e0", + "chksum_sha256": "8e9a834620253664b73e74d67506006c5a301715f7b7a867c5bca4334f82ece7", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_route_maps/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { @@ -4691,52 +4173,45 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tasks", + "name": "tests/integration/targets/ios_snmp_server/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e41e847b30cdc92d4ba8d8ad59e109a2acf5fdb2207b9b345199ae1692d5c386", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_snmp_server/tasks/cli.yaml", + "name": "tests/integration/targets/ios_snmp_server/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/meta", + "name": "tests/integration/targets/ios_snmp_server/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/meta/main.yaml", + "name": "tests/integration/targets/ios_snmp_server/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "5e91e745876e69219bc6bfbd0cbdd32a8c148c856b1646dbbef806719634d3af", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/defaults", + "name": "tests/integration/targets/ios_snmp_server/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/defaults/main.yaml", + "name": "tests/integration/targets/ios_snmp_server/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { @@ -4754,17 +4229,24 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "314132891ee35f3cd44df768368899b2b9fa9ee51d3f9510796e9f147660526d", + "chksum_sha256": "b950ea2795a909e67285cae4843c7dfadd52bc1521fd8d2138da9c7e6675aee6", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d324239706acbc0938a35cebdce4f126c4ac1619c44d71e8f1f7b6df123df26", + "chksum_sha256": "7b544236b53c9b2e7df27b49d1c854d4fa0000d4508dbb639d366407fe35617c", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_snmp_server/tests/cli/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cba89a05752a9e1102b676dab55609ea2cf326cd88b3900015a5e0b178032fab", "format": 1 }, { @@ -4782,4350 +4264,4525 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "32f48d0476fccf4880ae5670b4c12afeb89951421b643296d3540a42970a2c3c", + "chksum_sha256": "e229df97b6ba4cfa166b966f97b69f69c348cf1d3b61e42d82869a3c8b4cef45", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "07644781622568558c597427f05f80ebb7da335eac6a6ab67dd37a7b6f86a60d", + "chksum_sha256": "5d324239706acbc0938a35cebdce4f126c4ac1619c44d71e8f1f7b6df123df26", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e229df97b6ba4cfa166b966f97b69f69c348cf1d3b61e42d82869a3c8b4cef45", + "chksum_sha256": "314132891ee35f3cd44df768368899b2b9fa9ee51d3f9510796e9f147660526d", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b544236b53c9b2e7df27b49d1c854d4fa0000d4508dbb639d366407fe35617c", + "chksum_sha256": "07644781622568558c597427f05f80ebb7da335eac6a6ab67dd37a7b6f86a60d", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b950ea2795a909e67285cae4843c7dfadd52bc1521fd8d2138da9c7e6675aee6", + "chksum_sha256": "32f48d0476fccf4880ae5670b4c12afeb89951421b643296d3540a42970a2c3c", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_snmp_server/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_snmp_server/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cba89a05752a9e1102b676dab55609ea2cf326cd88b3900015a5e0b178032fab", + "chksum_sha256": "e41e847b30cdc92d4ba8d8ad59e109a2acf5fdb2207b9b345199ae1692d5c386", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/vars", + "name": "tests/integration/targets/ios_snmp_server/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "format": 1 + }, + { + "name": "tests/integration/targets/prepare_ios_tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/vars/main.yaml", + "name": "tests/integration/targets/prepare_ios_tests/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/prepare_ios_tests/templates/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e91e745876e69219bc6bfbd0cbdd32a8c148c856b1646dbbef806719634d3af", + "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b", "format": 1 }, { - "name": "tests/integration/targets/ios_acls", + "name": "tests/integration/targets/prepare_ios_tests/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tasks", + "name": "tests/integration/targets/prepare_ios_tests/meta/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92", + "format": 1 + }, + { + "name": "tests/integration/targets/prepare_ios_tests/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tasks/main.yaml", + "name": "tests/integration/targets/prepare_ios_tests/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a35279615971415b54c2877e35c58f430c4b5ecf79ab75cf8b1145408aa2f1c8", + "chksum_sha256": "044df3cbbc253645266ad8c2a377e8758a8fd53c7a7398818eeb2fe0220e0a1f", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tasks/cli.yaml", + "name": "tests/integration/targets/ios_bgp_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_bgp_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_bgp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/meta", + "name": "tests/integration/targets/ios_bgp_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/meta/main.yaml", + "name": "tests/integration/targets/ios_bgp_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "294fb05c40c2dc3d7c4784a8cc61089bd1a705a9461e09fb33b05dbff99f9e33", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/defaults", + "name": "tests/integration/targets/ios_bgp_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/defaults/main.yaml", + "name": "tests/integration/targets/ios_bgp_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests", + "name": "tests/integration/targets/ios_bgp_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli", + "name": "tests/integration/targets/ios_bgp_global/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42615f514256b1a7d451a57c904dafc5c7887df9bd1c968f5332b28b65ee999a", + "chksum_sha256": "b28f32004005582bc80fbc2a9c8db6728687c25d87f74a365e61e7a20ec853d5", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2110fa4eadb1937613e4b408e6d87ec92dd2e55ea8d01b22a3f058fe670aed83", + "chksum_sha256": "ac9b0f35b9607c4dcd6ee6fe8c4c5a3a890eb3ffef2606e5d9935648df7d5b7e", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "46fbc34461ca07fa76173803e47b59638be46b109cf3033e12ab8e741e66d203", + "chksum_sha256": "75c019721cd809896e681cc3826abf70eb2a7d0616bc09817577e99c02ef7070", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c3c4569c578ec8336fa353111482916a96d9b9f7ab0f3262e9fe3fb92ce0f1e", + "chksum_sha256": "22e70effcb2a1b4e95a65356aeb5851b46cc61d518aa81ce133b7934eb8c6d83", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4aa123dc7a38645f48ca983339b0a43702f527b615514715a05689ddda18f592", + "chksum_sha256": "b6479de2654937093427d57930e46c699ad3265ee6f67624b7414d03cd9888eb", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aaf7849f1fc016f09813c37599fa2f567313c681920a349d3976117ca61033bf", + "chksum_sha256": "87c9833d471a6b80a6c2cd0a14d29ef5b983fe7d8e9e61e6f43a8c0e1e8a89f6", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ecf088fce17e2e3b5612311c4c10d551e1c0fc20716a2cba7f0424611b989fff", + "chksum_sha256": "6fb296f62f074510365c9916869e8db44765c6cd34459320babfaee14deb6253", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40cfb30ce1b837e512a4e0a8e5d8aaa90026019732f6b712c49fa8f86c742f46", + "chksum_sha256": "3c6b76253c2d8e53a0df8c1f620ad1b90d537912cb81877fff08d39689a1537f", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c7af067764f9e7823717d5b09d690789309bdb098c621a8886151cb7c5126f9", + "chksum_sha256": "124e599b3086fa609f480a4a1904670d4501b436c5a927758b5399fae15e8124", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "22dff6930e31491a66e9b9f96b3adbb57e5619f9bb1cc04e699ad09651dfb23d", + "chksum_sha256": "cfa79d338f05e3971ce8a30e951a60e8a3898786fecbf125898bfc20275377a4", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a6cc930a39872ad57c5b74919747421b13b0a0c985100d70763b27d0f646d0f4", + "chksum_sha256": "cca6983e388a8e06b3b72325026c23d5794b130d45a74adb6d2156525ff8335d", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/purged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "855485788ef3b774a156a6a7780597f2c73639a9da4f7093bfe3289ca1e67853", + "chksum_sha256": "440e31a2f87615c703a8a25d436bebf5e076b729ab0316294b1aea01585fb9ae", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/vars", + "name": "tests/integration/targets/ios_bgp_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/vars/main.yaml", + "name": "tests/integration/targets/ios_bgp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3706a44db972213dcbf36515e04647a1cc508296cc5faea5afd0666dcf499dc9", + "chksum_sha256": "3c1978dc1393f0ddade54f4568fbe2a213f323e71e9aa334266bad4fd016ea95", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_bgp_global/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tasks", + "name": "tests/integration/targets/ios_user", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "42f682d0706bde5cedd3667110b289d169b29ca20a1692b85c51bbe5f1e3131e", + "name": "tests/integration/targets/ios_user/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tasks/cli.yaml", + "name": "tests/integration/targets/ios_user/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/meta", + "name": "tests/integration/targets/ios_user/files", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/meta/main.yaml", + "name": "tests/integration/targets/ios_user/files/test_rsa", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "660b96e5ac6d6bd17900490c4749ff3a63898bb155db0a661fefbd6ac6f0fc44", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/defaults", + "name": "tests/integration/targets/ios_user/files/test_rsa.pub", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4552b1d9416ac1be7c90b10b182a6ff4a4c56efcba53bb31851808c5d1fd787c", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_user/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/defaults/main.yaml", + "name": "tests/integration/targets/ios_user/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests", + "name": "tests/integration/targets/ios_user/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli", + "name": "tests/integration/targets/ios_user/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "be1b9226490c3801116b3325385dedad65ee514e21d853298e2aa94ca9f16766", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lacp/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_user/tests/cli/auth.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83fb72d50e9f4e9ff7e3b906e1b4dba8ba4a08b0c8ff81c130a6b5c95c2c86cd", + "chksum_sha256": "1f1317bad114d20ffe0ec55fcda33969a2575dc965be99b58cefda6742beaebe", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_user/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bfe347a63f6fa9d686ee7151ca4344f94c3fdc8c7e1ce73a637ec9e4924f38fd", + "chksum_sha256": "6e0a3882e754b70b183dac98c191e5db07f0c629ecc69b466b63cb3e3b0ea0d0", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2ae637240277ae729d901550cd50ce19b6b29b1eca663eaed8ce011bec832615", + "name": "tests/integration/targets/ios_user/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_user/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce393c8b6381d3030b5d2d12e7338fa4423cf1891c816db296f544467860992a", + "chksum_sha256": "a8da0d0bc00401711103caf4be61022ba74b53c8296bfcd784db7ea4853111c5", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_user/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "744f90515ff83553dfeff83df0ccf4aa826c3249574c42686fd9d6c41394d19c", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/_populate_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fc650f89a8a2ebce685210ae5fa3d65d1d31652a993164005d3327f4861881b6", + "name": "tests/integration/targets/ios_l3_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "68518c550a5a993fc26f2508bbf71ef506bcb2eb7101ac3005ec4b7163515459", + "name": "tests/integration/targets/ios_l3_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "45475bede19466ee41f4b1d966a80c10988ece6e1ea77232c4c9883ef2f22123", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "364387abef4d57a5903ef74f788703e41ed604a98ef24bcebcc837c85fad934a", + "name": "tests/integration/targets/ios_l3_interfaces/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/aliases", + "name": "tests/integration/targets/ios_l3_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f", + "chksum_sha256": "380802a37176afaba3d88556db35153b263ac7133e59292b1c2bc3633070ccd5", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/vars", + "name": "tests/integration/targets/ios_l3_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/vars/main.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "34537c31909d55ab6461991eb2ddfae9e4dd32b1b7e01133aa040dfe08ae02b9", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp", + "name": "tests/integration/targets/ios_l3_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/tasks", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/tasks/main.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e03ae6e52f8d7161565991a66935845e9141dd6b6bf67f939b1651c229cea114", + "chksum_sha256": "bfc3c984e0da8a8065696a6a4801d945bfaed1f84146f7c3c9745ba4468d0e1d", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/tasks/cli.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9739e364f374e25ab4075944df0f36a45c1937d5bcaee64b9120d651349f7297", + "chksum_sha256": "5a8e64e20ebea7d3a898216c6e256a3c0dccfcfb68a0671e3bf160e1f6c1b935", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ade890c5c428f4f2ada261b01e89f9149d27d8add293430df56161249cf0f6b2", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/meta/main.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "030195c5574fcaa46ade5d2d9f640d1b1668c41025f0c78032cdebd9ebc4ef86", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9c065775b6484b284e03beb65d1e250361c09fa4fc20e5006058f69e7c4eebc5", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/defaults/main.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "74906256718324f2c376a9dcb3be7bbadb2487067b1617e6d90c16f0a109cfcd", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "77cc14435d04e3f72f0ab9457713fca28de7a508c865c08df619ce999d7ace03", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4ed4649e2c9b10b71a7ae63117d06ec134eae6b2182f26bb8b04eb911e609707", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d2a2840acaf208fa439d00dd3be862789bb3e249ca568c9e3a0f958ce4c92987", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f5380c447d728d61be3bdfc3dd1ba1d805186c04b0f400eeb39c91b93bbf332a", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9ecda90386ebc75e0cb6e8a820a5c4bf172d4ca7bd4dbe399a4733aa6c08d07e", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3ccde47cab8fd1f7d6eb91c8a1744831097c27bebbf655e15d71fd2456db7f2", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/tests/cli", + "name": "tests/integration/targets/ios_l3_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/tests/cli/basic.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "daa688f229d7e8db61d23cc61ebc79ccff40a6e9af6de742f4cf5fde2fab74be", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_l3_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93546203b3b3da6687b1f61844ce847c75681b3b2ca9d9456bb1ad296603de72", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_banner", + "name": "tests/integration/targets/ios_vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tasks", + "name": "tests/integration/targets/ios_vlans/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "eebaf78d8d30ccd861ee6d250aec3bc87871e249b6875f8b0f44a4a3fc828680", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_banner/tasks/cli.yaml", + "name": "tests/integration/targets/ios_vlans/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/meta", + "name": "tests/integration/targets/ios_vlans/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_banner/meta/main.yml", + "name": "tests/integration/targets/ios_vlans/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "1cade52f40e5745ea62114c4c0c970e7f03db0578670180c7ddbd4d968a0ebf1", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/defaults", + "name": "tests/integration/targets/ios_vlans/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_banner/defaults/main.yaml", + "name": "tests/integration/targets/ios_vlans/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tests", + "name": "tests/integration/targets/ios_vlans/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tests/cli", + "name": "tests/integration/targets/ios_vlans/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tests/cli/basic-login.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "455be068cdb2741b681458831a33abbe656d86186a21d5dec3425add135dc14a", + "chksum_sha256": "9dcb409a302fb60386633c000240bd99c7e1a925e59d940604e6b1319d138eb8", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tests/cli/basic-no-login.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3deefaccfe8f72086372732ab08319268107114dc4cf238dfef54e2974b29b26", + "chksum_sha256": "1b9940730019c5607914c500f4e39e23b55fe858a6d0b276c96a28e72f222049", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tests/cli/basic-motd.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed_vlan_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f9346d2348dd942748aa47f61b6aff3cf6e6ad48f94121546f09266930d371b", + "chksum_sha256": "5921afbe0954f8ced2a95ceba0ffe19b6d3e0b31e50dae387704727e4602aa50", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tests/cli/multiple-login-exec.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c2ad7f508adfa637bf8f80e8afb4c68eeb24061eb0e54b670cb020133a38f63", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ntp_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ntp_global/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "7c3dead8718d5c971c74c59bf6c3eee8be63eb99fea05c03b0aba14e2994c4c4", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tasks/main.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fc06936d093493791466cc5b227ef05b6a0175615a5ce00453f6effb74f9532", + "chksum_sha256": "19bfcf9b214bd48339bd025b2c044eb3a640bd46b88442f4dc5337faadc0e18c", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tasks/cli.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ntp_global/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "4ffdb8c877c749e808b435c833c92f3b7d7343d05c4ba8d8f1b39e519b1b63a2", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/meta/main.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ntp_global/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "eb23b5c2bf1f0f35f49b160da45e45decfd895bb8d789a023f4ef8b975dc2dbc", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/defaults/main.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "018078882c63dfba371d5ada153412afd132eacc280cf5fda138c0c663fb500d", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "31dcdedd876672aa1f15ac36c7b35b156cea9795b15f686e40b2eecaa0ea5392", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_vlans/tests/cli/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e7bc4328acfacc36056f4f9fd2ed9cebef987ba490730967a191721c62993aa5", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bcff8a20978c31e6c69a155803657b695a5f65a32c494c6d83d65d008e8020d6", + "chksum_sha256": "2cee0574690e1a22ae1502659dbf76f95aa0f3adcc742e32a25241043c9eaa20", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b3bef8e48a4ebef6e417c5e919751cd9bd526308fdacd16395203eb4feb9f82", + "chksum_sha256": "2d7773b3edea41259b34dbfefcc4c7a543c6ab3c1a1a2d85a334d0cefad37b91", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a6b0345d271e15e951a9a150a43aa0906c3c91a5290b27ae942ab9ece89cbeb4", + "chksum_sha256": "5fee35bae6ec5d9945f2f9f4b7c5bea83745b2316b00de19871379315d1db91e", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d80307c7fbf6fc328ebf0395601768f230c08d052cba3e459e4b1755635a2a21", + "chksum_sha256": "96631f083020ab2d55c8ad66ef70bf26942bf12da2864a3b45b8afb934e5c7d7", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f41a107502fd7e4be2baf717aafa72bbafc34125fa229ec2e123f7dd7225176e", + "chksum_sha256": "552b6d2b0820aa662bcfdd52f55b169b4cee43dd29677494db263ba3a9e7a548", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d9b1ee000ffc164233351430bc0f5f3c9d3a336fd09ef670bfa40a7e2eebafc3", + "chksum_sha256": "ea1418e61499a54da8b0fc871d438e4955dfc1ae371120f4abed0fa6dafd1836", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306dedea01d094347dc69f10f2e68ed7787372ed087fa1c5ee2d5953a8767016", + "chksum_sha256": "d90eba79cf10b15a5318824e1fbc6e877db3951526be828180d47a3d1f8aeb03", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e350806f21caa0181d510feb9cb4e70185286e62aa3b52719b59d55172f2126a", + "chksum_sha256": "5f85654bf5f219c1d3e2569e0bcefad7c12232329ce58ad42219373b88ea2c15", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8cc9ea8d4a47459ec32d942855702c789ba3347e0693f57313003f45020d8a7a", + "chksum_sha256": "c257655cbf982e357facbb58b224b180677889e1dd9803351435d85b834a7b9f", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b633b4d6ccef76001f6764713b498278bf30e1dd964673e556fab42166480786", + "chksum_sha256": "85a1aebb72960e9ca957302e141f03debf96a1ab54926905a182b6f12fc2bb55", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9080f77ada9c677a1f4f275d42ed6bb0123286aa0ce5462bd2c580f47dda0d07", + "chksum_sha256": "a48ff2cab2dc7f5b92ac31b25fa52af940fc463ceb244c8fd28ee7b107ef08fa", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/vars", + "name": "tests/integration/targets/ios_vlans/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/vars/main.yaml", + "name": "tests/integration/targets/ios_vlans/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99f97d7709529ad5a370ef88ca759dd566abc45940443dbe28762778ab40c544", + "chksum_sha256": "8fa2acc83e477a128ac38edeec64fee41b19c60ee0c81a9c4fc633958a687a73", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_vlans/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tasks", + "name": "tests/integration/targets/ios_logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "38d132ea3d937d0294148c6f3a04d55737b22d89d81da2b9a62d2f143db5c577", + "name": "tests/integration/targets/ios_logging_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tasks/cli.yaml", + "name": "tests/integration/targets/ios_logging_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/meta", + "name": "tests/integration/targets/ios_logging_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/meta/main.yaml", + "name": "tests/integration/targets/ios_logging_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "54432abdc418154d2bc2d0a75a1a26d387c2ef5cc217cdcd6ddeb6cc19bc9ad5", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/defaults", + "name": "tests/integration/targets/ios_logging_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/defaults/main.yaml", + "name": "tests/integration/targets/ios_logging_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests", + "name": "tests/integration/targets/ios_logging_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli", + "name": "tests/integration/targets/ios_logging_global/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/_initial_setup_config.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59e9f957b72ad03c69b153719c63dfa82fc76462044bf190464dd27e23b38ce8", + "chksum_sha256": "6752b5ded2fc4b5361215ef8163a1ac17f48da2d1a26796414a2f7d7d4aab1f3", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/_add_extra_ipv6_data.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "27fca9065f41504020492968e54b2e06402c06e0125a486302d1917a63ac1f43", + "chksum_sha256": "94cb8dc2e04d8643d4feeedaaf3eb159c60bb1a997c8186a0ad7f33912a8b945", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0283a6e9bffb601b04610bc3005eecafab4424e7adffc0cd92d5f2ec80854451", + "chksum_sha256": "d8b45e3678e544bb5e707a93e1155402218b01bb88ba710417db77102a7bb634", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a789e3b6c7198a508bf40cd4e3cb57e546cda7632199c859f9099f6fb88f0f95", + "chksum_sha256": "f808045f76ecfd2f709fb9a4af7907660e8dfb4efa55fefc3744c32da9c20bf9", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d94e463bdb85337d3eec7c13b3a6f08547817fcb70bacc4b842ffe40fe11c13f", + "chksum_sha256": "4573b578a199c5195348871a4f8d0b0daee309e9ee60368db6968c6e64ee15f7", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab4fe0e6c364f83917063a0918a0cb632f8f9d26f6d4bca6c667e1e2e1181cd9", + "chksum_sha256": "2ecf2a5261b5c148d8c8142586318132ac92fd1663b20e91a2504ca2c2f9596c", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/_remove_extra_ipv6_data.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a6ceabecece292ded2c58a0da2f9f147af26de4c6428584afa2f0c456afc5061", + "chksum_sha256": "f014b1c94475c54528d1f3680735baaf6f2e8f4712df5a77665b969c98a16228", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dcdb366f9c765b9c097f4c406703abd2c9a03a524a6eb1d19b352d93fa2deef2", + "chksum_sha256": "d3b22fb7585f08098afcf881010b4d9348529e0f722c139b763f6b0c158965d9", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "923d1055671a7fc041e16e4b245f7b31451ccee290adc60cc145da9e23101c29", + "chksum_sha256": "09a264fcae252de2ac6ee85b8af26b74cc369cb29dc450cb21eb209818796182", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "45bc3228d1228672490f41f89975c552acc03459b8d0879185ec00e9ae72e411", + "chksum_sha256": "f25d81fb7693d57c2abd74e8739be232a9cbedbba1e9f8699050d04ea18d2b38", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "854a251b2b1da970c8de705b4a7d5605c18e2107d157feee9496805b811943a7", + "chksum_sha256": "7961543ce55fd097ff5b420ecabd3926f29b8631d0ef0e0a802ca601a177e2d0", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c356f5c2db3137413b1235ce6ae54d6b2a5dc02f41074c65f2a0ba23370e3c38", + "name": "tests/integration/targets/ios_logging_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_logging_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e971b8839367066f0b190610a58229ed0599df3e17c4f97244b641a620b0e781", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_static_routes/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "16f3cc0b8e2e2d5d9776298fab6f9d5648e4c35498db7605af69c8e97e122464", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/vars/main.yaml", + "name": "tests/integration/targets/ios_logging_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9cbfbd72a07c59fa3718d4dd77eda9cfc144ecbd081561172b9cf09c5eeadf53", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces", + "name": "tests/integration/targets/ios_lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tasks", + "name": "tests/integration/targets/ios_lacp_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5e606724f5e050623ada8c3ebac4a083abdd02767b5957a2a8904f043d62e05d", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/defaults", + "name": "tests/integration/targets/ios_lacp_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "866d49b9fb83bafefee3c2ed7ba79d894e2b28af83b4fed56ad48982c364a894", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests", + "name": "tests/integration/targets/ios_lacp_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e44e3d1b77f9197ef4361d6dbf20eded541d03f581394845c3696a83e441f2ad", + "chksum_sha256": "fc43ad13fcf0465249c1941a418f61f36fba08a55afaef2aa8a7949ed028a7fe", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b9cdedfb409a6a585b41bbb846c76b74db84cecab5bdbfeef8886855f6cd1a51", + "chksum_sha256": "ac8361b624da0372fb79c80bd147c5b9bfed4d4140d0be7fe9957b75e414c61b", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ae00f45065d40f19d7d616af65721f965809346dac870564a152f74da00bffa", + "chksum_sha256": "e87a35985502b9c92eb9c60ed83fdefcc11a17e26b421e067dcf7be3624c8503", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d046da8c0e4dd08e6001b5d32c7acfea4dd2b005242bf7d11e0f89ead65f48f1", + "chksum_sha256": "5bb10615fc266a5079e9adaf3307602bdefac54f4e8c9fda96954eb59ddc1485", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c677840c5b24b7fbc56a54cbe609c24c198bf12cb1b9db9218316a45f9481211", + "chksum_sha256": "200cc72937b5aab4388efc5e85b4f590dfae9bbbfd9668c2c8390d42c73cb1a3", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ebe78d90845598db5bbb9706a02725bbd5b4c78bc04e50afb888329367641945", + "chksum_sha256": "05d13aca3673ed53547e84c3a96b852f6c6b21e31b250ccae1a3c9dc8a455415", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca080f4e61b3ed9435f09d4ce2341f2851ab47817e80383ce5c329cb89216b8f", + "chksum_sha256": "6b15190694a3230175825f662ffc5be36c207a5508f8dd03e34d0f16dba801c3", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fccbbf49369445f70a482c85b55c078f9cadd67786a0a013fc6698b25100108c", + "chksum_sha256": "337f2c06ea2b0c31adfc06bd0684edb480b1a333dc4d82fd36e74e6efad7d6ba", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_add_port_channels.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5beb898fd85dd55c16543656a24d0f3cf81103d0b4a3b9ac5c0986a4f630e703", + "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_enable_lldp.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "88bd2a8904ddb081f33df2ad15b7cad35f711c4ce1e32400d45b598f647484ab", + "chksum_sha256": "83acc10766bff99eaf1085cfc2fab4b54e4101edfc70d06c19f65eb5f90f0478", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a5e1d25df92ed1b5dca114c6cf36b26b24d049f0866014034597f9c44b1827e", + "chksum_sha256": "8a4d9930854480ec68685dfce6a5ca53170d519fa93b8b10ff89d84c2fef906d", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "007a1de94220246c924b2d51649d632c2caee32e05fdb91f25df2e14e0e602e8", + "chksum_sha256": "6fd2582bf431113cefd8a863baf6d1b6908f5cd142dccde32ef536feb29d0702", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "def5a49dd2014e2079ca9312f36b626f9bfe5606d255f306eec9dc700ae9f7a0", + "chksum_sha256": "3de8041d6d7c288d7f421fc629c2bbcfd5b1faf29d3785fb1f8c39b6b5f36775", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/vars", + "name": "tests/integration/targets/ios_lacp_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "887240ad30c1751c17e47be11a0cc78b5c323d442967b30457bba74054d6ada3", + "chksum_sha256": "42f682d0706bde5cedd3667110b289d169b29ca20a1692b85c51bbe5f1e3131e", "format": 1 }, { - "name": "tests/integration/targets/ios_facts", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_lacp_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", "format": 1 }, { - "name": "tests/integration/targets/ios_facts/tasks", + "name": "tests/integration/targets/ios_lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_facts/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "093a68ecff9678aad9ed8e47c822c8dd795b7f5b6a14493bbbfe1d67a378c324", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_facts/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_facts/meta", + "name": "tests/integration/targets/ios_lldp_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_facts/meta/main.yml", + "name": "tests/integration/targets/ios_lldp_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_facts/defaults", + "name": "tests/integration/targets/ios_lldp_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_facts/defaults/main.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "887240ad30c1751c17e47be11a0cc78b5c323d442967b30457bba74054d6ada3", "format": 1 }, { - "name": "tests/integration/targets/ios_facts/tests", + "name": "tests/integration/targets/ios_lldp_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_facts/tests/cli", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_facts/tests/cli/not_hardware.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "738d319cd48b7e3b5f396a7a5af1f30285de3dc9021256498f6b34b76b44f451", + "chksum_sha256": "007a1de94220246c924b2d51649d632c2caee32e05fdb91f25df2e14e0e602e8", "format": 1 }, { - "name": "tests/integration/targets/ios_facts/tests/cli/default_facts.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "075848c45a672667c64eafa88b47044c411d5299aa4197e2784127b2b09e4a3a", + "chksum_sha256": "5beb898fd85dd55c16543656a24d0f3cf81103d0b4a3b9ac5c0986a4f630e703", "format": 1 }, { - "name": "tests/integration/targets/ios_facts/tests/cli/invalid_subset.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4bb2e50a1b9d682b6e11db8e5f3ddba9e624b09092d16471bbd94ba9d6b3567a", + "chksum_sha256": "def5a49dd2014e2079ca9312f36b626f9bfe5606d255f306eec9dc700ae9f7a0", "format": 1 }, { - "name": "tests/integration/targets/ios_facts/tests/cli/all_facts.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5dd6cf0f7fe495fd14458aafe778ec70adcec1013d6bfd57baed70599f98c90", + "chksum_sha256": "4ae00f45065d40f19d7d616af65721f965809346dac870564a152f74da00bffa", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d046da8c0e4dd08e6001b5d32c7acfea4dd2b005242bf7d11e0f89ead65f48f1", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_parsed.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fccbbf49369445f70a482c85b55c078f9cadd67786a0a013fc6698b25100108c", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "79c7a4587c7a00a2c7a91a5eab3b092671c730ab0c82458102614e087ae32030", + "chksum_sha256": "b9cdedfb409a6a585b41bbb846c76b74db84cecab5bdbfeef8886855f6cd1a51", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "chksum_sha256": "e44e3d1b77f9197ef4361d6dbf20eded541d03f581394845c3696a83e441f2ad", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ca080f4e61b3ed9435f09d4ce2341f2851ab47817e80383ce5c329cb89216b8f", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/meta/main.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "ebe78d90845598db5bbb9706a02725bbd5b4c78bc04e50afb888329367641945", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_enable_lldp.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "88bd2a8904ddb081f33df2ad15b7cad35f711c4ce1e32400d45b598f647484ab", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "7a5e1d25df92ed1b5dca114c6cf36b26b24d049f0866014034597f9c44b1827e", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c677840c5b24b7fbc56a54cbe609c24c198bf12cb1b9db9218316a45f9481211", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli", + "name": "tests/integration/targets/ios_lldp_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d11cd0691705a44a06275d2438229562d70cb6eeafdfd7823c306fae55ab7974", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ae384d2d361bfec3e5ec8d4521923a328fd0a6b06ee0fad2dc813650f4867af", + "chksum_sha256": "5e606724f5e050623ada8c3ebac4a083abdd02767b5957a2a8904f043d62e05d", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a3bf0d0d675271115fbfcb01d220b647d351ba511dff0d16d9f8d7468ce8ac6", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "41fc0f1077783f0157b1bdae02da05009bd55cf31cfffdce93f25490569c7eaa", + "name": "tests/integration/targets/ios_facts", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_add_port_channels.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa", + "name": "tests/integration/targets/ios_facts/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_facts/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "45de9b52c7ab6864f1abd09fe743ffafdc10eb084285f98755c9ec21137e9bb0", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a9ef52fd6e4d52c3bdf173bf2d2c13f4ad7515dfd508f93e70d00f951cebc8d5", + "name": "tests/integration/targets/ios_facts/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_facts/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dae7f6e33417854fdb686dc22ab25acf7ccd05b1cd088087f4b6777012ecd7c4", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c30f577272b1c7bdc04fc0cf9a016b5c004a93f0e7d09cdb4bca3fa5aafeea8e", + "name": "tests/integration/targets/ios_facts/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "af7be4e062acefec5cf61c6cc7ad3cb369db2b641ae00f229621ee62a47fe90e", + "name": "tests/integration/targets/ios_facts/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_port_channel.yaml", + "name": "tests/integration/targets/ios_facts/tests/cli/not_hardware.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18e91e2791fb6dd738d3042718436ae3244dbd0a90b5f1886ed5a5daf1d46ceb", + "chksum_sha256": "738d319cd48b7e3b5f396a7a5af1f30285de3dc9021256498f6b34b76b44f451", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_facts/tests/cli/all_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59d406ceef4165fcae86490c8251a719575a113ebe80cce578c1e4b67c974225", + "chksum_sha256": "e8dc5bf84ef359c8b9110d3263998c4104a821dce2f3d80475e69e3ca4d781b3", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_facts/tests/cli/default_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "523ce08d67e26a55d5ae1004bdf73f5f785348437c918d98179f5bb01e403839", + "chksum_sha256": "075848c45a672667c64eafa88b47044c411d5299aa4197e2784127b2b09e4a3a", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_facts/tests/cli/invalid_subset.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ce0f4b8f4ff19ca8202594612bfff8bbe94ce65867e3db6e3e9bde4354c4c16", + "chksum_sha256": "4bb2e50a1b9d682b6e11db8e5f3ddba9e624b09092d16471bbd94ba9d6b3567a", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/vars", + "name": "tests/integration/targets/ios_facts/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_facts/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7548cef68905ad34af6e5c02e932c61e8eadc317b15831fca6346a128b89f7bb", + "chksum_sha256": "093a68ecff9678aad9ed8e47c822c8dd795b7f5b6a14493bbbfe1d67a378c324", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces", + "name": "tests/integration/targets/ios_facts/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tasks", + "name": "tests/integration/targets/ios_lacp/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/ios_lacp/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a46304602c050830a04642d790e2c32e7ca38138a3115617a321b0aaa966ac9", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_lacp/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lacp/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "34537c31909d55ab6461991eb2ddfae9e4dd32b1b7e01133aa040dfe08ae02b9", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/defaults", + "name": "tests/integration/targets/ios_lacp/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_lacp/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests", + "name": "tests/integration/targets/ios_lacp/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli", + "name": "tests/integration/targets/ios_lacp/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3989e7f762cbbf518de2b3778ab60754ec12e403c145956777cbab0962368206", + "chksum_sha256": "45475bede19466ee41f4b1d966a80c10988ece6e1ea77232c4c9883ef2f22123", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26b38d39df6a806126bb1981ac16b20707118f8d4b4bf77036dd328705ed3b76", + "chksum_sha256": "fc650f89a8a2ebce685210ae5fa3d65d1d31652a993164005d3327f4861881b6", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b052384eec330f45bc81d36118752d8997371068252fc29e436bdb59391de045", + "chksum_sha256": "364387abef4d57a5903ef74f788703e41ed604a98ef24bcebcc837c85fad934a", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e5d0eebcdf9df91bd9427cda551ac2faa5b3c91559e742a18ce0eb59d0b5755", + "chksum_sha256": "bfe347a63f6fa9d686ee7151ca4344f94c3fdc8c7e1ce73a637ec9e4924f38fd", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02c8c24f18a12ddb0ed2b7d21e39eac17a3c36787f8ff145223ca43af0c02e42", + "chksum_sha256": "2ae637240277ae729d901550cd50ce19b6b29b1eca663eaed8ce011bec832615", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3077db7d9d462cc53d8a755d6ff91972855473a4303ea49862dd1c26b1345816", + "chksum_sha256": "744f90515ff83553dfeff83df0ccf4aa826c3249574c42686fd9d6c41394d19c", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f0b6df959031fc5ab1736f470d21d0d029f71711b916b666e8172e5af4be64b", + "chksum_sha256": "83fb72d50e9f4e9ff7e3b906e1b4dba8ba4a08b0c8ff81c130a6b5c95c2c86cd", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_lacp/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25ed4323da59a62b27fbd759263f146585f660557ae20c810f4a00602a4584d1", + "chksum_sha256": "be1b9226490c3801116b3325385dedad65ee514e21d853298e2aa94ca9f16766", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "135c4a4d72895e789f33ef5d20039e4dd8a1ddb92402b8fd25cbed9d3cf993b6", + "chksum_sha256": "ce393c8b6381d3030b5d2d12e7338fa4423cf1891c816db296f544467860992a", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3860df920e3f445383200f9261984c3a4bf72d7c93ad252ee8bb237fe2acc163", + "chksum_sha256": "68518c550a5a993fc26f2508bbf71ef506bcb2eb7101ac3005ec4b7163515459", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_lacp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lacp/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e5e5626f01eb1f6cd90237efc8972743f594500e8f3fcb34f8f0e6752069ab2c", + "chksum_sha256": "42f682d0706bde5cedd3667110b289d169b29ca20a1692b85c51bbe5f1e3131e", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_lacp/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "168cef1691a6a4585ce66751fe0e9520573ac71ffbe016a9a3f239b195b9a8e3", + "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/vars", + "name": "tests/integration/targets/ios_lacp/aliases", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_linkagg", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_linkagg/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_linkagg/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f860d0bfa1a178cc8f9426b3e865a1e8db7123ea9dbeed64494fb52dca4875c4", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps", + "name": "tests/integration/targets/ios_linkagg/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tasks", + "name": "tests/integration/targets/ios_linkagg/meta/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_linkagg/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8e9a834620253664b73e74d67506006c5a301715f7b7a867c5bca4334f82ece7", + "name": "tests/integration/targets/ios_linkagg/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tasks/cli.yaml", + "name": "tests/integration/targets/ios_linkagg/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "01543795b9d0559974aa6eb2e501541a442c6d8a61361ab6ce30eb7d7a0610e3", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/meta", + "name": "tests/integration/targets/ios_linkagg/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/meta/main.yaml", + "name": "tests/integration/targets/ios_linkagg/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "8171ce9eb1bd2474dcb5e0f86eeb142567bac349514708f53c24829283fd382e", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/defaults", + "name": "tests/integration/targets/ios_linkagg/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/defaults/main.yaml", + "name": "tests/integration/targets/ios_ospfv3/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospfv3/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests", + "name": "tests/integration/targets/ios_ospfv3/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli", + "name": "tests/integration/targets/ios_ospfv3/vars/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5d9a640abfe561027b4afaadcf0306d9f52437a9ca11c8c6bd33aa39668cfc2b", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospfv3/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_ospfv3/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac7be197d9f1c5d050d19763c77777eb76e358ee919bb8f9cbb9f9844dc88223", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospfv3/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospfv3/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4046f281274bc9935c8cde1acc6b9be307f1b7ef9fb583957e1322b0c082d60", + "chksum_sha256": "616e7d9e3cc11d85aa6f6948a80ba8ad080df33b6fa2574e58ea96dda1b8b4d7", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "df41c3a26d7834ab66fdfe1b2faade9c312e8225c7bc99d736308371f3600ea2", + "chksum_sha256": "d825c44ce8c9cec4e8b41ce23a867b76e766c6e6a3491d6621585bce8bdd57c3", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f164fe2b72297a0ed83c0dfde78abb1673ebf7715469c55d263904c54e75e8d", + "chksum_sha256": "21aabfd4dd00cabd0670087c3f46d8f3cf0dac51e013d14790546ec52612579c", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9991663c3944fd60eb5c0dd904a88348ce7ebdb04550a3e596b92b67c312a8fc", + "chksum_sha256": "72297b557d1b34d29b999d26e00a0b28d813fd1e458338acd1cd3b24b0a35aab", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9107ec621b5c648121c0917cd969eb12895ff1bbd5164798902d8fade0887608", + "chksum_sha256": "2bfc27b217fab25508ee8dedb4819c40bdb98b3352c464065f8ef169622f4384", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/_initial_vrf_setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d0f8053909d848db5a593451794962888efd2e041f710294929ca1bdde0caff8", + "chksum_sha256": "7fb8dc743143aa6677f024b7333e02bb1f52f1a9c434cd86e1617b442dcc8a0b", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49d07d449a90342c4a3b2605f7d2e5a99c3c04952701ea4a1d8b29b02577fa49", + "chksum_sha256": "75178f12ee6688bc6635aafb6d83adddbed9b5a0d12fb9d39c819afa14adba64", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff7c6c2838c19016776a01f6d6704aada960e930a0829c0e47e847c70144b9f7", + "chksum_sha256": "844b1f73132324bcee3f3390fce22388df69b69e4266ffebbdd4c5d6a8a4c2e8", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c56d9e9cfa1c23282710af3f23af288e856f3ff9134cc411a498b186c2df4c4", + "chksum_sha256": "238918c44b8752332fe7ee6df2e293a51da17252fdf2362b337e6a897cc224cc", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85fea8de40eb500f7b93f6842ded059cc8f3e346d902a06028a4869db7e19b01", + "chksum_sha256": "c8f73d52be036135d76b6157719db5f9bd4f7761ebeae5618e48a339ed14ae4e", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_ospfv3/tests/cli/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c70156e646606c78e8221d3f09140d0be29bfc307756e6f0993b02b78b8fe9e9", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/vars/main.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "707242064a446604688cfa42b04d777ff801846293ade1154dcb3e82a9badfb8", + "chksum_sha256": "23df18165ce662f9a6837926a752e92d9c0500334a68492ae8607c2385b4cb29", "format": 1 }, { - "name": "tests/integration/targets/ios_system", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_ospfv3/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8a735801dc4fc0769f2773722caa333ada8c5c41daad731c271c185ff1d6a040", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tasks", + "name": "tests/integration/targets/ios_ospfv3/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/tasks/main.yaml", + "name": "tests/integration/targets/ios_ospfv3/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "68e898ba92f5164ddc8cc51967c5e2876e9002699d528634a67f2183dd558d39", + "chksum_sha256": "2ee4493aa601f74dca37f18dfebff80578f8ad47283d1921825a9036bae468ad", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tasks/cli.yaml", + "name": "tests/integration/targets/ios_ospfv3/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_system/meta", + "name": "tests/integration/targets/ios_acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/meta/main.yml", + "name": "tests/integration/targets/ios_acl_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_acl_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_system/defaults", + "name": "tests/integration/targets/ios_acl_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/defaults/main.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "f860d0bfa1a178cc8f9426b3e865a1e8db7123ea9dbeed64494fb52dca4875c4", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests", + "name": "tests/integration/targets/ios_acl_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli/set_lookup_source.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10e512f2cf5dc0fe7c9d3cb0188fc3dc96dffa68beb61895d88c8dc422c886e7", + "chksum_sha256": "e5e5626f01eb1f6cd90237efc8972743f594500e8f3fcb34f8f0e6752069ab2c", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli/set_domain_name.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4bc85f65fcaa284e9503fe5643f16111f14daf7ba677abd84daa04302f8b007d", + "chksum_sha256": "135c4a4d72895e789f33ef5d20039e4dd8a1ddb92402b8fd25cbed9d3cf993b6", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli/set_name_servers.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b59e7228e155bfcbaa1863f12fbbdc641e01c2fdef2d6bd4f4aeb2f3fa96bddf", + "chksum_sha256": "168cef1691a6a4585ce66751fe0e9520573ac71ffbe016a9a3f239b195b9a8e3", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli/set_domain_list.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "592210cc1bf19177523967179ec83b786b9c60d9341acdb087e739911876007b", + "chksum_sha256": "b052384eec330f45bc81d36118752d8997371068252fc29e436bdb59391de045", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli/set_hostname.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "810d48f3ce471254c763859c7d33ad70b06aaa28b45712179b4794f3b5a667c5", + "chksum_sha256": "5e5d0eebcdf9df91bd9427cda551ac2faa5b3c91559e742a18ce0eb59d0b5755", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_parsed.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "25ed4323da59a62b27fbd759263f146585f660557ae20c810f4a00602a4584d1", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "26b38d39df6a806126bb1981ac16b20707118f8d4b4bf77036dd328705ed3b76", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tasks/main.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7607c1041a822e911d328c572b5986636a52054bad2895b89c4beb7861755017", + "chksum_sha256": "3989e7f762cbbf518de2b3778ab60754ec12e403c145956777cbab0962368206", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tasks/cli.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "5f0b6df959031fc5ab1736f470d21d0d029f71711b916b666e8172e5af4be64b", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3077db7d9d462cc53d8a755d6ff91972855473a4303ea49862dd1c26b1345816", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/meta/main.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "3860df920e3f445383200f9261984c3a4bf72d7c93ad252ee8bb237fe2acc163", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/defaults", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "02c8c24f18a12ddb0ed2b7d21e39eac17a3c36787f8ff145223ca43af0c02e42", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_acl_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/defaults/main.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "9a46304602c050830a04642d790e2c32e7ca38138a3115617a321b0aaa966ac9", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_acl_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli", + "name": "tests/integration/targets/ios_smoke", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6e7e8c2edb74ee0476b0c4d83a52c84e4230c16e3c3d051c63c6fc63018c4211", + "name": "tests/integration/targets/ios_smoke/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_smoke/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5665b8e91a6bb98092632ca9952389b634005325762d970aa987bf0523ccc882", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "149f7e871cffbb37baa730d0dc0a4964723f90d64d0f0a409ebd923b743e682a", + "name": "tests/integration/targets/ios_smoke/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9c7f20dee20d06af4441f5369836e86db1aba0bda93cb50caa49e6041ae98dba", + "name": "tests/integration/targets/ios_smoke/templates/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_smoke/templates/defaults/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61c3a851e2d056cec1479981c331fd2a4c1126bb8bbacd5c38ed0b4e4ff026c0", + "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2dbca0fd8e9d00593a5785ab68cb246e21a2ac99fff6970ff150710c246f1927", + "name": "tests/integration/targets/ios_smoke/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_smoke/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c56eb808c76e38656a84bb5e725dc14af02482efdb85d2246613aff63e9b52cb", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0b9a801456bd9db90925de5fb3ddf02130ebf6e4de5abbc8dd0a3d8785ade822", + "name": "tests/integration/targets/ios_smoke/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_vlan_vrf_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "455e27f59263b50ef9ec28db7556b9746070f5672cabe83cb0c03f6103ca3918", + "name": "tests/integration/targets/ios_smoke/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_smoke/tests/cli/misc_tests.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d54c5dd89c14a5b02575b8e80f647bc66ba075563571e876e5d471beca81c10", + "chksum_sha256": "7eb9e4e697c8432c1a40e9408f7638d887c347aec871bfa157bbd7c3f0586b95", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_smoke/tests/cli/common_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "67f3d6703dbc41fb80ddc9360a8fd99addc2dbd17258b2e3d4bfc859c604d867", + "chksum_sha256": "3cadb8dae7de5b5be84fcab95fd6e5f65816069841a996010af41c32b8438897", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_smoke/tests/cli/caching.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23ba22f2eacb69c8cda7d4bc0b8ffb9b9b4e3c8c2499e8512fdd09ed136e051f", + "chksum_sha256": "618ffe0e7bbd5a6d4e6172cdcca046317acbb06f8dc8b4de4e214fec6e642640", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/vars", + "name": "tests/integration/targets/ios_smoke/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/vars/main.yaml", + "name": "tests/integration/targets/ios_smoke/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7bbcfaab60d1b44f73192415eef696368496e56fecd0d5f6384a36f6ed0bf500", + "chksum_sha256": "7f9fa924aaef2895a7bc9899ba35028617be0e242888fd3558903a9a5c621bf2", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_smoke/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6cdc2604047d999342d2e29f3a546b9f8ceab22e37c2d4eaed5fb596bd4cd2f0", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tasks", + "name": "tests/integration/targets/ios_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0c72f070fd187ae7c13c368647de220f6b254ab856db38328f952f012461f480", + "name": "tests/integration/targets/ios_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/meta", + "name": "tests/integration/targets/ios_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/meta/main.yaml", + "name": "tests/integration/targets/ios_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "e8f3979e005bccc2337f70eee9f2a8cae18b80600e2336e64eca1c1b0552b4be", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/defaults", + "name": "tests/integration/targets/ios_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_l2_interfaces/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli", + "name": "tests/integration/targets/ios_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_remove_vlan_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "89eb56e9a96ba32ab65009fc09ebf8bbbeb74843839557a70f1c76c3ba2f2c58", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e5c3d3a3d316de8d72b101a3200a8e81785710ef1f1386c0ea3dbf5da45eacda", + "name": "tests/integration/targets/ios_interfaces/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b04564f5e0e3b1f5527f25e60a42766131d47c8f14e5704c558156a2d901654c", + "chksum_sha256": "c3aa08c205d7535bccd127dd4f2561e51a2ec026d151af29a27161cce05fc3fb", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae60010ce6b859e677cd2fe0443293d0cbbfb6059f00416c2827998f8dba96c1", + "chksum_sha256": "ef6bdcebaf77721c230b529ea6d8930afd19840ad644b09d7a9d9e8b08042a64", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2df68349950dac68eddcf5f1560371ca7d58868b3d5c978bb2047ec1d37a908e", + "chksum_sha256": "c9f8c4f20831746975e125b2813af5a924c6ec65692e3b373b62cca70e07bac7", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "094afbbdd9097ab670c41df21b081705791bd7efa1ff26a741ccd2f9a21ed2a5", + "chksum_sha256": "37d322a0d70e5051c2f54be098c6cb7261c5cba19d030d69c87c9a25d05b3a2e", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "205a1557e675e86da5aa68c11e65648bc868852e81d2d483ffdacbd72e058181", + "chksum_sha256": "191fc3bbaf3d78756bb2ce23765cebb199b569f0f7b88689063d00ee049db9ec", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b4e94db711765525756701212c456abfea84fb4c38cb4cd45c9010dbad93927", + "chksum_sha256": "3830de884a4d8a13874f4bb664a6dfe92240148a26f2414fd430051e40752b1f", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18a86eba9dd5b79bedad92815399beb362a10c96e402b18fc70884852a2c502e", + "chksum_sha256": "8de2097894aadebd181dd7ae7d0f5dec4cb017ff95010899b37d3bcad6bd0860", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "557b6eac4dd1d40678d52e9f59e84d8f9cddaf70a6be82787d43785fae35539a", + "chksum_sha256": "7d6150da669c91be1f6470c7441e2bbac682c7b78c59eb2bccd837230b68e2d8", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91412f73bc4b57376bf22ae459899b858383999655c2365958695393758ff1ae", + "chksum_sha256": "b5f19e8e25cc5e2704ded61eb61d7ee0095acc136e1380809cdf47f12d8bbf17", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa8e71b9953a2d70da7fac058ba031f21cfb5bfb71df81285552b5aedb16328b", + "chksum_sha256": "96501d4ff6cafdb68d01c77d5cfeaf6b9c92470d76db8d43b694671c2459e741", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05a8a3246332f26b13525220bfb3ae2df1369eafe66f255ee76dc5d7d801fbd8", + "chksum_sha256": "49b157678ba5cc812ab3a5344bc492003e8cb6b1f849ae168b81f48ebba8ff83", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/vars", + "name": "tests/integration/targets/ios_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c39e3586ef18b985c228717ae7eac1e306f5e77a15d450a24628cf72e2d7e0ab", + "chksum_sha256": "c8f9dc60a371baf0f3c770c2818e2feae840331bbf85a9c23ba3d2cfdfe13547", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tasks", + "name": "tests/integration/targets/ios_evpn_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8fa2acc83e477a128ac38edeec64fee41b19c60ee0c81a9c4fc633958a687a73", + "name": "tests/integration/targets/ios_evpn_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tasks/cli.yaml", + "name": "tests/integration/targets/ios_evpn_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/meta", + "name": "tests/integration/targets/ios_evpn_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/meta/main.yaml", + "name": "tests/integration/targets/ios_evpn_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "a930c7415288124acd312b6bc09b1120f8f8085b31c7267a1e183467377b70e0", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/defaults", + "name": "tests/integration/targets/ios_evpn_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/defaults/main.yaml", + "name": "tests/integration/targets/ios_evpn_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests", + "name": "tests/integration/targets/ios_evpn_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli", + "name": "tests/integration/targets/ios_evpn_global/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c2f157243c1f0874051f031c51813641fc2d08529e7d97971f10e15553acf3fe", + "chksum_sha256": "e0e4acad796d01a6db7a44d08d8ae4a7eefa3da818382224189c30eb5c6bbd92", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2cee0574690e1a22ae1502659dbf76f95aa0f3adcc742e32a25241043c9eaa20", + "chksum_sha256": "1cb6068d536690bed4bb86b5901cc97b78325b5ff9a6104805278172427c9af3", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "babf6f1d0227a6f5013632fbe2c7ab70a01b1991bf1683a11bf9d60d23cff0cf", + "chksum_sha256": "1ee5e0cd3f90d1d5461cc3de8eec434fbb245688d2c99d12a477d0ee565f19c9", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1855d64d7d7700e8da4e69c4df727cdd37926f720867dcc87c05fc443b14ff99", + "chksum_sha256": "8c950ea407d98e84ee9ef11ae5f11cdd1402a460f48159591eed290af69aa730", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5bc3030e1201026ce580492c74f1762660e20ae6a9c6945972ecc0f65cf3a0dc", + "chksum_sha256": "e6e04317befb43f382b3b5e4e37757fd905ea5f8099327bb255ce3031da38285", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7bc4328acfacc36056f4f9fd2ed9cebef987ba490730967a191721c62993aa5", + "chksum_sha256": "54905a1be066debe036046408f5d40d3ceeccee3074090e3d1c459aeb4355e67", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19bfcf9b214bd48339bd025b2c044eb3a640bd46b88442f4dc5337faadc0e18c", + "chksum_sha256": "df48d4875d6c309498c93bf1654170b5de8dd36f00cad9b7dda06fa0ec6135d8", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ffdb8c877c749e808b435c833c92f3b7d7343d05c4ba8d8f1b39e519b1b63a2", + "chksum_sha256": "bf27aff9be6f72a1bac5da95577b426f851356b9afa907bc35a5100f51b3500c", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed_vlan_config.cfg", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5921afbe0954f8ced2a95ceba0ffe19b6d3e0b31e50dae387704727e4602aa50", + "chksum_sha256": "0b7ddb734d42978b5ebb82d436a354e8fae2fce18e60a1546f2d519cead08390", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d96a7d3e3bfe8da463bf2dd734b70aa86db1e98fa4307435ef430e0574a732dd", + "chksum_sha256": "1c1eda73556b1082527e3387499aa6a6d5d6734bcdd7070409964563ef73734b", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_evpn_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f50d841acb552a2397492892efa62ca868a227651d2cdb2179a4bd3da66c9817", + "chksum_sha256": "40cba4a01ca4d7671041cd1c34aad247ab33b8027f3143233bab09d039780e3d", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_evpn_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85a1aebb72960e9ca957302e141f03debf96a1ab54926905a182b6f12fc2bb55", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_evpn_evi", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_evpn_evi/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_evpn_evi/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96631f083020ab2d55c8ad66ef70bf26942bf12da2864a3b45b8afb934e5c7d7", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_evpn_evi/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c50c17d5cc8d365e9df2d11698f67bd0a6f8650dcb2b3c7cdbc2bbd0ce82e58", + "chksum_sha256": "d8d4519b069cabc7f791adda0fc239b41ce354dd4eccb8f1929e2503910fa16d", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_evpn_evi/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_evpn_evi/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d7773b3edea41259b34dbfefcc4c7a543c6ab3c1a1a2d85a334d0cefad37b91", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_evpn_evi/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_evpn_evi/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31dcdedd876672aa1f15ac36c7b35b156cea9795b15f686e40b2eecaa0ea5392", + "chksum_sha256": "f152c59eea19452042fd7fd86a18ec51a8ba501b488f2a104e81e7a4099fa617", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56e174577879e139ac99b46f2588b9c101e1667faf4fd9ae1b59cab9466979d9", + "chksum_sha256": "78274255f88531ce6799143d0f15f9dcc4d350c92ad3d792cc49a8b8ed5e45e7", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b9940730019c5607914c500f4e39e23b55fe858a6d0b276c96a28e72f222049", + "chksum_sha256": "d2729d3bd7841494cddd0732bd7a9c75663bb18eeba552161426cd88ede87611", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d90eba79cf10b15a5318824e1fbc6e877db3951526be828180d47a3d1f8aeb03", + "chksum_sha256": "d6115bc64148a4cb99bde23fb20e1b7d90cb8e08a826d1ce988b56d1aa56f959", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9dcb409a302fb60386633c000240bd99c7e1a925e59d940604e6b1319d138eb8", + "chksum_sha256": "0b5dffe39805b32781c56cf69f5dd7cb5102da1dd53eaa29f011001e009ecb83", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c3dead8718d5c971c74c59bf6c3eee8be63eb99fea05c03b0aba14e2994c4c4", + "chksum_sha256": "7fc6dd9b2d30b6cb5e0785ee409ed4afc0ba34e469fe18e024bd003985a38b65", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0a5f817b301780f98b42b3ff17ee875ec1da8cec84cc5196cf2e87eab9ecb05b", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/vars/main.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cade52f40e5745ea62114c4c0c970e7f03db0578670180c7ddbd4d968a0ebf1", + "chksum_sha256": "c8a64e95f6b485fa79daf39dd1f5c2e160ced25717df889d6c63f6054a227673", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "58d8e5d48d73a1c2b302830fc55a50f3c53e60f612a2e20f0debee651a912062", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tasks", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4244b8eb838cb04aa475d98824e7a4f314f6ad599111c8523185cf346b2074e3", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "39b3e0b71234dc27e4baf2b26606120f452be06e624dfd6242133ad5d49a13cf", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_evpn_evi/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ca85e538cabf8bda1ebd32dee2b5803e8e171ce955d7affe2f1417283cd92d6", + "chksum_sha256": "ef3434585fe8063da82d4d92c7cb20198bb9cb86fe82d49b0e8eba3fc398f561", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/meta", + "name": "tests/integration/targets/ios_config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/meta/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ospf_interfaces/defaults", + "name": "tests/integration/targets/ios_config/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_config/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests", + "name": "tests/integration/targets/ios_config/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli", + "name": "tests/integration/targets/ios_config/templates/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_config/templates/defaults/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6645517abeb9ff0bea3331bc844b12c1382b0eea4178be0dfa523a3a38c5a97", + "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_config/templates/basic", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_config/templates/basic/configexact1.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "338693405501e01ca57d2ddeb40f482891c029a986864fc98946fc266265bf13", + "chksum_sha256": "a112244df64f4360549463724af9ae4c598c3f39c22310a4d0a98c44cf034408", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/setupblock.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4395e95e40e7a0dfcf80e05ade1c443c37cfe70fe80fc4fdcfc0ee48ca7bca7b", + "chksum_sha256": "c7e470728246324f9d35d7d1f36e53f10a1d424cb9b14aea8ebd22ae03384985", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/acl_config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd72a9b920445f668d61b31646621e0f9587851e61eaaa071f8034468e3fab43", + "chksum_sha256": "819000cad7a1b4e27b8b206fe04b2d18c0bbba7876801d9f2786c94f76482050", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/macro.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0c23c50849c89a60cce7588ee594c9f12fc89ae710516e3371d9cdf23bbdfbc", + "chksum_sha256": "240ea6bffb5f8140b8fb61c0e4505e89f76ea5c0ade1103b63b25c6024e57892", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/intended_running_config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7ef2eb2c6dd20e38ac7f6058ced2a4902a838cfb902e8a32e33fc83bc8ffca5a", + "chksum_sha256": "0c8e4ffd5cb273c2c92fe0690fce9249386fbd72ac0e77872e8fa2cb1c256138", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d05e7ad3cd69bd4b423def7c76b0200ec3daff4ce28f945cf1b53a001c52d95", + "chksum_sha256": "fed860520ec0b19850744af6be1c77939335d4a09539bf563d0c15aa6afc84ef", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_config/templates/basic/base_running_config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adda4ccbcef419623366dff6fd814799b732583587c8b71b9a49638079cf4c7d", + "chksum_sha256": "7385f5112a2ea15a4ca3f480bf6830bf91439a67073d846367170819b02692c6", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/configstrict1.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e822477d57a3e430f8e379be1528039e6e4ee5eff278141cdc2c3f5c4ea4ad1b", + "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_initial_ipv6_setup.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/configblock.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a2472a61a85371edf42157eb38de6446a90882922de4471337054194b698dff", + "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/setupexact.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "843a2bd9f2693a11e665a5f552e9de54fcc379ca3e06ee80ba2530f9077acede", + "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/setupstrict.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff7d15cb956c6a22c1687aee06920653392f08ff0e53223afbab89ad7c7c98a9", + "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/configexact2.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f097e25e0459371162a4d0d2b645ae9ca361ad5d7fce778cab8793d7bcd2f433", + "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/vars", + "name": "tests/integration/targets/ios_config/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_config/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d904ba1b1ee67876b5c1db5e8a2c063c500c99af83e05fd36d7584745f906957", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/integration/targets/ios_user", + "name": "tests/integration/targets/ios_config/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_user/tasks", + "name": "tests/integration/targets/ios_config/tests/redirection", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_user/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a8da0d0bc00401711103caf4be61022ba74b53c8296bfcd784db7ea4853111c5", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_user/tasks/cli.yaml", + "name": "tests/integration/targets/ios_config/tests/redirection/shortname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "a9d8f38448bbc15b4db9520e986758afbb1e4332917cfa4e676c4726ecb1324c", "format": 1 }, { - "name": "tests/integration/targets/ios_user/meta", + "name": "tests/integration/targets/ios_config/tests/cli_config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_user/meta/main.yaml", + "name": "tests/integration/targets/ios_config/tests/cli_config/cli_block_replace.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_user/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "b9b16a4833c6d7626d43f1c1e90a106af469adc1f3a032875e78e13c6b563e5f", "format": 1 }, { - "name": "tests/integration/targets/ios_user/defaults/main.yaml", + "name": "tests/integration/targets/ios_config/tests/cli_config/cli_backup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_user/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "6c6e65aa217139078a0e172b54fc00eb2cfe51f2079cb7d9b0a5d9c5d2a74ca6", "format": 1 }, { - "name": "tests/integration/targets/ios_user/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tests/cli_config/cli_strict_match.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "faee234111770cb64085b9a25509c53fbd3fcc6d783bebff7592a0cf5ee4e317", "format": 1 }, { - "name": "tests/integration/targets/ios_user/tests/cli/auth.yaml", + "name": "tests/integration/targets/ios_config/tests/cli_config/cli_basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1f1317bad114d20ffe0ec55fcda33969a2575dc965be99b58cefda6742beaebe", + "chksum_sha256": "28f51d7f60e5fcd45a211c50797cc4142a3e4784cf8619ed41eadf1a630e4629", "format": 1 }, { - "name": "tests/integration/targets/ios_user/tests/cli/basic.yaml", + "name": "tests/integration/targets/ios_config/tests/cli_config/cli_exact_match.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "acbe615c9d6ee6c43971ed6986a31ed4e769c623d8f91f2258bbfb2255f76361", + "chksum_sha256": "3445b7155b0702ea632d8e846e514af4e58679edf35a1b00034c1f33611c7bcb", "format": 1 }, { - "name": "tests/integration/targets/ios_user/files", + "name": "tests/integration/targets/ios_config/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_user/files/test_rsa.pub", + "name": "tests/integration/targets/ios_config/tests/cli/toplevel_after.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4552b1d9416ac1be7c90b10b182a6ff4a4c56efcba53bb31851808c5d1fd787c", + "chksum_sha256": "c80fc079cc0294cc808809f7524cd26dce8746cb3cbceccae5947c26a53bba77", "format": 1 }, { - "name": "tests/integration/targets/ios_user/files/test_rsa", + "name": "tests/integration/targets/ios_config/tests/cli/sublevel_exact.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "660b96e5ac6d6bd17900490c4749ff3a63898bb155db0a661fefbd6ac6f0fc44", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_evpn_evi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_evpn_evi/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "8ff88256789e8892cc5604826818b4a694faa8dd37d8de6f37a06535724dedd2", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tasks/main.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/save.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef3434585fe8063da82d4d92c7cb20198bb9cb86fe82d49b0e8eba3fc398f561", + "chksum_sha256": "2fbcbac7be1a2444b9866a0312ebd7f30691de74f434b693b301e1b667efbc34", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tasks/cli.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/src_invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "e37382eede72ae657893c3933a8e6731db78596f46d5fede249d4d050e8f12b6", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tests/cli/macro.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c50af815c1122d68ec8aa76f0738a923e3100ffbdce96ec9f6eeda091001ff12", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/meta/main.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict_mul_parents.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "ca18a9f33f955ba25c6df6be5108b58cb0b159406b531931d7886b65ec1a0316", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tests/cli/src_match_none.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3b6ae94a3a40d6baa6400753b0273af9e1f0c693c0b9d02a216b4d16c9afad67", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/defaults/main.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/sublevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "81e93d0c4240f0c189dcc3db9d2887404f6f79ccc22a7ae9d8c2c616a823ae23", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tests/cli/backup.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e567e119083aae3e8dd3739d64db3927cb554387079640fbff99b1d6b79f267e", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tests/cli/defaults.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f299c02b02d7c454dd2eaa7eca83f4306f99b64430892077955f5159b3009031", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/toplevel_nonidempotent.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8a64e95f6b485fa79daf39dd1f5c2e160ced25717df889d6c63f6054a227673", + "chksum_sha256": "25ef9f513a03aa86771b90bd0d22940459f94fa3b2257ae7498b9217a405bb9a", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/toplevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a5f817b301780f98b42b3ff17ee875ec1da8cec84cc5196cf2e87eab9ecb05b", + "chksum_sha256": "f45a6bb9f23763b221df958302548d88734cedb25ee2edc0fe1ec86be00b4e8b", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/diff.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6115bc64148a4cb99bde23fb20e1b7d90cb8e08a826d1ce988b56d1aa56f959", + "chksum_sha256": "c4223635f760bffc17141049ab0cb3e09c3e9b2a53398754c740569c1244a548", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b5dffe39805b32781c56cf69f5dd7cb5102da1dd53eaa29f011001e009ecb83", + "chksum_sha256": "ce6faa181c1fb7ab5ba44db51d418b0120a7d110a3f4373e91ce02987a76fefa", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/toplevel_before.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4244b8eb838cb04aa475d98824e7a4f314f6ad599111c8523185cf346b2074e3", + "chksum_sha256": "289b05fea7a7180ab37fb5e04220fa7c387634fbfe67e997d39ea44e53b6b03d", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/src_basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "58d8e5d48d73a1c2b302830fc55a50f3c53e60f612a2e20f0debee651a912062", + "chksum_sha256": "2544e95d1ed36fd4c73cad6dd719051035205bfd414ef4d6bbb73fe7e592b981", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_config/tests/cli/replace_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fc6dd9b2d30b6cb5e0785ee409ed4afc0ba34e469fe18e024bd003985a38b65", + "chksum_sha256": "7cbde273238be56ec3dc2174913de0c2933067aa634987a04dd7fb72fefeac3f", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/sublevel_block.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78274255f88531ce6799143d0f15f9dcc4d350c92ad3d792cc49a8b8ed5e45e7", + "chksum_sha256": "91c95c35263639fde90b44f93f0612c0a7b3c510f325285afe281d9fc121e58b", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "39b3e0b71234dc27e4baf2b26606120f452be06e624dfd6242133ad5d49a13cf", + "name": "tests/integration/targets/ios_config/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_config/tasks/redirection.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f152c59eea19452042fd7fd86a18ec51a8ba501b488f2a104e81e7a4099fa617", + "chksum_sha256": "4c45a3649d432bb34bfcde5f3557848f294212fdd78da9b1c0f9b98176f462ce", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_config/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d2729d3bd7841494cddd0732bd7a9c75663bb18eeba552161426cd88ede87611", + "chksum_sha256": "7011b000e1a4b28787b459b2a05c625052f68b10a1f108068ec805bb7a0875f4", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tasks/cli_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5f583eec9d6129fbfe6d2b800c2013f2dff80308e21b59c9da1fa7382b6a401d", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/vars/main.yaml", + "name": "tests/integration/targets/ios_config/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d8d4519b069cabc7f791adda0fc239b41ce354dd4eccb8f1929e2503910fa16d", + "chksum_sha256": "100c25aa8e342471c45f4ced56d10739c8a7f50ffaf83531800819f0911615ac", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family", + "name": "tests/integration/targets/ios_acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tasks", + "name": "tests/integration/targets/ios_acls/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "af949d2e120137280e403535d60cb3485ba4baa88a48d465d066d2151defacff", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_bgp_address_family/tasks/cli.yaml", + "name": "tests/integration/targets/ios_acls/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/meta", + "name": "tests/integration/targets/ios_acls/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/meta/main.yaml", + "name": "tests/integration/targets/ios_acls/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "426d56b0add7f2c6df6469c2f33efe3a33443a413009f85d3a2a38e317b47ba9", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/defaults", + "name": "tests/integration/targets/ios_acls/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/defaults/main.yaml", + "name": "tests/integration/targets/ios_acls/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests", + "name": "tests/integration/targets/ios_acls/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli", + "name": "tests/integration/targets/ios_acls/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "46c2410786bf0f78b7645d8a6bf4dda5825d8949e13851505d83e30277257877", + "chksum_sha256": "a6cc930a39872ad57c5b74919747421b13b0a0c985100d70763b27d0f646d0f4", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_ospf_proc_setup.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4b82d41f2e4894c7d11e847a8e436b9e29fee5159acc72269f651697a7f62da", + "chksum_sha256": "f94f4b6ca8fba96b34c1fde4b3bb9ddf97b049ace4232ea5c0549ac3be547ae0", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8dc8ef4a203fd9de24d4afe860f25acd653f1f3512c445be6aec069b6bf4b22a", + "chksum_sha256": "855485788ef3b774a156a6a7780597f2c73639a9da4f7093bfe3289ca1e67853", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "537c4819a15fc7842de8cad0e8b74745f2c5b57d98db904078c9d8316b71ba12", + "chksum_sha256": "46fbc34461ca07fa76173803e47b59638be46b109cf3033e12ab8e741e66d203", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f3c31ce095304e438dfe658c12a1f429d9ff8764217ab52bd3dba99e0dbb8e99", + "chksum_sha256": "9c3c4569c578ec8336fa353111482916a96d9b9f7ab0f3262e9fe3fb92ce0f1e", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_initial_vrf_setup.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7bfcd11a8eba0c26e564d5b5600060584998da25484e8e92443c602067f72db", + "chksum_sha256": "e540d6f58dd558e2d1f05fc134c8c4694f405ce8decd5fbc174ab20d83c19256", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "109f26ef884c25ffda307c25bf4180ebbb0c6a18b73e2509ade840be68f641c6", + "chksum_sha256": "40cfb30ce1b837e512a4e0a8e5d8aaa90026019732f6b712c49fa8f86c742f46", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6447bcd80411c1d8f04d26582c2ab5dfef6ced7cd2be9a0681e609601bfe27e1", + "chksum_sha256": "2110fa4eadb1937613e4b408e6d87ec92dd2e55ea8d01b22a3f058fe670aed83", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_acls/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6cba5ef4746373c30e85d18fdf83be09ad50d9ee4c312a64422d34cb325e4a8", + "chksum_sha256": "42615f514256b1a7d451a57c904dafc5c7887df9bd1c968f5332b28b65ee999a", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6a2278af99b3d7b657b496333d700467810c0298ddaa567040b56c173f473182", + "chksum_sha256": "ecf088fce17e2e3b5612311c4c10d551e1c0fc20716a2cba7f0424611b989fff", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed4186a91d1cb41e8d7d24196821f6a055801eba77fc72c59af07eabb43f25b4", + "chksum_sha256": "aaf7849f1fc016f09813c37599fa2f567313c681920a349d3976117ca61033bf", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d452abe349d6f966fb7db5133c3039ff9ce202d6b98a16a157f405d7a6f1ce3", + "chksum_sha256": "9c1d667ff016afc0e8e5dcfdf781ca4c5b871ce011ed3ae461133caee4fef0d9", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7aa25fcb776c99a3453c4929c00250575ca72bce253914a95fd21d769fb1f21", + "chksum_sha256": "4aa123dc7a38645f48ca983339b0a43702f527b615514715a05689ddda18f592", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/vars", + "name": "tests/integration/targets/ios_acls/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/vars/main.yaml", + "name": "tests/integration/targets/ios_acls/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "98104bf0b72b20bb2d54f132858264e8c8aa8ee26d19ec82834d92367f5e0654", + "chksum_sha256": "a35279615971415b54c2877e35c58f430c4b5ecf79ab75cf8b1145408aa2f1c8", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_acls/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tasks", + "name": "tests/integration/targets/ios_bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c8f9dc60a371baf0f3c770c2818e2feae840331bbf85a9c23ba3d2cfdfe13547", + "name": "tests/integration/targets/ios_bgp_address_family/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/meta", + "name": "tests/integration/targets/ios_bgp_address_family/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/meta/main.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "98104bf0b72b20bb2d54f132858264e8c8aa8ee26d19ec82834d92367f5e0654", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/defaults", + "name": "tests/integration/targets/ios_bgp_address_family/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests", + "name": "tests/integration/targets/ios_bgp_address_family/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d6150da669c91be1f6470c7441e2bbac682c7b78c59eb2bccd837230b68e2d8", + "chksum_sha256": "4d452abe349d6f966fb7db5133c3039ff9ce202d6b98a16a157f405d7a6f1ce3", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8de2097894aadebd181dd7ae7d0f5dec4cb017ff95010899b37d3bcad6bd0860", + "chksum_sha256": "6a2278af99b3d7b657b496333d700467810c0298ddaa567040b56c173f473182", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37d322a0d70e5051c2f54be098c6cb7261c5cba19d030d69c87c9a25d05b3a2e", + "chksum_sha256": "e7aa25fcb776c99a3453c4929c00250575ca72bce253914a95fd21d769fb1f21", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "191fc3bbaf3d78756bb2ce23765cebb199b569f0f7b88689063d00ee049db9ec", + "chksum_sha256": "537c4819a15fc7842de8cad0e8b74745f2c5b57d98db904078c9d8316b71ba12", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53f65521e577ff3599a2a4d6e42bf504cf799976492d828573ca6239e9d41238", + "chksum_sha256": "f3c31ce095304e438dfe658c12a1f429d9ff8764217ab52bd3dba99e0dbb8e99", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_initial_vrf_setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5f19e8e25cc5e2704ded61eb61d7ee0095acc136e1380809cdf47f12d8bbf17", + "chksum_sha256": "f7bfcd11a8eba0c26e564d5b5600060584998da25484e8e92443c602067f72db", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_ospf_proc_setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3830de884a4d8a13874f4bb664a6dfe92240148a26f2414fd430051e40752b1f", + "chksum_sha256": "a4b82d41f2e4894c7d11e847a8e436b9e29fee5159acc72269f651697a7f62da", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef6bdcebaf77721c230b529ea6d8930afd19840ad644b09d7a9d9e8b08042a64", + "chksum_sha256": "d6cba5ef4746373c30e85d18fdf83be09ad50d9ee4c312a64422d34cb325e4a8", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49b157678ba5cc812ab3a5344bc492003e8cb6b1f849ae168b81f48ebba8ff83", + "chksum_sha256": "8dc8ef4a203fd9de24d4afe860f25acd653f1f3512c445be6aec069b6bf4b22a", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3aa08c205d7535bccd127dd4f2561e51a2ec026d151af29a27161cce05fc3fb", + "chksum_sha256": "46c2410786bf0f78b7645d8a6bf4dda5825d8949e13851505d83e30277257877", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9f8c4f20831746975e125b2813af5a924c6ec65692e3b373b62cca70e07bac7", + "chksum_sha256": "6447bcd80411c1d8f04d26582c2ab5dfef6ced7cd2be9a0681e609601bfe27e1", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "109f26ef884c25ffda307c25bf4180ebbb0c6a18b73e2509ade840be68f641c6", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8580c8328ba4d89ff30e52f044cc1c5c813a55e9234c9f722f655cc3f06fe56", + "chksum_sha256": "ed4186a91d1cb41e8d7d24196821f6a055801eba77fc72c59af07eabb43f25b4", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists", + "name": "tests/integration/targets/ios_bgp_address_family/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tasks", + "name": "tests/integration/targets/ios_bgp_address_family/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "af949d2e120137280e403535d60cb3485ba4baa88a48d465d066d2151defacff", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_bgp_address_family/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8fe724448a906aa2a584f11792118430e87edaab920e85f9f8042786edd08daa", + "name": "tests/integration/targets/ios_l2_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tasks/cli.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/meta", + "name": "tests/integration/targets/ios_l2_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/meta/main.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "c39e3586ef18b985c228717ae7eac1e306f5e77a15d450a24628cf72e2d7e0ab", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/defaults", + "name": "tests/integration/targets/ios_l2_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/defaults/main.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests", + "name": "tests/integration/targets/ios_l2_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db20920f776718e96e3c251c29423c0a28ac5000c6454f49943f65ac20fae7d8", + "chksum_sha256": "aa8e71b9953a2d70da7fac058ba031f21cfb5bfb71df81285552b5aedb16328b", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_populate_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "557b6eac4dd1d40678d52e9f59e84d8f9cddaf70a6be82787d43785fae35539a", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "05a8a3246332f26b13525220bfb3ae2df1369eafe66f255ee76dc5d7d801fbd8", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c4dfbbfd610bc72cc634465a0668fa3daabd76ab0771a293c38e366a32a6842", + "chksum_sha256": "ae60010ce6b859e677cd2fe0443293d0cbbfb6059f00416c2827998f8dba96c1", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93cc5c3bd91b11ab509b884e143d023a851d0046e2118d1fc2eb22ae074d2d58", + "chksum_sha256": "2df68349950dac68eddcf5f1560371ca7d58868b3d5c978bb2047ec1d37a908e", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_remove_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1baa1acb44f8c05b1081b7d2d49d7d679a694b1eef20d63cf8b7eb33df4a441d", + "chksum_sha256": "89eb56e9a96ba32ab65009fc09ebf8bbbeb74843839557a70f1c76c3ba2f2c58", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1842105d82cd689ea4cea57e9f151bca2e845204e00c78142b60cdac10b401f", + "chksum_sha256": "18a86eba9dd5b79bedad92815399beb362a10c96e402b18fc70884852a2c502e", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3718ece1e147c8f7a40932aeea280095591c481deeb46038cd3b070377d5f66f", + "chksum_sha256": "b04564f5e0e3b1f5527f25e60a42766131d47c8f14e5704c558156a2d901654c", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1", + "chksum_sha256": "e5c3d3a3d316de8d72b101a3200a8e81785710ef1f1386c0ea3dbf5da45eacda", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f1b300e29142c3cb1fa9e84e476577e0909a1f5e13c9f6bae1036eb2f021402f", + "chksum_sha256": "8b4e94db711765525756701212c456abfea84fb4c38cb4cd45c9010dbad93927", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97081ebf559f11a3701d87bc521f3d05be7a8a62a454d7f37194f651ccb053ab", + "chksum_sha256": "205a1557e675e86da5aa68c11e65648bc868852e81d2d483ffdacbd72e058181", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10d8202df57a09927329626e4b89a45038167e54d9e9fbc4c6c6ade64129fff5", + "chksum_sha256": "91412f73bc4b57376bf22ae459899b858383999655c2365958695393758ff1ae", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "92341a0e0de58ed85e0e12651de37e00217256797d83723f5bf31f5a62ed8b10", + "chksum_sha256": "094afbbdd9097ab670c41df21b081705791bd7efa1ff26a741ccd2f9a21ed2a5", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/vars", + "name": "tests/integration/targets/ios_l2_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/vars/main.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54b02bf40251a3fd868d5c54f4cfa4eab85e5990b956a037f336c6814eeb19ea", + "chksum_sha256": "0c72f070fd187ae7c13c368647de220f6b254ab856db38328f952f012461f480", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_l2_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tasks", + "name": "tests/integration/targets/ios_ntp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "daa688f229d7e8db61d23cc61ebc79ccff40a6e9af6de742f4cf5fde2fab74be", + "name": "tests/integration/targets/ios_ntp_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_ntp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/meta", + "name": "tests/integration/targets/ios_ntp_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/meta/main.yaml", + "name": "tests/integration/targets/ios_ntp_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "99f97d7709529ad5a370ef88ca759dd566abc45940443dbe28762778ab40c544", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/defaults", + "name": "tests/integration/targets/ios_ntp_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_ntp_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests", + "name": "tests/integration/targets/ios_ntp_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli", + "name": "tests/integration/targets/ios_ntp_global/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4ed4649e2c9b10b71a7ae63117d06ec134eae6b2182f26bb8b04eb911e609707", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "77cc14435d04e3f72f0ab9457713fca28de7a508c865c08df619ce999d7ace03", + "chksum_sha256": "b633b4d6ccef76001f6764713b498278bf30e1dd964673e556fab42166480786", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "030195c5574fcaa46ade5d2d9f640d1b1668c41025f0c78032cdebd9ebc4ef86", + "chksum_sha256": "8cc9ea8d4a47459ec32d942855702c789ba3347e0693f57313003f45020d8a7a", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c065775b6484b284e03beb65d1e250361c09fa4fc20e5006058f69e7c4eebc5", + "chksum_sha256": "9080f77ada9c677a1f4f275d42ed6bb0123286aa0ce5462bd2c580f47dda0d07", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3ccde47cab8fd1f7d6eb91c8a1744831097c27bebbf655e15d71fd2456db7f2", + "chksum_sha256": "a6b0345d271e15e951a9a150a43aa0906c3c91a5290b27ae942ab9ece89cbeb4", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ce15cb1c54d6ba216f276f2622dca7eddceeda339ae1b775c4e82ed0eca5ae6", + "chksum_sha256": "d80307c7fbf6fc328ebf0395601768f230c08d052cba3e459e4b1755635a2a21", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d2a2840acaf208fa439d00dd3be862789bb3e249ca568c9e3a0f958ce4c92987", + "chksum_sha256": "e350806f21caa0181d510feb9cb4e70185286e62aa3b52719b59d55172f2126a", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74906256718324f2c376a9dcb3be7bbadb2487067b1617e6d90c16f0a109cfcd", + "chksum_sha256": "2b3bef8e48a4ebef6e417c5e919751cd9bd526308fdacd16395203eb4feb9f82", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a8e64e20ebea7d3a898216c6e256a3c0dccfcfb68a0671e3bf160e1f6c1b935", + "chksum_sha256": "bcff8a20978c31e6c69a155803657b695a5f65a32c494c6d83d65d008e8020d6", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ecda90386ebc75e0cb6e8a820a5c4bf172d4ca7bd4dbe399a4733aa6c08d07e", + "chksum_sha256": "306dedea01d094347dc69f10f2e68ed7787372ed087fa1c5ee2d5953a8767016", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bfc3c984e0da8a8065696a6a4801d945bfaed1f84146f7c3c9745ba4468d0e1d", + "chksum_sha256": "d9b1ee000ffc164233351430bc0f5f3c9d3a336fd09ef670bfa40a7e2eebafc3", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ade890c5c428f4f2ada261b01e89f9149d27d8add293430df56161249cf0f6b2", + "chksum_sha256": "f41a107502fd7e4be2baf717aafa72bbafc34125fa229ec2e123f7dd7225176e", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/vars", + "name": "tests/integration/targets/ios_ntp_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_ntp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4e225d3253a22e2f0eba465f6fff8324396a02ace3d628e848b7a909af026064", + "chksum_sha256": "7fc06936d093493791466cc5b227ef05b6a0175615a5ce00453f6effb74f9532", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_ntp_global/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tasks", + "name": "tests/integration/targets/ios_ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d8347b048452c2aaf4b7f2315982f603d6955161adbd96ae61527b9fc9b4fcd2", + "name": "tests/integration/targets/ios_ospfv2/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tasks/cli.yaml", + "name": "tests/integration/targets/ios_ospfv2/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/meta", + "name": "tests/integration/targets/ios_ospfv2/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/meta/main.yaml", + "name": "tests/integration/targets/ios_ospfv2/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "8649ac5af985e516bc0be12ea860f9ada7a4454ab14ecf2d056dc16565a95e55", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/defaults", + "name": "tests/integration/targets/ios_ospfv2/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/defaults/main.yaml", + "name": "tests/integration/targets/ios_ospfv2/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests", + "name": "tests/integration/targets/ios_ospfv2/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli", + "name": "tests/integration/targets/ios_ospfv2/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f87546f50552f4a1138c7e95bdabd94215875db8393b6b709fac6727aaf5ad34", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8216a30d2b32742967f308a76000f8399ecd0578dd3117815dbb787313fec7bb", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "67a19cc6b13772b6ef2c936eb3557dd877975467984a5d0532d83c6bd0c1a3c8", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5495fe14050f0ab0b992284137587d261bb57260ba22d2570f2e180b52fa644a", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "676cecaa97263ace6d06824911abc2333a5ed828c5309a4333652f820ad1b28e", + "chksum_sha256": "e36682d7d591a6ebd1311a1b34bfbeb402c35f98f14f9d9521a9839f1a5fc081", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fa62f56bdeb326038faf1749f87ace988044890f29ab9c65865c4c54537a9517", + "chksum_sha256": "e1995543982bd7f2a4aee73e5a9fce445b21af1d6ffb5f410d34b372dcd904ae", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d38b25ae4e94caa126b9d4f02ffabb4adc05c8c73a3b58b0ae9ae4622ac28b4", + "chksum_sha256": "3c2988c367bd38b6fc431b3184c661086ae4bab311882e80c941cae6db04344c", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "823669670f811bb65eb885121e0081a4072bcb061616296e3898a2f6ade10672", + "chksum_sha256": "8554a710fa447dcbe0f7f0097a0f81b7129deecd19b5f4f6caafaf80bef690f8", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4ad1680c84aa5f112a608b29bdf2d1191092b3ad2648bb23ed9e30abe4cac8e", + "chksum_sha256": "b2013ced0c8268e36db6925558607e68fddb5887092aa3d520a2b6e1318fc7fb", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/_initial_vrf_setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "511dd52c567ab5523749431d68ff8477640d6163210157e3a369ecb806e22ee9", + "chksum_sha256": "c35a0a936bc8f7a82cefc3c831cfed82f738026c5b5cf5832c06ed42f7098309", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/aliases", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp_global/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "030a148d0e9b7d4e89581f3b82aeb06ce828a2a494fcebecac6a99a5fd9be893", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/vars/main.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ec7b6b36ce360d258939c3b6b1e6679713dd2ffacd4bf6565d5c1b5391179dd", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "fcfa39efe63ec56350bd75b0b4ded134aa99c4f1a810039fcf0744eed952a0fd", "format": 1 }, - { - "name": "tests/integration/targets/ios_config/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + { + "name": "tests/integration/targets/ios_ospfv2/tests/cli/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be91779003c353db09835a7ade40aa7e16311e93c3a111335d4caea13b27c3a4", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tasks/main.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7011b000e1a4b28787b459b2a05c625052f68b10a1f108068ec805bb7a0875f4", + "chksum_sha256": "be6663b98bbde670ccf5f4c019cc50bcf3461c7f1df79d59206e0dec1f9c87de", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tasks/cli.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "100c25aa8e342471c45f4ced56d10739c8a7f50ffaf83531800819f0911615ac", + "chksum_sha256": "71aad36583afacee1f2d50726b8a99cffc3e17566f1297f8c06cda6cdb9483c5", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tasks/cli_config.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f583eec9d6129fbfe6d2b800c2013f2dff80308e21b59c9da1fa7382b6a401d", + "chksum_sha256": "c2c2d35e0efc547f71effa33a8e7de17a8c8447b28d79a00d0ad56fe4a29d130", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tasks/redirection.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c45a3649d432bb34bfcde5f3557848f294212fdd78da9b1c0f9b98176f462ce", + "chksum_sha256": "3e11b9f26e0eb1e022969d8091b88bd0c02cb8e4e12649c63d2f526009bd6ec7", "format": 1 }, { - "name": "tests/integration/targets/ios_config/meta", + "name": "tests/integration/targets/ios_ospfv2/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/meta/main.yml", + "name": "tests/integration/targets/ios_ospfv2/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_config/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "bf9e0e41402b83f7506fedba9515bd73a0fef00d77e63f09f9b2eda0ee5c3754", "format": 1 }, { - "name": "tests/integration/targets/ios_config/defaults/main.yaml", + "name": "tests/integration/targets/ios_ospfv2/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests", + "name": "tests/integration/targets/ios_lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli", + "name": "tests/integration/targets/ios_lldp_global/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/toplevel_before.yaml", + "name": "tests/integration/targets/ios_lldp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "289b05fea7a7180ab37fb5e04220fa7c387634fbfe67e997d39ea44e53b6b03d", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/toplevel_after.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c80fc079cc0294cc808809f7524cd26dce8746cb3cbceccae5947c26a53bba77", + "name": "tests/integration/targets/ios_lldp_global/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/replace_config.yaml", + "name": "tests/integration/targets/ios_lldp_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7cbde273238be56ec3dc2174913de0c2933067aa634987a04dd7fb72fefeac3f", + "chksum_sha256": "1ec7b6b36ce360d258939c3b6b1e6679713dd2ffacd4bf6565d5c1b5391179dd", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/diff.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c4223635f760bffc17141049ab0cb3e09c3e9b2a53398754c740569c1244a548", + "name": "tests/integration/targets/ios_lldp_global/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict.yaml", + "name": "tests/integration/targets/ios_lldp_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce6faa181c1fb7ab5ba44db51d418b0120a7d110a3f4373e91ce02987a76fefa", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/src_match_none.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lldp_global/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lldp_global/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b6ae94a3a40d6baa6400753b0273af9e1f0c693c0b9d02a216b4d16c9afad67", + "chksum_sha256": "a4ad1680c84aa5f112a608b29bdf2d1191092b3ad2648bb23ed9e30abe4cac8e", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/sublevel_block.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91c95c35263639fde90b44f93f0612c0a7b3c510f325285afe281d9fc121e58b", + "chksum_sha256": "7d38b25ae4e94caa126b9d4f02ffabb4adc05c8c73a3b58b0ae9ae4622ac28b4", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/toplevel_nonidempotent.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25ef9f513a03aa86771b90bd0d22940459f94fa3b2257ae7498b9217a405bb9a", + "chksum_sha256": "511dd52c567ab5523749431d68ff8477640d6163210157e3a369ecb806e22ee9", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/toplevel.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f45a6bb9f23763b221df958302548d88734cedb25ee2edc0fe1ec86be00b4e8b", + "chksum_sha256": "67a19cc6b13772b6ef2c936eb3557dd877975467984a5d0532d83c6bd0c1a3c8", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict_mul_parents.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca18a9f33f955ba25c6df6be5108b58cb0b159406b531931d7886b65ec1a0316", + "chksum_sha256": "5495fe14050f0ab0b992284137587d261bb57260ba22d2570f2e180b52fa644a", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/sublevel_exact.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ff88256789e8892cc5604826818b4a694faa8dd37d8de6f37a06535724dedd2", + "chksum_sha256": "fa62f56bdeb326038faf1749f87ace988044890f29ab9c65865c4c54537a9517", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/src_basic.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2544e95d1ed36fd4c73cad6dd719051035205bfd414ef4d6bbb73fe7e592b981", + "chksum_sha256": "8216a30d2b32742967f308a76000f8399ecd0578dd3117815dbb787313fec7bb", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/defaults.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f299c02b02d7c454dd2eaa7eca83f4306f99b64430892077955f5159b3009031", + "chksum_sha256": "f87546f50552f4a1138c7e95bdabd94215875db8393b6b709fac6727aaf5ad34", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/macro.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c50af815c1122d68ec8aa76f0738a923e3100ffbdce96ec9f6eeda091001ff12", + "chksum_sha256": "676cecaa97263ace6d06824911abc2333a5ed828c5309a4333652f820ad1b28e", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/backup.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e567e119083aae3e8dd3739d64db3927cb554387079640fbff99b1d6b79f267e", + "chksum_sha256": "823669670f811bb65eb885121e0081a4072bcb061616296e3898a2f6ade10672", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/src_invalid.yaml", + "name": "tests/integration/targets/ios_lldp_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lldp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e37382eede72ae657893c3933a8e6731db78596f46d5fede249d4d050e8f12b6", + "chksum_sha256": "d8347b048452c2aaf4b7f2315982f603d6955161adbd96ae61527b9fc9b4fcd2", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/save.yaml", + "name": "tests/integration/targets/ios_lldp_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2fbcbac7be1a2444b9866a0312ebd7f30691de74f434b693b301e1b667efbc34", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/sublevel.yaml", + "name": "tests/integration/targets/ios_lldp_global/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81e93d0c4240f0c189dcc3db9d2887404f6f79ccc22a7ae9d8c2c616a823ae23", + "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/redirection", + "name": "tests/integration/targets/ios_ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/redirection/shortname.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a9d8f38448bbc15b4db9520e986758afbb1e4332917cfa4e676c4726ecb1324c", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_config/tests/cli_config", + "name": "tests/integration/targets/ios_ospf_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli_config/cli_exact_match.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3445b7155b0702ea632d8e846e514af4e58679edf35a1b00034c1f33611c7bcb", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli_config/cli_strict_match.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "faee234111770cb64085b9a25509c53fbd3fcc6d783bebff7592a0cf5ee4e317", + "name": "tests/integration/targets/ios_ospf_interfaces/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli_config/cli_backup.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c6e65aa217139078a0e172b54fc00eb2cfe51f2079cb7d9b0a5d9c5d2a74ca6", + "chksum_sha256": "d904ba1b1ee67876b5c1db5e8a2c063c500c99af83e05fd36d7584745f906957", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli_config/cli_block_replace.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b9b16a4833c6d7626d43f1c1e90a106af469adc1f3a032875e78e13c6b563e5f", + "name": "tests/integration/targets/ios_ospf_interfaces/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli_config/cli_basic.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "28f51d7f60e5fcd45a211c50797cc4142a3e4784cf8619ed41eadf1a630e4629", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates", + "name": "tests/integration/targets/ios_ospf_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/setupblock.j2", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7e470728246324f9d35d7d1f36e53f10a1d424cb9b14aea8ebd22ae03384985", + "chksum_sha256": "ff7d15cb956c6a22c1687aee06920653392f08ff0e53223afbab89ad7c7c98a9", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/configstrict1.j2", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", + "chksum_sha256": "e822477d57a3e430f8e379be1528039e6e4ee5eff278141cdc2c3f5c4ea4ad1b", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/setupexact.j2", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182", + "chksum_sha256": "f097e25e0459371162a4d0d2b645ae9ca361ad5d7fce778cab8793d7bcd2f433", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/setupstrict.j2", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182", + "chksum_sha256": "4395e95e40e7a0dfcf80e05ade1c443c37cfe70fe80fc4fdcfc0ee48ca7bca7b", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/acl_config.j2", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "819000cad7a1b4e27b8b206fe04b2d18c0bbba7876801d9f2786c94f76482050", + "chksum_sha256": "fd72a9b920445f668d61b31646621e0f9587851e61eaaa071f8034468e3fab43", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/macro.j2", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_initial_ipv6_setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "240ea6bffb5f8140b8fb61c0e4505e89f76ea5c0ade1103b63b25c6024e57892", + "chksum_sha256": "8a2472a61a85371edf42157eb38de6446a90882922de4471337054194b698dff", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/intended_running_config", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c8e4ffd5cb273c2c92fe0690fce9249386fbd72ac0e77872e8fa2cb1c256138", + "chksum_sha256": "adda4ccbcef419623366dff6fd814799b732583587c8b71b9a49638079cf4c7d", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/base_running_config", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7385f5112a2ea15a4ca3f480bf6830bf91439a67073d846367170819b02692c6", + "chksum_sha256": "338693405501e01ca57d2ddeb40f482891c029a986864fc98946fc266265bf13", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/configblock.j2", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", + "chksum_sha256": "c6645517abeb9ff0bea3331bc844b12c1382b0eea4178be0dfa523a3a38c5a97", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/configexact1.j2", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a112244df64f4360549463724af9ae4c598c3f39c22310a4d0a98c44cf034408", + "chksum_sha256": "3d05e7ad3cd69bd4b423def7c76b0200ec3daff4ce28f945cf1b53a001c52d95", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/configexact2.j2", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", + "chksum_sha256": "7ef2eb2c6dd20e38ac7f6058ced2a4902a838cfb902e8a32e33fc83bc8ffca5a", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/config.j2", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fed860520ec0b19850744af6be1c77939335d4a09539bf563d0c15aa6afc84ef", + "chksum_sha256": "843a2bd9f2693a11e665a5f552e9de54fcc379ca3e06ee80ba2530f9077acede", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/defaults", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c0c23c50849c89a60cce7588ee594c9f12fc89ae710516e3371d9cdf23bbdfbc", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospf_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/defaults/config.j2", + "name": "tests/integration/targets/ios_ospf_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0", + "chksum_sha256": "3ca85e538cabf8bda1ebd32dee2b5803e8e171ce955d7affe2f1417283cd92d6", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global", + "name": "tests/integration/targets/ios_ospf_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tasks", + "name": "tests/integration/targets/ios_lag_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3c1978dc1393f0ddade54f4568fbe2a213f323e71e9aa334266bad4fd016ea95", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_bgp_global/tasks/cli.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/meta", + "name": "tests/integration/targets/ios_lag_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/meta/main.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "7548cef68905ad34af6e5c02e932c61e8eadc317b15831fca6346a128b89f7bb", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/defaults", + "name": "tests/integration/targets/ios_lag_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/defaults/main.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests", + "name": "tests/integration/targets/ios_lag_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c6b76253c2d8e53a0df8c1f620ad1b90d537912cb81877fff08d39689a1537f", + "chksum_sha256": "523ce08d67e26a55d5ae1004bdf73f5f785348437c918d98179f5bb01e403839", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c08349fdc001cdd463151f85c7bf4a5973c2dff048f27ef2ced9c769535edfc", + "chksum_sha256": "af7be4e062acefec5cf61c6cc7ad3cb369db2b641ae00f229621ee62a47fe90e", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "22e70effcb2a1b4e95a65356aeb5851b46cc61d518aa81ce133b7934eb8c6d83", + "chksum_sha256": "0ce0f4b8f4ff19ca8202594612bfff8bbe94ce65867e3db6e3e9bde4354c4c16", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6479de2654937093427d57930e46c699ad3265ee6f67624b7414d03cd9888eb", + "chksum_sha256": "4a3bf0d0d675271115fbfcb01d220b647d351ba511dff0d16d9f8d7468ce8ac6", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cca6983e388a8e06b3b72325026c23d5794b130d45a74adb6d2156525ff8335d", + "chksum_sha256": "41fc0f1077783f0157b1bdae02da05009bd55cf31cfffdce93f25490569c7eaa", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_port_channel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5cbe172d53fbd26d8dc675b06a513f8e815008c6f263c8bfae14600cef46f964", + "chksum_sha256": "18e91e2791fb6dd738d3042718436ae3244dbd0a90b5f1886ed5a5daf1d46ceb", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87c9833d471a6b80a6c2cd0a14d29ef5b983fe7d8e9e61e6f43a8c0e1e8a89f6", + "chksum_sha256": "c30f577272b1c7bdc04fc0cf9a016b5c004a93f0e7d09cdb4bca3fa5aafeea8e", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac9b0f35b9607c4dcd6ee6fe8c4c5a3a890eb3ffef2606e5d9935648df7d5b7e", + "chksum_sha256": "9ae384d2d361bfec3e5ec8d4521923a328fd0a6b06ee0fad2dc813650f4867af", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cfa79d338f05e3971ce8a30e951a60e8a3898786fecbf125898bfc20275377a4", + "chksum_sha256": "d11cd0691705a44a06275d2438229562d70cb6eeafdfd7823c306fae55ab7974", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_add_port_channels.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b28f32004005582bc80fbc2a9c8db6728687c25d87f74a365e61e7a20ec853d5", + "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/purged.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "440e31a2f87615c703a8a25d436bebf5e076b729ab0316294b1aea01585fb9ae", + "chksum_sha256": "dae7f6e33417854fdb686dc22ab25acf7ccd05b1cd088087f4b6777012ecd7c4", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75c019721cd809896e681cc3826abf70eb2a7d0616bc09817577e99c02ef7070", + "chksum_sha256": "a9ef52fd6e4d52c3bdf173bf2d2c13f4ad7515dfd508f93e70d00f951cebc8d5", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "59d406ceef4165fcae86490c8251a719575a113ebe80cce578c1e4b67c974225", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/vars/main.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9748f49b5ce9a99a9ebc47bf062708794d4c7cc7ca1fa2f887b8220f2f45bc52", + "chksum_sha256": "45de9b52c7ab6864f1abd09fe743ffafdc10eb084285f98755c9ec21137e9bb0", "format": 1 }, { - "name": "tests/integration/targets/ios_command", + "name": "tests/integration/targets/ios_lag_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/tasks", + "name": "tests/integration/targets/ios_lag_interfaces/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "79c7a4587c7a00a2c7a91a5eab3b092671c730ab0c82458102614e087ae32030", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lag_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cbea343b9422e831a52eac293e12796cebaba8432a2a7c3ea24f3d7cfde98a01", + "name": "tests/integration/targets/ios_prefix_lists/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/tasks/cli.yaml", + "name": "tests/integration/targets/ios_prefix_lists/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_command/meta", + "name": "tests/integration/targets/ios_prefix_lists/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/meta/main.yml", + "name": "tests/integration/targets/ios_prefix_lists/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "54b02bf40251a3fd868d5c54f4cfa4eab85e5990b956a037f336c6814eeb19ea", "format": 1 }, { - "name": "tests/integration/targets/ios_command/defaults", + "name": "tests/integration/targets/ios_prefix_lists/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/defaults/main.yaml", + "name": "tests/integration/targets/ios_prefix_lists/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests", + "name": "tests/integration/targets/ios_prefix_lists/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/invalid.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5de37d3a4e9c0a0deb381515d7aad38814e2573570881499c2f37d01c33148", + "chksum_sha256": "10d8202df57a09927329626e4b89a45038167e54d9e9fbc4c6c6ade64129fff5", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/contains.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac41c0332715a477675065b303c059029f452524c9613bfa6837221b3c8a4748", + "chksum_sha256": "f1b300e29142c3cb1fa9e84e476577e0909a1f5e13c9f6bae1036eb2f021402f", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/bad_operator.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "114c1244968981a22617d661fe4e9de4734037af8970bce9b0c5b79102f8ae6e", + "chksum_sha256": "92341a0e0de58ed85e0e12651de37e00217256797d83723f5bf31f5a62ed8b10", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/error_regex.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d8673ef0e332533bc520e1fc69282244014b33fe4fd67c9df97fb0c45389b35", + "chksum_sha256": "93cc5c3bd91b11ab509b884e143d023a851d0046e2118d1fc2eb22ae074d2d58", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/output.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "90067084bae011b7afc19fc1569700cf0007d29ae86d423be0111fbdb7d9bf8d", + "chksum_sha256": "1baa1acb44f8c05b1081b7d2d49d7d679a694b1eef20d63cf8b7eb33df4a441d", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/timeout.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99999a86b0c912cd067669a525d1e0032db4e19aac5fedec7593bfc8868ae37b", + "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/cli_command.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "765a06846e98c1bc59b769855ba3c28f6ed2b7f8301b1aef0b8f0a9a4aef4863", + "chksum_sha256": "0c4dfbbfd610bc72cc634465a0668fa3daabd76ab0771a293c38e366a32a6842", "format": 1 }, { - "name": "tests/integration/targets/ios_ping", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "db20920f776718e96e3c251c29423c0a28ac5000c6454f49943f65ac20fae7d8", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3718ece1e147c8f7a40932aeea280095591c481deeb46038cd3b070377d5f66f", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c1842105d82cd689ea4cea57e9f151bca2e845204e00c78142b60cdac10b401f", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "97081ebf559f11a3701d87bc521f3d05be7a8a62a454d7f37194f651ccb053ab", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_prefix_lists/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tasks", + "name": "tests/integration/targets/ios_prefix_lists/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8fe724448a906aa2a584f11792118430e87edaab920e85f9f8042786edd08daa", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_prefix_lists/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_cliconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d4fb9eae8dce0d7933579bdf2d3f8795995a4058621bb90be902cecbb7fda0da", + "name": "tests/integration/targets/ios_cliconf/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tasks/cli.yaml", + "name": "tests/integration/targets/ios_cliconf/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_ping/meta", + "name": "tests/integration/targets/ios_cliconf/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ping/meta/main.yaml", + "name": "tests/integration/targets/ios_cliconf/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "3de9b3530a2bce1c236f2ddc4b95f4282226d88b6212be4d1ff1fbc85d5c131f", "format": 1 }, { - "name": "tests/integration/targets/ios_ping/defaults", + "name": "tests/integration/targets/ios_cliconf/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ping/defaults/main.yaml", + "name": "tests/integration/targets/ios_cliconf/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tests", + "name": "tests/integration/targets/ios_cliconf/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tests/cli", + "name": "tests/integration/targets/ios_cliconf/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tests/cli/ping.yaml", + "name": "tests/integration/targets/ios_cliconf/tests/common/commit_conf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "beb45b19b88ea64c61e0d67d7769275c18e3c12a0c572bea86d171bada913956", + "chksum_sha256": "86cde52806aad9c78253ffdb74022af60cb99ff51c80e04adbbfde1af72254cd", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_cliconf/tests/common/_test_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c48a21095f6edaea997c25042855b8628c0ca7181366ee8488069286ab350873", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_cliconf/tests/common/_enable_archiving.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "63ff50f1f1f57a709881dd26a33223c2316775239e9fc21dfeff23adbaea7ebc", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_cliconf/tests/common/_cleanup.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5386a829c04704371984f8ce25e2c63213c131dd62775410cb26568d37e923a6", "format": 1 }, { @@ -9150,1228 +8807,1249 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/meta", + "name": "tests/sanity", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/meta/main.yml", + "name": "tests/sanity/ignore-2.15.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_cliconf/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/defaults/main.yml", + "name": "tests/sanity/ignore-2.14.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_cliconf/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_cliconf/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tests/common/_test_config.yaml", + "name": "tests/sanity/ignore-2.18.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c48a21095f6edaea997c25042855b8628c0ca7181366ee8488069286ab350873", + "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tests/common/_enable_archiving.yaml", + "name": "tests/sanity/ignore-2.17.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "63ff50f1f1f57a709881dd26a33223c2316775239e9fc21dfeff23adbaea7ebc", + "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tests/common/commit_conf.yaml", + "name": "tests/sanity/ignore-2.16.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86cde52806aad9c78253ffdb74022af60cb99ff51c80e04adbbfde1af72254cd", + "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tests/common/_cleanup.yaml", + "name": "tests/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5386a829c04704371984f8ce25e2c63213c131dd62775410cb26568d37e923a6", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_cliconf/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/vars/main.yaml", + "name": "tests/config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3de9b3530a2bce1c236f2ddc4b95f4282226d88b6212be4d1ff1fbc85d5c131f", + "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg", + "name": "tests/unit", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/tasks", + "name": "tests/unit/mock", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/tasks/main.yaml", + "name": "tests/unit/mock/loader.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8171ce9eb1bd2474dcb5e0f86eeb142567bac349514708f53c24829283fd382e", + "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/tasks/cli.yaml", + "name": "tests/unit/mock/yaml_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "fa89194ba60856f51500efdd1f802c5ca3b2e4ded9461d7b88847c427a43a958", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/mock/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/meta/main.yaml", + "name": "tests/unit/mock/vault_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/mock/procenv.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3ff983479d7aa4b90efe73337f723c14224edabcdfde4efe49f24cd905f45f1a", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/defaults/main.yaml", + "name": "tests/unit/mock/path.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "110552d5ab0ffabe2bc6b6c57e9f389be3920da2e0f37ea5b628795d1b426bfd", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/tests", + "name": "tests/unit/plugins", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/tests/cli/basic.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "01543795b9d0559974aa6eb2e501541a442c6d8a61361ab6ce30eb7d7a0610e3", + "name": "tests/unit/plugins/cliconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces", + "name": "tests/unit/plugins/cliconf/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tasks", + "name": "tests/unit/plugins/cliconf/fixtures/nos", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tasks/main.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/nos/show_running-config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42f682d0706bde5cedd3667110b289d169b29ca20a1692b85c51bbe5f1e3131e", + "chksum_sha256": "42f2e50d84821d1ce5c9ddfa082e7a6086254ef9908166a0d4523a3dc5b6b2df", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tasks/cli.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/nos/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/cliconf/fixtures/nos/show_version", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a21600440d1fbd2208fd81eeeaa632cfdf6b69c060bcff46e5a3f4a5f5c26f68", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/defaults/main.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/nos/show_chassis", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "a2890b7a8db9c1e8954a186fa311c8a2b44477b1d04bff9c32bf75b7797b4533", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/cliconf/fixtures/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli", + "name": "tests/unit/plugins/cliconf/fixtures/slxos", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_running-config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "337f2c06ea2b0c31adfc06bd0684edb480b1a333dc4d82fd36e74e6efad7d6ba", + "chksum_sha256": "d1a135373ce559af818475189bbfc8ff838f5891869b62e159e38ac4c30b3284", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/deleted.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/slxos/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6b15190694a3230175825f662ffc5be36c207a5508f8dd03e34d0f16dba801c3", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/gathered.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_version", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5bb10615fc266a5079e9adaf3307602bdefac54f4e8c9fda96954eb59ddc1485", + "chksum_sha256": "e18e1a4f1640ca226a2f0d067a422af58218fa7f191a8b71394432a56177c7fd", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/empty_config.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_chassis", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "200cc72937b5aab4388efc5e85b4f590dfae9bbbfd9668c2c8390d42c73cb1a3", + "chksum_sha256": "1ab5008e1e19a8b1995b8c284856ae37ae5d242975b81057a3f0127fafa0f7a2", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_add_port_channels.yml", + "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_startup-config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa", + "chksum_sha256": "d1a135373ce559af818475189bbfc8ff838f5891869b62e159e38ac4c30b3284", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rtt.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3de8041d6d7c288d7f421fc629c2bbcfd5b1faf29d3785fb1f8c39b6b5f36775", + "name": "tests/unit/plugins/cliconf/fixtures/ios", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/merged.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/ios/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a4d9930854480ec68685dfce6a5ca53170d519fa93b8b10ff89d84c2fef906d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/overridden.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/ios/show_version", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83acc10766bff99eaf1085cfc2fab4b54e4101edfc70d06c19f65eb5f90f0478", + "chksum_sha256": "28896cfd7a101f137f8433db1efdb33343aa43425aaedc2d4f7eebec7e71204d", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_parsed.cfg", + "name": "tests/unit/plugins/cliconf/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05d13aca3673ed53547e84c3a96b852f6c6b21e31b250ccae1a3c9dc8a455415", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/unit/plugins/cliconf/test_ios.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac8361b624da0372fb79c80bd147c5b9bfed4d4140d0be7fe9957b75e414c61b", + "chksum_sha256": "976f42e2eb2d4bc2ca64724d7361549f46d0d1b56ed30a988a39b22d928c886e", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6fd2582bf431113cefd8a863baf6d1b6908f5cd142dccde32ef536feb29d0702", + "name": "tests/unit/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/parsed.yaml", + "name": "tests/unit/modules/conftest.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc43ad13fcf0465249c1941a418f61f36fba08a55afaef2aa8a7949ed028a7fe", + "chksum_sha256": "354440d86f684a9641f329807a687fe71fc66ab901207f7a166ecfa648935488", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rendered.yaml", + "name": "tests/unit/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e87a35985502b9c92eb9c60ed83fdefcc11a17e26b421e067dcf7be3624c8503", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/vars", + "name": "tests/unit/modules/network", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/vars/main.yaml", + "name": "tests/unit/modules/network/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "866d49b9fb83bafefee3c2ed7ba79d894e2b28af83b4fed56ad48982c364a894", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp", + "name": "tests/unit/modules/network/ios", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/test_ios_lacp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8c4a18f73cdb869f9b4951700395f4fc97dd6d7849222c22ec9568fa65f0c2a2", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/tasks/main.yaml", + "name": "tests/unit/modules/network/ios/test_ios_evpn_evi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea10fd1166a91f0a0c747a5be6a85f313c52f5f3d9f33cdc68e9424f3cc56a42", + "chksum_sha256": "8f30fe112c1b85b2b857971b8327404c2ecbc86a164181203d4361f642e54b3e", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/tasks/cli.yaml", + "name": "tests/unit/modules/network/ios/test_ios_hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "47fda50478f19ef45ac929d8622ed877fa426bf5cf25d3184261a8c0f3898ef1", + "format": 1 + }, + { + "name": "tests/unit/modules/network/ios/test_ios_service.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cdb28578a9734cdaa4aa74d2418a41f03960d462e068f8b0c9e4c69d9805a805", + "format": 1 + }, + { + "name": "tests/unit/modules/network/ios/test_ios_lag_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7724ac0aadb681867d7356a4ee4f4d141f4189731a5dc01d72e751f500f9e9d7", + "format": 1 + }, + { + "name": "tests/unit/modules/network/ios/test_ios_lldp_inteface.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0fb33dee7e350597f8b9a6891467929a616cec88859af63feae411a69c237ca0", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/meta", + "name": "tests/unit/modules/network/ios/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/meta/main.yml", + "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_repeat_2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4962134fb2b2230a111b5b94f904ba094c12d0e0775e22c50b3db6599dbfcb36", + "format": 1 + }, + { + "name": "tests/unit/modules/network/ios/fixtures/ios_vlans_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9e3b415848259747054d6586d9a85787a48f2a5d3fd5866c41f8b050eadfae90", + "format": 1 + }, + { + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_memory_statistics", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "38375b22d4c94dad4289ad32a3360980e0e8f30d69c4a0c2ab1d8181d4fb811b", + "format": 1 + }, + { + "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv2.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "f557ec41733d7040f5585b79e18b88623ace43d899ac80edc055e01c469240c1", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_switch_virtual", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "db1b7ead274089538a05952a47f1e7800560ca1a552adc345c34dc2ab4c4f9de", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/defaults/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/configure_terminal", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_vrf_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9ee43d746654712aed9c1163d6130a7b6de350a3efef3e6e228355378b20be50", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_l3_interfaces.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2836ef546936bc7b3ff57cd557f54d5c5024ecbf64451cbb4f0d9c937cdb71c6", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_config_src.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11d03d940194a739c19346b9e626e425de69706b572ff7a178b90cc21a6f36d0", + "chksum_sha256": "57d42d2e8e8b7a4b6cae566115ee42fecea077b525cace10cefc3b7dbd85f033", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_cdp", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5abf76b46295216c079870fba8c70f8f6064ccd667e80d91e31b47ab84f6fd70", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_vlan_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "73a0c5b62bea4279d25deae4c2e04bf12c53fc3784297675a92eb98c911696fc", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tasks/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_ntp_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ee4493aa601f74dca37f18dfebff80578f8ad47283d1921825a9036bae468ad", + "chksum_sha256": "2dc4f5c356e2ba9f40ec1ad94b5bc4e597c39657662156764465f156ab6cd7cd", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tasks/cli.yaml", + "name": "tests/unit/modules/network/ios/fixtures/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_banner_show_banner.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fcbd9e21fbc41c072eed699ebf08ba9fc0e86b9084e4e54eb701cc12d4c764d0", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/meta/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/show_version", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "dc71e5e1dc8e16c64ad26477c7b0dc0d0278a20be9dc4a6d53224328f239f79b", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_size_1400", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "825819c8953b25588aadeb8264ebc23a52d06537049b7e3f4f0b9edfda1b7e45", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/defaults/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_inventory", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "695c97917cde02fca97d816d92429a12142d6400180388630847a6938513829f", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv3.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b45b7eafd03c14cb0a9737561ddd60b86b708aabe1223697376c56066fabb29c", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_cdp_neighbors_detail", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6e29939eafbbdcd5d64d8558cf6f5fe9d7fa1b806e62b5f19b65b0401c9c9c44", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/_remove_config.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_system_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "238918c44b8752332fe7ee6df2e293a51da17252fdf2362b337e6a897cc224cc", + "chksum_sha256": "ecb0f88d690961592ffec4c1dbeebb4b6883ed2fee08fd60117a3b7937b37949", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/deleted.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_logging_global.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "844b1f73132324bcee3f3390fce22388df69b69e4266ffebbdd4c5d6a8a4c2e8", + "chksum_sha256": "89a3006dad756d356d14bf9704c493b1ebac4267dca6344c6af536d53dd1bbf4", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/gathered.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_l2_interfaces.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "72297b557d1b34d29b999d26e00a0b28d813fd1e458338acd1cd3b24b0a35aab", + "chksum_sha256": "743adf2fb8dcad62933e91c19b47b2b0437868c7e50db9a4e556431ed696f2f5", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/empty_config.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_dir", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2bfc27b217fab25508ee8dedb4819c40bdb98b3352c464065f8ef169622f4384", + "chksum_sha256": "bf4241a7402fd70614b668b90da04f80c7430f8f4535a1eb0a40e989a1d9d48b", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/_initial_vrf_setup.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_config_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fb8dc743143aa6677f024b7333e02bb1f52f1a9c434cd86e1617b442dcc8a0b", + "chksum_sha256": "6fe81e446733fef4e3643a80042ab4111b9b0c927599c4b5972ecea4c18b4ffd", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/rtt.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_processes_cpu", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a735801dc4fc0769f2773722caa333ada8c5c41daad731c271c185ff1d6a040", + "chksum_sha256": "e8edd6276089ec830cb2978305dcff0f77cbe3a39f393eb0969c671a981d8d89", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/merged.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_version", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c70156e646606c78e8221d3f09140d0be29bfc307756e6f0993b02b78b8fe9e9", + "chksum_sha256": "a6290b0be0cd8622c90617eace7c4c8bb1508a77d33c2b0e7bb9d6f7f8967282", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/overridden.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ipv6_interface", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8f73d52be036135d76b6157719db5f9bd4f7761ebeae5618e48a339ed14ae4e", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/_parsed.cfg", + "name": "tests/unit/modules/network/ios/fixtures/ios_route_maps.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75178f12ee6688bc6635aafb6d83adddbed9b5a0d12fb9d39c819afa14adba64", + "chksum_sha256": "a2764456add35e41e5109cefb0694cd6a708bcf77239259b47ed60d86fa06856", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/_populate_config.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_banner_show_running_config_ios12.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d825c44ce8c9cec4e8b41ce23a867b76e766c6e6a3491d6621585bce8bdd57c3", + "chksum_sha256": "ed9d617788c3a95226fda5a0dfa4271afe77626709937b27a3af70ffde7af53a", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/replaced.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23df18165ce662f9a6837926a752e92d9c0500334a68492ae8607c2385b4cb29", + "chksum_sha256": "b70d617a3d7b66351dd189740638da0a7558380e1edac4b74e43eeb54b4cf7c6", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/parsed.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_lldp", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "616e7d9e3cc11d85aa6f6948a80ba8ad080df33b6fa2574e58ea96dda1b8b4d7", + "chksum_sha256": "ad64c29374175a8d737d01ae856c16364c442fca9ea7b9447ab8f22d9ed78dad", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/rendered.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21aabfd4dd00cabd0670087c3f46d8f3cf0dac51e013d14790546ec52612579c", + "chksum_sha256": "547917e90b62a4ef7eb05c6a2527019acf8e3790d7d5a0c9f6b24af6a82a2fb3", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config_ios12.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2923b7e2af16ca384a4c44c7fc1c9944367fffc1769b9ee6c41d73a9e0a2c1fb", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/vars/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_10.255.255.250_repeat_2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d9a640abfe561027b4afaadcf0306d9f52437a9ca11c8c6bd33aa39668cfc2b", + "chksum_sha256": "f6102ec8eb37947bb6892dbb4c1252c794ef52376540c9d8ce2b9753aa613685", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ip_interface", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_lldp_neighbors_detail", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "11544c73f3e88ab5384140abf1bedd0c2501f4ed13132ab56bd22a53909183b0", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tasks/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_user_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e463dfec9973774a7a87d75f8e492a829e08a207f7330616a23032087174429", + "chksum_sha256": "92081628d201c43cc40e2022f0ebac80f1ee5c1e78e19479d0b94780945a9657", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tasks/cli.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_bgp_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "8e1448b74254646dea1644addbebf552013bc999c32b8a90f3141fadfd2e045c", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_virtual_switch", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a3c3bbfb2fdcb11e3f9721d7596800690969e51e7fc66ee2e5adae3b524f7177", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/meta/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_config_defaults.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "114e89387a2b3cb37c475ed22f287f83dd93bd16a51845286b27f8355d1ae0e5", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_size_1400_df-bit", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c8452a768d797ca829ff18314236a7275cf03a14f751c6f53c8b6711bc8a1d7f", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/defaults/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_prefix_lists.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/test_ios_vrf.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c8111b8105a96afc7e81b96808cda91611643dc49d0bdc5d5945d8a719b3c31e", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/test_ios_snmp_server.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cd5d0b6244b77c60fdf0bce2e1bb4e4da5efd31f213ef35546355a7165494c4c", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/_remove_config.yaml", + "name": "tests/unit/modules/network/ios/ios_module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "070883e8b78940daa953461fd32520d1bef4bdf4cf98664b3e82c7d0fae842b6", + "chksum_sha256": "8a08cf8bab33ef88408880ffc6f8034be5e532945ca4f79d82b213426104876c", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/deleted.yaml", + "name": "tests/unit/modules/network/ios/test_ios_ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b7529ae69029b3e22b4dec95b722595deebe267cb2f2735a85fd53a4c82bac8", + "chksum_sha256": "4005f2c067beeb07ad752d35b4cf08c2641f28400006a638d63d5d758bec3a92", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/gathered.yaml", + "name": "tests/unit/modules/network/ios/test_ios_ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a18425a89f8e85573729e8c29b8c45e491dd6814b221f9d42a0acf0960689e8", + "chksum_sha256": "518695ae331bd17c5635aca39e6af516e7a11473236412a9707eb12d5c7cb10f", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/empty_config.yaml", + "name": "tests/unit/modules/network/ios/test_ios_ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9313132bb4ea08fdfebbd76b6376eda299d1e61fef0b62973309894399193613", + "chksum_sha256": "784a79cd607c99396e7040a04dc142534261d39b04f5c3bfc5a8957a21879054", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/merged.yaml", + "name": "tests/unit/modules/network/ios/test_ios_route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8f0c8602b6863de3c09c0f29fb3fbe83fc0afa94d1358db7cb974628c616ebc4", + "chksum_sha256": "e520d761dedc8ab970293d2a725ee892518f7480bb2e97f0a3e2684460e443d4", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/_parsed.cfg", + "name": "tests/unit/modules/network/ios/test_ios_evpn_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "334a751e168137370f8d5baaae2c017e63cd9870191a2476633bdb33f5aec915", + "chksum_sha256": "b5bee6ad68b90176a467d9f7c0d348cf07e27b1995f085c64db9cbdb8a088929", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/_populate_config.yaml", + "name": "tests/unit/modules/network/ios/test_ios_l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "909ad0ac69441e0c20405814bade15872ccc23e5b736632efcfd2880d863c6d7", + "chksum_sha256": "d6716032d5b53020ccd29f08960acbd1ae9fe41a3c175339deb61a4b56f4dcf5", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/parsed.yaml", + "name": "tests/unit/modules/network/ios/test_ios_acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e42472783ff99e3351a0a581b2ddcdaca689eb9cb8044af829d580473e17ac35", + "chksum_sha256": "d39c73e566e5696e0f6c153aca54de2bee9085dff7156bde3fe128861d69aab2", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/rendered.yaml", + "name": "tests/unit/modules/network/ios/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6cd846336af90bbf055ebce81f350f2187733b3580f5c227b07ad766e6c4bf9f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/test_ios_vxlan_vtep.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3a17f4db78edf67416a900d929d29f3384c5bf1c3df4ade474fb821703ffbe56", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/vars/main.yaml", + "name": "tests/unit/modules/network/ios/test_ios_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "febb64d561f5a456e89d59fb77210502df86daa4eca07014b96993b76d0bc5ba", + "chksum_sha256": "41c9b2cac8e769dabfee1b1bb0605b20518dd345f91f1e3522287c5040cb6a78", "format": 1 }, { - "name": "tests/integration/target-prefixes.network", + "name": "tests/unit/modules/network/ios/test_ios_bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39053a91dac30879cf24512c4234e519681a1e88be8af8b18415df87fa4b9006", + "chksum_sha256": "6df2c02c70db2b5b94e8f1d57d17ca522e868e63726a5d440147898bafa6a90b", "format": 1 }, { - "name": "tests/integration/network-integration.cfg", + "name": "tests/unit/modules/network/ios/test_ios_static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d", + "chksum_sha256": "cf947c20e29837dbf0e3a749e34e7039686d4fdc680dbedea6eaa84b9aff6394", "format": 1 }, { - "name": "tests/.gitignore", + "name": "tests/unit/modules/network/ios/test_ios_prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", + "chksum_sha256": "3b81d60b1aa8a42360235888b69fb75cf5c68a6232dba1df3d3e85726a85e01c", "format": 1 }, { - "name": "docs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/test_ios_facts.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1fda5506769c35be3d3d6db871c80807c9ed052c7d74701da7b1b9ee0c03058a", "format": 1 }, { - "name": "docs/cisco.ios.ios_vxlan_vtep_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa7c5614fed7ad1558e45d3d74eb3188cbe0958515593ce2c437d017406ee842", + "chksum_sha256": "4e00ef84b911124b4a4accd43340c7ecc9f23b59ae92801d4b1e44e14be30128", "format": 1 }, { - "name": "docs/cisco.ios.ios_lacp_interfaces_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7bf92f7c407a17daa5b09137112c2d2764968e812b549b74cd7a8e8a45e255c5", + "chksum_sha256": "789efea07aeca73695ac6318b8efa84135fd9bb01ab01287ad4f1caaaa2fac45", "format": 1 }, { - "name": "docs/cisco.ios.ios_acl_interfaces_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd05ed9845d1fc11685c746e9a9652f6bbd2670ec0a1d9ca39c5922ae46a64ba", + "chksum_sha256": "b0f11b5fdfc4778112633dbe23e79fcda458799d5a8fb31b2d8b2a79194aab60", "format": 1 }, { - "name": "docs/cisco.ios.ios_acls_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1aa35d1812bbb92f7b8ba18d3601df03851c682fde01e671f37ddc4c89ff7977", + "chksum_sha256": "53a89a15a20ad61a015b720b548f4cbd379e0d14bcdbe1d29b8a52816294be6b", "format": 1 }, { - "name": "docs/cisco.ios.ios_bgp_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3613c63ea42c85758bc78c1f2f5c970489a96411c41cc0ba7bf216994df8bdc1", + "chksum_sha256": "ec27ba6f7ff75fbb7089e3a8da2d02ef6ae88af4d46875802ae6a93db6d5f9c0", "format": 1 }, { - "name": "docs/cisco.ios.ios_config_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3240939a84f27d689eacaf2ce4c89da3c03ee5a2a2739a127d196cb2691784b5", + "chksum_sha256": "422ff5d9c0a8cc3ee7a6d94eb7bdfc035982af02dc1fcb1cbe970195e60e0490", "format": 1 }, { - "name": "docs/cisco.ios.ios_static_routes_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af3d82a1af37c9549d096096f205882d772383bb5c2535ad29efa8424cd413d4", + "chksum_sha256": "617c226e92222fce590330664bc61fc898650e9f0a769a270cbb91aa7ced6ec3", "format": 1 }, { - "name": "docs/cisco.ios.ios_ospfv3_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e832b1aef91fbd553177805605dd98df5f00f78c63be2a607b631d826e11e086", + "chksum_sha256": "173cc0ea9b86c0a3672110ccf67e37bc9353519dfe556b22f969ee4a15e991cc", "format": 1 }, { - "name": "docs/cisco.ios.ios_ospfv2_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cda4e6568a61d285a6a2de4dffcfa476d33b65ab1b41565d981af4d3bee587b", + "chksum_sha256": "f1d485573e2b2ea1ec54e44a085cb811501bb513294a6b8a497c9bdad942b0a7", "format": 1 }, { - "name": "docs/cisco.ios.ios_bgp_address_family_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef1f1c1bce1238a8e1c30e174c361edb41440f8a4ca5892a51651d687e885b9a", + "chksum_sha256": "e659d95939b8e1e6dea3800b689a53b4df377ef1d4ddece5a738764eb5135b99", "format": 1 }, { - "name": "docs/cisco.ios.ios_l3_interfaces_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "51ba7650c179e3da62a417f92608431f7d46cf9fb6206772ecd3d5f703d856ee", + "chksum_sha256": "d375c857fee27d16d1553b33bf5398356bb2563b924c4c1e30ce9b4da21289d9", "format": 1 }, { - "name": "docs/cisco.ios.ios_user_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e0e3e1d9ad718db52097b1754064e310a3a434709203a7905f6e1a72fb71722", + "chksum_sha256": "a3009a93056257774086045d682f2a979ae5d99b0e469c80b050d4bc4e10e662", "format": 1 }, { - "name": "docs/cisco.ios.ios_facts_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "827c48cf4385cff2d361bfc60df1d6678cbb046f3ed39ff42426057448cdba1a", + "chksum_sha256": "977da72df67bef7c5c2a6a0af6ce67292634f3f3b76bc4533bb4f9684302ac31", "format": 1 }, { - "name": "docs/cisco.ios.ios_logging_global_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ec4443978907eee51ca4b9f1dc2ffe6534b3c3479e7555aacfdb82895d45594", + "chksum_sha256": "82953a03a9f12f373907684cb7fd0838e83e61619ea7861e8664ba2608b52ef9", "format": 1 }, { - "name": "docs/cisco.ios.ios_ntp_global_module.rst", + "name": "tests/unit/modules/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aac96eeacf4a0b344b25dca00c91f780a8b9233e9ceed3a71e0fbd339739a1b5", + "chksum_sha256": "414c272e9a403bb6009460ec9502c5acfaa9c80b2159c742f6cb2e225938be3e", "format": 1 }, { - "name": "docs/cisco.ios.ios_vlans_module.rst", + "name": "tests/unit/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "913875bef455036cf1ee302748251aa802719e0ef415a6599df62f4afaaf843d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "docs/cisco.ios.ios_snmp_server_module.rst", + "name": "tests/unit/requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd2156ed69609eb4271746660a9b338a4a1b2e5d7fbf9533ac350f1a5d84a407", + "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", "format": 1 }, { - "name": "docs/cisco.ios.ios_prefix_lists_module.rst", + "name": "tests/.gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6d0a0fe60c76d6c91776efcc420942c78f5ccbdc3e0f413e4ca3e7ead839506", + "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", "format": 1 }, { - "name": "docs/cisco.ios.ios_lag_interfaces_module.rst", + "name": "codecov.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97da1f7af33eae5e26a4537ddd3cbf0fc4fd811da0609dea6db3af82af8f53bd", + "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2", "format": 1 }, { - "name": "docs/__init__.py", + "name": "tox-ansible.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "da802bfc2dc2671ca7caba028e8a635b459b131874041d119b698717333a7a49", "format": 1 }, { - "name": "docs/cisco.ios.ios_evpn_evi_module.rst", + "name": ".gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10749ddf85943d2fe186d9ba9bf1fef8326bd267408ee21e9497e7b751f09e9a", + "chksum_sha256": "179a6d0780422c32653a71b9395a3ecb8b3859346ffa3e38ca3c8d90f8063fd2", "format": 1 }, { - "name": "docs/cisco.ios.ios_linkagg_module.rst", + "name": "cspell.config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b123e1380c285f81d808170a79e2e82972af3c1b2e438cfb698a5d373c6be3cf", + "chksum_sha256": "e1079e6d02ed34033bf83913e7b66ff7bd042e6d8ed4c113aea31123f557deb5", "format": 1 }, { - "name": "docs/cisco.ios.ios_service_module.rst", + "name": "LICENSE", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "339ca54b72e461c16788f0a63bdf71786b9a45a4d848251916811ecfe9254a4b", + "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", "format": 1 }, { - "name": "docs/cisco.ios.ios_route_maps_module.rst", + "name": "mypy.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af30dade8c6261c751142d983650af7a4c8c2e142f2fceaaf3bb604e88d9beb4", + "chksum_sha256": "5cc01a9c3e2a80b779ca004be5e4df814eebd494db650387b1bde98267a0b317", "format": 1 }, { - "name": "docs/cisco.ios.ios_ntp_module.rst", + "name": ".flake8", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ddbf43a41134d7100e58365a10c02a60674a1b37152d4bb07a2dd42b2e54d97", + "chksum_sha256": "7214cfc0a1b4e8b89190e868962196874d9396503f77e47d7dfa342bd29b2a74", "format": 1 }, { - "name": "docs/cisco.ios.ios_lldp_module.rst", + "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f499f07239788d95c91a8413b7324e5370a88992e41ded149aeb130412e4f3b5", + "chksum_sha256": "22c466a51fb52639d7668078c84f1bb384fcd9c4a8b2522999f698edef8d061c", "format": 1 }, { - "name": "docs/cisco.ios.ios_interfaces_module.rst", + "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f2081011b7cdb08c36dea3476b69ae849614273cd5e800e374edc9123fc04d71", + "chksum_sha256": "47d9fe78273fd64c750e78a317b1a59a6f87ebb93d8d4cf9ae6d98a0f2fc9f9e", "format": 1 }, { - "name": "docs/cisco.ios.ios_system_module.rst", + "name": "docs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "docs/cisco.ios.ios_config_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d9c9ff70523a1f9db7b5d860607252a06b799c12ea8e001944075338f0c32c7", + "chksum_sha256": "3240939a84f27d689eacaf2ce4c89da3c03ee5a2a2739a127d196cb2691784b5", "format": 1 }, { - "name": "docs/cisco.ios.ios_vrf_module.rst", + "name": "docs/cisco.ios.ios_command_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ffdd6a11d84d30baee6bf9a10859470627b4ba0521d3d3eb85def9758078a4d", + "chksum_sha256": "8b4546a6a039b29fb5919487fe5b8339d5cb34464e23cf1b07b2d82baf55bbed", "format": 1 }, { - "name": "docs/cisco.ios.ios_lacp_module.rst", + "name": "docs/cisco.ios.ios_linkagg_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3bac07e44bfe117813c4d65c786470b2acbeb128b0261b02f027d4424ffcc746", + "chksum_sha256": "b123e1380c285f81d808170a79e2e82972af3c1b2e438cfb698a5d373c6be3cf", "format": 1 }, { - "name": "docs/cisco.ios.ios_l2_interfaces_module.rst", + "name": "docs/cisco.ios.ios_ping_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a4f000d638f6ee2223d344c7b3c260cfcead1d04793e33c84da4cbbd30b1358", + "chksum_sha256": "2cc3e7247773d272c66efe02e9791b27bd7ae28afb28a26d597d80741042467f", "format": 1 }, { - "name": "docs/cisco.ios.ios_lldp_global_module.rst", + "name": "docs/cisco.ios.ios_lacp_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "12967941c3851fa6f982162e20ce5a0a3c4eeec8f948b367b8ba680af7c50202", + "chksum_sha256": "3bac07e44bfe117813c4d65c786470b2acbeb128b0261b02f027d4424ffcc746", "format": 1 }, { - "name": "docs/cisco.ios.ios_ping_module.rst", + "name": "docs/cisco.ios.ios_lldp_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2cc3e7247773d272c66efe02e9791b27bd7ae28afb28a26d597d80741042467f", + "chksum_sha256": "f499f07239788d95c91a8413b7324e5370a88992e41ded149aeb130412e4f3b5", "format": 1 }, { - "name": "docs/cisco.ios.ios_bgp_global_module.rst", + "name": "docs/cisco.ios.ios_logging_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89a09f8b1c1900b6dba84033c17963299db060d02fc6b79b1c252c5605765aea", + "chksum_sha256": "6ec4443978907eee51ca4b9f1dc2ffe6534b3c3479e7555aacfdb82895d45594", "format": 1 }, { - "name": "docs/cisco.ios.ios_ospf_interfaces_module.rst", + "name": "docs/cisco.ios.ios_ospfv3_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "736695017ca633989a5ce8d1e661fee1cf6d545cf98f975a8ecc42897e352dcb", + "chksum_sha256": "e832b1aef91fbd553177805605dd98df5f00f78c63be2a607b631d826e11e086", "format": 1 }, { - "name": "docs/cisco.ios.ios_banner_module.rst", + "name": "docs/cisco.ios.ios_l3_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "347f291cfde6d03ea4e5d58a4e81b565cb29450c980cb453d41807836ec60c1f", + "chksum_sha256": "bc4a295c5de44164ad073994aea4eb7a7b38b51e503848e11312e354fe567a7d", "format": 1 }, { - "name": "docs/cisco.ios.ios_hostname_module.rst", + "name": "docs/cisco.ios.ios_vxlan_vtep_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c17247e2b97de9179680bdd136c547b0b8a4b15d8f6faf22d79543f6e9800246", + "chksum_sha256": "fe7e11d2742a5c657e48ca08d56b4eee718e65518eae65f3df640c611275eadd", "format": 1 }, { - "name": "docs/cisco.ios.ios_evpn_global_module.rst", + "name": "docs/cisco.ios.ios_ospfv2_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea291a372120106d38f214b7e0585cc40768c3459232a46d717042872c3ed18d", + "chksum_sha256": "1cda4e6568a61d285a6a2de4dffcfa476d33b65ab1b41565d981af4d3bee587b", "format": 1 }, { - "name": "docs/cisco.ios.ios_command_module.rst", + "name": "docs/cisco.ios.ios_vlans_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b4546a6a039b29fb5919487fe5b8339d5cb34464e23cf1b07b2d82baf55bbed", + "chksum_sha256": "1929d51d16b155395fe24200115859d3107378a420162bf57889a9931d1f1861", "format": 1 }, { - "name": "docs/cisco.ios.ios_cliconf.rst", + "name": "docs/cisco.ios.ios_facts_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a17502a2fd8ed08d762ce2e747b95c2b5dfe106d69afbaf97b8e141ac0597668", + "chksum_sha256": "827c48cf4385cff2d361bfc60df1d6678cbb046f3ed39ff42426057448cdba1a", "format": 1 }, { - "name": "docs/cisco.ios.ios_lldp_interfaces_module.rst", + "name": "docs/cisco.ios.ios_route_maps_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "619db6d298ab8b20cac142e84d3b24258ae70d3b5c092605a4c6ae2fa7d49e12", + "chksum_sha256": "af30dade8c6261c751142d983650af7a4c8c2e142f2fceaaf3bb604e88d9beb4", "format": 1 }, { - "name": ".isort.cfg", + "name": "docs/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f287de31c528e7d37475770952855fb25ec053d0bcaedd577091d13807b4c5dc", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "pyproject.toml", + "name": "docs/cisco.ios.ios_user_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc", + "chksum_sha256": "f96397bba27708b066076c0a259766a30ffa86a6711ff56f35201477bec8b28b", "format": 1 }, { - "name": ".flake8", + "name": "docs/cisco.ios.ios_bgp_address_family_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3619890addbe81b337523c7d31461089055b267a3665f5f5c93d47fa0dbee96", + "chksum_sha256": "fd627997ec9ae45c6c26bde87fde2ac21ce4b0b47bf5f2431037e95751dd48b1", "format": 1 }, { - "name": ".darglint", + "name": "docs/cisco.ios.ios_cliconf.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "954a7045c6fa17fddfe80995f7f8251efb6df1a2b05eaf479afca6bbc6dfd4f2", + "chksum_sha256": "a17502a2fd8ed08d762ce2e747b95c2b5dfe106d69afbaf97b8e141ac0597668", "format": 1 }, { - "name": "bindep.txt", + "name": "docs/cisco.ios.ios_static_routes_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80645079eb025b3a905b4775ac545d080a3d7d35d537c31e04f7197c94315ab5", + "chksum_sha256": "af3d82a1af37c9549d096096f205882d772383bb5c2535ad29efa8424cd413d4", "format": 1 }, { - "name": "changelogs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.ios.ios_lag_interfaces_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "97da1f7af33eae5e26a4537ddd3cbf0fc4fd811da0609dea6db3af82af8f53bd", "format": 1 }, { - "name": "changelogs/fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.ios.ios_banner_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "347f291cfde6d03ea4e5d58a4e81b565cb29450c980cb453d41807836ec60c1f", "format": 1 }, { - "name": "changelogs/fragments/.keep", + "name": "docs/cisco.ios.ios_evpn_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "f3554b673098af0468b7f528d0c68480648620c96205934c883787352120d7f6", "format": 1 }, { - "name": "changelogs/config.yaml", + "name": "docs/cisco.ios.ios_evpn_evi_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1bb849048d65cc2f9361aa278e580f629a47e0aca570fdb0f34cf4ef55dd332c", + "chksum_sha256": "1f5131a6c1ff51286735287d453712af785c8e417afb47deab8767fa44a3dccd", "format": 1 }, { - "name": "changelogs/changelog.yaml", + "name": "docs/cisco.ios.ios_system_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c85e91411a1533ae69219589ad751c388129bcd0059e5b0b49b30fe659317353", + "chksum_sha256": "2d9c9ff70523a1f9db7b5d860607252a06b799c12ea8e001944075338f0c32c7", "format": 1 }, { - "name": "tox.ini", + "name": "docs/cisco.ios.ios_ntp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "beb3313789623e5570d0871f6115ba563a0d92ea75e8e89cbd9f79045b4fe279", + "chksum_sha256": "aac96eeacf4a0b344b25dca00c91f780a8b9233e9ceed3a71e0fbd339739a1b5", "format": 1 }, { - "name": "CHANGELOG.rst", + "name": "docs/cisco.ios.ios_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "90fe1b08554e8c1a683f663f7d7bcf69a6395e4cbf63ae1917a6dd7ca9fdd3cd", + "chksum_sha256": "f2081011b7cdb08c36dea3476b69ae849614273cd5e800e374edc9123fc04d71", "format": 1 }, { - "name": ".gitignore", + "name": "docs/cisco.ios.ios_snmp_server_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "179a6d0780422c32653a71b9395a3ecb8b3859346ffa3e38ca3c8d90f8063fd2", + "chksum_sha256": "fd2156ed69609eb4271746660a9b338a4a1b2e5d7fbf9533ac350f1a5d84a407", "format": 1 }, { - "name": ".pre-commit-config.yaml", + "name": "docs/cisco.ios.ios_service_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08940a10222925e0f47d36e2457f1b3e7045ed20b4e72989208b83cda88a2c25", + "chksum_sha256": "339ca54b72e461c16788f0a63bdf71786b9a45a4d848251916811ecfe9254a4b", "format": 1 }, { - "name": ".prettierignore", + "name": "docs/cisco.ios.ios_lldp_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87f689e56b912f78012677dba2e0237a65f7b3c1f903006cddefab21bf0689f2", + "chksum_sha256": "619db6d298ab8b20cac142e84d3b24258ae70d3b5c092605a4c6ae2fa7d49e12", "format": 1 }, { - "name": ".github", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.ios.ios_bgp_global_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f40e9c7282d17d9d0714e8078d2fff25c1afed77183c44b61f68fc5955a94b1e", "format": 1 }, { - "name": ".github/dependabot.yml", + "name": "docs/cisco.ios.ios_prefix_lists_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461", + "chksum_sha256": "c6d0a0fe60c76d6c91776efcc420942c78f5ccbdc3e0f413e4ca3e7ead839506", "format": 1 }, { - "name": ".github/CODEOWNERS", + "name": "docs/cisco.ios.ios_acl_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cd05ed9845d1fc11685c746e9a9652f6bbd2670ec0a1d9ca39c5922ae46a64ba", "format": 1 }, { - "name": ".github/workflows", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.ios.ios_ospf_interfaces_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "736695017ca633989a5ce8d1e661fee1cf6d545cf98f975a8ecc42897e352dcb", "format": 1 }, { - "name": ".github/workflows/codecoverage.yml", + "name": "docs/cisco.ios.ios_l2_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8bbcae622f5e51798b577df290135e846244399c2a6ccbfedac523b38a8330a3", + "chksum_sha256": "0a4f000d638f6ee2223d344c7b3c260cfcead1d04793e33c84da4cbbd30b1358", "format": 1 }, { - "name": ".github/workflows/lint.yml", + "name": "docs/cisco.ios.ios_lldp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4aeac57f14d48d82a859c822f84a0573419958bc70708f19caa6daac5c771ff9", + "chksum_sha256": "12967941c3851fa6f982162e20ce5a0a3c4eeec8f948b367b8ba680af7c50202", "format": 1 }, { - "name": ".github/workflows/ack.yml", + "name": "docs/cisco.ios.ios_vrf_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24c6fbafaa69e3e3ee696f2cefa5120794b62cef7e870553dddce8b8af0a127c", + "chksum_sha256": "45ccaff681470c3ed5a60bf5932c14eaef7106ad08fd075d3a093db856b4829d", "format": 1 }, { - "name": ".github/workflows/release.yml", + "name": "docs/cisco.ios.ios_lacp_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1", + "chksum_sha256": "7bf92f7c407a17daa5b09137112c2d2764968e812b549b74cd7a8e8a45e255c5", "format": 1 }, { - "name": ".github/workflows/push.yml", + "name": "docs/cisco.ios.ios_hostname_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "345f246b1e078aa3929a09eca7eb37ed4391f0a92c6446f6d6c507a15b45a1a7", + "chksum_sha256": "c17247e2b97de9179680bdd136c547b0b8a4b15d8f6faf22d79543f6e9800246", "format": 1 }, { - "name": ".github/workflows/tests.yml", + "name": "docs/cisco.ios.ios_acls_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "345e7bd3d711ba8194fc11c32bc1935fe6d7916869c7d6908c9e95807f8b1c47", + "chksum_sha256": "9d7f27e505c82c628489be78ca29cc4daa711aa7e3f4d3a40985e768ec2060cb", "format": 1 }, { - "name": ".github/release-drafter.yml", + "name": "bindep.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", + "chksum_sha256": "80645079eb025b3a905b4775ac545d080a3d7d35d537c31e04f7197c94315ab5", "format": 1 }, { - "name": "cspell.config.yaml", + "name": "platform_guide.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1079e6d02ed34033bf83913e7b66ff7bd042e6d8ed4c113aea31123f557deb5", + "chksum_sha256": "b554e3c11718d6ac890f5f861e5996a7c12348766263a10fb34b315da899c58d", "format": 1 } ], diff --git a/ansible_collections/cisco/ios/MANIFEST.json b/ansible_collections/cisco/ios/MANIFEST.json index 99e11f380..5d60df311 100644 --- a/ansible_collections/cisco/ios/MANIFEST.json +++ b/ansible_collections/cisco/ios/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "cisco", "name": "ios", - "version": "5.3.0", + "version": "8.0.0", "authors": [ "Ansible Network Community (ansible-network)" ], @@ -17,7 +17,7 @@ "license": [], "license_file": "LICENSE", "dependencies": { - "ansible.netcommon": ">=2.5.1" + "ansible.netcommon": ">=6.1.0" }, "repository": "https://github.com/ansible-collections/cisco.ios", "documentation": null, @@ -28,7 +28,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1004e08946bf844b562ad6b5101fdf12a9c2338c282804e88f8a909b30d948c", + "chksum_sha256": "4adbe8b0c73c340e1c6bf6a6fabd848c98b04f047780987f22e6573f13477dfd", "format": 1 }, "format": 1 diff --git a/ansible_collections/cisco/ios/README.md b/ansible_collections/cisco/ios/README.md index da89549a1..8d8456157 100644 --- a/ansible_collections/cisco/ios/README.md +++ b/ansible_collections/cisco/ios/README.md @@ -11,7 +11,7 @@ This collection has been tested against Cisco IOS XE Version 17.3 on CML. ## Ansible version compatibility -This collection has been tested against following Ansible versions: **>=2.9.10**. +This collection has been tested against following Ansible versions: **>=2.14.0**. For collections that support Ansible 2.9, please ensure you update your `network_os` to use the fully qualified collection name (for example, `cisco.ios.ios`). @@ -22,7 +22,7 @@ PEP440 is the schema used to describe the versions of Ansible. ### Supported connections -The Cisco IOS collection supports `network_cli` connections. +The Cisco IOS collection supports `network_cli` connections. A detailed platform guide can be found [here](https://github.com/ansible-collections/cisco.ios/blob/main/platform_guide.rst). ## Included content @@ -38,7 +38,6 @@ Name | Description [cisco.ios.ios_acl_interfaces](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_acl_interfaces_module.rst)|Resource module to configure ACL interfaces. [cisco.ios.ios_acls](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_acls_module.rst)|Resource module to configure ACLs. [cisco.ios.ios_banner](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_banner_module.rst)|Module to configure multiline banners. -[cisco.ios.ios_bgp](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_bgp_module.rst)|Module to configure BGP protocol settings. [cisco.ios.ios_bgp_address_family](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_bgp_address_family_module.rst)|Resource module to configure BGP Address family. [cisco.ios.ios_bgp_global](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_bgp_global_module.rst)|Resource module to configure BGP. [cisco.ios.ios_command](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_command_module.rst)|Module to run commands on remote devices. @@ -58,7 +57,6 @@ Name | Description [cisco.ios.ios_lldp_global](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_lldp_global_module.rst)|Resource module to configure LLDP. [cisco.ios.ios_lldp_interfaces](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_lldp_interfaces_module.rst)|Resource module to configure LLDP interfaces. [cisco.ios.ios_logging_global](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_logging_global_module.rst)|Resource module to configure logging. -[cisco.ios.ios_ntp](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_ntp_module.rst)|(deprecated, removed after 2024-01-01) Manages core NTP configuration. [cisco.ios.ios_ntp_global](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_ntp_global_module.rst)|Resource module to configure NTP. [cisco.ios.ios_ospf_interfaces](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_ospf_interfaces_module.rst)|Resource module to configure OSPF interfaces. [cisco.ios.ios_ospfv2](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_ospfv2_module.rst)|Resource module to configure OSPFv2. diff --git a/ansible_collections/cisco/ios/changelogs/changelog.yaml b/ansible_collections/cisco/ios/changelogs/changelog.yaml index 510f6b809..e57571cd7 100644 --- a/ansible_collections/cisco/ios/changelogs/changelog.yaml +++ b/ansible_collections/cisco/ios/changelogs/changelog.yaml @@ -2,107 +2,75 @@ ancestor: null releases: 1.0.0: modules: - - description: ACL interfaces resource module + - description: Resource module to configure ACL interfaces. name: ios_acl_interfaces namespace: "" - - description: ACLs resource module + - description: Resource module to configure ACLs. name: ios_acls namespace: "" - - description: Manage multiline banners on Cisco IOS devices + - description: Module to configure multiline banners. name: ios_banner namespace: "" - - description: Configure global BGP protocol settings on Cisco IOS. - name: ios_bgp - namespace: "" - - description: Run commands on remote devices running Cisco IOS + - description: Module to run commands on remote devices. name: ios_command namespace: "" - - description: Manage Cisco IOS configuration sections + - description: Module to manage configuration sections. name: ios_config namespace: "" - - description: Collect facts from remote devices running Cisco IOS + - description: Module to collect facts from remote devices. name: ios_facts namespace: "" - - description: - (deprecated, removed after 2022-06-01) Manage Interface on Cisco - IOS network devices - name: ios_interface - namespace: "" - - description: Interfaces resource module + - description: Resource module to configure interfaces. name: ios_interfaces namespace: "" - - description: - (deprecated, removed after 2022-06-01) Manage Layer-2 interface - on Cisco IOS devices. - name: ios_l2_interface - namespace: "" - - description: L2 interfaces resource module + - description: Resource module to configure L2 interfaces. name: ios_l2_interfaces namespace: "" - - description: - (deprecated, removed after 2022-06-01) Manage Layer-3 interfaces - on Cisco IOS network devices. - name: ios_l3_interface - namespace: "" - - description: L3 interfaces resource module + - description: Resource module to configure L3 interfaces. name: ios_l3_interfaces namespace: "" - - description: LACP resource module + - description: Resource module to configure LACP. name: ios_lacp namespace: "" - - description: LACP interfaces resource module + - description: Resource module to configure LACP interfaces. name: ios_lacp_interfaces namespace: "" - - description: LAG interfaces resource module + - description: Resource module to configure LAG interfaces. name: ios_lag_interfaces namespace: "" - - description: Manage link aggregation groups on Cisco IOS network devices + - description: Module to configure link aggregation groups. name: ios_linkagg namespace: "" - - description: Manage LLDP configuration on Cisco IOS network devices. + - description: + (deprecated, removed after 2024-06-01) Manage LLDP configuration + on Cisco IOS network devices. name: ios_lldp namespace: "" - - description: LLDP resource module + - description: Resource module to configure LLDP. name: ios_lldp_global namespace: "" - - description: LLDP interfaces resource module + - description: Resource module to configure LLDP interfaces. name: ios_lldp_interfaces namespace: "" - - description: Manage logging on network devices - name: ios_logging - namespace: "" - - description: Manages core NTP configuration. - name: ios_ntp - namespace: "" - - description: OSPFv2 resource module + - description: Resource module to configure OSPFv2. name: ios_ospfv2 namespace: "" - - description: Tests reachability using ping from Cisco IOS network devices + - description: Tests reachability using ping from IOS switch. name: ios_ping namespace: "" - - description: - (deprecated, removed after 2022-06-01) Manage static IP routes - on Cisco IOS network devices - name: ios_static_route - namespace: "" - - description: Static routes resource module + - description: Resource module to configure static routes. name: ios_static_routes namespace: "" - - description: Manage the system attributes on Cisco IOS devices + - description: Module to manage the system attributes. name: ios_system namespace: "" - - description: Manage the aggregate of local users on Cisco IOS device + - description: Module to manage the aggregates of local users. name: ios_user namespace: "" - - description: - (deprecated, removed after 2022-06-01) Manage VLANs on IOS network - devices - name: ios_vlan - namespace: "" - - description: VLANs resource module + - description: Resource module to configure VLANs. name: ios_vlans namespace: "" - - description: Manage the collection of VRF definitions on Cisco IOS devices + - description: Module to configure VRF definitions. name: ios_vrf namespace: "" plugins: @@ -153,7 +121,7 @@ releases: minor_changes: - Add ios_ospfv3 module. modules: - - description: OSPFv3 resource module + - description: Resource module to configure OSPFv3. name: ios_ospfv3 namespace: "" release_date: "2020-10-01" @@ -172,7 +140,7 @@ releases: minor_changes: - Add ios_ospf_interfaces module. modules: - - description: OSPF Interfaces resource module + - description: Resource module to configure OSPF interfaces. name: ios_ospf_interfaces namespace: "" release_date: "2020-11-01" @@ -196,7 +164,7 @@ releases: minor_changes: - Add ios_bgp_global module. modules: - - description: BGP Global resource module + - description: Resource module to configure BGP. name: ios_bgp_global namespace: "" release_date: "2021-01-29" @@ -214,7 +182,7 @@ releases: - Add ios_bgp_address_family Resource Module. (https://github.com/ansible-collections/cisco.ios/pull/219). - Adds support for single_user_mode command output caching. (https://github.com/ansible-collections/cisco.ios/pull/204). modules: - - description: BGP Address Family resource module. + - description: Resource module to configure BGP Address family. name: ios_bgp_address_family namespace: "" release_date: "2021-02-25" @@ -246,7 +214,7 @@ releases: security_fixes: - To fix Cisco IOS no log issue and add ignore txt for 2.12 (https://github.com/ansible-collections/cisco.ios/pull/304). modules: - - description: Route Maps resource module. + - description: Resource module to configure route maps. name: ios_route_maps namespace: "" release_date: "2021-04-27" @@ -265,10 +233,10 @@ releases: - Add ios_logging_global module. - IOS Prefix list resource module. modules: - - description: Logging resource module. + - description: Resource module to configure logging. name: ios_logging_global namespace: "" - - description: Prefix Lists resource module. + - description: Resource module to configure prefix lists. name: ios_prefix_lists namespace: "" release_date: "2021-05-18" @@ -377,7 +345,7 @@ releases: - sd_wan_support.yaml - set_allow_duplicates.yaml modules: - - description: ntp_global resource module + - description: Resource module to configure NTP. name: ios_ntp_global namespace: "" release_date: "2021-09-24" @@ -409,7 +377,7 @@ releases: - sanity-213.yaml - snmp_server_resource_module.yaml modules: - - description: snmp_server resource module + - description: Resource module to configure snmp server. name: ios_snmp_server namespace: "" release_date: "2021-12-07" @@ -452,7 +420,7 @@ releases: - snmp_server_feature_user.yaml - static_route_interface_issue.yaml modules: - - description: hostname resource module + - description: Resource module to configure hostname. name: ios_hostname namespace: "" release_date: "2022-01-31" @@ -1065,3 +1033,130 @@ releases: name: ios_vxlan_vtep namespace: "" release_date: "2023-11-29" + 6.0.0: + changes: + major_changes: + - Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions + are EoL now. + release_summary: + Starting from this release, the minimum `ansible-core` version + this collection requires is `2.14.0`. The last known version compatible with + ansible-core<2.14 is `v5.3.0`. + removed_features: + - Removed previously deprecated ios_bgp module in favor of ios_bgp_global and + ios_bgp_address_family. + fragments: + - bgp_dep_rem.yml + - major_600.yml + release_date: "2023-11-30" + 6.1.0: + changes: + bugfixes: + - ios_bgp_global - fix template attribute to generate configuration commands. + - ios_l3_interfaces - remove validation from ipv6 address parameter. + - ios_snmp_server - fix group and user IPv6 ACL commands. + - ios_user - fix configuration of user with hashed password. + - ios_user - fixed configuration removal of ssh users using purge. + - ios_vlans - Make behaviour of the action states consistent. + - ios_vlans - Top level configuration attribute is not required, the module + works with vlan and vlan configuration both. + minor_changes: + - ios_bgp_global - added 'bgp.default.ipv4_unicast' and 'bgp.default.route_target.filter' + key + - ios_l3_interfaces - added 'autostate', 'mac_address', 'ipv4.source_interface', + and 'ipv6.enable' key + - ios_vlans - Add purged state to deal with toplevel vlan and vlan configuration + config. + fragments: + - fix_ios_bgp_global_20231204173037.yaml + - fix_ios_l3_interfacel_20231207172506.yaml + - ios_facts_tests.yml + - ios_l3_ipv6.yml + - ios_user_fix.yml + - ios_vlans_revert.yml + - snmp_server_ipv6_acl.yml + - template_revoke_bgp.yaml + release_date: "2024-01-11" + 6.1.1: + changes: + bugfixes: + - Prevents module_defaults from were being incorrectly applied to the platform + action, instead of the concerned module. + - ios_vlans - fixes behaviour of shutdown attribute with action states. + fragments: + - module_defaults.yaml + - vlan_shutdown_fix.yaml + release_date: "2024-01-30" + 6.1.2: + changes: + bugfixes: + - ios_acls - Fix replaced state to consider remarks and ace entries while comparing + configuration. + - ios_acls - correctly match the different line for ACL without sequence number + - ios_acls - take correctly in case where we want to push an ACL from a different + type + - ios_ospfv2 - Fix improper rendering of admin_distance attribute. + - ios_snmp_server - fixed config issue with snmp user password update being + idempotent on consecutive runs. + - ios_user - Fix configuration of hashed passwords and secrets. + fragments: + - ios_acls_changes.yml + - ios_acls_replaced_state.yml + - ios_user_bug.yml + - ospfv2_admin_distance_fix.yml + - snmp_idempotancy_fix.yml + release_date: "2024-02-14" + 6.1.3: + changes: + bugfixes: + - ios_acls - Adds back existing remarks for an ace entry when updated with replaced + or overridden state, as all remarks for a specific sequence gets removed when + ace entry is updated. + - ios_bgp_global - Shutdown attributes generates negate command on set as false. + - ios_vrf - Update and add missing argspec keys that define the attributes. + doc_changes: + - ios_vrf - Update and add missing documentation for ios_vrf module. + fragments: + - bgp_global_shutdown.yml + - ios_acls_sticky.yml + - ios_vrf_docfix.yml + release_date: "2024-03-08" + 6.1.4: + changes: + bugfixes: + - ios_acls - update module to apply remarks entry with sequence numbers. + - ios_bgp_address_family - description attribute, evalutated as complex object + casted to string. + - ios_bgp_global - description attribute, evalutated as complex object casted + to string. + - ios_interfaces - description attribute, evalutated as complex object casted + to string. + - ios_prefix_lists - description attribute, evalutated as complex object casted + to string. + - ios_route_maps - description attribute, evalutated as complex object casted + to string. + fragments: + - acl_refactor.yaml + - json_serializable_issue.yaml + release_date: "2024-03-27" + 7.0.0: + changes: + major_changes: + - ios_ntp - Remove deprecated ntp legacy module + removed_features: + - Deprecated ios_ntp module in favor of ios_ntp_global. + fragments: + - remove_deprecated.yml + release_date: "2024-04-01" + 8.0.0: + changes: + major_changes: + - Update the netcommon base version 6.1.0 to support cli_restore plugin. + minor_changes: + - Add support for cli_restore functionality. + - Please refer the PR to know more about core changes (https://github.com/ansible-collections/ansible.netcommon/pull/618). + - cli_restore module is part of netcommon. + fragments: + - add_restore_support.yaml + - sanityfix.yml + release_date: "2024-04-12" diff --git a/ansible_collections/cisco/ios/changelogs/config.yaml b/ansible_collections/cisco/ios/changelogs/config.yaml index e7a09b4e5..f18533f71 100644 --- a/ansible_collections/cisco/ios/changelogs/config.yaml +++ b/ansible_collections/cisco/ios/changelogs/config.yaml @@ -1,3 +1,4 @@ +--- changelog_filename_template: ../CHANGELOG.rst changelog_filename_version_depth: 0 changes_file: changelog.yaml diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_acls_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_acls_module.rst index a76156dd6..bb0328d87 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_acls_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_acls_module.rst @@ -3145,6 +3145,8 @@ Parameters
The remarks/description of the ACL.
The remarks attribute used within an ace with or without a sequence number will produce remarks that are pushed before the ace entry.
Remarks entry used as the only key in as the list option will produce non ace specific remarks, these remarks would be pushed at the end of all the aces for an acl.
+
Remarks is treated a block, for every single remarks updated for an ace all the remarks are negated and added back to maintain the order of remarks mentioned.
+
As the appliance deletes all the remarks once the ace is updated, the set of remarks would be re-applied that is an expected behavior.
@@ -5195,6 +5197,347 @@ Examples # ip access-list extended 150 # 10 deny tcp 198.51.100.0 0.0.0.255 eq telnet 198.51.110.0 0.0.0.255 eq telnet syn dscp ef ttl eq 10 + # Using overridden - example remarks specific on multiple sequence + + # Before state: + # ------------- + # + # vios#show running-config | section access-list + # ip access-list extended TEST + # 10 remark FIRST REMARK BEFORE SEQUENCE 10 + # 10 remark ============ + # 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + # 20 remark FIRST REMARK BEFORE SEQUENCE 20 + # 20 remark ============ + # 20 remark ALLOW HOST FROM SEQUENCE 20 + # 20 permit ip host 1.1.1.1 any + # 30 remark FIRST REMARK BEFORE SEQUENCE 30 + # 30 remark ============ + # 30 remark ALLOW HOST FROM SEQUENCE 30 + # 30 permit ip host 2.2.2.2 any + # 40 remark FIRST REMARK BEFORE SEQUENCE 40 + # 40 remark ============ + # 40 remark ALLOW NEW HOST FROM SEQUENCE 40 + # 40 permit ip host 3.3.3.3 any + # remark Remark not specific to sequence + # remark ============ + # remark End Remarks + # ip access-list extended test_acl + # 10 deny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www fin option traceroute ttl eq 10 + # ip access-list extended 110 + # 10 deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10 + # ip access-list extended 123 + # 10 deny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255 eq telnet ack tos 12 + # 20 deny tcp 192.0.3.0 0.0.0.255 192.0.4.0 0.0.0.255 eq www ack dscp ef ttl lt 20 + # ipv6 access-list R1_TRAFFIC + # sequence 10 deny tcp any eq www any eq telnet ack dscp af11 + + - name: Override remarks and ace configurations + cisco.ios.ios_acls: + config: + - afi: ipv4 + acls: + - name: TEST + acl_type: extended + aces: + - sequence: 10 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 10" + - "============" + - "REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE" + grant: permit + protocol: ip + source: + host: 1.1.1.1 + destination: + any: true + - sequence: 20 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 20" + - "============" + - "ALLOW HOST FROM SEQUENCE 20" + grant: permit + protocol: ip + source: + host: 192.168.0.1 + destination: + any: true + - sequence: 30 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 30" + - "============" + - "ALLOW HOST FROM SEQUENCE 30 updated" + grant: permit + protocol: ip + source: + host: 2.2.2.2 + destination: + any: true + - sequence: 40 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 40" + - "============" + - "ALLOW NEW HOST FROM SEQUENCE 40" + grant: permit + protocol: ip + source: + host: 3.3.3.3 + destination: + any: true + - remarks: + - "Remark not specific to sequence" + - "============" + - "End Remarks 1" + state: overridden + + # Task Output + # ----------- + # + # before: + # - acls: + # - aces: + # - destination: + # address: 192.0.3.0 + # wildcard_bits: 0.0.0.255 + # dscp: ef + # grant: deny + # protocol: icmp + # protocol_options: + # icmp: + # echo: true + # sequence: 10 + # source: + # address: 192.0.2.0 + # wildcard_bits: 0.0.0.255 + # ttl: + # eq: 10 + # acl_type: extended + # name: '110' + # - aces: + # - destination: + # address: 198.51.101.0 + # port_protocol: + # eq: telnet + # wildcard_bits: 0.0.0.255 + # grant: deny + # protocol: tcp + # protocol_options: + # tcp: + # ack: true + # sequence: 10 + # source: + # address: 198.51.100.0 + # wildcard_bits: 0.0.0.255 + # tos: + # service_value: 12 + # - destination: + # address: 192.0.4.0 + # port_protocol: + # eq: www + # wildcard_bits: 0.0.0.255 + # dscp: ef + # grant: deny + # protocol: tcp + # protocol_options: + # tcp: + # ack: true + # sequence: 20 + # source: + # address: 192.0.3.0 + # wildcard_bits: 0.0.0.255 + # ttl: + # lt: 20 + # acl_type: extended + # name: '123' + # - aces: + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 20 + # - ============ + # - ALLOW HOST FROM SEQUENCE 20 + # sequence: 20 + # source: + # host: 1.1.1.1 + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 30 + # - ============ + # - ALLOW HOST FROM SEQUENCE 30 + # sequence: 30 + # source: + # host: 2.2.2.2 + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 40 + # - ============ + # - ALLOW NEW HOST FROM SEQUENCE 40 + # sequence: 40 + # source: + # host: 3.3.3.3 + # - remarks: + # - FIRST REMARK BEFORE SEQUENCE 10 + # - ============ + # - REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + # sequence: 10 + # - remarks: + # - Remark not specific to sequence + # - ============ + # - End Remarks + # acl_type: extended + # name: TEST + # - aces: + # - destination: + # address: 192.0.3.0 + # port_protocol: + # eq: www + # wildcard_bits: 0.0.0.255 + # grant: deny + # option: + # traceroute: true + # protocol: tcp + # protocol_options: + # tcp: + # fin: true + # sequence: 10 + # source: + # address: 192.0.2.0 + # wildcard_bits: 0.0.0.255 + # ttl: + # eq: 10 + # acl_type: extended + # name: test_acl + # afi: ipv4 + # - acls: + # - aces: + # - destination: + # any: true + # port_protocol: + # eq: telnet + # dscp: af11 + # grant: deny + # protocol: tcp + # protocol_options: + # tcp: + # ack: true + # sequence: 10 + # source: + # any: true + # port_protocol: + # eq: www + # name: R1_TRAFFIC + # afi: ipv6 + # commands: + # - no ipv6 access-list R1_TRAFFIC + # - ip access-list extended TEST + # - no 10 # removes all remarks and ace entry for sequence 10 + # - no 20 permit ip host 1.1.1.1 any # removing the ace automatically removes the remarks + # - no 30 remark # just remove remarks for sequence 30 + # - no remark # remove all remarks at end of acl, that has no sequence + # - 10 remark FIRST REMARK BEFORE SEQUENCE 10 + # - 10 remark ============ + # - 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + # - 10 permit ip host 1.1.1.1 any + # - 20 remark FIRST REMARK BEFORE SEQUENCE 20 + # - 20 remark ============ + # - 20 remark ALLOW HOST FROM SEQUENCE 20 + # - 20 permit ip host 192.168.0.1 any + # - 30 remark FIRST REMARK BEFORE SEQUENCE 30 + # - 30 remark ============ + # - 30 remark ALLOW HOST FROM SEQUENCE 30 updated + # - remark Remark not specific to sequence + # - remark ============ + # - remark End Remarks 1 + # - no ip access-list extended 110 + # - no ip access-list extended 123 + # - no ip access-list extended test_acl + # after: + # - acls: + # - aces: + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 10 + # - ============ + # - REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + # sequence: 10 + # source: + # host: 1.1.1.1 + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 20 + # - ============ + # - ALLOW HOST FROM SEQUENCE 20 + # sequence: 20 + # source: + # host: 192.168.0.1 + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 30 + # - ============ + # - ALLOW HOST FROM SEQUENCE 30 updated + # sequence: 30 + # source: + # host: 2.2.2.2 + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 40 + # - ============ + # - ALLOW NEW HOST FROM SEQUENCE 40 + # sequence: 40 + # source: + # host: 3.3.3.3 + # - remarks: + # - Remark not specific to sequence + # - ============ + # - End Remarks 1 + # acl_type: extended + # name: TEST + # afi: ipv4 + + # After state: + # ------------- + # + # foo#show running-config | section access-list + # ip access-list extended TEST + # 10 remark FIRST REMARK BEFORE SEQUENCE 10 + # 10 remark ============ + # 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + # 10 permit ip host 1.1.1.1 any + # 20 remark FIRST REMARK BEFORE SEQUENCE 20 + # 20 remark ============ + # 20 remark ALLOW HOST FROM SEQUENCE 20 + # 20 permit ip host 192.168.0.1 any + # 30 remark FIRST REMARK BEFORE SEQUENCE 30 + # 30 remark ============ + # 30 remark ALLOW HOST FROM SEQUENCE 30 updated + # 30 permit ip host 2.2.2.2 any + # 40 remark FIRST REMARK BEFORE SEQUENCE 40 + # 40 remark ============ + # 40 remark ALLOW NEW HOST FROM SEQUENCE 40 + # 40 permit ip host 3.3.3.3 any + # remark Remark not specific to sequence + # remark ============ + # remark End Remarks 1 # Using deleted - delete ACL(s) diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_address_family_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_address_family_module.rst index 25fb233ac..268217811 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_address_family_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_address_family_module.rst @@ -8060,7 +8060,7 @@ Notes ----- .. note:: - - Tested against Cisco IOSXE Version 17.3 on CML. + - Tested against Cisco IOS-XE Version 17.3 on CML. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html - The module examples uses callback plugin (stdout_callback = yaml) to generate task output in yaml format. diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_global_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_global_module.rst index ad461f776..77eb908c5 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_global_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_global_module.rst @@ -1462,6 +1462,88 @@ Parameters + + + + +
+ default + +
+ dictionary +
+ + + + +
Configure BGP defaults
+ + + + + + + +
+ ipv4_unicast + +
+ boolean +
+ + +
    Choices: +
  • no
  • +
  • yes ←
  • +
+ + +
Activate ipv4-unicast for a peer by default
+ + + + + + + +
+ route_target + +
+ dictionary +
+ + + + +
Control behavior based on Route-Target attributes
+ + + + + + + + +
+ filter + +
+ boolean +
+ + +
    Choices: +
  • no
  • +
  • yes ←
  • +
+ + +
Control automatic VPN Route-Target filtering
+ + + + @@ -9269,7 +9351,6 @@ Parameters
Enter template command mode
-
This option is DEPRECATED as is not valid within the scope of module, this attribute will be removed after 2024-06-01.
@@ -9432,7 +9513,7 @@ Notes ----- .. note:: - - Tested against Cisco IOSXE Version 17.3 on CML. + - Tested against Cisco IOS-XE Version 17.3 on CML. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html - The module examples uses callback plugin (stdout_callback = yaml) to generate task output in yaml format. @@ -9463,6 +9544,10 @@ Examples reuse_route_val: 1 suppress_route_val: 1 max_suppress: 1 + default: + ipv4_unicast: false + route_target: + filter: true graceful_shutdown: neighbors: time: 50 @@ -9506,6 +9591,7 @@ Examples # - timers bgp 100 200 150 # - bgp advertise-best-external # - bgp bestpath compare-routerid + # - no bgp default ipv4-unicast # - bgp dampening 1 1 1 1 # - bgp graceful-shutdown all neighbors 50 local-preference 100 community 100 # - bgp log-neighbor-changes @@ -9528,6 +9614,10 @@ Examples # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 + # default: + # ipv4_unicast: false + # route_target: + # filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -9567,6 +9657,7 @@ Examples # # vios#sh running-config | section ^router bgp # router bgp 65000 + # no bgp default ipv4-unicast # bgp log-neighbor-changes # bgp nopeerup-delay post-boot 10 # bgp graceful-shutdown all neighbors 50 local-preference 100 community 100 @@ -9639,6 +9730,10 @@ Examples # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 + # default: + # ipv4_unicast: true + # route_target: + # filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -9686,6 +9781,10 @@ Examples # bestpath_options: # med: # confed: true + # default: + # ipv4_unicast: true + # route_target: + # filter: true # log_neighbor_changes: true # nopeerup_delay_options: # cold_boot: 20 @@ -9752,6 +9851,10 @@ Examples # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 + # default: + # ipv4_unicast: true + # route_target: + # filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -9827,6 +9930,10 @@ Examples # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 + # default: + # ipv4_unicast: true + # route_target: + # filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -9898,6 +10005,10 @@ Examples # advertise_best_external: true # bestpath_options: # compare_routerid: true + # default: + # ipv4_unicast: true + # route_target: + # filter: true # dampening: # max_suppress: 1 # penalty_half_time: 1 @@ -9974,6 +10085,10 @@ Examples # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 + # default: + # ipv4_unicast: true + # route_target: + # filter: true # graceful_shutdown: # community: '100' # local_preference: 100 diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_module.rst deleted file mode 100644 index c8aa774b0..000000000 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_module.rst +++ /dev/null @@ -1,1142 +0,0 @@ -.. _cisco.ios.ios_bgp_module: - - -***************** -cisco.ios.ios_bgp -***************** - -**Module to configure BGP protocol settings.** - - -Version added: 1.0.0 - -.. contents:: - :local: - :depth: 1 - -DEPRECATED ----------- -:Removed in collection release after 2023-08-24 -:Why: Newer and updated modules released with more functionality -:Alternative: ios_bgp_global - - - -Synopsis --------- -- This module provides configuration management of global BGP parameters on devices running Cisco IOS - - - - -Parameters ----------- - -.. raw:: html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterChoices/DefaultsComments
-
- config - -
- dictionary -
-
- -
Specifies the BGP related configuration.
-
-
- address_family - -
- list - / elements=dictionary -
-
- -
Specifies BGP address family related configurations.
-
-
- afi - -
- string - / required -
-
-
    Choices: -
  • ipv4
  • -
  • ipv6
  • -
-
-
Type of address family to configure.
-
-
- auto_summary - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Enable/disable automatic network number summarization.
-
-
- neighbors - -
- list - / elements=dictionary -
-
- -
Specifies BGP neighbor related configurations in Address Family configuration mode.
-
-
- activate - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Enable the Address Family for this Neighbor.
-
-
- advertisement_interval - -
- integer -
-
- -
Minimum interval between sending BGP routing updates for this neighbor.
-
-
- maximum_prefix - -
- integer -
-
- -
Maximum number of prefixes to accept from this peer.
-
The range is from 1 to 2147483647.
-
-
- neighbor - -
- string - / required -
-
- -
Neighbor router address.
-
-
- next_hop_self - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Enable/disable the next hop calculation for this neighbor.
-
-
- next_hop_unchanged - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Propagate next hop unchanged for iBGP paths to this neighbor.
-
-
- prefix_list_in - -
- string -
-
- -
Name of ip prefix-list to apply to incoming prefixes.
-
-
- prefix_list_out - -
- string -
-
- -
Name of ip prefix-list to apply to outgoing prefixes.
-
-
- remove_private_as - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Remove the private AS number from outbound updates.
-
-
- route_reflector_client - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Specify a neighbor as a route reflector client.
-
-
- route_server_client - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Specify a neighbor as a route server client.
-
-
- networks - -
- list - / elements=dictionary -
-
- -
Specify Networks to announce via BGP.
-
For operation replace, this option is mutually exclusive with root level networks option.
-
-
- masklen - -
- integer -
-
- -
Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.).
-
-
- prefix - -
- string - / required -
-
- -
Network ID to announce via BGP.
-
-
- route_map - -
- string -
-
- -
Route map to modify the attributes.
-
-
- redistribute - -
- list - / elements=dictionary -
-
- -
Specifies the redistribute information from another routing protocol.
-
-
- id - -
- string -
-
- -
Identifier for the routing protocol for configuring redistribute information.
-
Valid for protocols 'ospf', 'ospfv3' and 'eigrp'.
-
-
- metric - -
- integer -
-
- -
Specifies the metric for redistributed routes.
-
-
- protocol - -
- string - / required -
-
-
    Choices: -
  • ospf
  • -
  • ospfv3
  • -
  • eigrp
  • -
  • isis
  • -
  • static
  • -
  • connected
  • -
  • odr
  • -
  • lisp
  • -
  • mobile
  • -
  • rip
  • -
-
-
Specifies the protocol for configuring redistribute information.
-
-
- route_map - -
- string -
-
- -
Specifies the route map reference.
-
-
- safi - -
- string -
-
-
    Choices: -
  • flowspec
  • -
  • unicast ←
  • -
  • multicast
  • -
  • labeled-unicast
  • -
-
-
Specifies the type of cast for the address family.
-
-
- synchronization - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Enable/disable IGP synchronization.
-
-
- bgp_as - -
- integer - / required -
-
- -
Specifies the BGP Autonomous System (AS) number to configure on the device.
-
-
- log_neighbor_changes - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Enable/disable logging neighbor up/down and reset reason.
-
-
- neighbors - -
- list - / elements=dictionary -
-
- -
Specifies BGP neighbor related configurations.
-
-
- description - -
- string -
-
- -
Neighbor specific description.
-
-
- ebgp_multihop - -
- integer -
-
- -
Specifies the maximum hop count for EBGP neighbors not on directly connected networks.
-
The range is from 1 to 255.
-
-
- enabled - -
- boolean -
-
-
    Choices: -
  • no
  • -
  • yes
  • -
-
-
Administratively shutdown or enable a neighbor.
-
-
- local_as - -
- integer -
-
- -
The local AS number for the neighbor.
-
-
- neighbor - -
- string - / required -
-
- -
Neighbor router address.
-
-
- password - -
- string -
-
- -
Password to authenticate the BGP peer connection.
-
-
- peer_group - -
- string -
-
- -
Name of the peer group that the neighbor is a member of.
-
-
- remote_as - -
- integer - / required -
-
- -
Remote AS of the BGP neighbor to configure.
-
-
- timers - -
- dictionary -
-
- -
Specifies BGP neighbor timer related configurations.
-
-
- holdtime - -
- integer - / required -
-
- -
Interval (in seconds) after not receiving a keepalive message that IOS declares a peer dead.
-
The range is from 0 to 65535.
-
-
- keepalive - -
- integer - / required -
-
- -
Frequency (in seconds) with which the device sends keepalive messages to its peer.
-
The range is from 0 to 65535.
-
-
- min_neighbor_holdtime - -
- integer -
-
- -
Interval (in seconds) specifying the minimum acceptable hold-time from a BGP neighbor.
-
The minimum acceptable hold-time must be less than, or equal to, the interval specified in the holdtime argument.
-
The range is from 0 to 65535.
-
-
- update_source - -
- string -
-
- -
Source of the routing updates.
-
-
- networks - -
- list - / elements=dictionary -
-
- -
Specify Networks to announce via BGP.
-
For operation replace, this option is mutually exclusive with networks option under address_family.
-
For operation replace, if the device already has an address family activated, this option is not allowed.
-
-
- masklen - -
- integer -
-
- -
Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.).
-
-
- prefix - -
- string - / required -
-
- -
Network ID to announce via BGP.
-
-
- route_map - -
- string -
-
- -
Route map to modify the attributes.
-
-
- router_id - -
- string -
-
- Default:
null
-
-
Configures the BGP routing process router-id value.
-
-
- operation - -
- string -
-
-
    Choices: -
  • merge ←
  • -
  • replace
  • -
  • override
  • -
  • delete
  • -
-
-
Specifies the operation to be performed on the BGP process configured on the device.
-
In case of merge, the input configuration will be merged with the existing BGP configuration on the device.
-
In case of replace, if there is a diff between the existing configuration and the input configuration, the existing configuration will be replaced by the input configuration for every option that has the diff.
-
In case of override, all the existing BGP configuration will be removed from the device and replaced with the input configuration.
-
In case of delete the existing BGP configuration will be removed from the device.
-
-
- - -Notes ------ - -.. note:: - - Tested against Cisco IOS Version 15.6(3)M2 - - - -Examples --------- - -.. code-block:: yaml - - - name: Configure global bgp as 64496 - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - router_id: 192.0.2.1 - log_neighbor_changes: true - neighbors: - - neighbor: 203.0.113.5 - remote_as: 64511 - timers: - keepalive: 300 - holdtime: 360 - min_neighbor_holdtime: 360 - - neighbor: 198.51.100.2 - remote_as: 64498 - networks: - - prefix: 198.51.100.0 - route_map: RMAP_1 - - prefix: 192.0.2.0 - masklen: 23 - address_family: - - afi: ipv4 - safi: unicast - redistribute: - - protocol: ospf - id: 223 - metric: 10 - operation: merge - - - name: Configure BGP neighbors - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.10 - remote_as: 64496 - password: ansible - description: IBGP_NBR_1 - ebgp_multihop: 100 - timers: - keepalive: 300 - holdtime: 360 - min_neighbor_holdtime: 360 - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - operation: merge - - - name: Configure root-level networks for BGP - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - prefix: 203.0.113.32 - masklen: 27 - route_map: RMAP_2 - operation: merge - - - name: Configure BGP neighbors under address family mode - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: unicast - neighbors: - - neighbor: 203.0.113.10 - activate: true - maximum_prefix: 250 - advertisement_interval: 120 - - neighbor: 192.0.2.15 - activate: true - route_reflector_client: true - operation: merge - - - name: Remove bgp as 64496 from config - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - operation: delete - - - -Return Values -------------- -Common return values are documented `here `_, the following are the fields unique to this module: - -.. raw:: html - - - - - - - - - - - - -
KeyReturnedDescription
-
- commands - -
- list -
-
always -
The list of configuration mode commands to send to the device
-
-
Sample:
-
['router bgp 64496', 'bgp router-id 192.0.2.1', 'bgp log-neighbor-changes', 'neighbor 203.0.113.5 remote-as 64511', 'neighbor 203.0.113.5 timers 300 360 360', 'neighbor 198.51.100.2 remote-as 64498', 'network 198.51.100.0 route-map RMAP_1', 'network 192.0.2.0 mask 255.255.254.0', 'address-family ipv4', 'redistribute ospf 223 metric 70', 'exit-address-family']
-
-

- - -Status ------- - - -- This module will be removed in a release after 2023-08-24. *[deprecated]* -- For more information see `DEPRECATED`_. - - -Authors -~~~~~~~ - -- Nilashish Chakraborty (@NilashishC) diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_evi_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_evi_module.rst index 9c19c8cdf..777fafa72 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_evi_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_evi_module.rst @@ -329,7 +329,7 @@ Notes ----- .. note:: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_global_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_global_module.rst index e9b71bbbd..4ee7194b6 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_global_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_global_module.rst @@ -343,7 +343,7 @@ Notes ----- .. note:: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_l3_interfaces_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_l3_interfaces_module.rst index f75d03be8..c9195fc50 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_l3_interfaces_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_l3_interfaces_module.rst @@ -51,6 +51,26 @@ Parameters + +
+ autostate + +
+ boolean +
+ + +
    Choices: +
  • no
  • +
  • yes
  • +
+ + +
Enable autostate determination for VLAN.
+ + + +
ipv4 @@ -234,6 +254,86 @@ Parameters
Configures the IP address as a secondary address.
+ + + + +
+ source_interface + +
+ dictionary +
+ + + + +
Enable IP processing without an explicit address
+ + + + + + + +
+ name + +
+ string +
+ + + + +
Interface name
+ + + + + + + +
+ point_to_point + +
+ boolean +
+ + +
    Choices: +
  • no
  • +
  • yes
  • +
+ + +
Enable point-to-point connection
+ + + + + + + +
+ poll + +
+ boolean +
+ + +
    Choices: +
  • no
  • +
  • yes
  • +
+ + +
Enable IP connected host polling
+ + + @@ -436,6 +536,27 @@ Parameters + + + + +
+ enable + +
+ boolean +
+ + +
    Choices: +
  • no
  • +
  • yes
  • +
+ + +
Enable IPv6 on interface
+ + @@ -563,6 +684,22 @@ Parameters + + + +
+ mac_address + +
+ string +
+ + + + +
Manually set interface MAC address.
+ + @@ -691,6 +828,13 @@ Examples - name: GigabitEthernet3.100 ipv4: - address: 192.168.0.3/24 + - name: Vlan901 + autostate: false + ipv4: + - source_interface: + name: Loopback1 + ipv6: + - enable: true state: merged # Task Output @@ -715,6 +859,10 @@ Examples # - ipv6 address fd5d:12c9:2201:1::1/64 # - interface GigabitEthernet3.100 # - ip address 192.168.0.3 255.255.255.0 + # - interface Vlan901 + # - ip unnumbered Loopback1 + # - ipv6 enable + # - no autostate # after: # - ipv4: # - dhcp: @@ -731,6 +879,13 @@ Examples # - address: 192.168.0.3/24 # - name: GigabitEthernet4 # - name: Loopback999 + # ipv4: + # - source_interface: + # name: Loopback1 + # ipv6: + # - enable: true + # autostate: false + # - name: Vlan901 # After state: # ------------ @@ -761,6 +916,11 @@ Examples # no ip address # shutdown # negotiation auto + # interface Vlan901 + # ip unnumbered Loopback1 + # ipv6 enable + # no autostate + # Using replaced diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_ntp_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_ntp_module.rst deleted file mode 100644 index 9979a45ae..000000000 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_ntp_module.rst +++ /dev/null @@ -1,291 +0,0 @@ -.. _cisco.ios.ios_ntp_module: - - -***************** -cisco.ios.ios_ntp -***************** - -**(deprecated, removed after 2024-01-01) Manages core NTP configuration.** - - -Version added: 1.0.0 - -.. contents:: - :local: - :depth: 1 - -DEPRECATED ----------- -:Removed in collection release after 2024-01-01 -:Why: Updated module released with more functionality. -:Alternative: ios_ntp_global - - - -Synopsis --------- -- Manages core NTP configuration. - - - - -Parameters ----------- - -.. raw:: html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterChoices/DefaultsComments
-
- acl - -
- string -
-
- -
ACL for peer/server access restricition.
-
-
- auth - -
- boolean -
-
-
    Choices: -
  • no ←
  • -
  • yes
  • -
-
-
Enable NTP authentication. Data type boolean.
-
-
- auth_key - -
- string -
-
- -
md5 NTP authentication key of tye 7.
-
-
- key_id - -
- string -
-
- -
auth_key id. Data type string
-
-
- logging - -
- boolean -
-
-
    Choices: -
  • no ←
  • -
  • yes
  • -
-
-
Enable NTP logs. Data type boolean.
-
-
- server - -
- string -
-
- -
Network address of NTP server.
-
-
- source_int - -
- string -
-
- -
Source interface for NTP packets.
-
-
- state - -
- string -
-
-
    Choices: -
  • present ←
  • -
  • absent
  • -
-
-
Manage the state of the resource.
-
-
- vrf - -
- string -
-
- -
VRF configuration for NTP servers
-
-
- - -Notes ------ - -.. note:: - - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide ` - - For more information on using Ansible to manage Cisco devices see the `Cisco integration page `_. - - - -Examples --------- - -.. code-block:: yaml - - # Set new NTP server and source interface - - name: Example ntp play - cisco.ios.ios_ntp: - server: 10.0.255.10 - source_int: Loopback0 - logging: false - state: present - - # Remove NTP ACL and logging - - name: Example ntp play absent - cisco.ios.ios_ntp: - acl: NTP_ACL - logging: true - state: absent - - # Set NTP authentication - - name: Example ntp play auth - cisco.ios.ios_ntp: - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - state: present - - # Set new NTP configuration - - name: Example ntp play auth - cisco.ios.ios_ntp: - server: 10.0.255.10 - source_int: Loopback0 - acl: NTP_ACL - logging: true - vrf: mgmt - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - state: present - - - -Return Values -------------- -Common return values are documented `here `_, the following are the fields unique to this module: - -.. raw:: html - - - - - - - - - - - - -
KeyReturnedDescription
-
- commands - -
- list -
-
always -
command sent to the device
-
-
Sample:
-
['no ntp server 10.0.255.10', 'no ntp source Loopback0']
-
-

- - -Status ------- - - -- This module will be removed in a release after 2024-01-01. *[deprecated]* -- For more information see `DEPRECATED`_. - - -Authors -~~~~~~~ - -- Federico Olivieri (@Federico87) -- Joanie Sylvain (@JoanieAda) diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_user_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_user_module.rst index e06ea5631..b4b3957d8 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_user_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_user_module.rst @@ -513,6 +513,17 @@ Examples .. code-block:: yaml + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username testuser privilege 15 password 0 password + + # Present state create a new user play: + # ------------------------------------- + - name: Create a new user cisco.ios.ios_user: name: ansible @@ -520,6 +531,37 @@ Examples sshkey: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" state: present + # Task Output + # ----------- + + # commands: + # - ip ssh pubkey-chain + # - username ansible + # - key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + # - exit + # - exit + # - username ansible nopassword + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username testuser privilege 15 password 0 password + # username ansible nopassword + # username ansible + # key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username testuser privilege 15 password 0 password + + # Present state create a new user with multiple keys play: + # -------------------------------------------------------- + - name: Create a new user with multiple keys cisco.ios.ios_user: name: ansible @@ -528,18 +570,109 @@ Examples - "{{ lookup('file', '~/path/to/public_key') }}" state: present + # Task Output + # ----------- + + # commands: + # - ip ssh pubkey-chain + # - username ansible + # - key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + # - key-hash ssh-rsa 1985673DCF7FA9A0F374BB97DC2ABB27 test@fedora + # - exit + # - exit + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username testuser privilege 15 password 0 password + # username ansible + # key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + # key-hash ssh-rsa 1985673DCF7FA9A0F374BB97DC2ABB27 test@fedora + + # Using Purge: true + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username testuser privilege 15 password 0 password + # username ansible nopassword + # username ansible + # key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + + # Purge all users except admin play: + # ---------------------------------- + - name: Remove all users except admin cisco.ios.ios_user: purge: true + # Task Output + # ----------- + + # commands: + # - no username testuser + # - no username ansible + # - ip ssh pubkey-chain + # - no username ansible + # - exit + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + + # Using Purge: true + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username testuser privilege 15 password 0 password1 + # username testuser1 privilege 15 password 0 password2 + # username ansible nopassword + + # Purge all users except admin and these listed users play: + # --------------------------------------------------------- + - name: Remove all users except admin and these listed users cisco.ios.ios_user: aggregate: + - name: testuser - name: testuser1 - - name: testuser2 - - name: testuser3 purge: true + # Task Output + # ----------- + + # commands: + # - no username ansible + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + # username testuser privilege 15 password 0 password1 + # username testuser1 privilege 15 password 0 password2 + + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username netop password 0 password1 + # username netend password 0 password2 + + # Present state set multiple users to privilege level 15 play: + # ------------------------------------------------------------ + - name: Set multiple users to privilege level 15 cisco.ios.ios_user: aggregate: @@ -548,38 +681,135 @@ Examples privilege: 15 state: present - - name: Set user view/role - cisco.ios.ios_user: - name: netop - view: network-operator - state: present + # Task Output + # ----------- + + # commands: + # - username netop privilege 15 + # - username netend privilege 15 + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + # username netop privilege 15 password 0 password1 + # username netend privilege 15 password 0 password2 + + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username netop privilege 15 password 0 oldpassword + + # Present state Change Password for User netop play: + # -------------------------------------------- - name: Change Password for User netop cisco.ios.ios_user: name: netop - configured_password: "{{ new_password }}" + configured_password: "newpassword" + password_type: password update_password: always state: present - - name: Aggregate of users + # Task Output + # ----------- + + # commands: + # - username netop password newpassword + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + # username netop privilege 15 password 0 newpassword + + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username netop privilege 15 password 0 password + # username netend privilege 15 password 0 password + + # Present state set user view/role for users play: + # -------------------------------------------- + + - name: Set user view/role for users cisco.ios.ios_user: aggregate: - - name: ansibletest2 - - name: ansibletest3 + - name: netop + - name: netend view: network-admin + state: present - - name: Add a user specifying password type - cisco.ios.ios_user: - name: ansibletest4 - configured_password: "{{ new_password }}" - password_type: password + # Task Output + # ----------- - - name: Add a user with MD5 hashed password + # commands: + # - username netop view network-admin + # - username netend view network-admin + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + # username netop privilege 15 view network-admin password 0 password + # username netend privilege 15 view network-admin password 0 password + + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + + # Present state create a new user with hashed password play: + # -------------------------------------------------------------- + + - name: Create a new user with hashed password cisco.ios.ios_user: name: ansibletest5 hashed_password: - type: 5 - value: $3$8JcDilcYgFZi.yz4ApaqkHG2.8/ + type: 9 + value: "thiswillbereplacedwithhashedpassword" + state: present + + # Task Output + # ----------- + + # commands: + # - username ansibletest5 secret 9 thiswillbereplacedwithhashedpassword + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + # username ansibletest5 secret 9 thiswillbereplacedwithhashedpassword + + # Using state: absent + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username ansibletest1 password 0 password + # username ansibletest2 secret 9 thiswillbereplacedwithhashedpassword + # username ansibletest3 password 5 thistoowillbereplacedwithhashedpassword + + # Absent state remove multiple users play: + # ---------------------------------------- - name: Delete users with aggregate cisco.ios.ios_user: @@ -589,6 +819,20 @@ Examples - name: ansibletest3 state: absent + # Task Output + # ----------- + + # commands: + # - no username ansibletest1 + # - no username ansibletest2 + # - no username ansibletest3 + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + Return Values diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vlans_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vlans_module.rst index 598486c57..78fa5ec97 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vlans_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vlans_module.rst @@ -270,25 +270,6 @@ Parameters - - -
- configuration - -
- boolean -
- - -
    Choices: -
  • no
  • -
  • yes
  • -
- - -
When set to true, deals with vlan configuration CLIs
- -
@@ -323,6 +304,7 @@ Parameters
  • deleted
  • rendered
  • gathered
  • +
  • purged
  • parsed
  • @@ -331,7 +313,7 @@ Parameters
    The states rendered, gathered and parsed does not perform any change on the device.
    The state rendered will transform the configuration in config option to platform specific CLI commands which will be returned in the rendered key within the result. For state rendered active connection to remote host is not required.
    The state gathered will fetch the running configuration from device and transform it into structured data in the format as per the resource module argspec and the value is returned in the gathered key within the result.
    -
    The state parsed reads the configuration from running_config option and transforms it into JSON format as per the resource module parameters and the value is returned in the parsed key within the result. The value of running_config option should be the same format as the output of command show running-config | include ip route|ipv6 route executed on device. For state parsed active connection to remote host is not required.
    +
    The state parsed reads the configuration from running_config option and transforms it into JSON format as per the resource module parameters and the value is returned in the parsed key within the result. The value of running_config option should be the same format as the output of commands show vlan and show running-config | sec ^vlan configuration .+ executed on device. For state parsed active connection to remote host is not required.
    @@ -342,7 +324,7 @@ Notes ----- .. note:: - - Tested against Cisco IOSl2 device with Version 15.2 on VIRL. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - Starting from v2.5.0, this module will fail when run against Cisco IOS devices that do not support VLANs. The offline states (``rendered`` and ``parsed``) will work as expected. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html @@ -424,7 +406,7 @@ Examples # ------------------------------------------------------------------------------ # 10 - # Using merged (configuration: True) + # Using merged # Before state: # ------------- @@ -446,7 +428,6 @@ Examples - vlan_id: 901 member: vni: 50901 - configuration: true state: merged # After state: @@ -525,7 +506,7 @@ Examples # 1005 trnet 101005 1500 - - - ibm - 0 0 - # Using overridden (configuration: True) + # Using overridden # Before state: # ------------- @@ -551,7 +532,6 @@ Examples member: vni: 10101 evi: 101 - configuration: true state: overridden # After state: @@ -723,7 +703,7 @@ Examples # 1004 fdnet 101004 1500 - - - ieee - 0 0 # 1005 trnet 101005 1500 - - - ibm - 0 0 - # Using deleted (configuration: True) + # Using deleted # Before state: # ------------- @@ -742,13 +722,13 @@ Examples cisco.ios.ios_vlans: config: - vlan_id: 101 - configuration: true state: deleted # After state: # ------------- # # Leaf-01#show run nve | sec ^vlan configuration + # vlan configuration 101 # vlan configuration 102 # member evpn-instance 102 vni 10102 # vlan configuration 201 @@ -813,7 +793,7 @@ Examples # 1004 fdnet 101004 1500 - - - ieee - 0 0 # 1005 trnet 101005 1500 - - - ibm - 0 0 - # Using Deleted without any config passed (configuration: True) + # Using Deleted without any config passed # "(NOTE: This will delete all of configured vlans attributes)" # Before state: @@ -833,7 +813,6 @@ Examples - name: Delete attributes of ALL VLANs cisco.ios.ios_vlans: - configuration: true state: deleted # After state: @@ -847,7 +826,7 @@ Examples # no vlan configuration 901 # no vlan configuration 902 - # Using Gathered (configuration: True) + # Using gathered, vlan configuration only # Before state: # ------------- @@ -866,8 +845,6 @@ Examples - name: Gather listed vlans with provided configurations cisco.ios.ios_vlans: - config: - configuration: true state: gathered # Module Execution Result: @@ -957,9 +934,9 @@ Examples # "shutdown" # ] - # Using Rendered (configuration: True) + # Using Rendered - - name: Render the commands for provided configuration + - name: Render the commands for provided configuration cisco.ios.ios_vlans: config: - vlan_id: 101 @@ -1076,7 +1053,7 @@ Examples # } # ] - # Using Parsed (configuration: True) + # Using Parsed Vlan configuration only # File: parsed.cfg # ---------------- @@ -1091,7 +1068,6 @@ Examples - name: Parse the commands for provided configuration cisco.ios.ios_vlans: running_config: "{{ lookup('file', './parsed.cfg') }}" - configuration: true state: parsed # Module Execution Result: @@ -1120,6 +1096,128 @@ Examples # } # ] + # Using Parsed, Vlan and vlan configuration + + # File: parsed.cfg + # ---------------- + # + # VLAN Name Status Ports + # ---- -------------------------------- --------- ------------------------------- + # 1 default active Gi0/1, Gi0/2 + # 101 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + # Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + # Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + # Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + # Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + # 150 VLAN0150 active + # 888 a_very_long_vlan_name_a_very_long_vlan_name + # active + # 1002 fddi-default act/unsup + # 1003 trcrf-default act/unsup + # 1004 fddinet-default act/unsup + # 1005 trbrf-default act/unsup + # + # VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + # ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + # 1 enet 100001 1500 - - - - - 0 0 + # 101 enet 100101 610 - - - - - 0 0 + # 150 enet 100150 1500 - - - - - 0 0 + # 888 enet 100888 1500 - - - - - 0 0 + # 1002 fddi 101002 1500 - - - - - 0 0 + # 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + # 1004 fdnet 101004 1500 - - - ieee - 0 0 + # 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + # + # + # VLAN AREHops STEHops Backup CRF + # ---- ------- ------- ---------- + # 1003 7 7 off + # + # Remote SPAN VLANs + # ------------------------------------------------------------------------------ + # 150 + # + # Primary Secondary Type Ports + # ------- --------- ----------------- ------------------------------------------ + # + # vlan configuration 101 + # member evpn-instance 101 vni 10101 + # vlan configuration 102 + # member evpn-instance 102 vni 10102 + # vlan configuration 901 + # member vni 50901 + + - name: Parse the commands for provided configuration + cisco.ios.ios_vlans: + running_config: "{{ lookup('file', './parsed.cfg') }}" + state: parsed + + # Module Execution Result: + # ------------------------ + # + # "parsed": [ + # { + # "name": "default", + # "vlan_id": 1, + # "state": "active", + # "shutdown": "disabled", + # "mtu": 1500, + # }, + # { + # "name": "RemoteIsInMyName", + # "vlan_id": 101, + # "state": "active", + # "shutdown": "enabled", + # "mtu": 610, + # "member": {"evi": 101, "vni": 10101}, + # }, + # { + # "name": "VLAN0150", + # "vlan_id": 150, + # "state": "active", + # "shutdown": "disabled", + # "mtu": 1500, + # "remote_span": True, + # }, + # { + # "name": "a_very_long_vlan_name_a_very_long_vlan_name", + # "vlan_id": 888, + # "state": "active", + # "shutdown": "disabled", + # "mtu": 1500, + # }, + # { + # "name": "fddi-default", + # "vlan_id": 1002, + # "state": "active", + # "shutdown": "enabled", + # "mtu": 1500, + # }, + # { + # "name": "trcrf-default", + # "vlan_id": 1003, + # "state": "active", + # "shutdown": "enabled", + # "mtu": 4472, + # }, + # { + # "name": "fddinet-default", + # "vlan_id": 1004, + # "state": "active", + # "shutdown": "enabled", + # "mtu": 1500, + # }, + # { + # "name": "trbrf-default", + # "vlan_id": 1005, + # "state": "active", + # "shutdown": "enabled", + # "mtu": 4472, + # }, + # {"vlan_id": 102, "member": {"evi": 102, "vni": 10102}}, + # {"vlan_id": 901, "member": {"vni": 50901}}, + # ] + Return Values @@ -1140,16 +1238,15 @@ Common return values are documented `here after
    - list + dictionary
    when changed -
    The configuration as structured data after module completion.
    +
    The resulting configuration after module execution.

    Sample:
    -
    The configuration returned will always be in the same format - of the parameters above.
    +
    This output will always be in the same format as the module argspec.
    @@ -1158,16 +1255,15 @@ Common return values are documented `here before
    - list + dictionary
    - always + when state is merged, replaced, overridden, deleted or purged -
    The configuration as structured data prior to module invocation.
    +
    The configuration prior to the module execution.

    Sample:
    -
    The configuration returned will always be in the same format - of the parameters above.
    +
    This output will always be in the same format as the module argspec.
    @@ -1179,12 +1275,63 @@ Common return values are documented `here list - always + when state is merged, replaced, overridden, deleted or purged
    The set of commands pushed to the remote device.

    Sample:
    -
    ['vlan 20', 'name vlan_20', 'mtu 600', 'remote-span']
    +
    ['vlan configuration 202', 'state active', 'remote-span']
    + + + + +
    + gathered + +
    + list +
    + + when state is gathered + +
    Facts about the network resource gathered from the remote device as structured data.
    +
    +
    Sample:
    +
    This output will always be in the same format as the module argspec.
    + + + + +
    + parsed + +
    + list +
    + + when state is parsed + +
    The device native config provided in running_config option parsed into structured data as per module argspec.
    +
    +
    Sample:
    +
    This output will always be in the same format as the module argspec.
    + + + + +
    + rendered + +
    + list +
    + + when state is rendered + +
    The provided configuration in the task rendered in device-native format (offline).
    +
    +
    Sample:
    +
    ['vlan configuration 202', 'member evpn-instance 202 vni 10202', 'vlan 200']
    @@ -1199,3 +1346,5 @@ Authors ~~~~~~~ - Sumit Jaiswal (@justjais) +- Sagar Paul (@KB-perByte) +- Padmini Priyadarshini Sivaraj (@PadminiSivaraj) diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vrf_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vrf_module.rst index 9223586e0..799399597 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vrf_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vrf_module.rst @@ -29,12 +29,12 @@ Parameters - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - diff --git a/ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_logging_module.rst b/ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_logging_module.rst deleted file mode 100644 index c75f0dc7d..000000000 --- a/ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_logging_module.rst +++ /dev/null @@ -1,538 +0,0 @@ -.. _cisco.iosxr.iosxr_logging_module: - - -************************* -cisco.iosxr.iosxr_logging -************************* - -**(deprecated, removed after 2023-08-01) Configuration management of system logging services on network devices** - - -Version added: 1.0.0 - -.. contents:: - :local: - :depth: 1 - -DEPRECATED ----------- -:Removed in collection release after 2023-08-01 -:Why: Updated module released with more functionality. -:Alternative: iosxr_logging_global - - - -Synopsis --------- -- This module provides declarative management configuration of system logging (syslog) on Cisco IOS XR devices. - - - -Requirements ------------- -The below requirements are needed on the host that executes this module. - -- ncclient >= 0.5.3 when using netconf -- lxml >= 4.1.1 when using netconf - - -Parameters ----------- - -.. raw:: html - -
    ParameterParameter Choices/Defaults Comments
    +
    address_family @@ -48,9 +48,303 @@ Parameters
    The list of address families with MDT parameters to be configured on the remote IOS device.
    +
    + afi + +
    + string +
    +
    +
      Choices: +
    • ipv4
    • +
    • ipv6
    • +
    +
    +
    Address family identifier.
    +
    +
    + mdt + +
    + dictionary +
    +
    + +
    MDT parameters.
    +
    +
    + auto_discovery + +
    + dictionary +
    +
    + +
    Auto-discovery parameters.
    +
    +
    + vxlan + +
    + dictionary +
    +
    + +
    Vxlan parameters.
    +
    +
    + enable + +
    + boolean +
    +
    +
      Choices: +
    • no
    • +
    • yes
    • +
    +
    +
    Enable VXLAN.
    +
    +
    + inter_as + +
    + boolean +
    +
    +
      Choices: +
    • no
    • +
    • yes
    • +
    +
    +
    Enable inter-as.
    +
    +
    + data + +
    + dictionary +
    +
    + +
    Parameters for data option.
    +
    +
    + threshold + +
    + integer +
    +
    + +
    Threshold value.
    +
    +
    + vxlan_mcast_group + +
    + string +
    +
    + +
    VXLAN multicast group value.
    +
    +
    + default + +
    + dictionary +
    +
    + +
    Parameters for default option.
    +
    +
    + vxlan_mcast_group + +
    + string +
    +
    + +
    VXLAN multicast group value.
    +
    +
    + overlay + +
    + dictionary +
    +
    + +
    Parameters for overlay option.
    +
    +
    + use_bgp + +
    + dictionary +
    +
    + +
    parameters for BGP option.
    +
    +
    + enable + +
    + boolean +
    +
    +
      Choices: +
    • no
    • +
    • yes
    • +
    +
    +
    Enable use BGP.
    +
    +
    + spt_only + +
    + boolean +
    +
    +
      Choices: +
    • no
    • +
    • yes
    • +
    +
    +
    Enable SPT only.
    +
    associated_interfaces @@ -66,7 +360,7 @@ Parameters
    +
    delay @@ -82,7 +376,7 @@ Parameters
    +
    description @@ -97,7 +391,7 @@ Parameters
    +
    interfaces @@ -113,7 +407,7 @@ Parameters
    +
    name @@ -128,7 +422,7 @@ Parameters
    +
    purge @@ -147,7 +441,7 @@ Parameters
    +
    rd @@ -162,7 +456,7 @@ Parameters
    +
    route_both @@ -178,7 +472,7 @@ Parameters
    +
    route_both_ipv4 @@ -194,7 +488,7 @@ Parameters
    +
    route_both_ipv6 @@ -210,7 +504,7 @@ Parameters
    +
    route_export @@ -226,7 +520,7 @@ Parameters
    +
    route_export_ipv4 @@ -242,7 +536,7 @@ Parameters
    +
    route_export_ipv6 @@ -258,7 +552,7 @@ Parameters
    +
    route_import @@ -274,7 +568,7 @@ Parameters
    +
    route_import_ipv4 @@ -290,7 +584,7 @@ Parameters
    +
    route_import_ipv6 @@ -306,7 +600,7 @@ Parameters
    +
    state @@ -325,7 +619,7 @@ Parameters
    +
    vrfs diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vxlan_vtep_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vxlan_vtep_module.rst index 3f1abc5f5..6359a2afa 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vxlan_vtep_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vxlan_vtep_module.rst @@ -391,7 +391,7 @@ Notes ----- .. note:: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html diff --git a/ansible_collections/cisco/ios/meta/runtime.yml b/ansible_collections/cisco/ios/meta/runtime.yml index 4a4bd852d..c7d437cb8 100644 --- a/ansible_collections/cisco/ios/meta/runtime.yml +++ b/ansible_collections/cisco/ios/meta/runtime.yml @@ -1,128 +1,5 @@ --- plugin_routing: - action: - acl_interfaces: - redirect: cisco.ios.ios - acls: - redirect: cisco.ios.ios - banner: - redirect: cisco.ios.ios - bgp: - redirect: cisco.ios.ios - bgp_global: - redirect: cisco.ios.ios - command: - redirect: cisco.ios.ios - config: - redirect: cisco.ios.ios - evpn_global: - redirect: cisco.ios.ios - evpn_evi: - redirect: cisco.ios.ios - facts: - redirect: cisco.ios.ios - hostname: - redirect: cisco.ios.ios - interfaces: - redirect: cisco.ios.ios - ios_acl_interfaces: - redirect: cisco.ios.ios - ios_acls: - redirect: cisco.ios.ios - ios_banner: - redirect: cisco.ios.ios - ios_bgp: - redirect: cisco.ios.ios - ios_bgp_global: - redirect: cisco.ios.ios - ios_command: - redirect: cisco.ios.ios - ios_config: - redirect: cisco.ios.ios - ios_evpn_global: - redirect: cisco.ios.ios - ios_evpn_evi: - redirect: cisco.ios.ios - ios_facts: - redirect: cisco.ios.ios - ios_hostname: - redirect: cisco.ios.ios - ios_linkagg: - redirect: cisco.ios.ios - ios_lldp: - redirect: cisco.ios.ios - ios_logging_global: - redirect: cisco.ios.ios - ios_ntp: - redirect: cisco.ios.ios - ios_ntp_global: - redirect: cisco.ios.ios - ios_ospfv2: - redirect: cisco.ios.ios - ios_ping: - redirect: cisco.ios.ios - ios_prefix_lists: - redirect: cisco.ios.ios - ios_route_maps: - redirect: cisco.ios.ios - ios_snmp_server: - redirect: cisco.ios.ios - ios_static_routes: - redirect: cisco.ios.ios - ios_system: - redirect: cisco.ios.ios - ios_vxlan_vtep: - redirect: cisco.ios.ios - l2_interfaces: - redirect: cisco.ios.ios - l3_interfaces: - redirect: cisco.ios.ios - lacp: - redirect: cisco.ios.ios - lacp_interfaces: - redirect: cisco.ios.ios - lag_interfaces: - redirect: cisco.ios.ios - linkagg: - redirect: cisco.ios.ios - lldp: - redirect: cisco.ios.ios - lldp_global: - redirect: cisco.ios.ios - lldp_interfaces: - redirect: cisco.ios.ios - logging: - redirect: cisco.ios.ios - logging_global: - redirect: cisco.ios.ios - ntp: - redirect: cisco.ios.ios - ntp_global: - redirect: cisco.ios.ios - ospfv2: - redirect: cisco.ios.ios - ping: - redirect: cisco.ios.ios - prefix_lists: - redirect: cisco.ios.ios - route_maps: - redirect: cisco.ios.ios - service: - redirect: cisco.ios.ios - snmp_server: - redirect: cisco.ios.ios - static_routes: - redirect: cisco.ios.ios - system: - redirect: cisco.ios.ios - user: - redirect: cisco.ios.ios - vlans: - redirect: cisco.ios.ios - vrf: - redirect: cisco.ios.ios - vxlan_vtep: - redirect: cisco.ios.ios modules: acl_interfaces: redirect: cisco.ios.ios_acl_interfaces @@ -130,11 +7,6 @@ plugin_routing: redirect: cisco.ios.ios_acls banner: redirect: cisco.ios.ios_banner - bgp: - deprecation: - removal_date: "2023-08-24" - warning_text: See the plugin documentation for more details - redirect: cisco.ios.ios_bgp bgp_global: redirect: cisco.ios.ios_bgp_global command: @@ -151,10 +23,6 @@ plugin_routing: redirect: cisco.ios.ios_hostname interfaces: redirect: cisco.ios.ios_interfaces - ios_bgp: - deprecation: - removal_date: "2023-08-24" - warning_text: See the plugin documentation for more details ios_linkagg: deprecation: removal_date: "2024-06-01" @@ -163,10 +31,6 @@ plugin_routing: deprecation: removal_date: "2024-06-01" warning_text: See the plugin documentation for more details - ios_ntp: - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details l2_interfaces: redirect: cisco.ios.ios_l2_interfaces l3_interfaces: @@ -193,11 +57,6 @@ plugin_routing: redirect: cisco.ios.ios_lldp_interfaces logging_global: redirect: cisco.ios.ios_logging_global - ntp: - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details - redirect: cisco.ios.ios_ntp ntp_global: redirect: cisco.ios.ios_ntp_global ospfv2: @@ -224,4 +83,4 @@ plugin_routing: redirect: cisco.ios.ios_vrf vxlan_vtep: redirect: cisco.ios.ios_vxlan_vtep -requires_ansible: ">=2.9.10" +requires_ansible: ">=2.14.0" diff --git a/ansible_collections/cisco/ios/platform_guide.rst b/ansible_collections/cisco/ios/platform_guide.rst new file mode 100644 index 000000000..036804a04 --- /dev/null +++ b/ansible_collections/cisco/ios/platform_guide.rst @@ -0,0 +1,94 @@ +.. _ios_platform_options: + +*************************************** +IOS Platform Options +*************************************** + +The `Cisco IOS `_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on IOS in Ansible. + +.. contents:: + :local: + +Connections available +================================================================================ + +.. table:: + :class: documentation-table + + ==================== ========================================== + .. CLI + ==================== ========================================== + Protocol SSH + + Credentials uses SSH keys / SSH-agent if present + + accepts ``-u myuser -k`` if using password + + Indirect Access by a bastion (jump host) + + Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` + + Enable_mode supported: use ``ansible_become: true`` with + ``ansible_become_method: enable`` and ``ansible_become_password:`` + + Returned Data Format ``stdout[0].`` + ==================== ========================================== + +The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead. + +Using CLI in Ansible +==================== + +Example CLI ``group_vars/ios.yml`` +---------------------------------- + +.. code-block:: yaml + + ansible_connection: ansible.netcommon.network_cli + ansible_network_os: cisco.ios.ios + ansible_user: myuser + ansible_password: !vault... + ansible_become: true + ansible_become_method: enable + ansible_become_password: !vault... + ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' + + +- If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. +- If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. +- If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords through environment variables. + +Example CLI task +---------------- + +.. code-block:: yaml + + - name: Backup current switch config (ios) + cisco.ios.ios_config: + backup: yes + register: backup_ios_location + when: ansible_network_os == 'cisco.ios.ios' + +Warning +-------- +Never store passwords in plain text. We recommend using SSH keys to authenticate SSH connections. Ansible supports ssh-agent to manage your SSH keys. If you must use passwords to authenticate SSH connections, we recommend encrypting them with Ansible Vault. + +Cisco IOS-XE platform support matrix +=================================== + +The following platforms and software versions have been certified by Cisco to work with this version of Ansible. + +.. table:: Platform / Software Minimum Requirements + :align: center + + =================== ===================== + Supported Platforms Minimum IOS-XE Version + =================== ===================== + Cisco IOS-XE 9000 17.03.2 and later + Cisco IOS-XE 8000 17.03.6 and later + =================== ===================== + +Notes +----- + +`Setting Timeout Option `_ diff --git a/ansible_collections/cisco/ios/plugins/action/ntp.py b/ansible_collections/cisco/ios/plugins/action/ntp.py deleted file mode 100644 index 38c0ed229..000000000 --- a/ansible_collections/cisco/ios/plugins/action/ntp.py +++ /dev/null @@ -1,56 +0,0 @@ -# -# (c) 2016 Red Hat Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - - -from ansible.utils.display import Display -from ansible_collections.ansible.netcommon.plugins.action.network import ( - ActionModule as ActionNetworkModule, -) - - -display = Display() - - -class ActionModule(ActionNetworkModule): - def run(self, tmp=None, task_vars=None): - del tmp # tmp no longer has any effect - - module_name = self._task.action.split(".")[-1] - self._config_module = True if module_name in ["ios_config", "config"] else False - persistent_connection = self._play_context.connection.split(".")[-1] - warnings = [] - - if persistent_connection != "network_cli": - return { - "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, - } - - result = super(ActionModule, self).run(task_vars=task_vars) - if warnings: - if "warnings" in result: - result["warnings"].extend(warnings) - else: - result["warnings"] = warnings - return result diff --git a/ansible_collections/cisco/ios/plugins/cliconf/ios.py b/ansible_collections/cisco/ios/plugins/cliconf/ios.py index be62c3724..324b7f000 100644 --- a/ansible_collections/cisco/ios/plugins/cliconf/ios.py +++ b/ansible_collections/cisco/ios/plugins/cliconf/ios.py @@ -180,6 +180,13 @@ class Cliconf(CliconfBase): return self.send_command(cmd) + @enable_mode + def restore(self, filename=None, path=""): + if not filename: + raise ValueError("'file_name' value is required for restore") + cmd = f"configure replace {path}{filename} force" + return self.send_command(cmd) + def get_diff( self, candidate=None, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py index 21bb051c3..6e82c99c2 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py @@ -163,6 +163,20 @@ class Bgp_globalArgs(object): # pylint: disable=R0903 "route_map": {"type": "str"}, }, }, + "default": { + "type": "dict", + "apply_defaults": True, + "options": { + "ipv4_unicast": {"type": "bool", "default": True}, + "route_target": { + "type": "dict", + "apply_defaults": True, + "options": { + "filter": {"type": "bool", "default": True}, + }, + }, + }, + }, "deterministic_med": {"type": "bool"}, "dmzlink_bw": {"type": "bool"}, "enforce_first_as": {"type": "bool"}, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py index 455261409..82ae98ee6 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py @@ -36,6 +36,8 @@ class L3_interfacesArgs(object): # pylint: disable=R0903 "type": "list", "elements": "dict", "options": { + "autostate": {"type": "bool"}, + "mac_address": {"type": "str"}, "name": {"type": "str", "required": True}, "ipv4": { "type": "list", @@ -54,6 +56,14 @@ class L3_interfacesArgs(object): # pylint: disable=R0903 }, }, "pool": {"type": "str"}, + "source_interface": { + "type": "dict", + "options": { + "name": {"type": "str"}, + "poll": {"type": "bool"}, + "point_to_point": {"type": "bool"}, + }, + }, }, }, "ipv6": { @@ -72,6 +82,7 @@ class L3_interfacesArgs(object): # pylint: disable=R0903 "rapid_commit": {"type": "bool"}, }, }, + "enable": {"type": "bool"}, "anycast": {"type": "bool"}, "cga": {"type": "bool"}, "eui": {"type": "bool"}, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/vlans/vlans.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/vlans/vlans.py index 9db593dcc..65e631817 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/vlans/vlans.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/vlans/vlans.py @@ -51,7 +51,10 @@ class VlansArgs(object): "private_vlan": { "type": "dict", "options": { - "type": {"type": "str", "choices": ["primary", "community", "isolated"]}, + "type": { + "type": "str", + "choices": ["primary", "community", "isolated"], + }, "associated": {"type": "list", "elements": "int"}, }, }, @@ -65,7 +68,6 @@ class VlansArgs(object): }, "type": "list", }, - "configuration": {"type": "bool"}, "running_config": {"type": "str"}, "state": { "choices": [ @@ -75,6 +77,7 @@ class VlansArgs(object): "deleted", "rendered", "parsed", + "purged", "gathered", ], "default": "merged", diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/acls/acls.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/acls/acls.py index 164c75c40..f604e4360 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/acls/acls.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/acls/acls.py @@ -119,6 +119,16 @@ class Acls(ResourceModule): for wname, wentry in iteritems(wplists): hentry = hplists.pop(wname, {}) acl_type = wentry["acl_type"] if wentry.get("acl_type") else hentry.get("acl_type") + # If ACLs type is different between existing and wanted ACL, we need first remove it + if acl_type != hentry.get("acl_type", acl_type): + self.commands.append( + "no " + self.acl_name_cmd(wname, afi, hentry.get("acl_type", "")), + ) + hentry.pop( + "aces", + {}, + ) # We remove ACEs because we have previously add a command to suppress completely the ACL + begin = len(self.commands) # to determine the index for acl command self._compare_aces( wentry.pop("aces", {}), @@ -159,20 +169,22 @@ class Acls(ResourceModule): else: return {} + # case 1 - loop on want and compare with have data here for wseq, wentry in iteritems(want): hentry = have.pop(wseq, {}) rem_hentry, rem_wentry = {}, {} - if hentry: + if hentry: # if there is have information with same sequence + # the protocol options are processed here hentry = self.sanitize_protocol_options(wentry, hentry) - if hentry != wentry: # will let in if ace is same but remarks is not same - if hentry: + if hentry != wentry: # if want and have is different + if hentry: # separate remarks from have in an ace entry rem_hentry["remarks"] = pop_remark(hentry, afi) - if wentry: + if wentry: # separate remarks from want in an ace entry rem_wentry["remarks"] = pop_remark(wentry, afi) - if hentry: + if hentry: # have aces processing starts here if self.state == "merged": self._module.fail_json( msg="Cannot update existing sequence {0} of ACLs {1} with state merged." @@ -180,55 +192,78 @@ class Acls(ResourceModule): hentry.get("sequence", ""), name, ), - ) - else: # other action states - if rem_hentry.get("remarks"): # remove remark if not in want - for k_hrems, hrems in rem_hentry.get("remarks").items(): - if k_hrems not in rem_wentry.get("remarks", {}).keys(): - if self.state in ["replaced", "overridden"]: - self.addcmd( - { - "remarks": hrems, - "sequence": hentry.get("sequence", ""), - }, - "remarks_no_data", - negate=True, - ) - break - else: - self.addcmd( - { - "remarks": hrems, - "sequence": hentry.get("sequence", ""), - }, - "remarks", - negate=True, - ) - # remove ace if not in want - if hentry != wentry: - self.addcmd(add_afi(hentry, afi), "aces", negate=True) + ) # if merged then don't update anything and fail + + # i.e if not merged + if rem_hentry.get("remarks") != rem_wentry.get("remarks"): + self.addcmd( + { + "sequence": hentry.get("sequence", None), + }, + "remarks_no_data", + negate=True, + ) # remove all remarks for a ace if want and have don't match + # as if we randomly add aces we cannot maintain order we have to + # add all of them again, for that ace + rem_hentry["remarks"] = {} + # and me empty our have as we would add back + # all our remarks for that ace anyways + + # remove ace if not in want + # we might think why not update it directly, + # if we try to update without negating the entry appliance + # reports % Duplicate sequence number + if hentry != wentry: + self.addcmd(add_afi(hentry, afi), "aces", negate=True) + # once an ace is negated intentionally emptying out have so that + # the remarks are repopulated, as the remarks and ace behavior is sticky + # if an ace is taken out all the remarks is removed automatically. + rem_hentry["remarks"] = {} + if rem_wentry.get("remarks"): # add remark if not in have + if rem_hentry.get("remarks"): + self.addcmd( + { + "sequence": hentry.get("sequence", None), + }, + "remarks_no_data", + negate=True, + ) # but delete all remarks before to protect order for k_wrems, wrems in rem_wentry.get("remarks").items(): - if k_wrems not in rem_hentry.get("remarks", {}).keys(): - self.addcmd( - {"remarks": wrems, "sequence": hentry.get("sequence", "")}, - "remarks", - ) + self.addcmd( + { + "remarks": wrems, + "sequence": wentry.get("sequence", ""), + }, + "remarks", + ) + # add ace if not in have if hentry != wentry: - self.addcmd(add_afi(wentry, afi), "aces") - - # remove remaining entries from have aces list + if len(wentry) == 1 and wentry.get( + "sequence", + ): # if the ace entry just has sequence then do nothing + continue + else: # add normal ace entries from want + self.addcmd(add_afi(wentry, afi), "aces") + + # case 2 - loop over remaining have and remove them for hseq in have.values(): - if hseq.get("remarks"): # remove remarks that are extra in have - for krems, rems in hseq.get("remarks").items(): - self.addcmd( - {"remarks": rems, "sequence": hseq.get("sequence", "")}, - "remarks", - negate=True, - ) - else: # remove extra aces - self.addcmd(add_afi(hseq, afi), "aces", negate=True) + if hseq.get("remarks"): # remove all remarks in that + self.addcmd( + { + "sequence": hseq.get("sequence", None), + }, + "remarks_no_data", + negate=True, + ) + hseq.pop("remarks") + # deal with the rest of ace entry + self.addcmd( + add_afi(hseq, afi), + "aces", + negate=True, + ) def sanitize_protocol_options(self, wace, hace): """handles protocol and protocol options as optional attribute""" @@ -262,7 +297,7 @@ class Acls(ResourceModule): def list_to_dict(self, param): """converts list attributes to dict""" - temp, count = dict(), 0 + temp = dict() if param: for each in param: # ipv4 and ipv6 acl temp_acls = {} @@ -271,7 +306,9 @@ class Acls(ResourceModule): temp_aces = {} if acl.get("aces"): rem_idx = 0 # remarks if defined in an ace - for ace in acl.get("aces"): # each ace turned to dict + for count, ace in enumerate( + acl.get("aces"), + ): # each ace turned to dict if ( ace.get("destination") and ace.get("destination", {}).get( @@ -285,9 +322,9 @@ class Acls(ResourceModule): for k, v in ( ace.get("destination", {}).get("port_protocol", {}).items() ): - ace["destination"]["port_protocol"][ - k - ] = self.port_protocl_no_to_protocol(v) + ace["destination"]["port_protocol"][k] = ( + self.port_protocl_no_to_protocol(v) + ) if acl.get("acl_type") == "standard": for ks in list(ace.keys()): if ks not in [ @@ -311,13 +348,14 @@ class Acls(ResourceModule): # temp_rem.extend(ace.pop("remarks")) for remks in ace.get("remarks"): rem_ace[remks.replace(" ", "_")] = remks - rem_idx += 1 ace["remarks"] = rem_ace if ace.get("sequence"): temp_aces.update({ace.get("sequence"): ace}) + elif ace.get("remarks"): + temp_aces.update({"__{0}".format(rem_idx): ace}) + rem_idx += 1 elif ace: - count += 1 temp_aces.update({"_" + to_text(count): ace}) # if temp_rem: # add remarks to the temp ace @@ -325,7 +363,12 @@ class Acls(ResourceModule): if acl.get("acl_type"): # update acl dict with req info temp_acls.update( - {acl.get("name"): {"aces": temp_aces, "acl_type": acl["acl_type"]}}, + { + acl.get("name"): { + "aces": temp_aces, + "acl_type": acl["acl_type"], + }, + }, ) else: # if no acl type then here eg: ipv6 temp_acls.update({acl.get("name"): {"aces": temp_aces}}) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/bgp_global/bgp_global.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/bgp_global/bgp_global.py index c48cac946..77112ffa2 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/bgp_global/bgp_global.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/bgp_global/bgp_global.py @@ -61,6 +61,8 @@ class Bgp_global(ResourceModule): "route_server_context.description", "synchronization", "table_map", + "template.peer_policy", + "template.peer_session", "timers", "bgp.additional_paths", "bgp.advertise_best_external", @@ -79,6 +81,8 @@ class Bgp_global(ResourceModule): "bgp.consistency_checker.auto_repair", "bgp.consistency_checker.error_message", "bgp.dampening", + "bgp.default.ipv4_unicast", + "bgp.default.route_target.filter", "bgp.deterministic_med", "bgp.dmzlink_bw", "bgp.enforce_first_as", @@ -168,7 +172,10 @@ class Bgp_global(ResourceModule): if self.state == "deleted": # deleted, clean up global params if not self.want or (self.have.get("as_number") == self.want.get("as_number")): - self._compare(want={}, have=self.have) + if "as_number" not in self.want: + self.want["as_number"] = self.have.get("as_number") + self._set_bgp_defaults(self.want) + self._compare(self.want, have=self.have) elif self.state == "purged": # delete as_number takes down whole bgp config @@ -190,10 +197,16 @@ class Bgp_global(ResourceModule): for the Bgp_global network resource. """ self.generic_list_parsers = ["distributes", "aggregate_addresses", "networks"] + if self._has_bgp_inject_maps(want): self.generic_list_parsers.insert(0, "inject_maps") cmd_len = len(self.commands) # holds command length to add as_number + + # for clean bgp global setup + if not have.get("bgp", {}).get("default"): + self._set_bgp_defaults(have) + # for dict type attributes self.compare(parsers=self.parsers, want=want, have=have) @@ -206,17 +219,40 @@ class Bgp_global(ResourceModule): _parse, ) else: - self._compare_generic_lists(want.get(_parse, {}), have.get(_parse, {}), _parse) + self._compare_generic_lists( + want.get(_parse, {}), + have.get(_parse, {}), + _parse, + ) # for neighbors - self._compare_neighbor_lists(want.get("neighbors", {}), have.get("neighbors", {})) + self._compare_neighbor_lists( + want.get("neighbors", {}), + have.get("neighbors", {}), + ) # for redistribute - self._compare_redistribute_lists(want.get("redistribute", {}), have.get("redistribute", {})) + self._compare_redistribute_lists( + want.get("redistribute", {}), + have.get("redistribute", {}), + ) - # add as_number in the begining fo command set if commands generated + # add as_number in the beginning of commands set if commands generated if len(self.commands) != cmd_len or (not have and want): - self.commands.insert(0, self._tmplt.render(want or have, "as_number", False)) + self.commands.insert( + 0, + self._tmplt.render(want or have, "as_number", False), + ) + + def _set_bgp_defaults(self, bgp_dict): + bgp_dict.setdefault("bgp", {}).setdefault("default", {}).setdefault( + "ipv4_unicast", + True, + ) + bgp_dict.setdefault("bgp", {}).setdefault("default", {}).setdefault( + "route_target", + {}, + ).setdefault("filter", True) def _has_bgp_inject_maps(self, want): if want.get("bgp", {}).get("inject_maps", {}): @@ -324,10 +360,21 @@ class Bgp_global(ResourceModule): ] for name, w_neighbor in want.items(): + handle_shutdown_default = False have_nbr = have.pop(name, {}) want_route = w_neighbor.pop("route_maps", {}) have_route = have_nbr.pop("route_maps", {}) + if ( + not w_neighbor.get("shutdown", {}).get("set") + and have_nbr.get("shutdown", {}).get("set") + and self.state in ["merged", "replaced", "overridden"] + ): + neig_parses.remove("shutdown") + handle_shutdown_default = True self.compare(parsers=neig_parses, want=w_neighbor, have=have_nbr) + if handle_shutdown_default: + self.addcmd(have_nbr, "shutdown", True) + if want_route: for k_rmps, w_rmps in want_route.items(): have_rmps = have_route.pop(k_rmps, {}) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py index b4b874d6e..b862ac466 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py @@ -29,7 +29,6 @@ from ansible_collections.cisco.ios.plugins.module_utils.network.ios.rm_templates ) from ansible_collections.cisco.ios.plugins.module_utils.network.ios.utils.utils import ( normalize_interface, - validate_ipv6, validate_n_expand_ipv4, ) @@ -48,12 +47,18 @@ class L3_interfaces(ResourceModule): tmplt=L3_interfacesTemplate(), ) self.parsers = [ + "mac_address", "ipv4.address", "ipv4.pool", "ipv4.dhcp", + "ipv4.source_interface", "ipv6.address", "ipv6.autoconfig", "ipv6.dhcp", + "ipv6.enable", + ] + self.gen_parsers = [ + "autostate", ] def execute_module(self): @@ -101,10 +106,16 @@ class L3_interfaces(ResourceModule): self._compare(want={}, have=have) for k, want in wantd.items(): - self._compare(want=want, have=haved.pop(k, {})) + have = haved.pop(k, {}) + # New interface (doesn't use fact file) + if k[:4] == "Vlan": + have.setdefault("autostate", True) + want.setdefault("autostate", True) + self._compare(want=want, have=have) def _compare(self, want, have): begin = len(self.commands) + self.compare(parsers=self.gen_parsers, want=want, have=have) self._compare_lists(want=want, have=have) if len(self.commands) != begin: self.commands.insert(begin, self._tmplt.render(want or have, "name", False)) @@ -141,7 +152,12 @@ class L3_interfaces(ResourceModule): # hacl is set as primary, if wacls has no other primary entry we must keep # this entry as primary (so we'll compare entry to hacl and not # generate commands) - if list(filter(lambda w: w.get("secondary", False) is False, wacls.values())): + if list( + filter( + lambda w: w.get("secondary", False) is False, + wacls.values(), + ), + ): # another primary is in wacls hacl = {} self.validate_ips(afi, want=entry, have=hacl) @@ -168,17 +184,11 @@ class L3_interfaces(ResourceModule): v4_addr = validate_n_expand_ipv4(self._module, want) if want.get("address") else {} if v4_addr: want["address"] = v4_addr - elif afi == "ipv6" and want: - if want.get("address"): - validate_ipv6(want["address"], self._module) if afi == "ipv4" and have: v4_addr_h = validate_n_expand_ipv4(self._module, have) if have.get("address") else {} if v4_addr_h: have["address"] = v4_addr_h - elif afi == "ipv6" and have: - if have.get("address"): - validate_ipv6(have["address"], self._module) def list_to_dict(self, param): if param: diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/route_maps/route_maps.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/route_maps/route_maps.py index d8a1bec9f..f02fbfdfb 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/route_maps/route_maps.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/route_maps/route_maps.py @@ -304,11 +304,11 @@ class Route_maps(ResourceModule): "acl", ) elif match["ip"][each_ip_param].get("prefix_lists"): - match["ip"][each_ip_param][ - "prefix_lists" - ] = convert_to_dict( - match["ip"][each_ip_param]["prefix_lists"], - "prefix_list", + match["ip"][each_ip_param]["prefix_lists"] = ( + convert_to_dict( + match["ip"][each_ip_param]["prefix_lists"], + "prefix_list", + ) ) if match.get("local_preference") and match.get("local_preference").get( "value", diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/snmp_server/snmp_server.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/snmp_server/snmp_server.py index 187d0779d..d61a70a10 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/snmp_server/snmp_server.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/snmp_server/snmp_server.py @@ -237,39 +237,20 @@ class Snmp_server(ResourceModule): def _compare_lists_attrs(self, want, have): """Compare list of dict""" for _parser in self.list_parsers: - if _parser == "users": - i_want = want.get(_parser, {}) - i_have = have.get(_parser, {}) - for key, wanting in iteritems(i_want): - wanting_compare = deepcopy(wanting) - if ( - "authentication" in wanting_compare - and "password" in wanting_compare["authentication"] - ): - wanting_compare["authentication"].pop("password") - if ( - "encryption" in wanting_compare - and "password" in wanting_compare["encryption"] - ): - wanting_compare["encryption"].pop("password") - haveing = i_have.pop(key, {}) - if wanting_compare != haveing: - if haveing and self.state in ["overridden", "replaced"]: + i_want = want.get(_parser, {}) + i_have = have.get(_parser, {}) + for key, wanting in iteritems(i_want): + haveing = i_have.pop(key, {}) + if wanting != haveing: + if haveing and self.state in ["overridden", "replaced"]: + if not ( + _parser == "users" + and wanting.get("username") == haveing.get("username") + ): self.addcmd(haveing, _parser, negate=True) - self.addcmd(wanting, _parser) - for key, haveing in iteritems(i_have): - self.addcmd(haveing, _parser, negate=True) - else: - i_want = want.get(_parser, {}) - i_have = have.get(_parser, {}) - for key, wanting in iteritems(i_want): - haveing = i_have.pop(key, {}) - if wanting != haveing: - if haveing and self.state in ["overridden", "replaced"]: - self.addcmd(haveing, _parser, negate=True) - self.addcmd(wanting, _parser) - for key, haveing in iteritems(i_have): - self.addcmd(haveing, _parser, negate=True) + self.addcmd(wanting, _parser) + for key, haveing in iteritems(i_have): + self.addcmd(haveing, _parser, negate=True) def _snmp_list_to_dict(self, data): """Convert all list of dicts to dicts of dicts""" diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/vlans/vlans.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/vlans/vlans.py index ad95b680a..d195c317e 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/vlans/vlans.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/vlans/vlans.py @@ -1,62 +1,60 @@ # # -*- coding: utf-8 -*- -# Copyright 2019 Red Hat +# Copyright 2024 Red Hat # GNU General Public License v3.0+ # (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -""" -The ios_vlans class -It is in this file where the current configuration (as dict) -is compared to the provided configuration (as dict) and the command set -necessary to bring the current configuration to it's desired end-state is -created -""" +# from __future__ import absolute_import, division, print_function __metaclass__ = type +""" +The ios_vlans config file. +It is in this file where the current configuration (as dict) +is compared to the provided configuration (as dict) and the command set +necessary to bring the current configuration to its desired end-state is +created. +""" + -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.cfg.base import ( - ConfigBase, +from ansible.module_utils.six import iteritems +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.resource_module import ( + ResourceModule, ) from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import ( - remove_empties, - to_list, + dict_merge, ) from ansible_collections.cisco.ios.plugins.module_utils.network.ios.facts.facts import Facts -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.utils.utils import dict_to_set +from ansible_collections.cisco.ios.plugins.module_utils.network.ios.rm_templates.vlans import ( + VlansTemplate, +) -class Vlans(ConfigBase): +class Vlans(ResourceModule): """ - The ios_vlans class + The ios_vlans config class """ - gather_subset = ["!all", "!min"] - - gather_network_resources = ["vlans"] - def __init__(self, module): - super(Vlans, self).__init__(module) - - def get_vlans_facts(self, data=None): - """Get the 'facts' (the current configuration) - - :rtype: A dictionary - :returns: The current configuration as a dictionary - """ - - facts, _warnings = Facts(self._module).get_facts( - self.gather_subset, - self.gather_network_resources, - data=data, + super(Vlans, self).__init__( + empty_fact_val={}, + facts_module=Facts(module), + module=module, + resource="vlans", + tmplt=VlansTemplate(), ) - vlans_facts = facts["ansible_network_resources"].get("vlans") - if not vlans_facts: - return [] - return vlans_facts + self.parsers = [ + "name", + "state", + "mtu", + "remote_span", + "private_vlan.type", + "private_vlan.associated", + "member", + ] def execute_module(self): """Execute the module @@ -64,394 +62,106 @@ class Vlans(ConfigBase): :rtype: A dictionary :returns: The result from module execution """ - result = {"changed": False} - commands = list() - warnings = list() - self.have_now = list() - self.configuration = self._module.params["configuration"] - if not self.configuration: - self.vlan_parent = "vlan {0}" - else: - self.vlan_parent = "vlan configuration {0}" - if self.state in self.ACTION_STATES: - existing_vlans_facts = self.get_vlans_facts() - else: - existing_vlans_facts = [] - - if self.state in self.ACTION_STATES or self.state == "rendered": - commands.extend(self.set_config(existing_vlans_facts)) - if commands and self.state in self.ACTION_STATES: - if not self._module.check_mode: - self._connection.edit_config(commands) - result["changed"] = True - if self.state in self.ACTION_STATES: - result["commands"] = commands - - if self.state in self.ACTION_STATES or self.state == "gathered": - changed_vlans_facts = self.get_vlans_facts() - elif self.state == "rendered": - result["rendered"] = commands - elif self.state == "parsed": - running_config = self._module.params["running_config"] - if not running_config: - self._module.fail_json( - msg="value of running_config parameter must not be empty for state parsed", + if self.state not in ["parsed", "gathered"]: + self.segregate_resource() + self.run_commands() + return self.result + + def segregate_resource(self): + self.want_vlan_config = [] + self.have_vlan_config = [] + for vlan_data in self.want: + if vlan_data.get("member"): + self.want_vlan_config.append( + { + "vlan_id": vlan_data.get("vlan_id"), + "member": vlan_data.pop("member"), + }, ) - result["parsed"] = self.get_vlans_facts(data=running_config) - else: - changed_vlans_facts = [] - - if self.state in self.ACTION_STATES: - result["before"] = existing_vlans_facts - if result["changed"]: - result["after"] = changed_vlans_facts - elif self.state == "gathered": - result["gathered"] = changed_vlans_facts - - result["warnings"] = warnings - return result - - def set_config(self, existing_vlans_facts): - """Collect the configuration from the args passed to the module, - collect the current configuration (as a dict from facts) - - :rtype: A list - :returns: the commands necessary to migrate the current configuration - to the desired configuration - """ - want = [] - if self._module.params.get("config"): - for cfg in self._module.params["config"]: - want.append(remove_empties(cfg)) - have = existing_vlans_facts - resp = self.set_state(want, have) - return to_list(resp) - - def set_state(self, want, have): - """Select the appropriate function based on the state provided - - :param want: the desired configuration as a dictionary - :param have: the current configuration as a dictionary - :rtype: A list - :returns: the commands necessary to migrate the current configuration - to the desired configuration - """ - - if self.state in ("overridden", "merged", "replaced", "rendered") and not want: - self._module.fail_json( - msg="value of config parameter must not be empty for state {0}".format(self.state), - ) - - if self.state == "overridden": - commands = self._state_overridden(want, have) - elif self.state == "deleted": - commands = self._state_deleted(want, have) - elif self.state in ("merged", "rendered"): - commands = self._state_merged(want, have) - elif self.state == "replaced": - commands = self._state_replaced(want, have) - return commands - - def _state_replaced(self, want, have): - """The command generator when state is replaced - - :rtype: A list - :returns: the commands necessary to migrate the current configuration - to the desired configuration - """ - commands = [] - - check = False - for each in want: - for every in have: - if every["vlan_id"] == each["vlan_id"]: - check = True - break - continue - if check: - commands.extend(self._set_config(each, every)) - else: - commands.extend(self._set_config(each, dict())) - - return commands - - def _state_overridden(self, want, have): - """The command generator when state is overridden - - :rtype: A list - :returns: the commands necessary to migrate the current configuration - to the desired configuration - """ - commands = [] - - want_local = want - self.have_now = have.copy() - for each in have: - count = 0 - for every in want_local: - if each["vlan_id"] == every["vlan_id"]: - break - count += 1 else: - # We didn't find a matching desired state, which means we can - # pretend we received an empty desired state. - commands.extend(self._clear_config(every, each)) - continue - commands.extend(self._set_config(every, each)) - # as the pre-existing VLAN are now configured by - # above set_config call, deleting the respective - # VLAN entry from the want_local list - del want_local[count] - - # Iterating through want_local list which now only have new VLANs to be - # configured - for each in want_local: - commands.extend(self._set_config(each, dict())) - - return commands - - def _state_merged(self, want, have): - """The command generator when state is merged - - :rtype: A list - :returns: the commands necessary to merge the provided into - the current configuration - """ - commands = [] - - check = False - for each in want: - for every in have: - if each.get("vlan_id") == every.get("vlan_id"): - check = True - break - continue - if check: - commands.extend(self._set_config(each, every)) + self.want_vlan_config.append( + {"vlan_id": vlan_data.get("vlan_id")}, + ) + for vlan_data in self.have: + if vlan_data.get("member"): + self.have_vlan_config.append( + { + "vlan_id": vlan_data.get("vlan_id"), + "member": vlan_data.pop("member"), + }, + ) else: - commands.extend(self._set_config(each, dict())) - - return commands - - def _state_deleted(self, want, have): - """The command generator when state is deleted + self.have_vlan_config.append( + {"vlan_id": vlan_data.get("vlan_id")}, + ) + if self.want or self.have: + self.generate_commands(self.want, self.have, "vlans") + if self.want_vlan_config or self.have_vlan_config: + self.generate_commands( + self.want_vlan_config, + self.have_vlan_config, + "vlan_configuration", + ) - :rtype: A list - :returns: the commands necessary to remove the current configuration - of the provided objects + def generate_commands(self, conf_want, conf_have, resource=None): + """Generate configuration commands to send based on + want, have and desired state. """ - commands = [] - - if want: - check = False - for each in want: - for every in have: - if each.get("vlan_id") == every.get("vlan_id"): - check = True - break - check = False - continue - if check: - commands.extend(self._clear_config(each, every)) + wantd = {entry["vlan_id"]: entry for entry in conf_want} + haved = {entry["vlan_id"]: entry for entry in conf_have} + + # if state is merged, merge want onto have and then compare + if self.state == "merged": + wantd = dict_merge(haved, wantd) + + # if state is deleted, empty out wantd and set haved to wantd + if self.state == "deleted": + haved = {k: v for k, v in iteritems(haved) if k in wantd or not wantd} + wantd = {} + + # if state is deleted, empty out wantd and set haved to wantd + if self.state in ["deleted", "purged"]: + haved = {k: v for k, v in iteritems(haved) if k in wantd or not wantd} + wantd = {} + + # remove superfluous config for overridden and deleted + if self.state in ["overridden", "deleted"]: + for k, have in iteritems(haved): + if k not in wantd: + self._compare(want={}, have=have, resource=resource) + + if self.state == "purged": + for k, have in iteritems(haved): + self.purge(have, resource) else: - for each in have: - commands.extend(self._clear_config(dict(), each)) - - return commands - - def remove_command_from_config_list(self, vlan_id, cmd, commands): - if vlan_id not in commands and cmd != "vlan": - commands.insert(0, vlan_id) - elif cmd == "vlan": - commands.append("no %s" % vlan_id) - return commands - commands.append("no %s" % cmd) - return commands - - def add_command_to_config_list(self, vlan_id, cmd, commands): - if vlan_id not in commands: - commands.insert(0, vlan_id) - if cmd not in commands: - commands.append(cmd) - - def _set_config(self, want, have): - # Set the interface config based on the want and have config - commands = [] - - vlan = self.vlan_parent.format(want.get("vlan_id")) - - def negate_have_config(want_diff, have_diff, vlan, commands): - name = dict(have_diff).get("name") - if name and not dict(want_diff).get("name"): - self.remove_command_from_config_list(vlan, "name {0}".format(name), commands) - state = dict(have_diff).get("state") - if state and not dict(want_diff).get("state"): - self.remove_command_from_config_list(vlan, "state {0}".format(state), commands) - shutdown = dict(have_diff).get("shutdown") - if shutdown and not dict(want_diff).get("shutdown"): - self.remove_command_from_config_list(vlan, "shutdown", commands) - mtu = dict(have_diff).get("mtu") - if mtu and not dict(want_diff).get("mtu"): - self.remove_command_from_config_list(vlan, "mtu {0}".format(mtu), commands) - remote_span = dict(have_diff).get("remote_span") - if remote_span and not dict(want_diff).get("remote_span"): - self.remove_command_from_config_list(vlan, "remote-span", commands) - private_vlan = dict(have_diff).get("private_vlan") - if private_vlan and not dict(want_diff).get("private_vlan"): - private_vlan_type = dict(private_vlan).get("type") - self.remove_command_from_config_list( - vlan, - "private-vlan {0}".format(private_vlan_type), - commands, - ) - if private_vlan_type == "primary" and dict(private_vlan).get("associated"): - self.remove_command_from_config_list(vlan, "private-vlan association", commands) - - # Get the diff b/w want n have - - want_dict = dict_to_set(want, sort_dictionary=True) - have_dict = dict_to_set(have, sort_dictionary=True) - diff = want_dict - have_dict - have_diff = have_dict - want_dict - - if diff: - if have_diff and (self.state == "replaced" or self.state == "overridden"): - negate_have_config(diff, have_diff, vlan, commands) - - if not self.configuration: - name = dict(diff).get("name") - state = dict(diff).get("state") - shutdown = dict(diff).get("shutdown") - mtu = dict(diff).get("mtu") - remote_span = dict(diff).get("remote_span") - private_vlan = dict(diff).get("private_vlan") - - if name: - self.add_command_to_config_list(vlan, "name {0}".format(name), commands) - if state: - self.add_command_to_config_list(vlan, "state {0}".format(state), commands) - if mtu: - self.add_command_to_config_list(vlan, "mtu {0}".format(mtu), commands) - if remote_span: - self.add_command_to_config_list(vlan, "remote-span", commands) - - if private_vlan: - private_vlan_type = dict(private_vlan).get("type") - private_vlan_associated = dict(private_vlan).get("associated") - if private_vlan_type: - self.add_command_to_config_list( - vlan, - "private-vlan {0}".format(private_vlan_type), - commands, - ) - if private_vlan_associated: - associated_list = ",".join( - str(e) for e in private_vlan_associated - ) # Convert python list to string with elements separated by a comma - self.add_command_to_config_list( - vlan, - "private-vlan association {0}".format(associated_list), - commands, - ) - if shutdown == "enabled": - self.add_command_to_config_list(vlan, "shutdown", commands) - elif shutdown == "disabled": - self.add_command_to_config_list(vlan, "no shutdown", commands) + for k, want in iteritems(wantd): + self._compare(want=want, have=haved.pop(k, {}), resource=resource) + + def _compare(self, want, have, resource=None): + """Leverages the base class `compare()` method and + populates the list of commands to be run by comparing + the `want` and `have` data with the `parsers` defined + for the Vlans network resource. + """ + begin = len(self.commands) + self.compare(parsers=self.parsers, want=want, have=have) + if want.get("shutdown") != have.get("shutdown"): + if want.get("shutdown"): + self.addcmd(want, "shutdown", True) else: - member_dict = dict(diff).get("member") - if member_dict: - member_dict = dict(member_dict) - member_vni = member_dict.get("vni") - member_evi = member_dict.get("evi") - commands.extend( - self._remove_vlan_vni_evi_mapping( - want, - ), - ) - commands.extend( - [ - vlan, - self._get_member_cmds(member_dict), - ], - ) - - elif have_diff and (self.state == "replaced" or self.state == "overridden"): - negate_have_config(diff, have_diff, vlan, commands) - return commands - - def _clear_config(self, want, have): - # Delete the interface config based on the want and have config - commands = [] - vlan = self.vlan_parent.format(have.get("vlan_id")) - - if ( - have.get("vlan_id") - and "default" not in have.get("name", "") - and (have.get("vlan_id") != want.get("vlan_id") or self.state == "deleted") - ): - self.remove_command_from_config_list(vlan, "vlan", commands) - if self.configuration and self.state == "overridden": - self.have_now.remove(have) - elif "default" not in have.get("name", ""): - if not self.configuration: - if have.get("mtu") != want.get("mtu"): - self.remove_command_from_config_list(vlan, "mtu", commands) - if have.get("remote_span") != want.get("remote_span") and want.get("remote_span"): - self.remove_command_from_config_list(vlan, "remote-span", commands) - if have.get("shutdown") != want.get("shutdown") and want.get("shutdown"): - self.remove_command_from_config_list(vlan, "shutdown", commands) - if have.get("state") != want.get("state") and want.get("state"): - self.remove_command_from_config_list(vlan, "state", commands) - return commands - - def _remove_vlan_vni_evi_mapping(self, want_dict): - commands = [] - have_copy = self.have_now.copy() - vlan = want_dict["vlan_id"] - for vlan_dict in have_copy: - if vlan_dict["vlan_id"] == vlan: - if "member" in vlan_dict: - commands.extend( - [ - self.vlan_parent.format(vlan), - self._get_member_cmds( - vlan_dict.get("member", {}), - prefix="no", - ), - ], - ) - vlan_dict.pop("member") - if vlan_dict["vlan_id"] != vlan: - delete_member = False - have_vni = vlan_dict.get("member", {}).get("vni") - have_evi = vlan_dict.get("member", {}).get("evi") - if have_vni and (have_vni == want_dict["member"].get("vni")): - delete_member = True - if have_evi and (have_evi == want_dict["member"].get("evi")): - delete_member = True - if delete_member: - commands.extend( - [ - self.vlan_parent.format(vlan_dict["vlan_id"]), - self._get_member_cmds( - vlan_dict.get("member", {}), - prefix="no", - ), - ], - ) - self.have_now.remove(vlan_dict) - return commands - - def _get_member_cmds(self, member_dict, prefix=""): - cmd = "" - if prefix: - prefix = prefix + " " - member_vni = member_dict.get("vni") - member_evi = member_dict.get("evi") - - if member_evi: - cmd = prefix + "member evpn-instance {0} vni {1}".format(member_evi, member_vni) - elif member_vni: - cmd = prefix + "member vni {0}".format(member_vni) + if want: + self.addcmd(want, "shutdown", False) + elif have.get("shutdown"): + # handles deleted as want be blank and only + # negates if no shutdown + self.addcmd(have, "shutdown", False) + if len(self.commands) != begin: + self.commands.insert( + begin, + self._tmplt.render(want or have, resource, False), + ) - return cmd + def purge(self, have, resource): + """Handle operation for purged state""" + if resource == "vlan_configuration": + self.commands.append(self._tmplt.render(have, resource, True)) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/acls/acls.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/acls/acls.py index 2be369a7a..341491f2e 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/acls/acls.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/acls/acls.py @@ -105,7 +105,10 @@ class AclsFacts(object): if namedata: # parse just names to update empty acls - templateObjName = NetworkTemplate(lines=namedata.splitlines(), tmplt=AclsTemplate()) + templateObjName = NetworkTemplate( + lines=namedata.splitlines(), + tmplt=AclsTemplate(), + ) raw_acl_names = templateObjName.parse() raw_acls = self.populate_empty_acls(raw_acls, raw_acl_names) @@ -114,7 +117,10 @@ class AclsFacts(object): if raw_acls.get("acls"): for k, v in iteritems(raw_acls.get("acls")): - if v.get("afi") == "ipv4" and v.get("acl_type") in ["standard", "extended"]: + if v.get("afi") == "ipv4" and v.get("acl_type") in [ + "standard", + "extended", + ]: del v["afi"] temp_v4.append(v) elif v.get("afi") == "ipv6": @@ -142,10 +148,15 @@ class AclsFacts(object): def process_protocol_options(each): for each_ace in each.get("aces"): if each.get("acl_type") == "standard": - if len(each_ace.get("source", {})) == 1 and each_ace.get("source", {}).get( + if len(each_ace.get("source", {})) == 1 and each_ace.get( + "source", + {}, + ).get( "address", ): - each_ace["source"]["host"] = each_ace["source"].pop("address") + each_ace["source"]["host"] = each_ace["source"].pop( + "address", + ) if each_ace.get("source", {}).get("address"): addr = each_ace.get("source", {}).get("address") if addr[-1] == ",": @@ -159,7 +170,10 @@ class AclsFacts(object): if each_ace.get("icmp_igmp_tcp_protocol"): each_ace["protocol_options"] = { each_ace["protocol"]: { - each_ace.pop("icmp_igmp_tcp_protocol").replace("-", "_"): True, + each_ace.pop("icmp_igmp_tcp_protocol").replace( + "-", + "_", + ): True, }, } if each_ace.get("protocol_number"): @@ -172,13 +186,21 @@ class AclsFacts(object): ace_entry = [] ace_rem = [] rem = {} + # every remarks is one list item which has a sequence number + # every ace remark is preserved and ordered + # at the end of each sequence it is flushed to a ace entry for i in aces: + # i here denotes an ace, which would be populated with remarks entries if i.get("is_remark_for"): if not rem.get(i.get("is_remark_for")): rem[i.get("is_remark_for")] = {"remarks": []} - rem[i.get("is_remark_for")]["remarks"].append(i.get("the_remark")) + rem[i.get("is_remark_for")]["remarks"].append( + i.get("the_remark"), + ) else: - rem[i.get("is_remark_for")]["remarks"].append(i.get("the_remark")) + rem[i.get("is_remark_for")]["remarks"].append( + i.get("the_remark"), + ) else: if rem: if rem.get(i.get("sequence")): @@ -187,12 +209,27 @@ class AclsFacts(object): ace_entry.append(i) if rem: # pending remarks - pending_rem = rem.get("remark") - ace_entry.append({"remarks": pending_rem.get("remarks")}) + for pending_rem_seq, pending_rem_val in rem.items(): + # there can be ace entry with just a remarks and no ace actually + # 10 remarks I am a remarks + # 20 ..... so onn + if pending_rem_seq != "remark": + ace_entry.append( + { + "sequence": pending_rem_seq, + "remarks": pending_rem_val.get("remarks"), + }, + ) + else: + # this handles the classic set of remarks at the end, which is not tied to + # any sequence number + pending_rem = rem.get("remark", {}) + ace_entry.append({"remarks": pending_rem.get("remarks")}) return ace_entry for each in temp_v4: if each.get("aces"): + # handling remarks for each ace entry each["aces"] = collect_remarks(each.get("aces")) process_protocol_options(each) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py index 37bbfabfd..c5b90d9e7 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py @@ -35,6 +35,17 @@ class Bgp_globalFacts(object): def get_bgp_global_data(self, connection): return connection.get("show running-config | section ^router bgp") + def _set_defaults(self, objs): + """makes data as per the facts after data obtained from parsers""" + + if objs.get("as_number"): + objs.setdefault("bgp", {}).setdefault("default", {}).setdefault("ipv4_unicast", True) + objs.setdefault("bgp", {}).setdefault("default", {}).setdefault( + "route_target", + {}, + ).setdefault("filter", True) + return objs + def populate_facts(self, connection, ansible_facts, data=None): """Populate the facts for Bgp_global network resource @@ -56,6 +67,9 @@ class Bgp_globalFacts(object): module=self._module, ) objs = bgp_global_parser.parse() + if objs: + objs = self._set_defaults(objs) + neighbor_list = objs.get("neighbors", {}) if neighbor_list: objs["neighbors"] = sorted( diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/facts.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/facts.py index 7718b474d..583c86b51 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/facts.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/facts.py @@ -104,7 +104,12 @@ from ansible_collections.cisco.ios.plugins.module_utils.network.ios.facts.vxlan_ ) -FACT_LEGACY_SUBSETS = dict(default=Default, hardware=Hardware, interfaces=Interfaces, config=Config) +FACT_LEGACY_SUBSETS = dict( + default=Default, + hardware=Hardware, + interfaces=Interfaces, + config=Config, +) FACT_RESOURCE_SUBSETS = dict( interfaces=InterfacesFacts, @@ -155,7 +160,11 @@ class Facts(FactsBase): :return: the facts gathered """ if self.VALID_RESOURCE_SUBSETS: - self.get_network_resources_facts(FACT_RESOURCE_SUBSETS, resource_facts_type, data) + self.get_network_resources_facts( + FACT_RESOURCE_SUBSETS, + resource_facts_type, + data, + ) if self.VALID_LEGACY_GATHER_SUBSETS: self.get_network_legacy_facts(FACT_LEGACY_SUBSETS, legacy_facts_type) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py index bea49159b..1b36db57a 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py @@ -40,6 +40,14 @@ class L3_InterfacesFacts(object): def get_l3_interfaces_data(self, connection): return connection.get("show running-config | section ^interface") + def _set_defaults(self, objs): + """Set default parameters""" + + for intf in objs: + if intf.get("name") and intf["name"][:4] == "Vlan": + intf.setdefault("autostate", True) + return objs + def populate_facts(self, connection, ansible_facts, data=None): """Populate the facts for l3 interfaces :param connection: the device connection @@ -71,6 +79,10 @@ class L3_InterfacesFacts(object): temp = sorted(temp, key=lambda k, sk="name": k[sk]) objs = temp + + if objs: + objs = self._set_defaults(objs) + facts = {} if objs: facts["l3_interfaces"] = [] diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vlans/vlans.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vlans/vlans.py index 9b506fa90..7bfed68d5 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vlans/vlans.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vlans/vlans.py @@ -16,8 +16,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import re - from copy import deepcopy from ansible_collections.ansible.netcommon.plugins.module_utils.network.common import utils @@ -25,6 +23,9 @@ from ansible_collections.ansible.netcommon.plugins.module_utils.network.common i from ansible_collections.cisco.ios.plugins.module_utils.network.ios.argspec.vlans.vlans import ( VlansArgs, ) +from ansible_collections.cisco.ios.plugins.module_utils.network.ios.rm_templates.vlans import ( + VlansTemplate, +) class VlansFacts(object): @@ -44,154 +45,60 @@ class VlansFacts(object): self.generated_spec = utils.generate_dict(facts_argument_spec) - def get_vlans_data(self, connection, configuration): + def get_vlans_data(self, connection): """Checks device is L2/L3 and returns facts gracefully. Does not fail module. """ - if configuration: - cmd = "show running-config | sec ^vlan configuration .+" - else: - cmd = "show vlan" check_os_type = connection.get_device_info() if check_os_type.get("network_os_type") == "L3": return "" - return connection.get(cmd) + return connection.get("show vlan") + + def get_vlan_conf_data(self, connection): + return connection.get("show running-config | section ^vlan configuration .+") + + def populate_vlans_config_facts(self, connection, data=None): + """Process config for Vlans Configurations - def populate_facts(self, connection, ansible_facts, data=None): - """Populate the facts for vlans :param connection: the device connection :param ansible_facts: Facts dictionary :param data: previously collected conf + :rtype: dictionary :returns: facts """ - configuration = self._module.params["configuration"] - objs = [] if not data: - data = self.get_vlans_data(connection, configuration) - if not configuration: - objs = self.parse_vlan(data) - else: - objs = self.parse_vlan_config(data) + data = self.get_vlan_conf_data(connection) - facts = {} - if objs: - facts["vlans"] = [] - params = utils.validate_config(self.argument_spec, {"config": objs}) - - for cfg in params["config"]: - facts["vlans"].append(utils.remove_empties(cfg)) - ansible_facts["ansible_network_resources"].update(facts) - return ansible_facts + # parse native config using the Vlan_configurations template + vlan_configurations_parser = VlansTemplate( + lines=data.splitlines(), + module=self._module, + ) + return vlan_configurations_parser.parse() - def render_config(self, spec, conf, vlan_info): - """ - Render config as dictionary structure and delete keys - from spec for null values - - :param spec: The facts tree, generated from the argspec - :param conf: The configuration + def populate_facts(self, connection, ansible_facts, data=None): + """Populate the facts for vlans + :param connection: the device connection + :param ansible_facts: Facts dictionary + :param data: previously collected conf :rtype: dictionary - :returns: The generated config + :returns: facts """ - config = deepcopy(spec) - - if vlan_info == "Name" and "VLAN Name" not in conf: - conf = list(filter(None, conf.split(" "))) - config["vlan_id"] = int(conf[0]) - config["name"] = conf[1] - state_idx = 2 - for i in range(2, len(conf)): # check for index where state starts - if conf[i] in ["suspended", "active"]: - state_idx = i - break - elif conf[i].split("/")[0] in ["sus", "act"]: - state_idx = i - break - config["name"] += " " + conf[i] - try: - if len(conf[state_idx].split("/")) > 1: - _state = conf[state_idx].split("/")[0] - if _state == "sus": - config["state"] = "suspend" - elif _state == "act": - config["state"] = "active" - config["shutdown"] = "enabled" - else: - if conf[state_idx] == "suspended": - config["state"] = "suspend" - elif conf[state_idx] == "active": - config["state"] = "active" - config["shutdown"] = "disabled" - except IndexError: - pass - elif vlan_info == "Type" and "VLAN Type" not in conf: - conf = list(filter(None, conf.split(" "))) - config["mtu"] = int(conf[3]) - elif vlan_info == "Remote": - if len(conf.split(",")) > 1 or conf.isdigit(): - remote_span_vlan = [] - if len(conf.split(",")) > 1: - remote_span_vlan = conf.split(",") - else: - remote_span_vlan.append(conf) - remote_span = [] - for each in remote_span_vlan: - split_sp_list = each.split("-") - if len(split_sp_list) > 1: # break range - for r_sp in range(int(split_sp_list[0]), int(split_sp_list[1]) + 1): - remote_span.append(r_sp) - else: - remote_span.append(int(each)) - config["remote_span"] = remote_span - - elif vlan_info == "Private" and "Primary Secondary" not in conf: - conf = list(filter(None, conf.split(" "))) - - pri_idx = 0 - sec_idx = 1 - priv_type_idx = 2 - - config["tmp_pvlans"] = { - "primary": conf[pri_idx], - "secondary": conf[sec_idx], - "sec_type": conf[priv_type_idx], - } - return utils.remove_empties(config) - - def parse_vlan_config(self, vlan_conf): - vlan_list = list() - - re1 = re.compile(r"^vlan configuration +(?P\d+)$") - re2 = re.compile(r"^member +(evpn\-instance +(?P\d+) )?vni (?P[\d\-]+)$") - - for line in vlan_conf.splitlines(): - line = line.strip() - m = re1.match(line) - if m: - vlan = m.groupdict()["vlan"] - vlan_dict = {"vlan_id": vlan} - continue - - m = re2.match(line) - if m: - group = m.groupdict() - vlan_dict.update({"member": {}}) - vlan_dict["member"].update({"vni": group["vni"]}) - if group["evi"]: - vlan_dict["member"].update({"evi": group["evi"]}) - vlan_list.append(vlan_dict) - - return vlan_list - - def parse_vlan(self, data): objs = [] mtu_objs = [] remote_objs = [] final_objs = [] pvlan_objs = [] + conf_data = {} + + if not data: + data = self.get_vlans_data(connection) + + # deals with vlan configuration config only + conf_data = self.populate_vlans_config_facts(connection, data) # operate on a collection of resource x config = data.split("\n") @@ -199,6 +106,7 @@ class VlansFacts(object): vlan_info = "" temp = "" vlan_name = True + for conf in config: if len(list(filter(None, conf.split(" ")))) <= 2 and vlan_name: temp = temp + conf @@ -231,6 +139,7 @@ class VlansFacts(object): pvlan_objs.append(obj) elif obj: objs.append(obj) + # Appending MTU value to the retrieved dictionary for o, m in zip(objs, mtu_objs): o.update(m) @@ -250,7 +159,6 @@ class VlansFacts(object): pvlan_final = {} if len(pvlan_objs) > 0: # Sanitize and structure everything - for data in pvlan_objs: pvdata = data.get("tmp_pvlans") privlan = pvdata.get("primary") @@ -270,7 +178,9 @@ class VlansFacts(object): "private_vlan": {"type": "primary", "associated": []}, } if secvlan and (isinstance(secvlan, int) or secvlan.isnumeric()): - pvlan_final[privlan]["private_vlan"]["associated"].append(int(secvlan)) + pvlan_final[privlan]["private_vlan"]["associated"].append( + int(secvlan), + ) # Associate with the proper VLAN in final_objs for vlan_id, data in pvlan_final.items(): @@ -278,7 +188,103 @@ class VlansFacts(object): if vlan_id == every.get("vlan_id"): every.update(data) - if final_objs: - return objs - else: - return {} + facts = {} + + if conf_data: + for vlan in objs: + if conf_data.get(vlan.get("vlan_id")): + member_data = conf_data.pop(vlan.get("vlan_id")) + vlan.update(member_data) + + if conf_data: # if any vlan configuration data is pending add it to facts + for vlanid, conf in conf_data.items(): + objs.append(conf) + + if objs: + facts["vlans"] = [] + params = utils.validate_config(self.argument_spec, {"config": objs}) + + for cfg in params["config"]: + facts["vlans"].append(utils.remove_empties(cfg)) + ansible_facts["ansible_network_resources"].update(facts) + + return ansible_facts + + def render_config(self, spec, conf, vlan_info): + """ + Render config as dictionary structure and delete keys + from spec for null values + + :param spec: The facts tree, generated from the argspec + :param conf: The configuration + :rtype: dictionary + :returns: The generated config + """ + config = deepcopy(spec) + + if vlan_info == "Name" and "VLAN Name" not in conf: + conf = list(filter(None, conf.split(" "))) + config["vlan_id"] = int(conf[0]) + config["name"] = conf[1] + state_idx = 2 + for i in range(2, len(conf)): # check for index where state starts + if conf[i] in ["suspended", "active"]: + state_idx = i + break + elif conf[i].split("/")[0] in ["sus", "act"]: + state_idx = i + break + config["name"] += " " + conf[i] + try: + if len(conf[state_idx].split("/")) > 1: + _state = conf[state_idx].split("/")[0] + if _state == "sus": + config["state"] = "suspend" + elif _state == "act": + config["state"] = "active" + config["shutdown"] = "enabled" + else: + if conf[state_idx] == "suspended": + config["state"] = "suspend" + elif conf[state_idx] == "active": + config["state"] = "active" + config["shutdown"] = "disabled" + except IndexError: + pass + elif vlan_info == "Type" and "VLAN Type" not in conf: + conf = list(filter(None, conf.split(" "))) + config["mtu"] = int(conf[3]) + elif vlan_info == "Remote": + if len(conf.split(",")) > 1 or conf.isdigit(): + remote_span_vlan = [] + if len(conf.split(",")) > 1: + remote_span_vlan = conf.split(",") + else: + remote_span_vlan.append(conf) + remote_span = [] + for each in remote_span_vlan: + split_sp_list = each.split("-") + if len(split_sp_list) > 1: # break range + for r_sp in range( + int(split_sp_list[0]), + int(split_sp_list[1]) + 1, + ): + remote_span.append(r_sp) + else: + remote_span.append(int(each)) + config["remote_span"] = remote_span + + elif vlan_info == "Private" and "Primary Secondary" not in conf: + conf = list(filter(None, conf.split(" "))) + + pri_idx = 0 + sec_idx = 1 + priv_type_idx = 2 + + config["tmp_pvlans"] = { + "primary": conf[pri_idx], + "secondary": conf[sec_idx], + "sec_type": conf[priv_type_idx], + } + + return utils.remove_empties(config) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/__init__.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/__init__.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/base.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/base.py deleted file mode 100644 index f1b9cdb90..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/base.py +++ /dev/null @@ -1,82 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, inc -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type -from ansible.module_utils.six import iteritems -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.config import ( - NetworkConfig, -) -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list - - -class ConfigBase(object): - argument_spec = {} - - mutually_exclusive = [] - - identifier = () - - def __init__(self, **kwargs): - self.values = {} - self._rendered_configuration = {} - self.active_configuration = None - - for item in self.identifier: - self.values[item] = kwargs.pop(item) - - for key, value in iteritems(kwargs): - if key in self.argument_spec: - setattr(self, key, value) - - for key, value in iteritems(self.argument_spec): - if value.get("default"): - if not getattr(self, key, None): - setattr(self, key, value.get("default")) - - def __getattr__(self, key): - if key in self.argument_spec: - return self.values.get(key) - - def __setattr__(self, key, value): - if key in self.argument_spec: - if key in self.identifier: - raise TypeError("cannot set value") - elif value is not None: - self.values[key] = value - else: - super(ConfigBase, self).__setattr__(key, value) - - def context_config(self, cmd): - if "context" not in self._rendered_configuration: - self._rendered_configuration["context"] = list() - self._rendered_configuration["context"].extend(to_list(cmd)) - - def global_config(self, cmd): - if "global" not in self._rendered_configuration: - self._rendered_configuration["global"] = list() - self._rendered_configuration["global"].extend(to_list(cmd)) - - def get_rendered_configuration(self): - config = list() - for section in ("context", "global"): - config.extend(self._rendered_configuration.get(section, [])) - return config - - def set_active_configuration(self, config): - self.active_configuration = config - - def render(self, config=None): - raise NotImplementedError - - def get_section(self, config, section): - if config is not None: - netcfg = NetworkConfig(indent=1, contents=config) - try: - config = netcfg.get_block_config(to_list(section)) - except ValueError: - config = None - return config diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py deleted file mode 100644 index e4c2bd803..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py +++ /dev/null @@ -1,147 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, inc -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type -import re - -from ansible.module_utils.common.network import to_netmask -from ansible.module_utils.six import iteritems -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.cli.config.bgp.neighbors import ( - AFNeighbors, -) -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.providers import ( - CliProvider, -) - - -class AddressFamily(CliProvider): - def render(self, config=None): - commands = list() - safe_list = list() - - router_context = "router bgp %s" % self.get_value("config.bgp_as") - context_config = None - - for item in self.get_value("config.address_family"): - context = "address-family %s" % item["afi"] - if item["safi"] != "unicast": - context += " %s" % item["safi"] - context_commands = list() - - if config: - context_path = [router_context, context] - context_config = self.get_config_context(config, context_path, indent=1) - - for key, value in iteritems(item): - if value is not None: - meth = getattr(self, "_render_%s" % key, None) - if meth: - resp = meth(item, context_config) - if resp: - context_commands.extend(to_list(resp)) - - if context_commands: - commands.append(context) - commands.extend(context_commands) - commands.append("exit-address-family") - - safe_list.append(context) - - if self.params["operation"] == "replace": - if config: - resp = self._negate_config(config, safe_list) - commands.extend(resp) - - return commands - - def _negate_config(self, config, safe_list=None): - commands = list() - matches = re.findall(r"(address-family .+)$", config, re.M) - for item in set(matches).difference(safe_list): - commands.append("no %s" % item) - return commands - - def _render_auto_summary(self, item, config=None): - cmd = "auto-summary" - if item["auto_summary"] is False: - cmd = "no %s" % cmd - if not config or cmd not in config: - return cmd - - def _render_synchronization(self, item, config=None): - cmd = "synchronization" - if item["synchronization"] is False: - cmd = "no %s" % cmd - if not config or cmd not in config: - return cmd - - def _render_networks(self, item, config=None): - commands = list() - safe_list = list() - - for entry in item["networks"]: - network = entry["prefix"] - cmd = "network %s" % network - if entry["masklen"]: - cmd += " mask %s" % to_netmask(entry["masklen"]) - network += " mask %s" % to_netmask(entry["masklen"]) - if entry["route_map"]: - cmd += " route-map %s" % entry["route_map"] - network += " route-map %s" % entry["route_map"] - - safe_list.append(network) - - if not config or cmd not in config: - commands.append(cmd) - - if self.params["operation"] == "replace": - if config: - matches = re.findall(r"network (.*)", config, re.M) - for entry in set(matches).difference(safe_list): - commands.append("no network %s" % entry) - - return commands - - def _render_redistribute(self, item, config=None): - commands = list() - safe_list = list() - - for entry in item["redistribute"]: - option = entry["protocol"] - - cmd = "redistribute %s" % entry["protocol"] - - if entry["id"] and entry["protocol"] in ("ospf", "ospfv3", "eigrp"): - cmd += " %s" % entry["id"] - option += " %s" % entry["id"] - - if entry["metric"]: - cmd += " metric %s" % entry["metric"] - - if entry["route_map"]: - cmd += " route-map %s" % entry["route_map"] - - if not config or cmd not in config: - commands.append(cmd) - - safe_list.append(option) - - if self.params["operation"] == "replace": - if config: - matches = re.findall(r"redistribute (\S+)(?:\s*)(\d*)", config, re.M) - for i in range(0, len(matches)): - matches[i] = " ".join(matches[i]).strip() - for entry in set(matches).difference(safe_list): - commands.append("no redistribute %s" % entry) - - return commands - - def _render_neighbors(self, item, config): - """generate bgp neighbor configuration""" - return AFNeighbors(self.params).render(config, nbr_list=item["neighbors"]) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py deleted file mode 100644 index 4ee337b00..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py +++ /dev/null @@ -1,203 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, inc -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type -import re - -from ansible.module_utils.six import iteritems -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.providers import ( - CliProvider, -) - - -class Neighbors(CliProvider): - def render(self, config=None, nbr_list=None): - commands = list() - safe_list = list() - if not nbr_list: - nbr_list = self.get_value("config.neighbors") - - for item in nbr_list: - neighbor_commands = list() - context = "neighbor %s" % item["neighbor"] - cmd = "%s remote-as %s" % (context, item["remote_as"]) - - if not config or cmd not in config: - neighbor_commands.append(cmd) - - for key, value in iteritems(item): - if value is not None: - meth = getattr(self, "_render_%s" % key, None) - if meth: - resp = meth(item, config) - if resp: - neighbor_commands.extend(to_list(resp)) - - commands.extend(neighbor_commands) - safe_list.append(context) - - if self.params["operation"] == "replace": - if config and safe_list: - commands.extend(self._negate_config(config, safe_list)) - - return commands - - def _negate_config(self, config, safe_list=None): - commands = list() - matches = re.findall(r"(neighbor \S+)", config, re.M) - for item in set(matches).difference(safe_list): - commands.append("no %s" % item) - return commands - - def _render_local_as(self, item, config=None): - cmd = "neighbor %s local-as %s" % (item["neighbor"], item["local_as"]) - if not config or cmd not in config: - return cmd - - def _render_port(self, item, config=None): - cmd = "neighbor %s port %s" % (item["neighbor"], item["port"]) - if not config or cmd not in config: - return cmd - - def _render_description(self, item, config=None): - cmd = "neighbor %s description %s" % (item["neighbor"], item["description"]) - if not config or cmd not in config: - return cmd - - def _render_enabled(self, item, config=None): - cmd = "neighbor %s shutdown" % item["neighbor"] - if item["enabled"] is True: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_update_source(self, item, config=None): - cmd = "neighbor %s update-source %s" % (item["neighbor"], item["update_source"]) - if not config or cmd not in config: - return cmd - - def _render_password(self, item, config=None): - cmd = "neighbor %s password %s" % (item["neighbor"], item["password"]) - if not config or cmd not in config: - return cmd - - def _render_ebgp_multihop(self, item, config=None): - cmd = "neighbor %s ebgp-multihop %s" % (item["neighbor"], item["ebgp_multihop"]) - if not config or cmd not in config: - return cmd - - def _render_peer_group(self, item, config=None): - cmd = "neighbor %s peer-group %s" % (item["neighbor"], item["peer_group"]) - if not config or cmd not in config: - return cmd - - def _render_timers(self, item, config): - """generate bgp timer related configuration""" - keepalive = item["timers"]["keepalive"] - holdtime = item["timers"]["holdtime"] - min_neighbor_holdtime = item["timers"]["min_neighbor_holdtime"] - neighbor = item["neighbor"] - - if keepalive and holdtime: - cmd = "neighbor %s timers %s %s" % (neighbor, keepalive, holdtime) - if min_neighbor_holdtime: - cmd += " %s" % min_neighbor_holdtime - if not config or cmd not in config: - return cmd - - -class AFNeighbors(CliProvider): - def render(self, config=None, nbr_list=None): - commands = list() - if not nbr_list: - return - - for item in nbr_list: - neighbor_commands = list() - for key, value in iteritems(item): - if value is not None: - meth = getattr(self, "_render_%s" % key, None) - if meth: - resp = meth(item, config) - if resp: - neighbor_commands.extend(to_list(resp)) - - commands.extend(neighbor_commands) - - return commands - - def _render_advertisement_interval(self, item, config=None): - cmd = "neighbor %s advertisement-interval %s" % ( - item["neighbor"], - item["advertisement_interval"], - ) - if not config or cmd not in config: - return cmd - - def _render_route_reflector_client(self, item, config=None): - cmd = "neighbor %s route-reflector-client" % item["neighbor"] - if item["route_reflector_client"] is False: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_route_server_client(self, item, config=None): - cmd = "neighbor %s route-server-client" % item["neighbor"] - if item["route_server_client"] is False: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_remove_private_as(self, item, config=None): - cmd = "neighbor %s remove-private-as" % item["neighbor"] - if item["remove_private_as"] is False: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_next_hop_self(self, item, config=None): - cmd = "neighbor %s next-hop-self" % item["neighbor"] - if item["next_hop_self"] is False: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_activate(self, item, config=None): - cmd = "neighbor %s activate" % item["neighbor"] - if item["activate"] is False: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_maximum_prefix(self, item, config=None): - cmd = "neighbor %s maximum-prefix %s" % (item["neighbor"], item["maximum_prefix"]) - if not config or cmd not in config: - return cmd - - def _render_prefix_list_in(self, item, config=None): - cmd = "neighbor %s prefix-list %s in" % (item["neighbor"], item["prefix_list_in"]) - if not config or cmd not in config: - return cmd - - def _render_prefix_list_out(self, item, config=None): - cmd = "neighbor %s prefix-list %s out" % (item["neighbor"], item["prefix_list_out"]) - if not config or cmd not in config: - return cmd diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/process.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/process.py deleted file mode 100644 index 2b54daa35..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/process.py +++ /dev/null @@ -1,163 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, inc -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type -import re - -from ansible.module_utils.common.network import to_netmask -from ansible.module_utils.six import iteritems -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.cli.config.bgp.address_family import ( - AddressFamily, -) -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.cli.config.bgp.neighbors import ( - Neighbors, -) -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.providers import ( - CliProvider, - register_provider, -) - - -REDISTRIBUTE_PROTOCOLS = [ - "ospf", - "ospfv3", - "eigrp", - "isis", - "static", - "connected", - "odr", - "lisp", - "mobile", - "rip", -] - - -@register_provider("ios", "ios_bgp") -class Provider(CliProvider): - def render(self, config=None): - commands = list() - - existing_as = None - if config: - match = re.search(r"router bgp (\d+)", config, re.M) - if match: - existing_as = match.group(1) - - operation = self.params["operation"] - - context = None - if self.params["config"]: - context = "router bgp %s" % self.get_value("config.bgp_as") - - if operation == "delete": - if existing_as: - commands.append("no router bgp %s" % existing_as) - elif context: - commands.append("no %s" % context) - - else: - self._validate_input(config) - if operation == "replace": - if existing_as and int(existing_as) != self.get_value("config.bgp_as"): - commands.append("no router bgp %s" % existing_as) - config = None - - elif operation == "override": - if existing_as: - commands.append("no router bgp %s" % existing_as) - config = None - - context_commands = list() - - for key, value in iteritems(self.get_value("config")): - if value is not None: - meth = getattr(self, "_render_%s" % key, None) - if meth: - resp = meth(config) - if resp: - context_commands.extend(to_list(resp)) - - if context and context_commands: - commands.append(context) - commands.extend(context_commands) - commands.append("exit") - return commands - - def _render_router_id(self, config=None): - cmd = "bgp router-id %s" % self.get_value("config.router_id") - if not config or cmd not in config: - return cmd - - def _render_log_neighbor_changes(self, config=None): - cmd = "bgp log-neighbor-changes" - log_neighbor_changes = self.get_value("config.log_neighbor_changes") - if log_neighbor_changes is True: - if not config or cmd not in config: - return cmd - elif log_neighbor_changes is False: - if config and cmd in config: - return "no %s" % cmd - - def _render_networks(self, config=None): - commands = list() - safe_list = list() - - for entry in self.get_value("config.networks"): - network = entry["prefix"] - cmd = "network %s" % network - if entry["masklen"] and entry["masklen"] not in (24, 16, 8): - cmd += " mask %s" % to_netmask(entry["masklen"]) - network += " mask %s" % to_netmask(entry["masklen"]) - - if entry["route_map"]: - cmd += " route-map %s" % entry["route_map"] - network += " route-map %s" % entry["route_map"] - - safe_list.append(network) - - if not config or cmd not in config: - commands.append(cmd) - - if self.params["operation"] == "replace": - if config: - matches = re.findall(r"network (.*)", config, re.M) - for entry in set(matches).difference(safe_list): - commands.append("no network %s" % entry) - - return commands - - def _render_neighbors(self, config): - """generate bgp neighbor configuration""" - return Neighbors(self.params).render(config) - - def _render_address_family(self, config): - """generate address-family configuration""" - return AddressFamily(self.params).render(config) - - def _validate_input(self, config=None): - def device_has_AF(config): - return re.search(r"address-family (?:.*)", config) - - address_family = self.get_value("config.address_family") - root_networks = self.get_value("config.networks") - operation = self.params["operation"] - - if operation == "replace": - if address_family and root_networks: - for item in address_family: - if item["networks"]: - raise ValueError( - "operation is replace but provided both root level network(s) and network(s) under %s %s address family" - % (item["afi"], item["safi"]), - ) - - if root_networks and config and device_has_AF(config): - raise ValueError( - "operation is replace and device has one or more address family activated but root level network(s) provided", - ) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/module.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/module.py deleted file mode 100644 index 4de464795..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/module.py +++ /dev/null @@ -1,66 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, inc -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type -from ansible.module_utils._text import to_text -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.connection import Connection - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers import providers - - -class NetworkModule(AnsibleModule): - fail_on_missing_provider = True - - def __init__(self, connection=None, *args, **kwargs): - super(NetworkModule, self).__init__(*args, **kwargs) - - if connection is None: - connection = Connection(self._socket_path) - - self.connection = connection - - @property - def provider(self): - if not hasattr(self, "_provider"): - capabilities = self.from_json(self.connection.get_capabilities()) - - network_os = capabilities["device_info"]["network_os"] - network_api = capabilities["network_api"] - - if network_api == "cliconf": - connection_type = "network_cli" - - cls = providers.get(network_os, self._name.split(".")[-1], connection_type) - - if not cls: - msg = "unable to find suitable provider for network os %s" % network_os - if self.fail_on_missing_provider: - self.fail_json(msg=msg) - else: - self.warn(msg) - - obj = cls(self.params, self.connection, self.check_mode) - - setattr(self, "_provider", obj) - - return getattr(self, "_provider") - - def get_facts(self, subset=None): - try: - self.provider.get_facts(subset) - except Exception as exc: - self.fail_json(msg=to_text(exc)) - - def edit_config(self, config_filter=None): - current_config = self.connection.get_config(flags=config_filter) - try: - commands = self.provider.edit_config(current_config) - changed = bool(commands) - return {"commands": commands, "changed": changed} - except Exception as exc: - self.fail_json(msg=to_text(exc)) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acls.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acls.py index b3afd65f9..54d082c2e 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acls.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acls.py @@ -23,9 +23,9 @@ from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.r def remarks_with_sequence(remarks_data): - cmd = "remark " + cmd = "remark" if remarks_data.get("remarks"): - cmd += remarks_data.get("remarks") + cmd += " " + remarks_data.get("remarks") if remarks_data.get("sequence"): cmd = to_text(remarks_data.get("sequence")) + " " + cmd return cmd @@ -191,7 +191,7 @@ class AclsTemplate(NetworkTemplate): "name": "{{ acl_name }}", "aces": [ { - "the_remark": "{{ remarks }}", + "the_remark": "'{{ remarks }}'", "order": "{{ order }}", "is_remark_for": "{{ sequence }}", }, @@ -206,14 +206,14 @@ class AclsTemplate(NetworkTemplate): r"""(?P^\d+)\s*remark\s(?P.+)$""", re.VERBOSE, ), - "setval": "{{ sequence }} remark", + "setval": remarks_with_sequence, "result": { "acls": { "{{ acl_name|d() }}": { "name": "{{ acl_name }}", "aces": [ { - "the_remark": "{{ remarks }}", + "the_remark": "'{{ remarks }}'", "order": "{{ order }}", "is_remark_for": "remark", }, @@ -238,7 +238,7 @@ class AclsTemplate(NetworkTemplate): "aces": [ { "sequence": "{{ sequence }}", - "remarks": ["{{ remarks }}"], + "remarks": ["'{{ remarks }}'"], }, ], }, @@ -248,7 +248,7 @@ class AclsTemplate(NetworkTemplate): { "name": "aces_ipv4_standard", "getval": re.compile( - r"""(\s*(?P\d+))? + r"""^\s*((?P\d+))? (\s(?Pdeny|permit)) (\s+(?P
    ((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))? (\s(?P((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))? @@ -281,17 +281,17 @@ class AclsTemplate(NetworkTemplate): { "name": "aces", "getval": re.compile( - r"""(\s*(?P\d+))? - (\s*sequence\s(?P\d+))? - (\s*(?Pdeny|permit)) + r"""^\s*((?P\d+))? + (\ssequence\s(?P\d+))? + (\s(?Pdeny|permit)) (\sevaluate\s(?P\S+))? - (\s(?P\d+))? + (\s(?P\d+)\s)? (\s*(?Pahp|eigrp|esp|gre|icmp|igmp|ipinip|ipv6|ip|nos|ospf|pcp|pim|sctp|tcp|ip|udp))? - ((\s(?Pany))| - (\sobject-group\s(?P\S+))| - (\shost\s(?P\S+))| - (\s(?P\S+/\d+))| - (\s(?P(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s\S+)))? + ((\s*(?Pany))| + (\s*object-group\s(?P\S+))| + (\s*host\s(?P\S+))| + (\s*(?P\S+/\d+))| + (\s*(?P(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s\S+)))? (\seq\s(?P(\S+|\d+)))? (\sgt\s(?P(\S+|\d+)))? (\slt\s(?P(\S+|\d+)))? diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_address_family.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_address_family.py index ca85440b2..eb5a08a37 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_address_family.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_address_family.py @@ -28,7 +28,11 @@ UNIQUE_NEIB_ADD = "{{ neighbor_address }}" class Bgp_address_familyTemplate(NetworkTemplate): def __init__(self, lines=None, module=None): - super(Bgp_address_familyTemplate, self).__init__(lines=lines, tmplt=self, module=module) + super(Bgp_address_familyTemplate, self).__init__( + lines=lines, + tmplt=self, + module=module, + ) PARSERS = [ { @@ -61,7 +65,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' vrf ' + vrf) if vrf is defined else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"afi": "{{ afi }}", "safi": "{{ safi }}", "vrf": "{{ vrf }}"}, + UNIQUE_AFI: { + "afi": "{{ afi }}", + "safi": "{{ safi }}", + "vrf": "{{ vrf }}", + }, }, }, "shared": True, @@ -136,7 +144,10 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "table_map": {"name": "{{ name }}", "filter": "{{ not not filter }}"}, + "table_map": { + "name": "{{ name }}", + "filter": "{{ not not filter }}", + }, }, }, }, @@ -149,7 +160,10 @@ class Bgp_address_familyTemplate(NetworkTemplate): }, { "name": "default_information", - "getval": re.compile(r"""\s\sdefault-information\soriginate$""", re.VERBOSE), + "getval": re.compile( + r"""\s\sdefault-information\soriginate$""", + re.VERBOSE, + ), "setval": "default-information originate", "result": {"address_family": {UNIQUE_AFI: {"default_information": True}}}, }, @@ -162,7 +176,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): re.VERBOSE, ), "setval": "default-metric {{ default_metric|string }}", - "result": {"address_family": {UNIQUE_AFI: {"default_metric": "{{ default_metric }}"}}}, + "result": { + "address_family": { + UNIQUE_AFI: {"default_metric": "{{ default_metric }}"}, + }, + }, }, { "name": "distance", @@ -234,7 +252,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): ), "setval": "bgp additional-paths select install", "result": { - "address_family": {UNIQUE_AFI: {"bgp": {"additional_paths": {"install": True}}}}, + "address_family": { + UNIQUE_AFI: {"bgp": {"additional_paths": {"install": True}}}, + }, }, }, { @@ -246,7 +266,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): ), "setval": "bgp additional-paths select receive", "result": { - "address_family": {UNIQUE_AFI: {"bgp": {"additional_paths": {"receive": True}}}}, + "address_family": { + UNIQUE_AFI: {"bgp": {"additional_paths": {"receive": True}}}, + }, }, }, { @@ -258,7 +280,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): ), "setval": "bgp additional-paths select send", "result": { - "address_family": {UNIQUE_AFI: {"bgp": {"additional_paths": {"send": True}}}}, + "address_family": { + UNIQUE_AFI: {"bgp": {"additional_paths": {"send": True}}}, + }, }, }, { @@ -316,7 +340,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "bgp nexthop trigger delay {{ bgp.nexthop.trigger.delay|string }}", "result": { "address_family": { - UNIQUE_AFI: {"bgp": {"nexthop": {"trigger": {"delay": "{{ delay }}"}}}}, + UNIQUE_AFI: { + "bgp": {"nexthop": {"trigger": {"delay": "{{ delay }}"}}}, + }, }, }, }, @@ -330,7 +356,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): ), "setval": "bgp nexthop trigger delay enable", "result": { - "address_family": {UNIQUE_AFI: {"bgp": {"nexthop": {"trigger": {"enable": True}}}}}, + "address_family": { + UNIQUE_AFI: {"bgp": {"nexthop": {"trigger": {"enable": True}}}}, + }, }, }, { @@ -342,7 +370,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): re.VERBOSE, ), "setval": "bgp redistribute-internal", - "result": {"address_family": {UNIQUE_AFI: {"bgp": {"redistribute_internal": True}}}}, + "result": { + "address_family": {UNIQUE_AFI: {"bgp": {"redistribute_internal": True}}}, + }, }, { "name": "bgp.route_map", @@ -365,7 +395,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): re.VERBOSE, ), "setval": "bgp scan-time {{ bgp.scan_time }}", - "result": {"address_family": {UNIQUE_AFI: {"bgp": {"scan_time": "{{ scan_time }}"}}}}, + "result": { + "address_family": { + UNIQUE_AFI: {"bgp": {"scan_time": "{{ scan_time }}"}}, + }, + }, }, { "name": "bgp.soft_reconfig_backup", @@ -376,7 +410,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): re.VERBOSE, ), "setval": "bgp soft-reconfig-backup", - "result": {"address_family": {UNIQUE_AFI: {"bgp": {"soft_reconfig_backup": True}}}}, + "result": { + "address_family": {UNIQUE_AFI: {"bgp": {"soft_reconfig_backup": True}}}, + }, }, { "name": "bgp.update_group", @@ -429,7 +465,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "bgp slow-peer detection", "result": { "address_family": { - UNIQUE_AFI: {"bgp": {"slow_peer_options": {"detection": {"enable": True}}}}, + UNIQUE_AFI: { + "bgp": {"slow_peer_options": {"detection": {"enable": True}}}, + }, }, }, }, @@ -447,7 +485,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "address_family": { UNIQUE_AFI: { "bgp": { - "slow_peer_options": {"detection": {"threshold": "{{ threshold }}"}}, + "slow_peer_options": { + "detection": {"threshold": "{{ threshold }}"}, + }, }, }, }, @@ -464,7 +504,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "bgp": {"slow_peer_options": {"split_update_group": {"dynamic": True}}}, + "bgp": { + "slow_peer_options": { + "split_update_group": {"dynamic": True}, + }, + }, }, }, }, @@ -480,7 +524,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "bgp": {"slow_peer_options": {"split_update_group": {"permanent": True}}}, + "bgp": { + "slow_peer_options": { + "split_update_group": {"permanent": True}, + }, + }, }, }, }, @@ -543,7 +591,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' ' + remote_as|string) if remote_as is defined else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"remote_as": "{{ number }}"}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"remote_as": "{{ number }}"}}, + }, }, }, }, @@ -692,7 +742,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"advertises": {"best-external": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"advertises": {"best-external": True}}, + }, }, }, }, @@ -792,7 +844,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "{{ ('neighbor ' + neighbor_address + ' aigp') if aigp.enable|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"aigp": {"enable": True}}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"aigp": {"enable": True}}}, + }, }, }, }, @@ -848,7 +902,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' aigp send med') if aigp.send.med|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"aigp": {"send": {"med": True}}}}}, + UNIQUE_AFI: { + "neighbors": { + UNIQUE_NEIB_ADD: {"aigp": {"send": {"med": True}}}, + }, + }, }, }, }, @@ -863,7 +921,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "{{ ('neighbor ' + neighbor_address + ' allow-policy') if allow_policy|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"allow_policy": True}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"allow_policy": True}}, + }, }, }, }, @@ -881,7 +941,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"allowas_in": "{{ allowas_in }}"}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"allowas_in": "{{ allowas_in }}"}, + }, }, }, }, @@ -973,7 +1035,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"cluster_id": "{{ cluster_id }}"}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"cluster_id": "{{ cluster_id }}"}, + }, }, }, }, @@ -989,7 +1053,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"default_originate": {"set": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"default_originate": {"set": True}}, + }, }, }, }, @@ -1031,7 +1097,7 @@ class Bgp_address_familyTemplate(NetworkTemplate): "neighbors": { UNIQUE_NEIB_ADD: { "neighbor_address": UNIQUE_NEIB_ADD, - "description": "{{ description }}", + "description": "'{{ description }}'", }, }, }, @@ -1260,7 +1326,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' ' + inherit) if inherit is defined else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"inherit": "{{ inherit }}"}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"inherit": "{{ inherit }}"}}, + }, }, }, }, @@ -1276,7 +1344,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "neighbor {{ neighbor_address }} internal-vpn-client", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"internal_vpn_client": True}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"internal_vpn_client": True}}, + }, }, }, }, @@ -1354,7 +1424,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "{{ ('neighbor ' + neighbor_address + ' next-hop-self') if nexthop_self.set|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"nexthop_self": {"set": True}}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"nexthop_self": {"set": True}}}, + }, }, }, }, @@ -1369,7 +1441,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "{{ ('neighbor ' + neighbor_address + ' next-hop-self all') if nexthop_self.all|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"nexthop_self": {"all": True}}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"nexthop_self": {"all": True}}}, + }, }, }, }, @@ -1385,7 +1459,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"next_hop_unchanged": {"set": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"next_hop_unchanged": {"set": True}}, + }, }, }, }, @@ -1402,7 +1478,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"next_hop_unchanged": {"allpaths": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"next_hop_unchanged": {"allpaths": True}}, + }, }, }, }, @@ -1460,7 +1538,10 @@ class Bgp_address_familyTemplate(NetworkTemplate): "path_attribute": { "discard": { "type": "{{ type }}", - "range": {"start": "{{ start }}", "end": "{{ end }}"}, + "range": { + "start": "{{ start }}", + "end": "{{ end }}", + }, "in": "{{ not not in }}", }, }, @@ -1493,7 +1574,10 @@ class Bgp_address_familyTemplate(NetworkTemplate): "path_attribute": { "treat_as_withdraw": { "type": "{{ type }}", - "range": {"start": "{{ start }}", "end": "{{ end }}"}, + "range": { + "start": "{{ start }}", + "end": "{{ end }}", + }, "in": "{{ not not in }}", }, }, @@ -1581,7 +1665,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"remove_private_as": {"set": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"remove_private_as": {"set": True}}, + }, }, }, }, @@ -1598,7 +1684,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"remove_private_as": {"all": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"remove_private_as": {"all": True}}, + }, }, }, }, @@ -1615,7 +1703,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"remove_private_as": {"replace_as": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"remove_private_as": {"replace_as": True}}, + }, }, }, }, @@ -1675,7 +1765,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "{{ ('neighbor ' + neighbor_address + ' send-community') if send_community.set|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"send_community": {"set": True}}}}, + UNIQUE_AFI: { + "neighbors": { + UNIQUE_NEIB_ADD: {"send_community": {"set": True}}, + }, + }, }, }, }, @@ -1692,7 +1786,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"send_community": {"both": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"send_community": {"both": True}}, + }, }, }, }, @@ -1710,7 +1806,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"send_community": {"extended": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"send_community": {"extended": True}}, + }, }, }, }, @@ -1728,7 +1826,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"send_community": {"standard": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"send_community": {"standard": True}}, + }, }, }, }, @@ -1840,7 +1940,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' soft-reconfiguration inbound') if soft_reconfiguration|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"soft_reconfiguration": True}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"soft_reconfiguration": True}}, + }, }, }, }, @@ -1986,7 +2088,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"ttl_security": "{{ ttl_security }}"}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"ttl_security": "{{ ttl_security }}"}, + }, }, }, }, @@ -2005,7 +2109,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"unsuppress_map": "{{ unsuppress_map }}"}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"unsuppress_map": "{{ unsuppress_map }}"}, + }, }, }, }, @@ -2047,7 +2153,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' ' + weight|string) if weight is defined else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"weight": "{{ weight }}"}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"weight": "{{ weight }}"}}, + }, }, }, }, @@ -2130,7 +2238,10 @@ class Bgp_address_familyTemplate(NetworkTemplate): "name": "{{ context }}", "user": { "name": "{{ user }}", - "access": {"acl": "{{ acl }}", "ipv6": "{{ aclv6 }}"}, + "access": { + "acl": "{{ acl }}", + "ipv6": "{{ aclv6 }}", + }, "auth": {"md5": "{{ md5 }}", "sha": "{{ sha }}"}, "priv": { "des56": "{{ des56 }}", @@ -2663,7 +2774,12 @@ class Bgp_address_familyTemplate(NetworkTemplate): "address_family": { UNIQUE_AFI: { "redistribute": [ - {"vrf": {"name": "{{ name }}", "global": "{{ not not global }}"}}, + { + "vrf": { + "name": "{{ name }}", + "global": "{{ not not global }}", + }, + }, ], }, }, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_global.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_global.py index 39fd548bc..2ce959fcd 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_global.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_global.py @@ -447,7 +447,7 @@ class Bgp_globalTemplate(NetworkTemplate): re.VERBOSE, ), "setval": "description {{ route_server_context.description }}", - "result": {"route_server_context": {"description": "{{ description }}"}}, + "result": {"route_server_context": {"description": "'{{ description }}'"}}, }, { "name": "synchronization", @@ -475,6 +475,36 @@ class Bgp_globalTemplate(NetworkTemplate): "table_map": {"name": "{{ name }}", "filter": "{{ not not filter }}"}, }, }, + { + "name": "template.peer_policy", + "getval": re.compile( + r""" + \stemplate\speer-policy + (\s(?P\S+)) + $""", + re.VERBOSE, + ), + "setval": "template peer-policy" + "{{ (' ' + template.peer_policy) if template.peer_policy is defined else '' }}", + "result": { + "template": {"peer_policy": "{{ peer_policy }}"}, + }, + }, + { + "name": "template.peer_session", + "getval": re.compile( + r""" + \stemplate\speer-session + (\s(?P\S+)) + $""", + re.VERBOSE, + ), + "setval": "template peer-session" + "{{ (' ' + template.peer_session) if template.peer_session is defined else '' }}", + "result": { + "template": {"peer_session": "{{ peer_session }}"}, + }, + }, { "name": "timers", "getval": re.compile( @@ -744,6 +774,21 @@ class Bgp_globalTemplate(NetworkTemplate): }, }, }, + { + "name": "bgp.default.ipv4_unicast", + "getval": re.compile(r"""\sno\sbgp\sdefault\sipv4\-unicast""", re.VERBOSE), + "setval": "bgp default ipv4-unicast", + "result": {"bgp": {"default": {"ipv4_unicast": False}}}, + }, + { + "name": "bgp.default.route_target.filter", + "getval": re.compile( + r"""\sno\sbgp\sdefault\sroute\-target\sfilter""", + re.VERBOSE, + ), + "setval": "bgp default route-target filter", + "result": {"bgp": {"default": {"route_target": {"filter": False}}}}, + }, { "name": "bgp.deterministic_med", "getval": re.compile(r"""\s(bgp\sdeterministic-med)""", re.VERBOSE), @@ -1064,7 +1109,9 @@ class Bgp_globalTemplate(NetworkTemplate): "setval": "bgp nopeerup-delay nsf-switchover {{ bgp.nopeerup_delay_options.nsf_switchover|string }}", "result": { "bgp": { - "nopeerup_delay_options": {"nsf_switchover": "{{ nsf_switchover }}"}, + "nopeerup_delay_options": { + "nsf_switchover": "{{ nsf_switchover }}", + }, }, }, }, @@ -1080,7 +1127,9 @@ class Bgp_globalTemplate(NetworkTemplate): "setval": "bgp nopeerup-delay user-initiated {{ bgp.nopeerup_delay_options.user_initiated|string }}", "result": { "bgp": { - "nopeerup_delay_options": {"user_initiated": "{{ user_initiated }}"}, + "nopeerup_delay_options": { + "user_initiated": "{{ user_initiated }}", + }, }, }, }, @@ -1433,7 +1482,7 @@ class Bgp_globalTemplate(NetworkTemplate): "neighbors": { "{{ neighbor_address }}": { "neighbor_address": "{{ neighbor_address }}", - "description": "{{ description }}", + "description": "'{{ description }}'", }, }, }, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/interfaces.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/interfaces.py index 084945143..6cd1eb84c 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/interfaces.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/interfaces.py @@ -53,7 +53,7 @@ class InterfacesTemplate(NetworkTemplate): "setval": "description {{ description }}", "result": { '{{ name }}': { - 'description': '{{ description }}', + 'description': "'{{ description }}'", }, }, }, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/l3_interfaces.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/l3_interfaces.py index d57a8ded8..bd337befa 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/l3_interfaces.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/l3_interfaces.py @@ -65,6 +65,23 @@ class L3_interfacesTemplate(NetworkTemplate): # fmt: off PARSERS = [ + { + "name": "autostate", + "getval": re.compile(r"""\s+no\s+autostate$""", re.VERBOSE), + "setval": "autostate", + "result": {"{{ name }}": {"autostate": False}}, + }, + { + "name": "mac_address", + "getval": re.compile( + r"""^mac-address + (\s(?P\S+)) + $""", + re.VERBOSE, + ), + "setval": "mac-address {{ mac_address }}", + "result": {"{{ name }}": {"mac_address": "{{ mac_address }}"}}, + }, { "name": "name", "getval": re.compile( @@ -145,6 +162,33 @@ class L3_interfacesTemplate(NetworkTemplate): }, }, }, + { + "name": "ipv4.source_interface", + "getval": re.compile( + r"""\s+ip\sunnumbered + (\s(?P\S+)) + (\s(?Ppoll))? + (\s(?Ppoint-to-point))? + $""", + re.VERBOSE, + ), + "setval": "ip unnumbered {{ ipv4.source_interface.name }}" + "{{ ' poll' if ipv4.source_interface.poll|d(False) else ''}}" + "{{ ' point-to-point' if ipv4.source_interface.point_to_point|d(False) else ''}}", + "result": { + "{{ name }}": { + "ipv4": [ + { + "source_interface": { + "name": "{{ True if name is defined }}", + "poll": "{{ True if poll is defined }}", + "point_to_point": "{{ True if point_to_point is defined }}", + }, + }, + ], + }, + }, + }, { "name": "ipv6.address", "getval": re.compile( @@ -227,5 +271,17 @@ class L3_interfacesTemplate(NetworkTemplate): }, }, }, + { + "name": "ipv6.enable", + "getval": re.compile(r"""\s+ipv6\s+enable$""", re.VERBOSE), + "setval": "ipv6 enable", + "result": { + "{{ name }}": { + "ipv6": [ + {"enable": True}, + ], + }, + }, + }, ] # fmt: on diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/ospfv2.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/ospfv2.py index 74b380cc5..80548254e 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/ospfv2.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/ospfv2.py @@ -721,9 +721,9 @@ class Ospfv2Template(NetworkTemplate): $""", re.VERBOSE, ), - "setval": "distance {{ admin_distance.distance }} " - "{{ ( admin_distance.address + ' ' + admin_distance.wildcard_bits ) if admin_distance.address is defined else '' }}" - "{{ ' ' + admin_distance.acl if admin_distance.acl is defined else '' }}", + "setval": "distance {{ distance.admin_distance.distance }} " + "{{ ( distance.admin_distance.address + ' ' + distance.admin_distance.wildcard_bits ) if distance.admin_distance.address is defined else '' }}" + "{{ ' ' + distance.admin_distance.acl if distance.admin_distance.acl is defined else '' }}", "result": { "processes": { "{{ pid }}": { diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/prefix_lists.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/prefix_lists.py index 43d163c5d..f19e58e27 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/prefix_lists.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/prefix_lists.py @@ -80,7 +80,7 @@ class Prefix_listsTemplate(NetworkTemplate): "{{ afi + name }}": { "name": "{{ name }}", "afi": "{{ 'ipv4' if afi is defined and afi=='ip' else 'ipv6' }}", - "description": "{{ description }}", + "description": "'{{ description }}'", }, }, }, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/route_maps.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/route_maps.py index 1e569ccca..580987069 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/route_maps.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/route_maps.py @@ -39,11 +39,15 @@ def _tmplt_route_map_match(config_data): cmd += " best {best}".format(**config_data["match"]["additional_paths"]) if config_data["match"]["additional_paths"].get("best_range"): cmd += " best-range" - if config_data["match"]["additional_paths"]["best_range"].get("lower_limit"): + if config_data["match"]["additional_paths"]["best_range"].get( + "lower_limit", + ): cmd += " lower-limit {lower_limit}".format( **config_data["match"]["additional_paths"]["best_range"], ) - if config_data["match"]["additional_paths"]["best_range"].get("upper_limit"): + if config_data["match"]["additional_paths"]["best_range"].get( + "upper_limit", + ): cmd += " upper-limit {upper_limit}".format( **config_data["match"]["additional_paths"]["best_range"], ) @@ -231,7 +235,10 @@ def _tmplt_route_map_match_ip(config_data): config_data["match"]["ip"]["address"]["prefix_lists"], ) elif config_data["match"]["ip"]["address"].get("acls"): - cmd = construct_cmd_from_list(cmd, config_data["match"]["ip"]["address"]["acls"]) + cmd = construct_cmd_from_list( + cmd, + config_data["match"]["ip"]["address"]["acls"], + ) if config_data["match"]["ip"].get("flowspec"): cmd += " flowspec" if config_data["match"]["ip"]["flowspec"].get("dest_pfx"): @@ -245,7 +252,10 @@ def _tmplt_route_map_match_ip(config_data): config_data["match"]["ip"]["flowspec"]["prefix_lists"], ) elif config_data["match"]["ip"]["flowspec"].get("acls"): - cmd = construct_cmd_from_list(cmd, config_data["match"]["ip"]["flowspec"]["acls"]) + cmd = construct_cmd_from_list( + cmd, + config_data["match"]["ip"]["flowspec"]["acls"], + ) if config_data["match"]["ip"].get("next_hop"): cmd += " next-hop" if config_data["match"]["ip"]["next_hop"].get("prefix_lists"): @@ -255,7 +265,10 @@ def _tmplt_route_map_match_ip(config_data): config_data["match"]["ip"]["next_hop"]["prefix_lists"], ) elif config_data["match"]["ip"]["next_hop"].get("acls"): - cmd = construct_cmd_from_list(cmd, config_data["match"]["ip"]["next_hop"]["acls"]) + cmd = construct_cmd_from_list( + cmd, + config_data["match"]["ip"]["next_hop"]["acls"], + ) if config_data["match"]["ip"].get("redistribution_source"): cmd += " redistribution-source" if config_data["match"]["ip"]["redistribution_source"].get("prefix_lists"): @@ -411,7 +424,9 @@ def _tmplt_route_map_set(config_data): cmd += " additive" command.append(cmd) if set["extcommunity"].get("soo"): - command.append("set extcommunity soo {soo}".format(**set["extcommunity"])) + command.append( + "set extcommunity soo {soo}".format(**set["extcommunity"]), + ) if set["extcommunity"].get("vpn_distinguisher"): cmd = "set extcommunity vpn-distinguisher" if set["extcommunity"]["vpn_distinguisher"].get("range"): @@ -419,7 +434,9 @@ def _tmplt_route_map_set(config_data): **set["extcommunity"]["vpn_distinguisher"]["range"], ) elif set["extcommunity"]["vpn_distinguisher"].get("address"): - cmd += " {address}".format(**set["extcommunity"]["vpn_distinguisher"]) + cmd += " {address}".format( + **set["extcommunity"]["vpn_distinguisher"], + ) if set["extcommunity"]["vpn_distinguisher"].get("additive"): cmd += " additive" command.append(cmd) @@ -525,7 +542,10 @@ def _tmplt_route_map_set_ip(config_data): command.append("{0} dynamic dhcp".format(cmd)) if set_ip["next_hop"].get("encapsulate"): command.append( - "{0} encapsulate l3vpn {encapsulate}".format(cmd, **set_ip["next_hop"]), + "{0} encapsulate l3vpn {encapsulate}".format( + cmd, + **set_ip["next_hop"], + ), ) if set_ip["next_hop"].get("peer_address"): command.append("{0} peer-address".format(cmd)) @@ -649,7 +669,10 @@ class Route_mapsTemplate(NetworkTemplate): "{{ route_map }}": { "route_map": "{{ route_map }}", "{{ action|d() + '_' + sequence|d() }}": { - "entries": {"action": "{{ action }}", "sequence": "{{ sequence }}"}, + "entries": { + "action": "{{ action }}", + "sequence": "{{ sequence }}", + }, }, }, }, @@ -691,7 +714,7 @@ class Route_mapsTemplate(NetworkTemplate): "result": { "{{ route_map }}": { "{{ action|d() + '_' + sequence|d() }}": { - "entries": {"description": "{{ description }}"}, + "entries": {"description": "'{{ description }}'"}, }, }, }, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/snmp_server.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/snmp_server.py index 5107612eb..45cabaae9 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/snmp_server.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/snmp_server.py @@ -283,8 +283,7 @@ class Snmp_serverTemplate(NetworkTemplate): (\sread\s(?P\S+))? (\swrite\s(?P\S+))? (\snotify\s(?P\S+))? - (\saccess\s(?P\S+))? - (\saccess\sipv6\s(?P\S+))? + (\saccess(\sipv6\s(?P\S+))?(\s(?P\S+|\d+))?)? """, re.VERBOSE, ), "setval": "snmp-server group " @@ -296,8 +295,9 @@ class Snmp_serverTemplate(NetworkTemplate): "{{ (' read ' + read) if read is defined else '' }}" "{{ (' write ' + write) if write is defined else '' }}" "{{ (' notify ' + notify) if notify is defined else '' }}" - "{{ (' access ' + acl_v4) if acl_v4 is defined else '' }}" - "{{ (' access ipv6 ' + acl_v6) if acl_v6 is defined else '' }}", + "{{ (' access') if acl_v6 is defined or acl_v4 is defined else '' }}" + "{{ (' ipv6 ' + acl_v6) if acl_v6 is defined else '' }}" + "{{ (' ' + acl_v4|string) if acl_v4 is defined else '' }}", "result": { "groups": [ { @@ -398,8 +398,7 @@ class Snmp_serverTemplate(NetworkTemplate): (\sudp-port\s(?P\d+))? (\s(?Pv1|v3|v2c))? (\s(?Pencrypted))? - (\saccess\sipv6\s(?P\S+))? - (\saccess\s(?P\S+|\d+))? + (\saccess(\sipv6\s(?P\S+))?(\s(?P\S+|\d+))?)? (\svrf\s(?P\S+))? """, re.VERBOSE, ), diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vlans.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vlans.py new file mode 100644 index 000000000..24907c868 --- /dev/null +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vlans.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- +# Copyright 2024 Red Hat +# GNU General Public License v3.0+ +# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + + +__metaclass__ = type + +""" +The Vlans parser templates file. This contains +a list of parser definitions and associated functions that +facilitates both facts gathering and native command generation for +the given network resource. +""" + +import re + +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.network_template import ( + NetworkTemplate, +) + + +def vlan_associated_config(config): + cmd = "" + if len(config.get("private_vlan", {}).get("associated")) > 1: + for vlan in config.get("private_vlan", {}).get("associated"): + cmd += str(vlan) + "," + cmd = cmd[:-1] + else: + cmd = config.get("private_vlan", {}).get("associated")[0] + return "private-vlan association " + cmd + + +class VlansTemplate(NetworkTemplate): + def __init__(self, lines=None, module=None): + super(VlansTemplate, self).__init__( + lines=lines, + tmplt=self, + module=module, + ) + + # fmt: off + PARSERS = [ + { + "name": "vlan_configuration", + "getval": re.compile( + r""" + ^vlan\sconfiguration\s(?P\d+) + $""", re.VERBOSE, + ), + "setval": "vlan configuration {{ vlan_id|string }}", + "result": { + "{{ vlan_id }}": { + "vlan_id": "{{ vlan_id }}", + }, + }, + "shared": True, + }, + { + "name": "member", + "getval": re.compile( + r""" + \s*member + (\sevpn-instance\s(?P\d+))? + (\svni\s(?P\d+))? + $""", re.VERBOSE, + ), + "setval": "member" + "{{ (' evpn-instance ' + member.evi|string) if member.evi is defined else '' }}" + "{{ (' vni ' + member.vni|string) if member.vni is defined else '' }}", + "result": { + "{{ vlan_id }}": { + "member": { + "evi": "{{ inst_vlan_id }}", + "vni": "{{ vni }}", + }, + }, + }, + }, + { + "name": "vlans", + "getval": "", + "setval": "vlan {{ vlan_id|string }}", + "result": {}, + }, + { + "name": "name", + "getval": "", + "setval": "name {{ name|string }}", + "result": {}, + }, + { + "name": "state", + "getval": "", + "setval": "state {{ state }}", + "result": {}, + }, + { + "name": "mtu", + "getval": "", + "setval": "mtu {{ mtu|string }}", + "result": {}, + }, + { + "name": "remote_span", + "getval": "", + "setval": "remote-span", + "result": {}, + }, + { + "name": "private_vlan.type", + "getval": "", + "setval": "private-vlan {{ private_vlan.type if private_vlan.type is defined }}", + "result": {}, + }, + { + "name": "private_vlan.associated", + "getval": "", + "setval": vlan_associated_config, + "result": {}, + }, + { + "name": "shutdown", + "getval": "", + "setval": "shutdown", + "result": {}, + }, + ] + # fmt: on diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/utils.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/utils.py index f3038f7f2..1deea535b 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/utils.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/utils.py @@ -219,31 +219,19 @@ def validate_ipv4(value, module): address = value.split("/") if len(address) != 2: module.fail_json( - msg="address format is /, got invalid format {0}".format(value), + msg="address format is /, got invalid format {0}".format( + value, + ), ) if not is_masklen(address[1]): module.fail_json( - msg="invalid value for mask: {0}, mask should be in range 0-32".format(address[1]), + msg="invalid value for mask: {0}, mask should be in range 0-32".format( + address[1], + ), ) -def validate_ipv6(value, module): - if value: - address = value.split("/") - if len(address) != 2: - module.fail_json( - msg="address format is /, got invalid format {0}".format(value), - ) - else: - if not 0 <= int(address[1]) <= 128: - module.fail_json( - msg="invalid value for mask: {0}, mask should be in range 0-128".format( - address[1], - ), - ) - - def validate_n_expand_ipv4(module, want): # Check if input IPV4 is valid IP and expand IPV4 with its subnet mask ip_addr_want = want.get("address") diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_acls.py b/ansible_collections/cisco/ios/plugins/modules/ios_acls.py index f81e0e7ab..4636ecb5d 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_acls.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_acls.py @@ -471,6 +471,11 @@ options: - Remarks entry used as the only key in as the list option will produce non ace specific remarks, these remarks would be pushed at the end of all the aces for an acl. + - Remarks is treated a block, for every single remarks updated for + an ace all the remarks are negated and added back to maintain the + order of remarks mentioned. + - As the appliance deletes all the remarks once the ace is updated, + the set of remarks would be re-applied that is an expected behavior. elements: str type: list sequence: @@ -1944,6 +1949,347 @@ EXAMPLES = """ # ip access-list extended 150 # 10 deny tcp 198.51.100.0 0.0.0.255 eq telnet 198.51.110.0 0.0.0.255 eq telnet syn dscp ef ttl eq 10 +# Using overridden - example remarks specific on multiple sequence + +# Before state: +# ------------- +# +# vios#show running-config | section access-list +# ip access-list extended TEST +# 10 remark FIRST REMARK BEFORE SEQUENCE 10 +# 10 remark ============ +# 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE +# 20 remark FIRST REMARK BEFORE SEQUENCE 20 +# 20 remark ============ +# 20 remark ALLOW HOST FROM SEQUENCE 20 +# 20 permit ip host 1.1.1.1 any +# 30 remark FIRST REMARK BEFORE SEQUENCE 30 +# 30 remark ============ +# 30 remark ALLOW HOST FROM SEQUENCE 30 +# 30 permit ip host 2.2.2.2 any +# 40 remark FIRST REMARK BEFORE SEQUENCE 40 +# 40 remark ============ +# 40 remark ALLOW NEW HOST FROM SEQUENCE 40 +# 40 permit ip host 3.3.3.3 any +# remark Remark not specific to sequence +# remark ============ +# remark End Remarks +# ip access-list extended test_acl +# 10 deny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www fin option traceroute ttl eq 10 +# ip access-list extended 110 +# 10 deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10 +# ip access-list extended 123 +# 10 deny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255 eq telnet ack tos 12 +# 20 deny tcp 192.0.3.0 0.0.0.255 192.0.4.0 0.0.0.255 eq www ack dscp ef ttl lt 20 +# ipv6 access-list R1_TRAFFIC +# sequence 10 deny tcp any eq www any eq telnet ack dscp af11 + +- name: Override remarks and ace configurations + cisco.ios.ios_acls: + config: + - afi: ipv4 + acls: + - name: TEST + acl_type: extended + aces: + - sequence: 10 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 10" + - "============" + - "REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE" + grant: permit + protocol: ip + source: + host: 1.1.1.1 + destination: + any: true + - sequence: 20 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 20" + - "============" + - "ALLOW HOST FROM SEQUENCE 20" + grant: permit + protocol: ip + source: + host: 192.168.0.1 + destination: + any: true + - sequence: 30 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 30" + - "============" + - "ALLOW HOST FROM SEQUENCE 30 updated" + grant: permit + protocol: ip + source: + host: 2.2.2.2 + destination: + any: true + - sequence: 40 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 40" + - "============" + - "ALLOW NEW HOST FROM SEQUENCE 40" + grant: permit + protocol: ip + source: + host: 3.3.3.3 + destination: + any: true + - remarks: + - "Remark not specific to sequence" + - "============" + - "End Remarks 1" + state: overridden + +# Task Output +# ----------- +# +# before: +# - acls: +# - aces: +# - destination: +# address: 192.0.3.0 +# wildcard_bits: 0.0.0.255 +# dscp: ef +# grant: deny +# protocol: icmp +# protocol_options: +# icmp: +# echo: true +# sequence: 10 +# source: +# address: 192.0.2.0 +# wildcard_bits: 0.0.0.255 +# ttl: +# eq: 10 +# acl_type: extended +# name: '110' +# - aces: +# - destination: +# address: 198.51.101.0 +# port_protocol: +# eq: telnet +# wildcard_bits: 0.0.0.255 +# grant: deny +# protocol: tcp +# protocol_options: +# tcp: +# ack: true +# sequence: 10 +# source: +# address: 198.51.100.0 +# wildcard_bits: 0.0.0.255 +# tos: +# service_value: 12 +# - destination: +# address: 192.0.4.0 +# port_protocol: +# eq: www +# wildcard_bits: 0.0.0.255 +# dscp: ef +# grant: deny +# protocol: tcp +# protocol_options: +# tcp: +# ack: true +# sequence: 20 +# source: +# address: 192.0.3.0 +# wildcard_bits: 0.0.0.255 +# ttl: +# lt: 20 +# acl_type: extended +# name: '123' +# - aces: +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 20 +# - ============ +# - ALLOW HOST FROM SEQUENCE 20 +# sequence: 20 +# source: +# host: 1.1.1.1 +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 30 +# - ============ +# - ALLOW HOST FROM SEQUENCE 30 +# sequence: 30 +# source: +# host: 2.2.2.2 +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 40 +# - ============ +# - ALLOW NEW HOST FROM SEQUENCE 40 +# sequence: 40 +# source: +# host: 3.3.3.3 +# - remarks: +# - FIRST REMARK BEFORE SEQUENCE 10 +# - ============ +# - REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE +# sequence: 10 +# - remarks: +# - Remark not specific to sequence +# - ============ +# - End Remarks +# acl_type: extended +# name: TEST +# - aces: +# - destination: +# address: 192.0.3.0 +# port_protocol: +# eq: www +# wildcard_bits: 0.0.0.255 +# grant: deny +# option: +# traceroute: true +# protocol: tcp +# protocol_options: +# tcp: +# fin: true +# sequence: 10 +# source: +# address: 192.0.2.0 +# wildcard_bits: 0.0.0.255 +# ttl: +# eq: 10 +# acl_type: extended +# name: test_acl +# afi: ipv4 +# - acls: +# - aces: +# - destination: +# any: true +# port_protocol: +# eq: telnet +# dscp: af11 +# grant: deny +# protocol: tcp +# protocol_options: +# tcp: +# ack: true +# sequence: 10 +# source: +# any: true +# port_protocol: +# eq: www +# name: R1_TRAFFIC +# afi: ipv6 +# commands: +# - no ipv6 access-list R1_TRAFFIC +# - ip access-list extended TEST +# - no 10 # removes all remarks and ace entry for sequence 10 +# - no 20 permit ip host 1.1.1.1 any # removing the ace automatically removes the remarks +# - no 30 remark # just remove remarks for sequence 30 +# - no remark # remove all remarks at end of acl, that has no sequence +# - 10 remark FIRST REMARK BEFORE SEQUENCE 10 +# - 10 remark ============ +# - 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE +# - 10 permit ip host 1.1.1.1 any +# - 20 remark FIRST REMARK BEFORE SEQUENCE 20 +# - 20 remark ============ +# - 20 remark ALLOW HOST FROM SEQUENCE 20 +# - 20 permit ip host 192.168.0.1 any +# - 30 remark FIRST REMARK BEFORE SEQUENCE 30 +# - 30 remark ============ +# - 30 remark ALLOW HOST FROM SEQUENCE 30 updated +# - remark Remark not specific to sequence +# - remark ============ +# - remark End Remarks 1 +# - no ip access-list extended 110 +# - no ip access-list extended 123 +# - no ip access-list extended test_acl +# after: +# - acls: +# - aces: +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 10 +# - ============ +# - REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE +# sequence: 10 +# source: +# host: 1.1.1.1 +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 20 +# - ============ +# - ALLOW HOST FROM SEQUENCE 20 +# sequence: 20 +# source: +# host: 192.168.0.1 +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 30 +# - ============ +# - ALLOW HOST FROM SEQUENCE 30 updated +# sequence: 30 +# source: +# host: 2.2.2.2 +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 40 +# - ============ +# - ALLOW NEW HOST FROM SEQUENCE 40 +# sequence: 40 +# source: +# host: 3.3.3.3 +# - remarks: +# - Remark not specific to sequence +# - ============ +# - End Remarks 1 +# acl_type: extended +# name: TEST +# afi: ipv4 + +# After state: +# ------------- +# +# foo#show running-config | section access-list +# ip access-list extended TEST +# 10 remark FIRST REMARK BEFORE SEQUENCE 10 +# 10 remark ============ +# 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE +# 10 permit ip host 1.1.1.1 any +# 20 remark FIRST REMARK BEFORE SEQUENCE 20 +# 20 remark ============ +# 20 remark ALLOW HOST FROM SEQUENCE 20 +# 20 permit ip host 192.168.0.1 any +# 30 remark FIRST REMARK BEFORE SEQUENCE 30 +# 30 remark ============ +# 30 remark ALLOW HOST FROM SEQUENCE 30 updated +# 30 permit ip host 2.2.2.2 any +# 40 remark FIRST REMARK BEFORE SEQUENCE 40 +# 40 remark ============ +# 40 remark ALLOW NEW HOST FROM SEQUENCE 40 +# 40 permit ip host 3.3.3.3 any +# remark Remark not specific to sequence +# remark ============ +# remark End Remarks 1 # Using deleted - delete ACL(s) diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_bgp.py b/ansible_collections/cisco/ios/plugins/modules/ios_bgp.py deleted file mode 100644 index b01f99428..000000000 --- a/ansible_collections/cisco/ios/plugins/modules/ios_bgp.py +++ /dev/null @@ -1,504 +0,0 @@ -#!/usr/bin/python -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -DOCUMENTATION = """ -module: ios_bgp -author: Nilashish Chakraborty (@NilashishC) -short_description: Module to configure BGP protocol settings. -description: - - This module provides configuration management of global BGP parameters on devices - running Cisco IOS -version_added: 1.0.0 -deprecated: - alternative: ios_bgp_global - why: Newer and updated modules released with more functionality - removed_at_date: "2023-08-24" -notes: - - Tested against Cisco IOS Version 15.6(3)M2 -options: - config: - description: - - Specifies the BGP related configuration. - type: dict - suboptions: - bgp_as: - description: - - Specifies the BGP Autonomous System (AS) number to configure on the device. - type: int - required: true - router_id: - description: - - Configures the BGP routing process router-id value. - type: str - default: - log_neighbor_changes: - description: - - Enable/disable logging neighbor up/down and reset reason. - type: bool - neighbors: - description: - - Specifies BGP neighbor related configurations. - type: list - elements: dict - suboptions: - neighbor: - description: - - Neighbor router address. - required: true - type: str - remote_as: - description: - - Remote AS of the BGP neighbor to configure. - type: int - required: true - update_source: - description: - - Source of the routing updates. - type: str - password: - description: - - Password to authenticate the BGP peer connection. - type: str - enabled: - description: - - Administratively shutdown or enable a neighbor. - type: bool - description: - description: - - Neighbor specific description. - type: str - ebgp_multihop: - description: - - Specifies the maximum hop count for EBGP neighbors not on directly connected - networks. - - The range is from 1 to 255. - type: int - peer_group: - description: - - Name of the peer group that the neighbor is a member of. - type: str - timers: - description: - - Specifies BGP neighbor timer related configurations. - type: dict - suboptions: - keepalive: - description: - - Frequency (in seconds) with which the device sends keepalive messages - to its peer. - - The range is from 0 to 65535. - type: int - required: true - holdtime: - description: - - Interval (in seconds) after not receiving a keepalive message that - IOS declares a peer dead. - - The range is from 0 to 65535. - type: int - required: true - min_neighbor_holdtime: - description: - - Interval (in seconds) specifying the minimum acceptable hold-time - from a BGP neighbor. - - The minimum acceptable hold-time must be less than, or equal to, - the interval specified in the holdtime argument. - - The range is from 0 to 65535. - type: int - local_as: - description: - - The local AS number for the neighbor. - type: int - networks: - description: - - Specify Networks to announce via BGP. - - For operation replace, this option is mutually exclusive with networks option - under address_family. - - For operation replace, if the device already has an address family activated, - this option is not allowed. - type: list - elements: dict - suboptions: - prefix: - description: - - Network ID to announce via BGP. - required: true - type: str - masklen: - description: - - Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.). - type: int - route_map: - description: - - Route map to modify the attributes. - type: str - address_family: - description: - - Specifies BGP address family related configurations. - type: list - elements: dict - suboptions: - afi: - description: - - Type of address family to configure. - choices: - - ipv4 - - ipv6 - required: true - type: str - safi: - description: - - Specifies the type of cast for the address family. - choices: - - flowspec - - unicast - - multicast - - labeled-unicast - default: unicast - type: str - synchronization: - description: - - Enable/disable IGP synchronization. - type: bool - auto_summary: - description: - - Enable/disable automatic network number summarization. - type: bool - redistribute: - description: - - Specifies the redistribute information from another routing protocol. - type: list - elements: dict - suboptions: - protocol: - description: - - Specifies the protocol for configuring redistribute information. - choices: - - ospf - - ospfv3 - - eigrp - - isis - - static - - connected - - odr - - lisp - - mobile - - rip - required: true - type: str - id: - description: - - Identifier for the routing protocol for configuring redistribute - information. - - Valid for protocols 'ospf', 'ospfv3' and 'eigrp'. - type: str - metric: - description: - - Specifies the metric for redistributed routes. - type: int - route_map: - description: - - Specifies the route map reference. - type: str - networks: - description: - - Specify Networks to announce via BGP. - - For operation replace, this option is mutually exclusive with root level - networks option. - type: list - elements: dict - suboptions: - prefix: - description: - - Network ID to announce via BGP. - required: true - type: str - masklen: - description: - - Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.). - type: int - route_map: - description: - - Route map to modify the attributes. - type: str - neighbors: - description: - - Specifies BGP neighbor related configurations in Address Family configuration - mode. - type: list - elements: dict - suboptions: - neighbor: - description: - - Neighbor router address. - required: true - type: str - advertisement_interval: - description: - - Minimum interval between sending BGP routing updates for this neighbor. - type: int - route_reflector_client: - description: - - Specify a neighbor as a route reflector client. - type: bool - route_server_client: - description: - - Specify a neighbor as a route server client. - type: bool - activate: - description: - - Enable the Address Family for this Neighbor. - type: bool - remove_private_as: - description: - - Remove the private AS number from outbound updates. - type: bool - next_hop_self: - description: - - Enable/disable the next hop calculation for this neighbor. - type: bool - next_hop_unchanged: - description: - - Propagate next hop unchanged for iBGP paths to this neighbor. - type: bool - maximum_prefix: - description: - - Maximum number of prefixes to accept from this peer. - - The range is from 1 to 2147483647. - type: int - prefix_list_in: - description: - - Name of ip prefix-list to apply to incoming prefixes. - type: str - prefix_list_out: - description: - - Name of ip prefix-list to apply to outgoing prefixes. - type: str - operation: - description: - - Specifies the operation to be performed on the BGP process configured on the - device. - - In case of merge, the input configuration will be merged with the existing BGP - configuration on the device. - - In case of replace, if there is a diff between the existing configuration and - the input configuration, the existing configuration will be replaced by the - input configuration for every option that has the diff. - - In case of override, all the existing BGP configuration will be removed from - the device and replaced with the input configuration. - - In case of delete the existing BGP configuration will be removed from the device. - default: merge - type: str - choices: - - merge - - replace - - override - - delete - -""" - -EXAMPLES = """ -- name: Configure global bgp as 64496 - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - router_id: 192.0.2.1 - log_neighbor_changes: true - neighbors: - - neighbor: 203.0.113.5 - remote_as: 64511 - timers: - keepalive: 300 - holdtime: 360 - min_neighbor_holdtime: 360 - - neighbor: 198.51.100.2 - remote_as: 64498 - networks: - - prefix: 198.51.100.0 - route_map: RMAP_1 - - prefix: 192.0.2.0 - masklen: 23 - address_family: - - afi: ipv4 - safi: unicast - redistribute: - - protocol: ospf - id: 223 - metric: 10 - operation: merge - -- name: Configure BGP neighbors - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.10 - remote_as: 64496 - password: ansible - description: IBGP_NBR_1 - ebgp_multihop: 100 - timers: - keepalive: 300 - holdtime: 360 - min_neighbor_holdtime: 360 - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - operation: merge - -- name: Configure root-level networks for BGP - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - prefix: 203.0.113.32 - masklen: 27 - route_map: RMAP_2 - operation: merge - -- name: Configure BGP neighbors under address family mode - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: unicast - neighbors: - - neighbor: 203.0.113.10 - activate: true - maximum_prefix: 250 - advertisement_interval: 120 - - neighbor: 192.0.2.15 - activate: true - route_reflector_client: true - operation: merge - -- name: Remove bgp as 64496 from config - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - operation: delete -""" - -RETURN = """ -commands: - description: The list of configuration mode commands to send to the device - returned: always - type: list - sample: - - router bgp 64496 - - bgp router-id 192.0.2.1 - - bgp log-neighbor-changes - - neighbor 203.0.113.5 remote-as 64511 - - neighbor 203.0.113.5 timers 300 360 360 - - neighbor 198.51.100.2 remote-as 64498 - - network 198.51.100.0 route-map RMAP_1 - - network 192.0.2.0 mask 255.255.254.0 - - address-family ipv4 - - redistribute ospf 223 metric 70 - - exit-address-family -""" -from ansible.module_utils._text import to_text - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.cli.config.bgp.process import ( - REDISTRIBUTE_PROTOCOLS, -) -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.module import ( - NetworkModule, -) - - -def main(): - """main entry point for module execution""" - network_spec = {"prefix": dict(required=True), "masklen": dict(type="int"), "route_map": dict()} - redistribute_spec = { - "protocol": dict(choices=REDISTRIBUTE_PROTOCOLS, required=True), - "id": dict(), - "metric": dict(type="int"), - "route_map": dict(), - } - timer_spec = { - "keepalive": dict(type="int", required=True), - "holdtime": dict(type="int", required=True), - "min_neighbor_holdtime": dict(type="int"), - } - neighbor_spec = { - "neighbor": dict(required=True), - "remote_as": dict(type="int", required=True), - "local_as": dict(type="int"), - "update_source": dict(), - "password": dict(no_log=True), - "enabled": dict(type="bool"), - "description": dict(), - "ebgp_multihop": dict(type="int"), - "timers": dict(type="dict", options=timer_spec), - "peer_group": dict(), - } - af_neighbor_spec = { - "neighbor": dict(required=True), - "activate": dict(type="bool"), - "advertisement_interval": dict(type="int"), - "remove_private_as": dict(type="bool"), - "next_hop_self": dict(type="bool"), - "next_hop_unchanged": dict(type="bool"), - "route_reflector_client": dict(type="bool"), - "route_server_client": dict(type="bool"), - "maximum_prefix": dict(type="int"), - "prefix_list_in": dict(), - "prefix_list_out": dict(), - } - address_family_spec = { - "afi": dict(choices=["ipv4", "ipv6"], required=True), - "safi": dict( - choices=["flowspec", "labeled-unicast", "multicast", "unicast"], - default="unicast", - ), - "auto_summary": dict(type="bool"), - "synchronization": dict(type="bool"), - "networks": dict(type="list", elements="dict", options=network_spec), - "redistribute": dict(type="list", elements="dict", options=redistribute_spec), - "neighbors": dict(type="list", elements="dict", options=af_neighbor_spec), - } - config_spec = { - "bgp_as": dict(type="int", required=True), - "router_id": dict(), - "log_neighbor_changes": dict(type="bool"), - "neighbors": dict(type="list", elements="dict", options=neighbor_spec), - "address_family": dict(type="list", elements="dict", options=address_family_spec), - "networks": dict(type="list", elements="dict", options=network_spec), - } - argument_spec = { - "config": dict(type="dict", options=config_spec), - "operation": dict(default="merge", choices=["merge", "replace", "override", "delete"]), - } - module = NetworkModule(argument_spec=argument_spec, supports_check_mode=True) - try: - result = module.edit_config(config_filter="| section ^router bgp") - except Exception as exc: - module.fail_json(msg=to_text(exc)) - module.exit_json(**result) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_bgp_address_family.py b/ansible_collections/cisco/ios/plugins/modules/ios_bgp_address_family.py index 14589f20f..e9f770631 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_bgp_address_family.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_bgp_address_family.py @@ -22,7 +22,7 @@ author: - Sagar Paul (@KB-perByte) - Sumit Jaiswal (@justjais) notes: - - Tested against Cisco IOSXE Version 17.3 on CML. + - Tested against Cisco IOS-XE Version 17.3 on CML. - This module works with connection C(network_cli). See U(https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html) - The module examples uses callback plugin (stdout_callback = yaml) to generate task diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_bgp_global.py b/ansible_collections/cisco/ios/plugins/modules/ios_bgp_global.py index 9aa33c87c..55ab21341 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_bgp_global.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_bgp_global.py @@ -22,7 +22,7 @@ author: - Sumit Jaiswal (@justjais) - Sagar Paul (@KB-perByte) notes: - - Tested against Cisco IOSXE Version 17.3 on CML. + - Tested against Cisco IOS-XE Version 17.3 on CML. - This module works with connection C(network_cli). See U(https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html) - The module examples uses callback plugin (stdout_callback = yaml) to generate task @@ -274,6 +274,22 @@ options: - Set the bgp consistency checker - Please refer vendor documentation for valid values type: int + default: + description: Configure BGP defaults + type: dict + suboptions: + ipv4_unicast: + description: Activate ipv4-unicast for a peer by default + type: bool + default: true + route_target: + description: Control behavior based on Route-Target attributes + type: dict + suboptions: + filter: + description: Control automatic VPN Route-Target filtering + type: bool + default: true dampening: description: Enable route-flap dampening type: dict @@ -1795,8 +1811,6 @@ options: template: description: - Enter template command mode - - This option is DEPRECATED as is not valid within the scope of module, - this attribute will be removed after 2024-06-01. type: dict suboptions: peer_policy: @@ -1883,6 +1897,10 @@ EXAMPLES = """ reuse_route_val: 1 suppress_route_val: 1 max_suppress: 1 + default: + ipv4_unicast: false + route_target: + filter: true graceful_shutdown: neighbors: time: 50 @@ -1926,6 +1944,7 @@ EXAMPLES = """ # - timers bgp 100 200 150 # - bgp advertise-best-external # - bgp bestpath compare-routerid +# - no bgp default ipv4-unicast # - bgp dampening 1 1 1 1 # - bgp graceful-shutdown all neighbors 50 local-preference 100 community 100 # - bgp log-neighbor-changes @@ -1948,6 +1967,10 @@ EXAMPLES = """ # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 +# default: +# ipv4_unicast: false +# route_target: +# filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -1987,6 +2010,7 @@ EXAMPLES = """ # # vios#sh running-config | section ^router bgp # router bgp 65000 +# no bgp default ipv4-unicast # bgp log-neighbor-changes # bgp nopeerup-delay post-boot 10 # bgp graceful-shutdown all neighbors 50 local-preference 100 community 100 @@ -2059,6 +2083,10 @@ EXAMPLES = """ # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 +# default: +# ipv4_unicast: true +# route_target: +# filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -2106,6 +2134,10 @@ EXAMPLES = """ # bestpath_options: # med: # confed: true +# default: +# ipv4_unicast: true +# route_target: +# filter: true # log_neighbor_changes: true # nopeerup_delay_options: # cold_boot: 20 @@ -2172,6 +2204,10 @@ EXAMPLES = """ # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 +# default: +# ipv4_unicast: true +# route_target: +# filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -2247,6 +2283,10 @@ EXAMPLES = """ # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 +# default: +# ipv4_unicast: true +# route_target: +# filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -2318,6 +2358,10 @@ EXAMPLES = """ # advertise_best_external: true # bestpath_options: # compare_routerid: true +# default: +# ipv4_unicast: true +# route_target: +# filter: true # dampening: # max_suppress: 1 # penalty_half_time: 1 @@ -2394,6 +2438,10 @@ EXAMPLES = """ # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 +# default: +# ipv4_unicast: true +# route_target: +# filter: true # graceful_shutdown: # community: '100' # local_preference: 100 diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_evpn_evi.py b/ansible_collections/cisco/ios/plugins/modules/ios_evpn_evi.py index c2b8b330e..2b232e3f1 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_evpn_evi.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_evpn_evi.py @@ -21,7 +21,7 @@ description: This module provides declarative management of L2VPN EVPN EVI on Ci version_added: 5.3.0 author: Padmini Priyadarshini Sivaraj (@PadminiSivaraj) notes: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection C(network_cli). See U(https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html) options: diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_evpn_global.py b/ansible_collections/cisco/ios/plugins/modules/ios_evpn_global.py index 0ffe52b90..9070df49d 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_evpn_global.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_evpn_global.py @@ -21,7 +21,7 @@ description: This module provides declarative management of L2VPN EVPN on Cisco version_added: 5.3.0 author: Padmini Priyadarshini Sivaraj (@PadminiSivaraj) notes: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection C(network_cli). See U(https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html) options: diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_l3_interfaces.py b/ansible_collections/cisco/ios/plugins/modules/ios_l3_interfaces.py index 0f6924124..f8bf73f80 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_l3_interfaces.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_l3_interfaces.py @@ -40,6 +40,14 @@ options: - Full name of the interface excluding any logical unit number, i.e. GigabitEthernet0/1. type: str required: true + autostate: + description: + - Enable autostate determination for VLAN. + type: bool + mac_address: + description: + - Manually set interface MAC address. + type: str ipv4: description: - IPv4 address to be set for the Layer-3 interface mentioned in I(name) option. @@ -87,6 +95,19 @@ options: pool: description: IP Address auto-configured from a local DHCP pool. type: str + source_interface: + description: Enable IP processing without an explicit address + type: dict + suboptions: + name: + description: Interface name + type: str + poll: + description: Enable IP connected host polling + type: bool + point_to_point: + description: Enable point-to-point connection + type: bool ipv6: description: - IPv6 address to be set for the Layer-3 interface mentioned in I(name) option. @@ -119,6 +140,9 @@ options: rapid_commit: description: Enable Rapid-Commit. type: bool + enable: + description: Enable IPv6 on interface + type: bool anycast: description: Configure as an anycast type: bool @@ -229,6 +253,13 @@ EXAMPLES = """ - name: GigabitEthernet3.100 ipv4: - address: 192.168.0.3/24 + - name: Vlan901 + autostate: false + ipv4: + - source_interface: + name: Loopback1 + ipv6: + - enable: true state: merged # Task Output @@ -253,6 +284,10 @@ EXAMPLES = """ # - ipv6 address fd5d:12c9:2201:1::1/64 # - interface GigabitEthernet3.100 # - ip address 192.168.0.3 255.255.255.0 +# - interface Vlan901 +# - ip unnumbered Loopback1 +# - ipv6 enable +# - no autostate # after: # - ipv4: # - dhcp: @@ -269,6 +304,13 @@ EXAMPLES = """ # - address: 192.168.0.3/24 # - name: GigabitEthernet4 # - name: Loopback999 +# ipv4: +# - source_interface: +# name: Loopback1 +# ipv6: +# - enable: true +# autostate: false +# - name: Vlan901 # After state: # ------------ @@ -299,6 +341,11 @@ EXAMPLES = """ # no ip address # shutdown # negotiation auto +# interface Vlan901 +# ip unnumbered Loopback1 +# ipv6 enable +# no autostate + # Using replaced diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_linkagg.py b/ansible_collections/cisco/ios/plugins/modules/ios_linkagg.py index 4572afe42..01267865f 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_linkagg.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_linkagg.py @@ -265,11 +265,11 @@ def parse_mode(module, config, group, member): def parse_members(module, config, group): members = [] for line in config.strip().split("!"): - l = line.strip() - if l.startswith("interface"): - match_group = re.findall("channel-group {0} mode".format(group), l, re.M) + lineStrip = line.strip() + if lineStrip.startswith("interface"): + match_group = re.findall("channel-group {0} mode".format(group), lineStrip, re.M) if match_group: - match = re.search("interface (\\S+)", l, re.M) + match = re.search("interface (\\S+)", lineStrip, re.M) if match: members.append(match.group(1)) return members @@ -291,8 +291,8 @@ def map_config_to_obj(module): objs = list() config = get_config(module) for line in config.split("\n"): - l = line.strip() - match = re.search("interface Port-channel(\\S+)", l, re.M) + lStrip = line.strip() + match = re.search("interface Port-channel(\\S+)", lStrip, re.M) if match: obj = {} group = match.group(1) diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_ntp.py b/ansible_collections/cisco/ios/plugins/modules/ios_ntp.py deleted file mode 100644 index 065054411..000000000 --- a/ansible_collections/cisco/ios/plugins/modules/ios_ntp.py +++ /dev/null @@ -1,357 +0,0 @@ -#!/usr/bin/python -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -DOCUMENTATION = """ -module: ios_ntp -extends_documentation_fragment: - - cisco.ios.ios -short_description: (deprecated, removed after 2024-01-01) Manages core NTP configuration. -description: - - Manages core NTP configuration. -version_added: 1.0.0 -deprecated: - alternative: ios_ntp_global - why: Updated module released with more functionality. - removed_at_date: "2024-01-01" -author: - - Federico Olivieri (@Federico87) - - Joanie Sylvain (@JoanieAda) -options: - server: - description: - - Network address of NTP server. - type: str - source_int: - description: - - Source interface for NTP packets. - type: str - acl: - description: - - ACL for peer/server access restricition. - type: str - logging: - description: - - Enable NTP logs. Data type boolean. - type: bool - default: false - auth: - description: - - Enable NTP authentication. Data type boolean. - type: bool - default: false - auth_key: - description: - - md5 NTP authentication key of tye 7. - type: str - key_id: - description: - - auth_key id. Data type string - type: str - state: - description: - - Manage the state of the resource. - default: present - choices: - - present - - absent - type: str - vrf: - description: - - VRF configuration for NTP servers - type: str -""" - -EXAMPLES = """ -# Set new NTP server and source interface -- name: Example ntp play - cisco.ios.ios_ntp: - server: 10.0.255.10 - source_int: Loopback0 - logging: false - state: present - -# Remove NTP ACL and logging -- name: Example ntp play absent - cisco.ios.ios_ntp: - acl: NTP_ACL - logging: true - state: absent - -# Set NTP authentication -- name: Example ntp play auth - cisco.ios.ios_ntp: - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - state: present - -# Set new NTP configuration -- name: Example ntp play auth - cisco.ios.ios_ntp: - server: 10.0.255.10 - source_int: Loopback0 - acl: NTP_ACL - logging: true - vrf: mgmt - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - state: present -""" - -RETURN = """ -commands: - description: command sent to the device - returned: always - type: list - sample: ["no ntp server 10.0.255.10", "no ntp source Loopback0"] -""" - -import re - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.ios import ( - get_config, - load_config, -) - - -def parse_server(line, dest): - if dest == "server": - vrf, server = None, None - match = re.search( - "(ntp\\sserver\\s)(vrf\\s\\w+\\s)?(\\d+\\.\\d+\\.\\d+\\.\\d+)", - line, - re.M, - ) - - if match and match.group(2) and match.group(3): - vrf = match.group(2) - server = match.group(3) - return vrf, server - - if match and match.group(3): - server = match.group(3) - return vrf, server - - -def parse_source_int(line, dest): - if dest == "source": - match = re.search("(ntp\\ssource\\s)(\\S+)", line, re.M) - if match: - source = match.group(2) - return source - - -def parse_acl(line, dest): - if dest == "access-group": - match = re.search("ntp\\saccess-group\\s(?:peer|serve)(?:\\s+)(\\S+)", line, re.M) - if match: - acl = match.group(1) - return acl - - -def parse_logging(line, dest): - if dest == "logging": - logging = dest - return logging - - -def parse_auth_key(line, dest): - if dest == "authentication-key": - match = re.search("(ntp\\sauthentication-key\\s\\d+\\smd5\\s)(\\w+)", line, re.M) - if match: - auth_key = match.group(2) - return auth_key - - -def parse_key_id(line, dest): - if dest == "trusted-key": - match = re.search("(ntp\\strusted-key\\s)(\\d+)", line, re.M) - if match: - auth_key = match.group(2) - return auth_key - - -def parse_auth(dest): - if dest == "authenticate": - return dest - - -def map_config_to_obj(module): - obj_dict = dict() - obj = list() - server_list = list() - config = get_config(module, flags=["| include ntp"]) - for line in config.splitlines(): - match = re.search("ntp\\s(\\S+)", line, re.M) - - if match: - dest = match.group(1) - server = parse_server(line, dest) - source_int = parse_source_int(line, dest) - acl = parse_acl(line, dest) - logging = parse_logging(line, dest) - auth = parse_auth(dest) - auth_key = parse_auth_key(line, dest) - key_id = parse_key_id(line, dest) - - if server: - if server[0] is None: - server_list.append((server[0], server[1])) - else: - server_list.append((server[0].split()[1], server[1])) - if source_int: - obj_dict["source_int"] = source_int - if acl: - obj_dict["acl"] = acl - if logging: - obj_dict["logging"] = True - if auth: - obj_dict["auth"] = True - if auth_key: - obj_dict["auth_key"] = auth_key - if key_id: - obj_dict["key_id"] = key_id - obj_dict["server"] = server_list - obj.append(obj_dict) - return obj - - -def map_params_to_obj(module): - obj = list() - - obj.append( - { - "state": module.params["state"], - "server": module.params["server"], - "source_int": module.params["source_int"], - "logging": module.params["logging"], - "acl": module.params["acl"], - "auth": module.params["auth"], - "auth_key": module.params["auth_key"], - "key_id": module.params["key_id"], - "vrf": module.params["vrf"], - }, - ) - - return obj - - -def map_obj_to_commands(want, have, module): - commands = list() - - server_have = have[0].get("server", None) - source_int_have = have[0].get("source_int", None) - acl_have = have[0].get("acl", None) - logging_have = have[0].get("logging", None) - auth_have = have[0].get("auth", None) - auth_key_have = have[0].get("auth_key", None) - key_id_have = have[0].get("key_id", None) - - for w in want: - server = w["server"] - source_int = w["source_int"] - acl = w["acl"] - logging = w["logging"] - state = w["state"] - auth = w["auth"] - auth_key = w["auth_key"] - key_id = w["key_id"] - vrf = w["vrf"] - if vrf == "": - vrf = None - - if state == "absent": - if server_have and (vrf, server) in server_have: - if vrf is not None: - commands.append("no ntp server vrf {0} {1}".format(vrf, server)) - else: - commands.append("no ntp server {0}".format(server)) - if source_int and source_int_have: - commands.append("no ntp source {0}".format(source_int)) - if acl and acl_have: - commands.append("no ntp access-group peer {0}".format(acl)) - if logging is True and logging_have: - commands.append("no ntp logging") - if auth is True and auth_have: - commands.append("no ntp authenticate") - if key_id and key_id_have: - commands.append("no ntp trusted-key {0}".format(key_id)) - if auth_key and auth_key_have: - if key_id and key_id_have: - commands.append( - "no ntp authentication-key {0} md5 {1} 7".format(key_id, auth_key), - ) - elif state == "present": - if server is not None and (vrf, server) not in server_have: - if vrf is not None: - commands.append("ntp server vrf {0} {1}".format(vrf, server)) - else: - commands.append("ntp server {0}".format(server)) - if source_int is not None and source_int != source_int_have: - commands.append("ntp source {0}".format(source_int)) - if acl is not None and acl != acl_have: - commands.append("ntp access-group peer {0}".format(acl)) - if logging is not None and logging != logging_have and logging is not False: - commands.append("ntp logging") - if auth is not None and auth != auth_have and auth is not False: - commands.append("ntp authenticate") - if key_id is not None and key_id != key_id_have: - commands.append("ntp trusted-key {0}".format(key_id)) - if auth_key is not None and auth_key != auth_key_have: - if key_id is not None: - commands.append("ntp authentication-key {0} md5 {1} 7".format(key_id, auth_key)) - return commands - - -def main(): - argument_spec = dict( - server=dict(), - source_int=dict(), - acl=dict(), - logging=dict(type="bool", default=False), - auth=dict(type="bool", default=False), - auth_key=dict(no_log=True), - key_id=dict(), - state=dict(choices=["absent", "present"], default="present"), - vrf=dict(), - ) - module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) - result = {"changed": False} - warnings = list() - if warnings: - result["warnings"] = warnings - want = map_params_to_obj(module) - have = map_config_to_obj(module) - commands = map_obj_to_commands(want, have, module) - result["commands"] = commands - if commands: - if not module.check_mode: - load_config(module, commands) - result["changed"] = True - module.exit_json(**result) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_user.py b/ansible_collections/cisco/ios/plugins/modules/ios_user.py index 50f2f3455..931ed0e71 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_user.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_user.py @@ -220,6 +220,17 @@ extends_documentation_fragment: """ EXAMPLES = """ +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username testuser privilege 15 password 0 password + +# Present state create a new user play: +# ------------------------------------- + - name: Create a new user cisco.ios.ios_user: name: ansible @@ -227,6 +238,37 @@ EXAMPLES = """ sshkey: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" state: present +# Task Output +# ----------- + +# commands: +# - ip ssh pubkey-chain +# - username ansible +# - key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora +# - exit +# - exit +# - username ansible nopassword + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username testuser privilege 15 password 0 password +# username ansible nopassword +# username ansible +# key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username testuser privilege 15 password 0 password + +# Present state create a new user with multiple keys play: +# -------------------------------------------------------- + - name: Create a new user with multiple keys cisco.ios.ios_user: name: ansible @@ -235,18 +277,109 @@ EXAMPLES = """ - "{{ lookup('file', '~/path/to/public_key') }}" state: present +# Task Output +# ----------- + +# commands: +# - ip ssh pubkey-chain +# - username ansible +# - key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora +# - key-hash ssh-rsa 1985673DCF7FA9A0F374BB97DC2ABB27 test@fedora +# - exit +# - exit + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username testuser privilege 15 password 0 password +# username ansible +# key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora +# key-hash ssh-rsa 1985673DCF7FA9A0F374BB97DC2ABB27 test@fedora + +# Using Purge: true + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username testuser privilege 15 password 0 password +# username ansible nopassword +# username ansible +# key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + +# Purge all users except admin play: +# ---------------------------------- + - name: Remove all users except admin cisco.ios.ios_user: purge: true +# Task Output +# ----------- + +# commands: +# - no username testuser +# - no username ansible +# - ip ssh pubkey-chain +# - no username ansible +# - exit + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password + +# Using Purge: true + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username testuser privilege 15 password 0 password1 +# username testuser1 privilege 15 password 0 password2 +# username ansible nopassword + +# Purge all users except admin and these listed users play: +# --------------------------------------------------------- + - name: Remove all users except admin and these listed users cisco.ios.ios_user: aggregate: + - name: testuser - name: testuser1 - - name: testuser2 - - name: testuser3 purge: true +# Task Output +# ----------- + +# commands: +# - no username ansible + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password +# username testuser privilege 15 password 0 password1 +# username testuser1 privilege 15 password 0 password2 + +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username netop password 0 password1 +# username netend password 0 password2 + +# Present state set multiple users to privilege level 15 play: +# ------------------------------------------------------------ + - name: Set multiple users to privilege level 15 cisco.ios.ios_user: aggregate: @@ -255,38 +388,135 @@ EXAMPLES = """ privilege: 15 state: present -- name: Set user view/role - cisco.ios.ios_user: - name: netop - view: network-operator - state: present +# Task Output +# ----------- + +# commands: +# - username netop privilege 15 +# - username netend privilege 15 + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password +# username netop privilege 15 password 0 password1 +# username netend privilege 15 password 0 password2 + +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username netop privilege 15 password 0 oldpassword + +# Present state Change Password for User netop play: +# -------------------------------------------- - name: Change Password for User netop cisco.ios.ios_user: name: netop - configured_password: "{{ new_password }}" + configured_password: "newpassword" + password_type: password update_password: always state: present -- name: Aggregate of users +# Task Output +# ----------- + +# commands: +# - username netop password newpassword + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password +# username netop privilege 15 password 0 newpassword + +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username netop privilege 15 password 0 password +# username netend privilege 15 password 0 password + +# Present state set user view/role for users play: +# -------------------------------------------- + +- name: Set user view/role for users cisco.ios.ios_user: aggregate: - - name: ansibletest2 - - name: ansibletest3 + - name: netop + - name: netend view: network-admin + state: present -- name: Add a user specifying password type - cisco.ios.ios_user: - name: ansibletest4 - configured_password: "{{ new_password }}" - password_type: password +# Task Output +# ----------- + +# commands: +# - username netop view network-admin +# - username netend view network-admin + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password +# username netop privilege 15 view network-admin password 0 password +# username netend privilege 15 view network-admin password 0 password + +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password + +# Present state create a new user with hashed password play: +# -------------------------------------------------------------- -- name: Add a user with MD5 hashed password +- name: Create a new user with hashed password cisco.ios.ios_user: name: ansibletest5 hashed_password: - type: 5 - value: $3$8JcDilcYgFZi.yz4ApaqkHG2.8/ + type: 9 + value: "thiswillbereplacedwithhashedpassword" + state: present + +# Task Output +# ----------- + +# commands: +# - username ansibletest5 secret 9 thiswillbereplacedwithhashedpassword + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password +# username ansibletest5 secret 9 thiswillbereplacedwithhashedpassword + +# Using state: absent + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username ansibletest1 password 0 password +# username ansibletest2 secret 9 thiswillbereplacedwithhashedpassword +# username ansibletest3 password 5 thistoowillbereplacedwithhashedpassword + +# Absent state remove multiple users play: +# ---------------------------------------- - name: Delete users with aggregate cisco.ios.ios_user: @@ -295,6 +525,20 @@ EXAMPLES = """ - name: ansibletest2 - name: ansibletest3 state: absent + +# Task Output +# ----------- + +# commands: +# - no username ansibletest1 +# - no username ansibletest2 +# - no username ansibletest3 + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password """ RETURN = """ @@ -339,6 +583,18 @@ def user_del_cmd(username): } +def add_ssh(command, want, x=None): + command.append("ip ssh pubkey-chain") + if x: + command.append("username %s" % want["name"]) + for item in x: + command.append("key-hash %s" % item) + command.append("exit") + else: + command.append("no username %s" % want["name"]) + command.append("exit") + + def sshkey_fingerprint(sshkey): # IOS will accept a MD5 fingerprint of the public key # and is easier to configure in a single line @@ -366,19 +622,10 @@ def map_obj_to_commands(updates, module): def add(command, want, x): command.append("username %s %s" % (want["name"], x)) - def add_hashed_password(command, want, x): - command.append("username %s secret %s %s" % (want["name"], x.get("type"), x.get("value"))) - - def add_ssh(command, want, x=None): - command.append("ip ssh pubkey-chain") - if x: - command.append("username %s" % want["name"]) - for item in x: - command.append("key-hash %s" % item) - command.append("exit") - else: - command.append("no username %s" % want["name"]) - command.append("exit") + def add_hashed_password(command, want, x, password_type): + command.append( + "username %s %s %s %s" % (want["name"], password_type, x.get("type"), x.get("value")), + ) for update in updates: want, have = update @@ -402,7 +649,7 @@ def map_obj_to_commands(updates, module): ) add(commands, want, "%s %s" % (password_type, want["configured_password"])) if needs_update(want, have, "hashed_password"): - add_hashed_password(commands, want, want["hashed_password"]) + add_hashed_password(commands, want, want["hashed_password"], password_type) if needs_update(want, have, "nopassword"): if want["nopassword"]: add(commands, want, "nopassword") @@ -451,6 +698,7 @@ def map_config_to_obj(module): regex = "username %s .+$" % user cfg = re.findall(regex, data, re.M) cfg = "\n".join(cfg) + ssh_key_list = parse_sshkey(data, user) obj = { "name": user, "state": "present", @@ -458,7 +706,9 @@ def map_config_to_obj(module): "configured_password": None, "hashed_password": None, "password_type": parse_password_type(cfg), - "sshkey": parse_sshkey(data, user), + "sshkey": ssh_key_list, + "is_only_ssh_user": False if cfg.strip() and ssh_key_list else True, + "is_only_normal_user": True if cfg.strip() and ssh_key_list == [] else False, "privilege": parse_privilege(cfg), "view": parse_view(cfg), } @@ -536,6 +786,14 @@ def update_objects(want, have): return updates +def find_set_difference(list1, list2, key): + want_users = [x[key] for x in list1] + have_users = [x[key] for x in list2] + setdifference = set(have_users).difference(want_users) + result = [item for item in list2 if item[key] in setdifference] + return result + + def main(): """main entry point for module execution""" hashed_password_spec = dict( @@ -581,13 +839,19 @@ def main(): result = {"changed": False, "warnings": warnings} want = map_params_to_obj(module) have = map_config_to_obj(module) + commands = map_obj_to_commands(update_objects(want, have), module) if module.params["purge"]: - want_users = [x["name"] for x in want] - have_users = [x["name"] for x in have] - for item in set(have_users).difference(want_users): - if item != "admin": - commands.append(user_del_cmd(item)) + setdifference = find_set_difference(want, have, "name") + for item in setdifference: + if item["name"] != "admin": + if item["is_only_ssh_user"]: + add_ssh(commands, item) + if item["is_only_normal_user"]: + commands.append(user_del_cmd(item["name"])) + if item["is_only_normal_user"] is False and item["is_only_ssh_user"] is False: + add_ssh(commands, item) + commands.append(user_del_cmd(item["name"])) result["commands"] = commands if commands: if not module.check_mode: diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_vlans.py b/ansible_collections/cisco/ios/plugins/modules/ios_vlans.py index 1dd3228ce..de9a0212a 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_vlans.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_vlans.py @@ -30,9 +30,12 @@ description: This module provides declarative management of VLANs on Cisco IOS network devices. version_added: 1.0.0 -author: Sumit Jaiswal (@justjais) +author: + - Sumit Jaiswal (@justjais) + - Sagar Paul (@KB-perByte) + - Padmini Priyadarshini Sivaraj (@PadminiSivaraj) notes: - - Tested against Cisco IOSl2 device with Version 15.2 on VIRL. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - Starting from v2.5.0, this module will fail when run against Cisco IOS devices that do not support VLANs. The offline states (C(rendered) and C(parsed)) will work as expected. - This module works with connection C(network_cli). @@ -118,10 +121,6 @@ options: transforms it into Ansible structured data as per the resource module's argspec and the value is then returned in the I(parsed) key within the result. type: str - configuration: - description: - When set to true, deals with vlan configuration CLIs - type: bool state: description: - The state the configuration should be left in @@ -137,8 +136,8 @@ options: - The state I(parsed) reads the configuration from C(running_config) option and transforms it into JSON format as per the resource module parameters and the value is returned in the I(parsed) key within the result. The value of C(running_config) - option should be the same format as the output of command I(show running-config - | include ip route|ipv6 route) executed on device. For state I(parsed) active + option should be the same format as the output of commands I(show vlan) and I(show + running-config | sec ^vlan configuration .+) executed on device. For state I(parsed) active connection to remote host is not required. type: str choices: @@ -148,6 +147,7 @@ options: - deleted - rendered - gathered + - purged - parsed default: merged """ @@ -224,7 +224,7 @@ EXAMPLES = """ # ------------------------------------------------------------------------------ # 10 -# Using merged (configuration: True) +# Using merged # Before state: # ------------- @@ -246,7 +246,6 @@ EXAMPLES = """ - vlan_id: 901 member: vni: 50901 - configuration: true state: merged # After state: @@ -325,7 +324,7 @@ EXAMPLES = """ # 1005 trnet 101005 1500 - - - ibm - 0 0 -# Using overridden (configuration: True) +# Using overridden # Before state: # ------------- @@ -351,7 +350,6 @@ EXAMPLES = """ member: vni: 10101 evi: 101 - configuration: true state: overridden # After state: @@ -523,7 +521,7 @@ EXAMPLES = """ # 1004 fdnet 101004 1500 - - - ieee - 0 0 # 1005 trnet 101005 1500 - - - ibm - 0 0 -# Using deleted (configuration: True) +# Using deleted # Before state: # ------------- @@ -542,13 +540,13 @@ EXAMPLES = """ cisco.ios.ios_vlans: config: - vlan_id: 101 - configuration: true state: deleted # After state: # ------------- # # Leaf-01#show run nve | sec ^vlan configuration +# vlan configuration 101 # vlan configuration 102 # member evpn-instance 102 vni 10102 # vlan configuration 201 @@ -613,7 +611,7 @@ EXAMPLES = """ # 1004 fdnet 101004 1500 - - - ieee - 0 0 # 1005 trnet 101005 1500 - - - ibm - 0 0 -# Using Deleted without any config passed (configuration: True) +# Using Deleted without any config passed # "(NOTE: This will delete all of configured vlans attributes)" # Before state: @@ -633,7 +631,6 @@ EXAMPLES = """ - name: Delete attributes of ALL VLANs cisco.ios.ios_vlans: - configuration: true state: deleted # After state: @@ -647,7 +644,7 @@ EXAMPLES = """ # no vlan configuration 901 # no vlan configuration 902 -# Using Gathered (configuration: True) +# Using gathered, vlan configuration only # Before state: # ------------- @@ -666,8 +663,6 @@ EXAMPLES = """ - name: Gather listed vlans with provided configurations cisco.ios.ios_vlans: - config: - configuration: true state: gathered # Module Execution Result: @@ -757,9 +752,9 @@ EXAMPLES = """ # "shutdown" # ] -# Using Rendered (configuration: True) +# Using Rendered -- name: Render the commands for provided configuration +- name: Render the commands for provided configuration cisco.ios.ios_vlans: config: - vlan_id: 101 @@ -876,7 +871,7 @@ EXAMPLES = """ # } # ] -# Using Parsed (configuration: True) +# Using Parsed Vlan configuration only # File: parsed.cfg # ---------------- @@ -891,7 +886,6 @@ EXAMPLES = """ - name: Parse the commands for provided configuration cisco.ios.ios_vlans: running_config: "{{ lookup('file', './parsed.cfg') }}" - configuration: true state: parsed # Module Execution Result: @@ -919,29 +913,177 @@ EXAMPLES = """ # "vlan_id": 901 # } # ] + +# Using Parsed, Vlan and vlan configuration + +# File: parsed.cfg +# ---------------- +# +# VLAN Name Status Ports +# ---- -------------------------------- --------- ------------------------------- +# 1 default active Gi0/1, Gi0/2 +# 101 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 +# Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 +# Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 +# Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 +# Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 +# 150 VLAN0150 active +# 888 a_very_long_vlan_name_a_very_long_vlan_name +# active +# 1002 fddi-default act/unsup +# 1003 trcrf-default act/unsup +# 1004 fddinet-default act/unsup +# 1005 trbrf-default act/unsup +# +# VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 +# ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ +# 1 enet 100001 1500 - - - - - 0 0 +# 101 enet 100101 610 - - - - - 0 0 +# 150 enet 100150 1500 - - - - - 0 0 +# 888 enet 100888 1500 - - - - - 0 0 +# 1002 fddi 101002 1500 - - - - - 0 0 +# 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 +# 1004 fdnet 101004 1500 - - - ieee - 0 0 +# 1005 trbrf 101005 4472 - - 15 ibm - 0 0 +# +# +# VLAN AREHops STEHops Backup CRF +# ---- ------- ------- ---------- +# 1003 7 7 off +# +# Remote SPAN VLANs +# ------------------------------------------------------------------------------ +# 150 +# +# Primary Secondary Type Ports +# ------- --------- ----------------- ------------------------------------------ +# +# vlan configuration 101 +# member evpn-instance 101 vni 10101 +# vlan configuration 102 +# member evpn-instance 102 vni 10102 +# vlan configuration 901 +# member vni 50901 + +- name: Parse the commands for provided configuration + cisco.ios.ios_vlans: + running_config: "{{ lookup('file', './parsed.cfg') }}" + state: parsed + +# Module Execution Result: +# ------------------------ +# +# "parsed": [ +# { +# "name": "default", +# "vlan_id": 1, +# "state": "active", +# "shutdown": "disabled", +# "mtu": 1500, +# }, +# { +# "name": "RemoteIsInMyName", +# "vlan_id": 101, +# "state": "active", +# "shutdown": "enabled", +# "mtu": 610, +# "member": {"evi": 101, "vni": 10101}, +# }, +# { +# "name": "VLAN0150", +# "vlan_id": 150, +# "state": "active", +# "shutdown": "disabled", +# "mtu": 1500, +# "remote_span": True, +# }, +# { +# "name": "a_very_long_vlan_name_a_very_long_vlan_name", +# "vlan_id": 888, +# "state": "active", +# "shutdown": "disabled", +# "mtu": 1500, +# }, +# { +# "name": "fddi-default", +# "vlan_id": 1002, +# "state": "active", +# "shutdown": "enabled", +# "mtu": 1500, +# }, +# { +# "name": "trcrf-default", +# "vlan_id": 1003, +# "state": "active", +# "shutdown": "enabled", +# "mtu": 4472, +# }, +# { +# "name": "fddinet-default", +# "vlan_id": 1004, +# "state": "active", +# "shutdown": "enabled", +# "mtu": 1500, +# }, +# { +# "name": "trbrf-default", +# "vlan_id": 1005, +# "state": "active", +# "shutdown": "enabled", +# "mtu": 4472, +# }, +# {"vlan_id": 102, "member": {"evi": 102, "vni": 10102}}, +# {"vlan_id": 901, "member": {"vni": 50901}}, +# ] """ RETURN = """ before: - description: The configuration as structured data prior to module invocation. - returned: always - type: list + description: The configuration prior to the module execution. + returned: when I(state) is C(merged), C(replaced), C(overridden), C(deleted) or C(purged) + type: dict sample: > - The configuration returned will always be in the same format - of the parameters above. + This output will always be in the same format as the + module argspec. after: - description: The configuration as structured data after module completion. + description: The resulting configuration after module execution. returned: when changed - type: list + type: dict sample: > - The configuration returned will always be in the same format - of the parameters above. + This output will always be in the same format as the + module argspec. commands: description: The set of commands pushed to the remote device. - returned: always + returned: when I(state) is C(merged), C(replaced), C(overridden), C(deleted) or C(purged) + type: list + sample: + - vlan configuration 202 + - state active + - remote-span +rendered: + description: The provided configuration in the task rendered in device-native format (offline). + returned: when I(state) is C(rendered) type: list - sample: ['vlan 20', 'name vlan_20', 'mtu 600', 'remote-span'] + sample: + - vlan configuration 202 + - member evpn-instance 202 vni 10202 + - vlan 200 +gathered: + description: Facts about the network resource gathered from the remote device as structured data. + returned: when I(state) is C(gathered) + type: list + sample: > + This output will always be in the same format as the + module argspec. +parsed: + description: The device native config provided in I(running_config) option parsed into structured data as per module argspec. + returned: when I(state) is C(parsed) + type: list + sample: > + This output will always be in the same format as the + module argspec. """ + from ansible.module_utils.basic import AnsibleModule from ansible_collections.cisco.ios.plugins.module_utils.network.ios.argspec.vlans.vlans import ( @@ -966,19 +1108,17 @@ def main(): :returns: the result form module invocation """ - required_if = [ - ("state", "merged", ("config",)), - ("state", "replaced", ("config",)), - ("state", "overridden", ("config",)), - ("state", "rendered", ("config",)), - ("state", "parsed", ("running_config",)), - ] - mutually_exclusive = [("config", "running_config")] - module = AnsibleModule( argument_spec=VlansArgs.argument_spec, - required_if=required_if, - mutually_exclusive=mutually_exclusive, + mutually_exclusive=[["config", "running_config"]], + required_if=[ + ["state", "merged", ["config"]], + ["state", "replaced", ["config"]], + ["state", "overridden", ["config"]], + ["state", "rendered", ["config"]], + ["state", "purged", ["config"]], + ["state", "parsed", ["running_config"]], + ], supports_check_mode=True, ) diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_vrf.py b/ansible_collections/cisco/ios/plugins/modules/ios_vrf.py index 27c6641eb..ff6814ba1 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_vrf.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_vrf.py @@ -58,6 +58,61 @@ options: description: - The list of address families with MDT parameters to be configured on the remote IOS device. type: list + suboptions: + afi: + description: Address family identifier. + type: str + choices: + ["ipv4", "ipv6"] + mdt: + description: MDT parameters. + type: dict + suboptions: + auto_discovery: + description: Auto-discovery parameters. + type: dict + suboptions: + vxlan: + description: Vxlan parameters. + type: dict + suboptions: + enable: + description: Enable VXLAN. + type: bool + inter_as: + description: Enable inter-as. + type: bool + default: + description: Parameters for default option. + type: dict + suboptions: + vxlan_mcast_group: + description: VXLAN multicast group value. + type: str + data: + description: Parameters for data option. + type: dict + suboptions: + vxlan_mcast_group: + description: VXLAN multicast group value. + type: str + threshold: + description: Threshold value. + type: int + overlay: + description: Parameters for overlay option. + type: dict + suboptions: + use_bgp: + description: parameters for BGP option. + type: dict + suboptions: + enable: + description: Enable use BGP. + type: bool + spt_only: + description: Enable SPT only. + type: bool elements: dict rd: description: @@ -832,12 +887,58 @@ def check_declarative_intent_params(want, module, result): def main(): """main entry point for module execution""" + address_family_spec = dict( + afi=dict(type="str", choices=["ipv4", "ipv6"]), + mdt=dict( + type="dict", + options=dict( + overlay=dict( + type="dict", + options=dict( + use_bgp=dict( + type="dict", + options=dict( + enable=dict(type="bool"), + spt_only=dict(type="bool"), + ), + ), + ), + ), + auto_discovery=dict( + type="dict", + options=dict( + vxlan=dict( + type="dict", + options=dict( + enable=dict(type="bool"), + inter_as=dict(type="bool"), + ), + ), + ), + ), + default=dict( + type="dict", + options=dict( + vxlan_mcast_group=dict(type="str"), + ), + ), + data=dict( + type="dict", + options=dict( + vxlan_mcast_group=dict(type="str"), + threshold=dict(type="int"), + ), + ), + ), + ), + ) + argument_spec = dict( vrfs=dict(type="list", elements="raw"), - name=dict(), - description=dict(), - address_family=dict(type="list", elements="dict"), - rd=dict(), + name=dict(type="str"), + description=dict(type="str"), + address_family=dict(type="list", elements="dict", options=address_family_spec), + rd=dict(type="str"), route_export=dict(type="list", elements="str"), route_import=dict(type="list", elements="str"), route_both=dict(type="list", elements="str"), diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_vxlan_vtep.py b/ansible_collections/cisco/ios/plugins/modules/ios_vxlan_vtep.py index b2c5933e7..3cf933b13 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_vxlan_vtep.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_vxlan_vtep.py @@ -21,7 +21,7 @@ description: This module provides declarative management of VXLAN VTEP interface version_added: 5.3.0 author: Padmini Priyadarshini Sivaraj (@PadminiSivaraj) notes: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection C(network_cli). See U(https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html) options: diff --git a/ansible_collections/cisco/ios/plugins/terminal/ios.py b/ansible_collections/cisco/ios/plugins/terminal/ios.py index 3be46ebfa..2ef4f2d7c 100644 --- a/ansible_collections/cisco/ios/plugins/terminal/ios.py +++ b/ansible_collections/cisco/ios/plugins/terminal/ios.py @@ -41,6 +41,7 @@ class TerminalModule(TerminalBase): terminal_stderr_re = [ re.compile(rb"% ?Error"), # re.compile(rb"^% \w+", re.M), + re.compile(rb"ERROR:", re.IGNORECASE), re.compile(rb"% ?Bad secret"), re.compile(rb"[\r\n%] Bad passwords"), re.compile(rb"invalid input", re.I), diff --git a/ansible_collections/cisco/ios/test-requirements.txt b/ansible_collections/cisco/ios/test-requirements.txt index 94ff7c9e3..5a90586f2 100644 --- a/ansible_collections/cisco/ios/test-requirements.txt +++ b/ansible_collections/cisco/ios/test-requirements.txt @@ -1,9 +1,9 @@ # For ansible-tox-linters -black==23.3.0 ; python_version >= '3.7' +black==23.3.0 flake8 yamllint # Unit test runner -pytest-ansible ; python_version >= '3.9' -git+https://github.com/ansible-community/pytest-ansible-units.git ; python_version < '3.9' +pytest-ansible pytest-xdist +pytest-cov diff --git a/ansible_collections/cisco/ios/tests/config.yml b/ansible_collections/cisco/ios/tests/config.yml index 41f529264..c26ea5966 100644 --- a/ansible_collections/cisco/ios/tests/config.yml +++ b/ansible_collections/cisco/ios/tests/config.yml @@ -1,3 +1,3 @@ --- modules: - python_requires: ">=3.6" + python_requires: ">=3.9" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml index 7fd5aa1e3..16053c325 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml @@ -1,10 +1,15 @@ --- - name: Populate configuration vars: - lines: - "ip access-list extended test_acl\ndeny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www fin option traceroute ttl eq 10\nip access-list extended 110\n\ - deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10\nip access-list extended 123\ndeny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255\ - \ eq telnet ack tos 12\ndeny tcp 192.0.3.0 0.0.0.255 192.0.4.0 0.0.0.255 eq www ack dscp ef ttl lt 20\nipv6 access-list R1_TRAFFIC\ndeny tcp any eq www any\ - \ eq telnet ack dscp af11\n" + lines: | + ip access-list extended test_acl + deny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www fin option traceroute ttl eq 10 + ip access-list extended 110 + deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10 + ip access-list extended 123 + deny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255 eq telnet ack tos 12 + deny tcp 192.0.3.0 0.0.0.255 192.0.4.0 0.0.0.255 eq www ack dscp ef ttl lt 20 + ipv6 access-list R1_TRAFFIC + deny tcp any eq www any eq telnet ack dscp af11 ansible.netcommon.cli_config: config: "{{ lines }}" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml new file mode 100644 index 000000000..856b5e6ad --- /dev/null +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml @@ -0,0 +1,134 @@ +--- +- ansible.builtin.debug: + msg: START ios_acls round trip integration tests on connection={{ ansible_connection }} + +- ansible.builtin.include_tasks: _remove_config.yaml + +- ansible.builtin.include_tasks: _populate_config.yaml + +- block: + - name: Apply the configuration with remarks + register: base_config + cisco.ios.ios_acls: + config: + - afi: ipv4 + acls: + - name: TEST + acl_type: extended + aces: + - sequence: 10 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 10" + - "============" + - "REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE" + - sequence: 20 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 20" + - "============" + - "ALLOW HOST FROM SEQUENCE 20" + grant: permit + protocol: ip + source: + host: 1.1.1.1 + destination: + any: true + - sequence: 30 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 30" + - "============" + - "ALLOW HOST FROM SEQUENCE 30" + grant: permit + protocol: ip + source: + host: 2.2.2.2 + destination: + any: true + - sequence: 40 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 40" + - "============" + - "ALLOW NEW HOST FROM SEQUENCE 40" + grant: permit + protocol: ip + source: + host: 3.3.3.3 + destination: + any: true + - remarks: + - "Remark not specific to sequence" + - "============" + - "End Remarks" + state: merged + + - ansible.builtin.assert: + that: + - base_config.changed == true + - base_config.commands|symmetric_difference(remarks_check.commands) == [] + - base_config.before|symmetric_difference(remarks_check.before) == [] + - base_config.after|symmetric_difference(remarks_check.after) == [] + + - name: Apply enhanced configuration + register: base_config_overridden + cisco.ios.ios_acls: + config: + - afi: ipv4 + acls: + - name: TEST + acl_type: extended + aces: + - sequence: 10 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 10" + - "============" + - "REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE" + grant: permit + protocol: ip + source: + host: 1.1.1.1 + destination: + any: true + - sequence: 20 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 20" + - "============" + - "ALLOW HOST FROM SEQUENCE 20" + grant: permit + protocol: ip + source: + host: 192.168.0.1 + destination: + any: true + - sequence: 30 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 30" + - "============" + - "ALLOW HOST FROM SEQUENCE 30 updated" + grant: permit + protocol: ip + source: + host: 2.2.2.2 + destination: + any: true + - sequence: 40 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 40" + - "============" + - "ALLOW NEW HOST FROM SEQUENCE 40" + grant: permit + protocol: ip + source: + host: 3.3.3.3 + destination: + any: true + - remarks: + - "Remark not specific to sequence" + - "============" + - "End Remarks updated" + - "04j" + state: overridden + + - ansible.builtin.assert: + that: + - base_config_overridden.commands|symmetric_difference(remarks_check_override.commands) == [] + always: + - ansible.builtin.include_tasks: _remove_config.yaml diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/replaced.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/replaced.yaml index f4faca3ba..aae010b64 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/replaced.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/replaced.yaml @@ -87,5 +87,40 @@ that: - result.commands|length == 0 - result['changed'] == false + + - ansible.builtin.include_tasks: _remove_config.yaml + + - ansible.builtin.include_tasks: _populate_config.yaml + + - name: Replaces device configuration of ACL with provided configuration + register: result + cisco.ios.ios_acls: &id002 + config: + - afi: ipv4 + acls: + - name: test_acl + acl_type: standard + aces: + - grant: deny + sequence: 10 + source: + address: 198.51.100.0 + wildcard_bits: 0.0.0.255 + state: replaced + + - ansible.builtin.assert: + that: + - result.commands|length == 3 + - result.changed == true + - result.commands|symmetric_difference(replaced_changetype.commands) == [] + + - name: Replaces device configuration of ACL with provided configuration (idempotent) + register: result + cisco.ios.ios_acls: *id002 + - name: Assert that task was idempotent + ansible.builtin.assert: + that: + - result.commands|length == 0 + - result['changed'] == false always: - ansible.builtin.include_tasks: _remove_config.yaml diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/vars/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/vars/main.yaml index 2d324ebe1..8460ae2f5 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/vars/main.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/vars/main.yaml @@ -36,6 +36,11 @@ replaced: - ip access-list extended 150 - 20 deny tcp 198.51.100.0 0.0.0.255 eq telnet 198.51.110.0 0.0.0.255 eq telnet syn dscp ef ttl eq 10 +replaced_changetype: + commands: + - no ip access-list extended test_acl + - ip access-list standard test_acl + - 10 deny 198.51.100.0 0.0.0.255 overridden: commands: - no ipv6 access-list R1_TRAFFIC @@ -391,3 +396,289 @@ rtt: - no ip access-list extended 150 - ipv6 access-list R1_TRAFFIC - deny tcp any eq www any eq telnet ack dscp af11 sequence 10 +remarks_check: + commands: + - ip access-list extended TEST + - 10 remark FIRST REMARK BEFORE SEQUENCE 10 + - 10 remark ============ + - 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + - 20 remark FIRST REMARK BEFORE SEQUENCE 20 + - 20 remark ============ + - 20 remark ALLOW HOST FROM SEQUENCE 20 + - 20 permit ip host 1.1.1.1 any + - 30 remark FIRST REMARK BEFORE SEQUENCE 30 + - 30 remark ============ + - 30 remark ALLOW HOST FROM SEQUENCE 30 + - 30 permit ip host 2.2.2.2 any + - 40 remark FIRST REMARK BEFORE SEQUENCE 40 + - 40 remark ============ + - 40 remark ALLOW NEW HOST FROM SEQUENCE 40 + - 40 permit ip host 3.3.3.3 any + - remark Remark not specific to sequence + - remark ============ + - remark End Remarks + before: + - acls: + - aces: + - destination: + address: 192.0.3.0 + wildcard_bits: 0.0.0.255 + dscp: ef + grant: deny + protocol: icmp + protocol_options: + icmp: + echo: true + sequence: 10 + source: + address: 192.0.2.0 + wildcard_bits: 0.0.0.255 + ttl: + eq: 10 + acl_type: extended + name: "110" + - aces: + - destination: + address: 198.51.101.0 + port_protocol: + eq: telnet + wildcard_bits: 0.0.0.255 + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 10 + source: + address: 198.51.100.0 + wildcard_bits: 0.0.0.255 + tos: + service_value: 12 + - destination: + address: 192.0.4.0 + port_protocol: + eq: www + wildcard_bits: 0.0.0.255 + dscp: ef + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 20 + source: + address: 192.0.3.0 + wildcard_bits: 0.0.0.255 + ttl: + lt: 20 + acl_type: extended + name: "123" + - aces: + - destination: + address: 192.0.3.0 + port_protocol: + eq: www + wildcard_bits: 0.0.0.255 + grant: deny + option: + traceroute: true + protocol: tcp + protocol_options: + tcp: + fin: true + sequence: 10 + source: + address: 192.0.2.0 + wildcard_bits: 0.0.0.255 + ttl: + eq: 10 + acl_type: extended + name: test_acl + afi: ipv4 + - acls: + - aces: + - destination: + any: true + port_protocol: + eq: telnet + dscp: af11 + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 10 + source: + any: true + port_protocol: + eq: www + name: R1_TRAFFIC + afi: ipv6 + after: + - acls: + - aces: + - destination: + address: 192.0.3.0 + wildcard_bits: 0.0.0.255 + dscp: ef + grant: deny + protocol: icmp + protocol_options: + icmp: + echo: true + sequence: 10 + source: + address: 192.0.2.0 + wildcard_bits: 0.0.0.255 + ttl: + eq: 10 + acl_type: extended + name: "110" + - aces: + - destination: + address: 198.51.101.0 + port_protocol: + eq: telnet + wildcard_bits: 0.0.0.255 + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 10 + source: + address: 198.51.100.0 + wildcard_bits: 0.0.0.255 + tos: + service_value: 12 + - destination: + address: 192.0.4.0 + port_protocol: + eq: www + wildcard_bits: 0.0.0.255 + dscp: ef + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 20 + source: + address: 192.0.3.0 + wildcard_bits: 0.0.0.255 + ttl: + lt: 20 + acl_type: extended + name: "123" + - aces: + - destination: + any: true + grant: permit + protocol: ip + remarks: + - FIRST REMARK BEFORE SEQUENCE 20 + - ============ + - ALLOW HOST FROM SEQUENCE 20 + sequence: 20 + source: + host: 1.1.1.1 + - destination: + any: true + grant: permit + protocol: ip + remarks: + - FIRST REMARK BEFORE SEQUENCE 30 + - ============ + - ALLOW HOST FROM SEQUENCE 30 + sequence: 30 + source: + host: 2.2.2.2 + - destination: + any: true + grant: permit + protocol: ip + remarks: + - FIRST REMARK BEFORE SEQUENCE 40 + - ============ + - ALLOW NEW HOST FROM SEQUENCE 40 + sequence: 40 + source: + host: 3.3.3.3 + - remarks: + - FIRST REMARK BEFORE SEQUENCE 10 + - ============ + - REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + sequence: 10 + - remarks: + - Remark not specific to sequence + - ============ + - End Remarks + acl_type: extended + name: TEST + - aces: + - destination: + address: 192.0.3.0 + port_protocol: + eq: www + wildcard_bits: 0.0.0.255 + grant: deny + option: + traceroute: true + protocol: tcp + protocol_options: + tcp: + fin: true + sequence: 10 + source: + address: 192.0.2.0 + wildcard_bits: 0.0.0.255 + ttl: + eq: 10 + acl_type: extended + name: test_acl + afi: ipv4 + - acls: + - aces: + - destination: + any: true + port_protocol: + eq: telnet + dscp: af11 + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 10 + source: + any: true + port_protocol: + eq: www + name: R1_TRAFFIC + afi: ipv6 +remarks_check_override: + commands: + - no ipv6 access-list R1_TRAFFIC + - ip access-list extended TEST + - no 10 + - no 20 permit ip host 1.1.1.1 any + - no 30 remark + - no remark + - 10 remark FIRST REMARK BEFORE SEQUENCE 10 + - 10 remark ============ + - 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + - 10 permit ip host 1.1.1.1 any + - 20 remark FIRST REMARK BEFORE SEQUENCE 20 + - 20 remark ============ + - 20 remark ALLOW HOST FROM SEQUENCE 20 + - 20 permit ip host 192.168.0.1 any + - 30 remark FIRST REMARK BEFORE SEQUENCE 30 + - 30 remark ============ + - 30 remark ALLOW HOST FROM SEQUENCE 30 updated + - remark Remark not specific to sequence + - remark ============ + - remark End Remarks updated + - remark 04j + - no ip access-list extended 110 + - no ip access-list extended 123 + - no ip access-list extended test_acl diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/defaults/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/defaults/main.yaml deleted file mode 100644 index 5f709c5aa..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/meta/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/meta/main.yaml deleted file mode 100644 index ab3ad91bc..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/meta/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -dependencies: - - prepare_ios_tests diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/cli.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/cli.yaml deleted file mode 100644 index 2b6056023..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/cli.yaml +++ /dev/null @@ -1,17 +0,0 @@ ---- -- name: Collect all CLI test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - delegate_to: localhost - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases (connection=ansible.netcommon.network_cli) - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/main.yaml deleted file mode 100644 index 2269ecb54..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/main.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- name: Main task for bgp module - ansible.builtin.include_tasks: cli.yaml - tags: - - network_cli diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tests/cli/basic.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tests/cli/basic.yaml deleted file mode 100644 index 752f9ff4f..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tests/cli/basic.yaml +++ /dev/null @@ -1,490 +0,0 @@ ---- -- ansible.builtin.debug: msg="START ios cli/ios_bgp.yaml on connection={{ ansible_connection }}" - -- name: Clear existing BGP configuration - ignore_errors: true - cisco.ios.ios_bgp: - operation: delete - -- block: - - name: Add fake configuration with 'bgp' string - cisco.ios.ios_config: - match: none - replace: block - lines: - - no ip access-list extended BGP_ACL - - ip access-list extended BGP_ACL - - permit tcp any any eq bgp - - - name: Try delete fake BGP configuration - register: result - cisco.ios.ios_bgp: - operation: delete - - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Clean fake configuration with 'bgp' string - cisco.ios.ios_config: - match: none - replace: block - lines: - - no ip access-list extended BGP_ACL - - - name: Add fake bgp-like configuration - cisco.ios.ios_config: - match: none - replace: block - lines: - - no ip access-list extended BGP_ACL_2 - - ip access-list extended BGP_ACL_2 - - remark router bgp 64496 - - remark neighbor 192.0.2.10 remote-as 64496 - - remark neighbor 192.0.2.10 shutdown - - remark address-family ipv4 - - remark neighbor 192.0.2.10 activate - - remark exit-address-family - - permit tcp any any eq bgp - - - name: Try delete fake bgp-like configuration - register: result - cisco.ios.ios_bgp: - operation: delete - - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Clean fake bgp-like configuration - cisco.ios.ios_config: - match: none - replace: block - lines: - - no ip access-list extended BGP_ACL_2 - - - name: Configure BGP with as 64496 and a router-id - register: result - cisco.ios.ios_bgp: &id001 - operation: merge - config: - bgp_as: 64496 - router_id: 192.0.2.2 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'bgp router-id 192.0.2.2' in result.commands" - - - name: Configure BGP with as 64496 and a router-id (idempotent) - register: result - cisco.ios.ios_bgp: *id001 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure BGP neighbors - register: result - cisco.ios.ios_bgp: &id002 - operation: merge - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.10 - remote_as: 64496 - password: ansible - description: IBGP_NBR_1 - ebgp_multihop: 100 - timers: - keepalive: 300 - holdtime: 360 - min_neighbor_holdtime: 360 - - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'neighbor 192.0.2.10 remote-as 64496' in result.commands" - - "'neighbor 192.0.2.10 description IBGP_NBR_1' in result.commands" - - "'neighbor 192.0.2.10 ebgp-multihop 100' in result.commands" - - "'neighbor 192.0.2.10 timers 300 360 360' in result.commands" - - "'neighbor 192.0.2.15 remote-as 64496' in result.commands" - - "'neighbor 192.0.2.15 description IBGP_NBR_2' in result.commands" - - "'neighbor 192.0.2.15 ebgp-multihop 150' in result.commands" - - - name: Configure BGP neighbors (idempotent) - register: result - cisco.ios.ios_bgp: *id002 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure BGP neighbors with operation replace - register: result - cisco.ios.ios_bgp: &id003 - operation: replace - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - - - neighbor: 203.0.113.10 - remote_as: 64511 - description: EBGP_NBR_1 - local_as: 64497 - - - neighbor: 10.10.20.20 - remote_as: 65012 - description: BGP_NBR_2 - ebgp_multihop: 100 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'neighbor 203.0.113.10 remote-as 64511' in result.commands" - - "'neighbor 203.0.113.10 description EBGP_NBR_1' in result.commands" - - "'neighbor 203.0.113.10 local-as 64497' in result.commands" - - "'neighbor 10.10.20.20 remote-as 65012' in result.commands" - - "'neighbor 10.10.20.20 description BGP_NBR_2' in result.commands" - - "'no neighbor 192.0.2.10' in result.commands" - - - name: Configure BGP neighbors with operation replace (idempotent) - register: result - cisco.ios.ios_bgp: *id003 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure root-level networks for BGP - register: result - cisco.ios.ios_bgp: &id004 - operation: merge - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - - prefix: 203.0.113.32 - masklen: 27 - route_map: RMAP_2 - - - ansible.builtin.assert: - that: - - result.changed == True - - "'router bgp 64496' in result.commands" - - "'network 203.0.113.0 mask 255.255.255.224 route-map RMAP_1' in result.commands" - - "'network 203.0.113.32 mask 255.255.255.224 route-map RMAP_2' in result.commands" - - - name: Configure root-level networks for BGP (idempotent) - register: result - cisco.ios.ios_bgp: *id004 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure root-level networks for BGP with operation replace - register: result - cisco.ios.ios_bgp: &id005 - operation: replace - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - - prefix: 198.51.100.16 - masklen: 28 - - - ansible.builtin.assert: - that: - - result.changed == True - - "'router bgp 64496' in result.commands" - - "'network 198.51.100.16 mask 255.255.255.240' in result.commands" - - "'no network 203.0.113.32 mask 255.255.255.224 route-map RMAP_2' in result.commands" - - - name: Configure root-level networks for BGP with operation replace (idempotent) - register: result - cisco.ios.ios_bgp: *id005 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure BGP neighbors under address family mode - register: result - cisco.ios.ios_bgp: &id006 - operation: merge - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: unicast - neighbors: - - neighbor: 203.0.113.10 - activate: true - maximum_prefix: 250 - advertisement_interval: 120 - - - neighbor: 192.0.2.15 - activate: true - route_reflector_client: true - - - neighbor: 10.10.20.20 - activate: true - prefix_list_in: incoming-prefixes - prefix_list_out: outgoing-prefixes - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'address-family ipv4' in result.commands" - - "'neighbor 203.0.113.10 activate' in result.commands" - - "'neighbor 203.0.113.10 maximum-prefix 250' in result.commands" - - "'neighbor 203.0.113.10 advertisement-interval 120' in result.commands" - - "'neighbor 192.0.2.15 activate' in result.commands" - - "'neighbor 192.0.2.15 route-reflector-client' in result.commands" - - "'neighbor 10.10.20.20 activate' in result.commands" - - "'neighbor 10.10.20.20 prefix-list incoming-prefixes in' in result.commands" - - "'neighbor 10.10.20.20 prefix-list outgoing-prefixes out' in result.commands" - - - name: Configure BGP neighbors under address family mode (idempotent) - register: result - cisco.ios.ios_bgp: *id006 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure networks under address family - register: result - cisco.ios.ios_bgp: &id007 - operation: merge - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: multicast - networks: - - prefix: 198.51.100.48 - masklen: 28 - route_map: RMAP_1 - - - prefix: 192.0.2.64 - masklen: 27 - - - prefix: 203.0.113.160 - masklen: 27 - route_map: RMAP_2 - - - afi: ipv4 - safi: unicast - networks: - - prefix: 198.51.100.64 - masklen: 28 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'address-family ipv4 multicast' in result.commands" - - "'network 198.51.100.48 mask 255.255.255.240 route-map RMAP_1' in result.commands" - - "'network 192.0.2.64 mask 255.255.255.224' in result.commands" - - "'network 203.0.113.160 mask 255.255.255.224 route-map RMAP_2' in result.commands" - - "'exit-address-family' in result.commands" - - "'address-family ipv4' in result.commands" - - "'network 198.51.100.64 mask 255.255.255.240' in result.commands" - - "'exit-address-family' in result.commands" - - - name: Configure networks under address family (idempotent) - register: result - cisco.ios.ios_bgp: *id007 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure networks under address family with operation replace - register: result - cisco.ios.ios_bgp: &id008 - operation: replace - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: multicast - networks: - - prefix: 198.51.100.80 - masklen: 28 - - - prefix: 192.0.2.64 - masklen: 27 - - - prefix: 203.0.113.192 - masklen: 27 - - - afi: ipv4 - safi: unicast - networks: - - prefix: 198.51.100.64 - masklen: 28 - - - ansible.builtin.assert: - that: - - result.changed == true - - '"router bgp 64496" in result.commands' - - '"address-family ipv4 multicast" in result.commands' - - '"network 198.51.100.80 mask 255.255.255.240" in result.commands' - - '"network 203.0.113.192 mask 255.255.255.224" in result.commands' - - '"no network 198.51.100.48 mask 255.255.255.240 route-map RMAP_1" in result.commands' - - '"no network 203.0.113.160 mask 255.255.255.224 route-map RMAP_2" in result.commands' - - '"exit-address-family" in result.commands' - - - name: Configure networks under address family with operation replace (idempotent) - register: result - cisco.ios.ios_bgp: *id008 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure redistribute information under address family mode - register: result - cisco.ios.ios_bgp: &id009 - operation: merge - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: multicast - redistribute: - - protocol: ospf - id: 112 - metric: 64 - - - protocol: eigrp - id: 233 - metric: 256 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'address-family ipv4 multicast' in result.commands" - - "'redistribute ospf 112 metric 64' in result.commands" - - "'redistribute eigrp 233 metric 256' in result.commands" - - "'exit-address-family' in result.commands" - - - name: Configure redistribute information under address family mode (idempotent) - register: result - cisco.ios.ios_bgp: *id009 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Get the IOS version - cisco.ios.ios_facts: - gather_subset: all - - - name: Configure redistribute information under address family mode with operation replace - register: result - cisco.ios.ios_bgp: &id010 - operation: replace - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: multicast - redistribute: - - protocol: ospf - id: 112 - metric: 64 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'address-family ipv4 multicast' in result.commands" - - "'no redistribute eigrp 233' in result.commands" - - "'exit-address-family' in result.commands" - - - name: Configure redistribute information under address family mode with operation replace (idempotent) - register: result - when: ansible_net_version != "15.6(2)T" - cisco.ios.ios_bgp: *id010 - - ansible.builtin.assert: - that: - - result.changed == false - when: ansible_net_version != "15.6(2)T" - - - name: Override all the existing BGP configuration - register: result - cisco.ios.ios_bgp: - operation: override - config: - bgp_as: 64497 - router_id: 192.0.2.10 - log_neighbor_changes: true - - - ansible.builtin.assert: - that: - - result.changed == true - - "'no router bgp 64496' in result.commands" - - "'router bgp 64497' in result.commands" - - "'bgp router-id 192.0.2.10' in result.commands" - - "'bgp log-neighbor-changes' in result.commands" - - - name: Configure BGP neighbors with classful boundary - register: result - cisco.ios.ios_bgp: &id011 - config: - bgp_as: 64497 - log_neighbor_changes: true - networks: - - prefix: 198.51.100.0 - masklen: 23 - - - prefix: 201.0.113.32 - masklen: 24 - operation: merge - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64497' in result.commands" - - "'network 198.51.100.0 mask 255.255.254.0' in result.commands" - - "'network 201.0.113.32' in result.commands" - - - name: Configure BGP neighbors with classful boundary (idempotent) - register: result - cisco.ios.ios_bgp: *id011 - - ansible.builtin.assert: - that: - - result.changed == false - always: - - name: Teardown - register: result - cisco.ios.ios_bgp: &id012 - operation: delete - - - ansible.builtin.assert: - that: - - result.changed == true - - "'no router bgp 64497' in result.commands" - - - name: Teardown again (idempotent) - register: result - cisco.ios.ios_bgp: *id012 - - ansible.builtin.assert: - that: - - result.changed == false - -- ansible.builtin.debug: msg="END ios cli/ios_bgp.yaml on connection={{ ansible_connection }}" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml index bd992e88a..c7647d008 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml @@ -26,6 +26,7 @@ - name: Delete provided BGP global (idempotent) register: result cisco.ios.ios_bgp_global: *id001 + - name: Assert that the previous task was idempotent ansible.builtin.assert: that: diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml index 1404b4e91..6c126ccfd 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml @@ -11,14 +11,12 @@ config: as_number: 65000 bgp: - advertise_best_external: true bestpath: - compare_routerid: true - dampening: - penalty_half_time: 1 - reuse_route_val: 1 - suppress_route_val: 1 - max_suppress: 1 + default: + ipv4_unicast: false + route_target: + filter: false graceful_shutdown: neighbors: time: 50 @@ -33,20 +31,6 @@ remote_as: 100 shutdown: set: false - aigp: - send: - cost_community: - id: 100 - poi: - igp_cost: true - transitive: true - route_map: - name: test-route - out: true - redistribute: - - connected: - metric: 10 - set: true timers: keepalive: 100 holdtime: 200 diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/vars/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/vars/main.yaml index 07638f98e..93fadcf29 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/vars/main.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/vars/main.yaml @@ -5,29 +5,24 @@ merged: commands: - router bgp 65000 - timers bgp 100 200 150 - - bgp advertise-best-external - bgp bestpath compare-routerid - - bgp dampening 1 1 1 1 + - no bgp default ipv4-unicast + - no bgp default route-target filter - bgp graceful-shutdown all neighbors 50 local-preference 100 community 100 - bgp log-neighbor-changes - bgp nopeerup-delay post-boot 10 - neighbor 198.0.2.1 remote-as 100 - neighbor 198.0.2.1 description merge neighbor - - neighbor 198.0.2.1 aigp send cost-community 100 poi igp-cost transitive - - neighbor 198.0.2.1 route-map test-route out - - redistribute connected metric 10 after: as_number: "65000" bgp: - advertise_best_external: true bestpath_options: compare_routerid: true - dampening: - max_suppress: 1 - penalty_half_time: 1 - reuse_route_val: 1 - suppress_route_val: 1 + default: + ipv4_unicast: false + route_target: + filter: false graceful_shutdown: community: "100" local_preference: 100 @@ -37,23 +32,9 @@ merged: nopeerup_delay_options: post_boot: 10 neighbors: - - aigp: - send: - cost_community: - id: 100 - poi: - igp_cost: true - transitive: true - description: merge neighbor + - description: merge neighbor neighbor_address: 198.0.2.1 remote_as: "100" - route_maps: - - name: test-route - out: true - redistribute: - - connected: - metric: 10 - set: true timers: holdtime: 200 keepalive: 100 @@ -63,6 +44,10 @@ gathered: after: as_number: "65000" bgp: + default: + ipv4_unicast: true + route_target: + filter: true advertise_best_external: true bestpath_options: compare_routerid: true @@ -119,6 +104,10 @@ replaced: after: as_number: "65000" bgp: + default: + ipv4_unicast: true + route_target: + filter: true advertise_best_external: true bestpath_options: med: @@ -143,6 +132,10 @@ parsed: after: as_number: "65000" bgp: + default: + ipv4_unicast: true + route_target: + filter: true advertise_best_external: true bestpath_options: compare_routerid: true @@ -213,6 +206,11 @@ deleted: after: as_number: "65000" + bgp: + default: + ipv4_unicast: true + route_target: + filter: true rtt: commands: diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_facts/tests/cli/all_facts.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_facts/tests/cli/all_facts.yaml index ba8a1fd23..44d57ed9b 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_facts/tests/cli/all_facts.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_facts/tests/cli/all_facts.yaml @@ -20,8 +20,10 @@ - result.ansible_facts.ansible_net_memtotal_mb > 1 - ansible.builtin.assert: - that: "{{ item.value.spacetotal_kb }} > {{ item.value.spacefree_kb }}" + that: "{{ my_var.value.spacetotal_kb }} > {{ my_var.value.spacefree_kb }}" loop: "{{ lookup('dict', result.ansible_facts.ansible_net_filesystems_info, wantlist=True) }}" + loop_control: + loop_var: my_var - ansible.builtin.set_fact: supported_network_resources: @@ -34,6 +36,9 @@ - lldp_global - lldp_interfaces - l3_interfaces + - evpn_global + - evpn_evi + - vxlan_vtep - logging_global - acl_interfaces - static_routes diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/tests/cli/merged.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/tests/cli/merged.yaml index c73dd0b11..3db4a1fb6 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/tests/cli/merged.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/tests/cli/merged.yaml @@ -14,7 +14,7 @@ enabled: true - name: GigabitEthernet3 - description: Configured and Merged by Ansible-Network + description: 04j enabled: false state: merged diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/vars/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/vars/main.yaml index 84b8afb22..bf89b4b37 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/vars/main.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/vars/main.yaml @@ -20,7 +20,7 @@ merged: - interface GigabitEthernet2 - description Configured and Merged by Ansible-Network - interface GigabitEthernet3 - - description Configured and Merged by Ansible-Network + - description 04j - shutdown after: - enabled: true @@ -30,7 +30,7 @@ merged: enabled: true name: GigabitEthernet2 speed: "1000" - - description: Configured and Merged by Ansible-Network + - description: 04j enabled: false name: GigabitEthernet3 speed: "1000" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml index 06228ea7f..75217f5e5 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml @@ -23,6 +23,21 @@ - address: 198.51.100.2/24 ipv6: - address: 2001:db8:0:3::/64 + - name: Vlan101 + ipv4: + - address: 198.51.100.2/24 + mac_address: dead:beef:abcd + - name: Vlan901 + autostate: false + ipv4: + - source_interface: + name: Loopback1 + ipv6: + - enable: true + - name: Vlan902 + autostate: true + ipv6: + - enable: true state: merged - name: L3_interface merged - assert that correct set of commands were generated diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/vars/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/vars/main.yaml index 44ca9b85e..73996896e 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/vars/main.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/vars/main.yaml @@ -19,6 +19,12 @@ merged: - ip address 198.51.100.1 255.255.255.0 secondary - ip address 198.51.100.2 255.255.255.0 - ipv6 address 2001:db8:0:3::/64 + - interface Vlan901 + - no autostate + - ip unnumbered Loopback1 + - ipv6 enable + - interface Vlan902 + - ipv6 enable after: - name: Loopback888 - ipv4: @@ -40,6 +46,21 @@ merged: - address: 2001:DB8:0:3::/64 name: GigabitEthernet3 - name: GigabitEthernet4 + - name: Vlan101 + ipv4: + - address: 198.51.100.2/24 + mac_address: dead:beef:abcd + - name: Vlan901 + ipv4: + - source_interface: + name: Loopback1 + ipv6: + - enable: true + autostate: false + - name: Vlan902 + ipv6: + - enable: true + autostate: true replaced: before: diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/defaults/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/defaults/main.yaml deleted file mode 100644 index 5f709c5aa..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/meta/main.yml b/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/meta/main.yml deleted file mode 100644 index ab3ad91bc..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/meta/main.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -dependencies: - - prepare_ios_tests diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/cli.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/cli.yaml deleted file mode 100644 index cd8c04990..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/cli.yaml +++ /dev/null @@ -1,18 +0,0 @@ ---- -- name: Collect all CLI test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - delegate_to: localhost - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases (connection=ansible.netcommon.network_cli) - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - tags: network_cli diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/main.yaml deleted file mode 100644 index 3d2666f3e..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -- name: Main task for ntp module - ansible.builtin.include_tasks: cli.yaml diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml deleted file mode 100644 index 92063dfb5..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml +++ /dev/null @@ -1,87 +0,0 @@ ---- -- ansible.builtin.debug: msg="START connection={{ ansible_connection }} ios_ntp sanity test" - -- name: Remove ntp (if set) - ignore_errors: true - cisco.ios.ios_ntp: &id007 - server: 10.75.32.5 - source_int: "{{ test_interface }}" - acl: NTP_ACL - logging: true - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - state: absent - -- block: - - name: Configure ntp - register: result - cisco.ios.ios_ntp: &id001 - server: 10.75.32.5 - source_int: "{{ test_interface }}" - state: present - - - ansible.builtin.assert: &id002 - that: - - result.changed == true - - - name: Idempotent check - register: result - cisco.ios.ios_ntp: *id001 - - ansible.builtin.assert: &id004 - that: - - result.changed == false - - - name: Load ACL ntp_acl into device - register: result - cisco.ios.ios_config: - lines: - - 10 permit ip host 192.0.2.1 any log - parents: ip access-list extended NTP_ACL - - - ansible.builtin.assert: *id002 - - name: Configure ntp - register: result - cisco.ios.ios_ntp: &id003 - acl: NTP_ACL - logging: true - state: present - - - ansible.builtin.assert: *id002 - - name: Idempotent check - register: result - cisco.ios.ios_ntp: *id003 - - ansible.builtin.assert: *id004 - - name: Configure ntp with different values - register: result - cisco.ios.ios_ntp: &id005 - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - vrf: my_mgmt_vrf - state: present - - - ansible.builtin.assert: *id002 - - name: Idempotent check - register: result - cisco.ios.ios_ntp: *id005 - - ansible.builtin.assert: *id004 - - name: Remove part of configuration - register: result - cisco.ios.ios_ntp: &id006 - acl: NTP_ACL - logging: true - state: absent - - - ansible.builtin.assert: *id002 - - name: Idempotent check - register: result - cisco.ios.ios_ntp: *id006 - - ansible.builtin.assert: *id004 - always: - - name: Remove ntp configuration - cisco.ios.ios_ntp: *id007 - - name: Remove ntp_acl from device - cisco.ios.ios_config: - lines: - - no ip access-list extended NTP_ACL diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_user/tests/cli/basic.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_user/tests/cli/basic.yaml index 7d5606c1e..6c795ee2d 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_user/tests/cli/basic.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_user/tests/cli/basic.yaml @@ -4,15 +4,10 @@ cisco.ios.ios_user: aggregate: - name: ansibletest1 - - name: ansibletest2 - - name: ansibletest3 - - name: ansibletest4 - - name: ansibletest5 - - name: ansibletest6 state: absent @@ -36,7 +31,6 @@ cisco.ios.ios_user: aggregate: - name: ansibletest2 - - name: ansibletest3 state: present view: network-admin @@ -66,7 +60,6 @@ cisco.ios.ios_user: aggregate: - name: ansibletest2 - - name: ansibletest3 state: present view: network-admin @@ -111,7 +104,7 @@ name: ansibleuser6 hashed_password: type: 5 - value: $3$8JcDilcYgFZi.yz4ApaqkHG2.8/ + value: $1$SpMm$eALjeyED.WSZs0naLNv22/ state: present - ansible.builtin.assert: @@ -125,16 +118,13 @@ cisco.ios.ios_user: aggregate: - name: ansibletest1 - - name: ansibletest2 - - name: ansibletest3 - - - name: ansibletest4 - - - name: ansibletest5 - - - name: ansibletest6 + - name: ansibleuser4 + - name: ansibleuser5 + - name: ansibleuser6 + - name: ansibleuser7 + - name: ssh_user state: absent - ansible.builtin.assert: @@ -143,3 +133,54 @@ - '"no username ansibletest1" in result.commands[0]["command"]' - '"no username ansibletest2" in result.commands[1]["command"]' - '"no username ansibletest3" in result.commands[2]["command"]' + +- name: Add user to check purge + become: true + register: result + cisco.ios.ios_user: + name: ansibletest1 + privilege: 15 + role: network-operator + state: present + +- name: Create user with hashed_password 9 + become: true + register: result + cisco.ios.ios_user: + name: ansibleuser6 + hashed_password: + type: 9 + value: $9$B/6NVV7joWJ9w.$XueHQxIOZk0GhNC3lxUFioUeowJrtLmXxouXfTuoNpc + state: present + +- ansible.builtin.assert: + that: + - result.changed == true + - "'username ansibleuser6 secret' in result.commands[0]" + +- name: Ensure SSH key is not world readable + ansible.builtin.file: + path: "{{ role_path }}/files/test_rsa" + mode: 384 + +- name: Create user with sshkey to check purge + cisco.ios.ios_user: + name: ssh_user + privilege: 15 + state: present + sshkey: "{{ lookup('file', 'files/test_rsa.pub') }}" + +- name: Reset connection with {{ ansible_user }} + ansible.builtin.meta: reset_connection + +- name: check if purge removes ssh_user + become: true + register: result_purge + cisco.ios.ios_user: + aggregate: + - name: cisco + purge: true + +- ansible.builtin.assert: + that: + - result.changed == true diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml index d1c517a03..9f740fd90 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml @@ -13,5 +13,4 @@ - vlan_id: 901 member: vni: 50901 - configuration: true state: merged diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml index f78bb0c56..591d6c6e9 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml @@ -8,5 +8,4 @@ - vlan_id: 202 - vlan_id: 901 - vlan_id: 902 - configuration: true state: deleted diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml index 21249d763..ae7215669 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml @@ -10,7 +10,6 @@ - name: Delete vlans attributes for all configured vlans register: result cisco.ios.ios_vlans: &id001 - configuration: true state: deleted - name: Assert that correct set of commands were generated diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml index 576adee2f..6e0fc136e 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml @@ -11,7 +11,6 @@ register: result cisco.ios.ios_vlans: config: - configuration: true state: gathered - name: Assert diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml index 6efce0fc0..5af123bcd 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml @@ -17,7 +17,6 @@ - vlan_id: 902 member: vni: 50902 - configuration: true state: merged - name: Assert that correct set of commands were generated diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml index 52944e5ce..a739c6117 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml @@ -19,7 +19,6 @@ member: vni: 10101 evi: 101 - configuration: true state: overridden - name: Assert that correct set of commands were generated diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml index 7d8311711..3234569ce 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml @@ -8,7 +8,6 @@ register: result cisco.ios.ios_vlans: running_config: "{{ lookup('file', '_parsed_vlan_config.cfg') }}" - configuration: true state: parsed - ansible.builtin.assert: diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml index 63cc24a29..1b3a0f093 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml @@ -19,7 +19,6 @@ - vlan_id: 901 member: vni: 50901 - configuration: true state: rendered - ansible.builtin.assert: diff --git a/ansible_collections/cisco/ios/tests/sanity/ignore-2.10.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.10.txt deleted file mode 100644 index 9dadf1b54..000000000 --- a/ansible_collections/cisco/ios/tests/sanity/ignore-2.10.txt +++ /dev/null @@ -1,24 +0,0 @@ -plugins/action/ios.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py compile-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/module_utils/network/ios/config/ntp_global/ntp_global.py compile-2.6!skip -plugins/modules/ios_route_maps.py import-2.6!skip -plugins/modules/ios_logging_global.py import-2.6!skip -plugins/modules/ios_prefix_lists.py import-2.6!skip -plugins/modules/ios_bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py import-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py import-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py import-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/ios/config/ntp_global/ntp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/vxlan_vtep/vxlan_vtep.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_global/evpn_global.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_evi/evpn_evi.py import-2.6!skip diff --git a/ansible_collections/cisco/ios/tests/sanity/ignore-2.11.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.11.txt deleted file mode 100644 index 2847c9344..000000000 --- a/ansible_collections/cisco/ios/tests/sanity/ignore-2.11.txt +++ /dev/null @@ -1,24 +0,0 @@ -plugins/action/ios.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py compile-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/ntp_global/ntp_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/modules/ios_route_maps.py import-2.6!skip -plugins/modules/ios_logging_global.py import-2.6!skip -plugins/modules/ios_prefix_lists.py import-2.6!skip -plugins/modules/ios_bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py import-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py import-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py import-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/ios/config/ntp_global/ntp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/vxlan_vtep/vxlan_vtep.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_global/evpn_global.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_evi/evpn_evi.py import-2.6!skip diff --git a/ansible_collections/cisco/ios/tests/sanity/ignore-2.12.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.12.txt deleted file mode 100644 index d7ff17ca8..000000000 --- a/ansible_collections/cisco/ios/tests/sanity/ignore-2.12.txt +++ /dev/null @@ -1 +0,0 @@ -plugins/action/ios.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` diff --git a/ansible_collections/cisco/ios/tests/sanity/ignore-2.13.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.13.txt deleted file mode 100644 index d7ff17ca8..000000000 --- a/ansible_collections/cisco/ios/tests/sanity/ignore-2.13.txt +++ /dev/null @@ -1 +0,0 @@ -plugins/action/ios.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` diff --git a/ansible_collections/cisco/ios/tests/sanity/ignore-2.18.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.18.txt new file mode 100644 index 000000000..d7ff17ca8 --- /dev/null +++ b/ansible_collections/cisco/ios/tests/sanity/ignore-2.18.txt @@ -0,0 +1 @@ +plugins/action/ios.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` diff --git a/ansible_collections/cisco/ios/tests/sanity/ignore-2.9.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.9.txt deleted file mode 100644 index 11aba94e9..000000000 --- a/ansible_collections/cisco/ios/tests/sanity/ignore-2.9.txt +++ /dev/null @@ -1,32 +0,0 @@ -plugins/modules/ios_bgp.py validate-modules:deprecation-mismatch -plugins/modules/ios_bgp.py validate-modules:invalid-documentation -plugins/modules/ios_lldp.py validate-modules:deprecation-mismatch -plugins/modules/ios_lldp.py validate-modules:invalid-documentation -plugins/modules/ios_ntp.py validate-modules:deprecation-mismatch -plugins/modules/ios_ntp.py validate-modules:invalid-documentation -plugins/modules/ios_linkagg.py validate-modules:deprecation-mismatch -plugins/modules/ios_linkagg.py validate-modules:invalid-documentation -plugins/action/ios.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py compile-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/modules/ios_route_maps.py import-2.6!skip -plugins/modules/ios_logging_global.py import-2.6!skip -plugins/modules/ios_ntp_global.py import-2.6!skip -plugins/modules/ios_prefix_lists.py import-2.6!skip -plugins/modules/ios_bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py import-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py import-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py import-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/ios/config/ntp_global/ntp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/vxlan_vtep/vxlan_vtep.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_global/evpn_global.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_evi/evpn_evi.py import-2.6!skip diff --git a/ansible_collections/cisco/ios/tests/unit/compat/__init__.py b/ansible_collections/cisco/ios/tests/unit/compat/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/cisco/ios/tests/unit/compat/mock.py b/ansible_collections/cisco/ios/tests/unit/compat/mock.py deleted file mode 100644 index e25e8381b..000000000 --- a/ansible_collections/cisco/ios/tests/unit/compat/mock.py +++ /dev/null @@ -1,28 +0,0 @@ -# pylint: skip-file -# (c) 2014, Toshio Kuratomi -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -""" -Compat module for Python3.x's unittest.mock module -""" -from unittest.mock import * diff --git a/ansible_collections/cisco/ios/tests/unit/compat/unittest.py b/ansible_collections/cisco/ios/tests/unit/compat/unittest.py deleted file mode 100644 index df4266ec9..000000000 --- a/ansible_collections/cisco/ios/tests/unit/compat/unittest.py +++ /dev/null @@ -1,41 +0,0 @@ -# (c) 2014, Toshio Kuratomi -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -""" -Compat module for Python2.7's unittest module -""" - -import sys - - -# Allow wildcard import because we really do want to import all of -# unittests's symbols into this compat shim -# pylint: disable=wildcard-import,unused-wildcard-import -if sys.version_info < (2, 7): - try: - # Need unittest2 on python2.6 - from unittest2 import * - except ImportError: - print("You need unittest2 installed on python2.6.x to run tests") -else: - from unittest import * diff --git a/ansible_collections/cisco/ios/tests/unit/mock/path.py b/ansible_collections/cisco/ios/tests/unit/mock/path.py index ce2eb1fe0..7d287a5fb 100644 --- a/ansible_collections/cisco/ios/tests/unit/mock/path.py +++ b/ansible_collections/cisco/ios/tests/unit/mock/path.py @@ -2,9 +2,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible.utils.path import unfrackpath +from unittest.mock import MagicMock -from ansible_collections.cisco.ios.tests.unit.compat.mock import MagicMock +from ansible.utils.path import unfrackpath -mock_unfrackpath_noop = MagicMock(spec_set=unfrackpath, side_effect=lambda x, *args, **kwargs: x) +mock_unfrackpath_noop = MagicMock( + spec_set=unfrackpath, + side_effect=lambda x, *args, **kwargs: x, +) diff --git a/ansible_collections/cisco/ios/tests/unit/mock/procenv.py b/ansible_collections/cisco/ios/tests/unit/mock/procenv.py index 111c319c2..e6e09464b 100644 --- a/ansible_collections/cisco/ios/tests/unit/mock/procenv.py +++ b/ansible_collections/cisco/ios/tests/unit/mock/procenv.py @@ -27,12 +27,11 @@ import sys from contextlib import contextmanager from io import BytesIO, StringIO +from unittest import TestCase from ansible.module_utils._text import to_bytes from ansible.module_utils.six import PY3 -from ansible_collections.cisco.ios.tests.unit.compat import unittest - @contextmanager def swap_stdin_and_argv(stdin_data="", argv_data=tuple()): @@ -78,10 +77,13 @@ def swap_stdout(): sys.stdout = old_stdout -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self, module_args=None): if module_args is None: - module_args = {"_ansible_remote_tmp": "/tmp", "_ansible_keep_remote_files": False} + module_args = { + "_ansible_remote_tmp": "/tmp", + "_ansible_keep_remote_files": False, + } args = json.dumps(dict(ANSIBLE_MODULE_ARGS=module_args)) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces index 9888c8e22..e2ee95fbd 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces @@ -1,4 +1,4 @@ -GigabitEthernet0/0 is up, line protocol is up +GigabitEthernet0/0/0.1012 is up, line protocol is up Hardware is iGbE, address is 5e00.0003.0000 (bia 5e00.0003.0000) Description: OOB Management Internet address is 10.8.38.66/24 @@ -27,6 +27,35 @@ GigabitEthernet0/0 is up, line protocol is up 0 babbles, 0 late collision, 0 deferred 1 lost carrier, 0 no carrier, 0 pause output 0 output buffer failures, 0 output buffers swapped out +GigabitEthernet0/0 is up, line protocol is up + Hardware is iGbE, address is 5e00.0008.0000 (bia 5e00.0008.0000) + Description: OOB Management + Internet address is 10.8.38.66/24 + MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec, + reliability 253/255, txload 1/255, rxload 1/255 + Encapsulation ARPA, loopback not set + Keepalive set (10 sec) + Full Duplex, Auto Speed, link type is auto, media type is RJ45 + output flow-control is unsupported, input flow-control is unsupported + ARP type: ARPA, ARP Timeout 04:00:00 + Last input 00:00:00, output 00:00:00, output hang never + Last clearing of "show interface" counters never + Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0 + Queueing strategy: fifo + Output queue: 0/40 (size/max) + 5 minute input rate 3000 bits/sec, 2 packets/sec + 5 minute output rate 2000 bits/sec, 2 packets/sec + 8463791 packets input, 1445150230 bytes, 0 no buffer + Received 0 broadcasts (0 IP multicasts) + 0 runts, 0 giants, 0 throttles + 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored + 0 watchdog, 0 multicast, 0 pause input + 3521571 packets output, 348781823 bytes, 0 underruns + 0 output errors, 0 collisions, 1 interface resets + 4150764 unknown protocol drops + 0 babbles, 0 late collision, 0 deferred + 1 lost carrier, 0 no carrier, 0 pause output + 0 output buffer failures, 0 output buffers swapped out GigabitEthernet1 is up, line protocol is up Hardware is CSR vNIC, address is 5e00.0006.0000 (bia 5e00.0006.0000) Description: OOB Management diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acl_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acl_interfaces.py index 6bc99691c..3c8567797 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acl_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acl_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_acl_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acls.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acls.py index 33c4a1ddb..36d96365a 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acls.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acls.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_acls -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -91,7 +90,10 @@ class TestIosAclsModule(TestIosModule): aces=[ dict( grant="deny", - source=dict(address="192.0.2.0", wildcard_bits="0.0.0.255"), + source=dict( + address="192.0.2.0", + wildcard_bits="0.0.0.255", + ), ), ], ), @@ -137,7 +139,9 @@ class TestIosAclsModule(TestIosModule): protocol_options=dict(tcp=dict(ack="True")), sequence="200", source=dict(object_group="test_network_og"), - destination=dict(object_group="test_network_og"), + destination=dict( + object_group="test_network_og", + ), dscp="ef", ttl=dict(eq=10), ), @@ -223,7 +227,10 @@ class TestIosAclsModule(TestIosModule): { "aces": [ { - "destination": {"any": True, "port_protocol": {"eq": "22"}}, + "destination": { + "any": True, + "port_protocol": {"eq": "22"}, + }, "grant": "permit", "protocol": "tcp", "sequence": 10, @@ -233,14 +240,20 @@ class TestIosAclsModule(TestIosModule): }, }, { - "destination": {"any": True, "port_protocol": {"eq": "22"}}, + "destination": { + "any": True, + "port_protocol": {"eq": "22"}, + }, "grant": "permit", "protocol": "tcp", "sequence": 20, "source": {"host": "10.160.114.111"}, }, { - "destination": {"any": True, "port_protocol": {"eq": "22"}}, + "destination": { + "any": True, + "port_protocol": {"eq": "22"}, + }, "grant": "permit", "protocol": "tcp", "sequence": 30, @@ -361,7 +374,9 @@ class TestIosAclsModule(TestIosModule): "grant": "permit", "protocol": "ipv6", "sequence": 10, - "source": {"address": "2001:ABAD:BEEF:1221::/64"}, + "source": { + "address": "2001:ABAD:BEEF:1221::/64", + }, }, { "destination": { @@ -380,7 +395,10 @@ class TestIosAclsModule(TestIosModule): "aces": [ {"remarks": ["empty remark 1"], "sequence": 10}, {"remarks": ["empty remark 2"], "sequence": 20}, - {"remarks": ["empty remark never ends"], "sequence": 30}, + { + "remarks": ["empty remark never ends"], + "sequence": 30, + }, ], "name": "empty_ipv6_acl", }, @@ -402,7 +420,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 40, "source": {"any": True}, }, - {"remarks": ["I am new set of ipv6 ace"], "sequence": 50}, + { + "remarks": ["I am new set of ipv6 ace"], + "sequence": 50, + }, { "destination": {"any": True}, "grant": "permit", @@ -422,64 +443,58 @@ class TestIosAclsModule(TestIosModule): ) result = self.execute_module(changed=True) commands = [ - "ip access-list extended mytest", - "remark I am a test ace", - "remark I am right after the test ace", - "remark I third the test ace", - "100 permit ip host 100.100.100.100 any", - "remark I am the next test ace", - "remark I am the next ace to the next ace", - "110 permit ip host 10.40.150.0 any", - "remark I am the peace ace", - "remark Peace out", "ip access-list extended 199", "10 permit ip 10.40.150.0 0.0.0.255 any", "20 permit ip any 10.40.150.0 0.0.0.255", + "ip access-list standard 42", + "10 permit 10.182.250.0 0.0.0.255", + "ip access-list extended empty_ip_ex_acl", + "remark empty remark 1", + "remark empty remark 2", + "remark empty remark never ends", "ip access-list extended NET-MGMT-VTY", "10 permit tcp 10.57.66.243 0.0.0.7 any eq 22", "20 permit tcp host 10.160.114.111 any eq 22", "30 permit tcp host 10.160.115.22 any eq 22", "40 deny ip any any log", - "ip access-list extended empty_ip_ex_acl", - "remark empty remark 1", - "remark empty remark 2", - "remark empty remark never ends", + "ip access-list extended mytest", + "100 remark I am a test ace", + "100 remark I am right after the test ace", + "100 remark I third the test ace", + "100 permit ip host 100.100.100.100 any", + "110 remark I am the next test ace", + "110 remark I am the next ace to the next ace", + "110 permit ip host 10.40.150.0 any", + "remark I am the peace ace", + "remark Peace out", "ip access-list extended TEST", - "remark FIRST REMARK BEFORE LINE 10", - "remark ============", - "remark ALLOW HOST FROM BUILDING 10", + "10 remark FIRST REMARK BEFORE LINE 10", + "10 remark ============", + "10 remark ALLOW HOST FROM BUILDING 10", "10 permit ip host 1.1.1.1 any", - "remark FIRST REMARK BEFORE LINE 20", - "remark ============", - "remark ALLOW HOST FROM BUILDING 20", + "20 remark FIRST REMARK BEFORE LINE 20", + "20 remark ============", + "20 remark ALLOW HOST FROM BUILDING 20", "20 permit ip host 2.2.2.2 any", - "remark FIRST REMARK BEFORE LINE 30", - "remark ============", - "remark ALLOW NEW HOST FROM BUILDING 10", + "30 remark FIRST REMARK BEFORE LINE 30", + "30 remark ============", + "30 remark ALLOW NEW HOST FROM BUILDING 10", "30 permit ip host 3.3.3.3 any", "remark FIRST REMARK AT END OF ACL", "remark SECOND REMARK AT END OF ACL", - "ip access-list standard 42", - "10 permit 10.182.250.0 0.0.0.255", "ipv6 access-list R1_TRAFFIC", "permit ipv6 2001:ABAD:BEEF:1221::/64 any sequence 10", "deny tcp host 2001:ABAD:BEEF:2345::1 host 2001:ABAD:BEEF:1212::1 eq www sequence 20", "ipv6 access-list empty_ipv6_acl", - "remark empty remark 1", - " sequence 10", - "remark empty remark 2", - " sequence 20", - "remark empty remark never ends", - " sequence 30", + "10 remark empty remark 1", + "20 remark empty remark 2", + "30 remark empty remark never ends", "ipv6 access-list ipv6_acl", - "remark I am a ipv6 ace", - " sequence 10", - "remark I am test", - " sequence 20", + "10 remark I am a ipv6 ace", + "20 remark I am test", "permit tcp any any sequence 30", "permit udp any any sequence 40", - "remark I am new set of ipv6 ace", - " sequence 50", + "50 remark I am new set of ipv6 ace", "permit icmp any any sequence 60", ] self.assertEqual(sorted(result["commands"]), sorted(commands)) @@ -518,7 +533,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 10, "grant": "deny", "protocol": "tcp", - "source": {"any": True, "port_protocol": {"eq": "www"}}, + "source": { + "any": True, + "port_protocol": {"eq": "www"}, + }, "destination": { "any": True, "port_protocol": {"eq": "telnet"}, @@ -536,7 +554,6 @@ class TestIosAclsModule(TestIosModule): ) result = self.execute_module(changed=False) self.assertEqual(sorted(result["commands"]), []) - # self.execute_module(changed=False, commands=[], sort=True) def test_ios_acls_replaced(self): self.execute_show_command.return_value = dedent( @@ -550,11 +567,23 @@ class TestIosAclsModule(TestIosModule): ip access-list standard test_acl remark remark check 1 remark some random remark 2 + ip access-list standard testRobustReplace + 10 remark Remarks for 10 + 10 permit 192.168.1.0 0.0.0.255 + 20 remark Remarks for 20 + 20 permit 0.0.0.0 255.0.0.0 + 30 remark Remarks for 30 + 30 permit 172.16.0.0 0.15.255.255 + 40 remark Remarks for 40 + 40 permit 192.0.2.0 0.0.0.255 + 50 remark Remarks for 50 + 50 permit 198.51.100.0 0.0.0.255 """, ) self.execute_show_command_name.return_value = dedent( """\ Standard IP access list test_acl + Standard IP access list testRobustReplace """, ) set_module_args( @@ -588,6 +617,21 @@ class TestIosAclsModule(TestIosModule): acl_type="standard", aces=[dict(remarks=["Another remark here"])], ), + dict( + name="testRobustReplace", + acl_type="standard", + aces=[ + dict( + sequence=10, + grant="permit", + remarks=["Remarks for 10"], + source=dict( + address="192.168.1.0", + wildcard_bits="0.0.0.255", + ), + ), + ], + ), ], ), ], @@ -599,9 +643,17 @@ class TestIosAclsModule(TestIosModule): "ip access-list extended replace_acl", "deny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255 eq telnet ack tos min-monetary-cost", "ip access-list standard test_acl", - "no remark remark check 1", - "no remark some random remark 2", + "no remark", "remark Another remark here", + "ip access-list standard testRobustReplace", + "no 20 remark", + "no 20 permit 0.0.0.0 255.0.0.0", + "no 30 remark", + "no 30 permit 172.16.0.0 0.15.255.255", + "no 40 remark", + "no 40 permit 192.0.2.0 0.0.0.255", + "no 50 remark", + "no 50 permit 198.51.100.0 0.0.0.255", ] self.assertEqual(sorted(result["commands"]), sorted(commands)) @@ -620,9 +672,21 @@ class TestIosAclsModule(TestIosModule): ip access-list extended test-idem 10 permit ip host 10.153.14.21 any 20 permit ip host 10.153.14.22 any + ip access-list standard test-acl-no-seq + permit 10.0.0.0 0.255.255.255 + permit 172.31.16.0 0.0.7.255 + """, + ) + self.execute_show_command_name.return_value = dedent( + """\ + Standard IP access list test_acl + Standard IP access list test-acl-no-seq + Extended IP access list 110 + Extended IP access list test-idem + Extended IP access list test_pre + IPv6 access list R1_TRAFFIC """, ) - self.execute_show_command_name.return_value = dedent("") set_module_args( dict( config=[ @@ -641,7 +705,10 @@ class TestIosAclsModule(TestIosModule): "address": "198.51.100.0", "wildcard_bits": "0.0.0.255", }, - "destination": {"any": True, "port_protocol": {"eq": "22"}}, + "destination": { + "any": True, + "port_protocol": {"eq": "22"}, + }, "log": {"set": True, "user_cookie": "testLog"}, }, { @@ -706,6 +773,26 @@ class TestIosAclsModule(TestIosModule): }, ], }, + { + "name": "test-acl-no-seq", + "acl_type": "standard", + "aces": [ + { + "grant": "permit", + "source": { + "address": "10.0.0.0", + "wildcard_bits": "0.255.255.255", + }, + }, + { + "grant": "permit", + "source": { + "address": "172.31.16.0", + "wildcard_bits": "0.0.7.255", + }, + }, + ], + }, ], }, { @@ -718,7 +805,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 10, "grant": "deny", "protocol": "tcp", - "source": {"any": True, "port_protocol": {"eq": "www"}}, + "source": { + "any": True, + "port_protocol": {"eq": "www"}, + }, "destination": { "any": True, "port_protocol": {"eq": "telnet"}, @@ -737,6 +827,64 @@ class TestIosAclsModule(TestIosModule): result = self.execute_module(changed=False) self.assertEqual(sorted(result["commands"]), []) + def test_ios_acls_replaced_changetype(self): + self.execute_show_command.return_value = dedent( + """\ + ip access-list extended 110 + 10 permit tcp 198.51.100.0 0.0.0.255 any eq 22 log (tag = testLog) + 20 deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10 + 30 deny icmp object-group test_network_og any dscp ef ttl eq 10 + ip access-list standard test_acl + remark remark check 1 + remark some random remark 2 + """, + ) + self.execute_show_command_name.return_value = dedent( + """\ + Standard IP access list test_acl + """, + ) + set_module_args( + dict( + config=[ + dict( + afi="ipv4", + acls=[ + dict( + name="110", + acl_type="standard", + aces=[ + dict( + grant="deny", + source=dict( + address="198.51.100.0", + wildcard_bits="0.0.0.255", + ), + ), + ], + ), + dict( + name="test_acl", + acl_type="standard", + aces=[dict(remarks=["Another remark here"])], + ), + ], + ), + ], + state="replaced", + ), + ) + result = self.execute_module(changed=True) + commands = [ + "no ip access-list extended 110", + "ip access-list standard 110", + "deny 198.51.100.0 0.0.0.255", + "ip access-list standard test_acl", + "no remark", + "remark Another remark here", + ] + self.assertEqual(sorted(result["commands"]), sorted(commands)) + def test_ios_acls_overridden(self): self.execute_show_command.return_value = dedent( """\ @@ -831,7 +979,10 @@ class TestIosAclsModule(TestIosModule): "address": "198.51.100.0", "wildcard_bits": "0.0.0.255", }, - "destination": {"any": True, "port_protocol": {"eq": "22"}}, + "destination": { + "any": True, + "port_protocol": {"eq": "22"}, + }, "log": {"set": True, "user_cookie": "testLog"}, }, { @@ -874,7 +1025,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 10, "grant": "deny", "protocol": "tcp", - "source": {"any": True, "port_protocol": {"eq": "www"}}, + "source": { + "any": True, + "port_protocol": {"eq": "www"}, + }, "destination": { "any": True, "port_protocol": {"eq": "telnet"}, @@ -909,7 +1063,10 @@ class TestIosAclsModule(TestIosModule): self.execute_show_command_name.return_value = dedent("") set_module_args(dict(config=[dict(afi="ipv4")], state="deleted")) result = self.execute_module(changed=True) - commands = ["no ip access-list extended 110", "no ip access-list standard test_acl"] + commands = [ + "no ip access-list extended 110", + "no ip access-list standard test_acl", + ] self.assertEqual(sorted(result["commands"]), sorted(commands)) def test_ios_acls_deleted_acl_based(self): @@ -938,7 +1095,10 @@ class TestIosAclsModule(TestIosModule): grant="deny", protocol_options=dict(icmp=dict(echo="True")), sequence="10", - source=dict(address="192.0.2.0", wildcard_bits="0.0.0.255"), + source=dict( + address="192.0.2.0", + wildcard_bits="0.0.0.255", + ), destination=dict( address="192.0.3.0", wildcard_bits="0.0.0.255", @@ -960,7 +1120,10 @@ class TestIosAclsModule(TestIosModule): grant="deny", protocol_options=dict(tcp=dict(ack="True")), sequence="10", - source=dict(any="True", port_protocol=dict(eq="www")), + source=dict( + any="True", + port_protocol=dict(eq="www"), + ), destination=dict( any="True", port_protocol=dict(eq="telnet"), @@ -994,9 +1157,15 @@ class TestIosAclsModule(TestIosModule): dict( grant="deny", sequence="10", - remarks=["check for remark", "remark for acl 110"], + remarks=[ + "check for remark", + "remark for acl 110", + ], protocol_options=dict(tcp=dict(syn="True")), - source=dict(address="192.0.2.0", wildcard_bits="0.0.0.255"), + source=dict( + address="192.0.2.0", + wildcard_bits="0.0.0.255", + ), destination=dict( address="192.0.3.0", wildcard_bits="0.0.0.255", @@ -1015,9 +1184,9 @@ class TestIosAclsModule(TestIosModule): ) commands = [ "ip access-list extended 110", + "10 remark check for remark", + "10 remark remark for acl 110", "10 deny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www syn dscp ef ttl eq 10", - "remark check for remark", - "remark remark for acl 110", ] result = self.execute_module(changed=False) self.assertEqual(sorted(result["rendered"]), sorted(commands)) @@ -1046,7 +1215,9 @@ class TestIosAclsModule(TestIosModule): "source": {"any": True, "port_protocol": {"eq": "www"}}, "destination": { "any": True, - "port_protocol": {"range": {"start": 10, "end": 20}}, + "port_protocol": { + "range": {"start": 10, "end": 20}, + }, }, "dscp": "af11", "protocol_options": {"tcp": {"ack": True}}, @@ -1077,11 +1248,13 @@ class TestIosAclsModule(TestIosModule): def test_ios_acls_parsed_matches(self): self.execute_show_command_name.return_value = dedent("") set_module_args( - dict( - running_config="""ip access-list standard R1_TRAFFIC\n10 permit 10.11.12.13 (2 matches)\n - 40 permit 128.0.0.0, wildcard bits 63.255.255.255 (2 matches)\n60 permit 134.107.136.0, wildcard bits 0.0.0.255 (1 match)""", - state="parsed", - ), + { + "running_config": """ip access-list standard R1_TRAFFIC + 10 permit 10.11.12.13 + 40 permit 128.0.0.0 63.255.255.255 + 60 permit 134.107.136.0 0.0.0.255""", + "state": "parsed", + }, ) result = self.execute_module(changed=False) parsed_list = [ @@ -1092,16 +1265,26 @@ class TestIosAclsModule(TestIosModule): "name": "R1_TRAFFIC", "acl_type": "standard", "aces": [ - {"sequence": 10, "grant": "permit", "source": {"host": "10.11.12.13"}}, + { + "sequence": 10, + "grant": "permit", + "source": {"host": "10.11.12.13"}, + }, { "sequence": 40, "grant": "permit", - "protocol_options": {"protocol_number": 128}, + "source": { + "address": "128.0.0.0", + "wildcard_bits": "63.255.255.255", + }, }, { "sequence": 60, "grant": "permit", - "protocol_options": {"protocol_number": 134}, + "source": { + "address": "134.107.136.0", + "wildcard_bits": "0.0.0.255", + }, }, ], }, @@ -1246,9 +1429,8 @@ class TestIosAclsModule(TestIosModule): "permit 433 198.51.101.0 0.0.0.255 198.51.102.0 0.0.0.255 eq telnet log check tos max-throughput", "permit 198.51.105.0 0.0.0.255 198.51.106.0 0.0.0.255 time-range 20 tos max-throughput", "ip access-list standard test_acl", + "no remark", "remark Another remark here", - "no remark remark check 1", - "no remark some random remark 2", ] self.assertEqual(sorted(result["commands"]), sorted(commands)) @@ -1446,6 +1628,11 @@ class TestIosAclsModule(TestIosModule): dict( running_config=dedent( """\ + ip access-list standard 99 + 10 remark standalone remarks + 20 permit 192.15.0.1 + 30 permit 192.15.0.2 + 40 permit 192.15.0.3 ip access-list standard 2 30 permit 172.16.1.11 20 permit 172.16.1.10 @@ -1543,7 +1730,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 70, "grant": "permit", "protocol": "tcp", - "source": {"address": "10.1.1.0", "wildcard_bits": "0.0.0.255"}, + "source": { + "address": "10.1.1.0", + "wildcard_bits": "0.0.0.255", + }, "destination": { "address": "172.16.1.0", "port_protocol": {"eq": "telnet"}, @@ -1557,9 +1747,43 @@ class TestIosAclsModule(TestIosModule): "name": "2", "acl_type": "standard", "aces": [ - {"sequence": 30, "grant": "permit", "source": {"host": "172.16.1.11"}}, - {"sequence": 20, "grant": "permit", "source": {"host": "172.16.1.10"}}, - {"sequence": 10, "grant": "permit", "source": {"host": "172.16.1.2"}}, + { + "sequence": 30, + "grant": "permit", + "source": {"host": "172.16.1.11"}, + }, + { + "sequence": 20, + "grant": "permit", + "source": {"host": "172.16.1.10"}, + }, + { + "sequence": 10, + "grant": "permit", + "source": {"host": "172.16.1.2"}, + }, + ], + }, + { + "name": "99", + "acl_type": "standard", + "aces": [ + { + "sequence": 20, + "grant": "permit", + "source": {"host": "192.15.0.1"}, + }, + { + "sequence": 30, + "grant": "permit", + "source": {"host": "192.15.0.2"}, + }, + { + "sequence": 40, + "grant": "permit", + "source": {"host": "192.15.0.3"}, + }, + {"sequence": 10, "remarks": ["standalone remarks"]}, ], }, { @@ -1570,7 +1794,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 10, "grant": "permit", "protocol": "icmp", - "source": {"address": "10.1.1.0", "wildcard_bits": "0.0.0.255"}, + "source": { + "address": "10.1.1.0", + "wildcard_bits": "0.0.0.255", + }, "destination": { "address": "172.16.1.0", "wildcard_bits": "0.0.0.255", @@ -1594,7 +1821,10 @@ class TestIosAclsModule(TestIosModule): "grant": "permit", "protocol": "tcp", "source": {"host": "10.1.1.1"}, - "destination": {"host": "10.5.5.5", "port_protocol": {"eq": "www"}}, + "destination": { + "host": "10.5.5.5", + "port_protocol": {"eq": "www"}, + }, }, { "sequence": 30, @@ -1709,6 +1939,28 @@ class TestIosAclsModule(TestIosModule): }, ], }, + { + "name": "99", + "acl_type": "standard", + "aces": [ + { + "sequence": 20, + "grant": "permit", + "source": {"host": "192.15.0.1"}, + }, + { + "sequence": 30, + "grant": "permit", + "source": {"host": "192.15.0.2"}, + }, + { + "sequence": 40, + "grant": "permit", + "source": {"host": "192.15.0.3"}, + }, + {"sequence": 10, "remarks": ["standalone remarks"]}, + ], + }, { "name": "2", "acl_type": "standard", @@ -1806,6 +2058,11 @@ class TestIosAclsModule(TestIosModule): "50 permit ip any 10.1.1.0 0.0.0.255", "60 permit tcp any host 10.1.1.1 eq telnet", "70 permit tcp 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 eq telnet time-range EVERYOTHERDAY", + "ip access-list standard 99", + "20 permit host 192.15.0.1", + "30 permit host 192.15.0.2", + "40 permit host 192.15.0.3", + "10 remark standalone remarks", "ip access-list standard 2", "30 permit host 172.16.1.11", "20 permit host 172.16.1.10", @@ -1820,3 +2077,196 @@ class TestIosAclsModule(TestIosModule): ] result = self.execute_module(changed=False) self.assertEqual(sorted(result["rendered"]), sorted(commands)) + + def test_ios_acls_overridden_sticky_remarks(self): + self.execute_show_command.return_value = dedent( + """\ + ip access-list standard test123 + 10 remark TEST + 10 permit 8.8.8.8 + 20 remark TEST + 20 permit 8.8.4.4 + """, + ) + self.execute_show_command_name.return_value = dedent("") + + set_module_args( + dict( + config=[ + dict( + afi="ipv4", + acls=[ + dict( + name="test123", + acl_type="standard", + aces=[ + dict( + grant="permit", + source=dict( + address="8.8.128.0", + wildcard_bits="0.0.0.63", + ), + remarks=["TEST", "TEST 2"], + sequence=10, + ), + dict( + grant="permit", + source=dict( + host="8.8.4.4", + ), + remarks=["TEST"], + sequence=20, + ), + ], + ), + ], + ), + ], + state="overridden", + ), + ) + result = self.execute_module(changed=True) + commands = [ + "ip access-list standard test123", + "no 10 remark", + "no 10 permit host 8.8.8.8", + "10 remark TEST", + "10 remark TEST 2", + "10 permit 8.8.128.0 0.0.0.63", + ] + self.assertEqual(sorted(result["commands"]), sorted(commands)) + + def test_ios_acls_overridden_remarks_complex(self): + self.execute_show_command.return_value = dedent( + """\ + ip access-list extended TEST + 10 remark FIRST REMARK BEFORE SEQUENCE 10 + 10 remark ============ + 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + 20 remark FIRST REMARK BEFORE SEQUENCE 20 + 20 remark ============ + 20 remark ALLOW HOST FROM SEQUENCE 20 + 20 permit ip host 1.1.1.1 any + 30 remark FIRST REMARK BEFORE SEQUENCE 30 + 30 remark ============ + 30 remark ALLOW HOST FROM SEQUENCE 30 + 30 permit ip host 2.2.2.2 any + 40 remark FIRST REMARK BEFORE SEQUENCE 40 + 40 remark ============ + 40 remark ALLOW NEW HOST FROM SEQUENCE 40 + 40 permit ip host 3.3.3.3 any + remark Remark not specific to sequence + remark ============ + remark End Remarks + ip access-list extended test_acl + 10 deny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www fin option traceroute ttl eq 10 + ip access-list extended 110 + 10 deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10 + ip access-list extended 123 + 10 deny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255 eq telnet ack tos 12 + 20 deny tcp 192.0.3.0 0.0.0.255 192.0.4.0 0.0.0.255 eq www ack dscp ef ttl lt 20 + ipv6 access-list R1_TRAFFIC + sequence 10 deny tcp any eq www any eq telnet ack dscp af11 + """, + ) + self.execute_show_command_name.return_value = dedent("") + set_module_args( + dict( + config=[ + { + "afi": "ipv4", + "acls": [ + { + "name": "TEST", + "acl_type": "extended", + "aces": [ + { + "sequence": 10, + "remarks": [ + "FIRST REMARK BEFORE SEQUENCE 10", + "============", + "REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE", + ], + "grant": "permit", + "protocol": "ip", + "source": {"host": "1.1.1.1"}, + "destination": {"any": True}, + }, + { + "sequence": 20, + "remarks": [ + "FIRST REMARK BEFORE SEQUENCE 20", + "============", + "ALLOW HOST FROM SEQUENCE 20", + ], + "grant": "permit", + "protocol": "ip", + "source": {"host": "192.168.0.1"}, + "destination": {"any": True}, + }, + { + "sequence": 30, + "remarks": [ + "FIRST REMARK BEFORE SEQUENCE 30", + "============", + "ALLOW HOST FROM SEQUENCE 30 updated", + ], + "grant": "permit", + "protocol": "ip", + "source": {"host": "2.2.2.2"}, + "destination": {"any": True}, + }, + { + "sequence": 40, + "remarks": [ + "FIRST REMARK BEFORE SEQUENCE 40", + "============", + "ALLOW NEW HOST FROM SEQUENCE 40", + ], + "grant": "permit", + "protocol": "ip", + "source": {"host": "3.3.3.3"}, + "destination": {"any": True}, + }, + { + "remarks": [ + "Remark not specific to sequence", + "============", + "End Remarks 1", + ], + }, + ], + }, + ], + }, + ], + state="overridden", + ), + ) + result = self.execute_module(changed=True) + commands = [ + "no ipv6 access-list R1_TRAFFIC", + "ip access-list extended TEST", + "no 10", # removes all remarks and ace entry for sequence 10 + "no 20 permit ip host 1.1.1.1 any", # removing the ace automatically removes the remarks + "no 30 remark", # just remove remarks for sequence 30 + "no remark", # remove all remarks at end of acl, that has no sequence + "10 remark FIRST REMARK BEFORE SEQUENCE 10", + "10 remark ============", + "10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE", + "10 permit ip host 1.1.1.1 any", + "20 remark FIRST REMARK BEFORE SEQUENCE 20", + "20 remark ============", + "20 remark ALLOW HOST FROM SEQUENCE 20", + "20 permit ip host 192.168.0.1 any", + "30 remark FIRST REMARK BEFORE SEQUENCE 30", + "30 remark ============", + "30 remark ALLOW HOST FROM SEQUENCE 30 updated", + "remark Remark not specific to sequence", + "remark ============", + "remark End Remarks 1", + "no ip access-list extended 110", + "no ip access-list extended 123", + "no ip access-list extended test_acl", + ] + self.assertEqual(sorted(result["commands"]), sorted(commands)) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_banner.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_banner.py index 85e2736f0..b114d1817 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_banner.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_banner.py @@ -18,9 +18,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_banner -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -77,7 +77,11 @@ class TestIosBannerModule(TestIosModule): def test_ios_banner_create_delimiter(self): for banner_type in ("login", "motd", "exec", "incoming", "slip-ppp"): set_module_args( - dict(banner=banner_type, text="test\nbanner\nstring", multiline_delimiter="c"), + dict( + banner=banner_type, + text="test\nbanner\nstring", + multiline_delimiter="c", + ), ) commands = ["banner {0} c\ntest\nbanner\nstring\nc".format(banner_type)] self.execute_module(changed=True, commands=commands) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp.py deleted file mode 100644 index 0145a3c6a..000000000 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp.py +++ /dev/null @@ -1,344 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, inc -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# - -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.cli.config.bgp.process import ( - Provider, -) -from ansible_collections.cisco.ios.plugins.modules import ios_bgp - -from .ios_module import TestIosModule, load_fixture - - -class TestIosBgpModule(TestIosModule): - module = ios_bgp - - def setUp(self): - super(TestIosBgpModule, self).setUp() - self._bgp_config = load_fixture("ios_bgp_config.cfg") - - def test_ios_bgp(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - router_id="192.0.2.2", - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, ["router bgp 64496", "bgp router-id 192.0.2.2", "exit"]) - - def test_ios_bgp_idempotent(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - router_id="192.0.2.1", - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_remove(self): - obj = Provider( - params=dict( - config=dict(bgp_as=64496, networks=None, address_family=None), - operation="delete", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, ["no router bgp 64496"]) - - def test_ios_bgp_neighbor(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - neighbors=[dict(neighbor="192.51.100.2", remote_as=64496)], - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual( - commands, - ["router bgp 64496", "neighbor 192.51.100.2 remote-as 64496", "exit"], - ) - - def test_ios_bgp_neighbor_idempotent(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - neighbors=[ - dict( - neighbor="192.51.100.1", - remote_as=64496, - timers=dict(keepalive=120, holdtime=360, min_neighbor_holdtime=360), - ), - ], - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_network(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - networks=[dict(prefix="192.0.1.0", masklen=23, route_map="RMAP_1")], - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual( - sorted(commands), - sorted( - [ - "router bgp 64496", - "network 192.0.1.0 mask 255.255.254.0 route-map RMAP_1", - "exit", - ], - ), - ) - - def test_ios_bgp_network_idempotent(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - networks=[ - dict(prefix="192.0.2.0", masklen=23, route_map="RMAP_1"), - dict(prefix="198.51.100.0", masklen=25, route_map="RMAP_2"), - ], - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_address_family_redistribute(self): - rd_1 = dict(protocol="ospf", id="233", metric=90, route_map=None) - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="unicast", redistribute=[rd_1])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - cmd = [ - "router bgp 64496", - "address-family ipv4", - "redistribute ospf 233 metric 90", - "exit-address-family", - "exit", - ] - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_ios_bgp_address_family_redistribute_idempotent(self): - rd_1 = dict(protocol="eigrp", metric=10, route_map="RMAP_3", id=None) - rd_2 = dict(protocol="static", metric=100, id=None, route_map=None) - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="unicast", redistribute=[rd_1, rd_2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_address_family_neighbors(self): - af_nbr_1 = dict(neighbor="192.51.100.1", maximum_prefix=35, activate=True) - af_nbr_2 = dict(neighbor="192.51.100.3", route_reflector_client=True, activate=True) - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="multicast", neighbors=[af_nbr_1, af_nbr_2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - cmd = [ - "router bgp 64496", - "address-family ipv4 multicast", - "neighbor 192.51.100.1 activate", - "neighbor 192.51.100.1 maximum-prefix 35", - "neighbor 192.51.100.3 activate", - "neighbor 192.51.100.3 route-reflector-client", - "exit-address-family", - "exit", - ] - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_ios_bgp_address_family_neighbors_idempotent(self): - af_nbr_1 = dict(neighbor="203.0.113.1", remove_private_as=True, maximum_prefix=100) - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="unicast", neighbors=[af_nbr_1])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_address_family_networks(self): - net = dict(prefix="1.0.0.0", masklen=8, route_map="RMAP_1") - net2 = dict(prefix="192.168.1.0", masklen=24, route_map="RMAP_2") - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="multicast", networks=[net, net2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - cmd = [ - "router bgp 64496", - "address-family ipv4 multicast", - "network 1.0.0.0 mask 255.0.0.0 route-map RMAP_1", - "network 192.168.1.0 mask 255.255.255.0 route-map RMAP_2", - "exit-address-family", - "exit", - ] - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_ios_bgp_address_family_networks_idempotent(self): - net = dict(prefix="203.0.113.0", masklen=27, route_map="RMAP_1") - net2 = dict(prefix="192.0.2.0", masklen=26, route_map="RMAP_2") - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="multicast", networks=[net, net2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_operation_override(self): - net_1 = dict(prefix="1.0.0.0", masklen=8, route_map="RMAP_1") - net_2 = dict(prefix="192.168.1.0", masklen=24, route_map="RMAP_2") - nbr_1 = dict(neighbor="192.51.100.1", remote_as=64496, update_source="GigabitEthernet0/1") - nbr_2 = dict( - neighbor="192.51.100.3", - remote_as=64496, - timers=dict(keepalive=300, holdtime=360, min_neighbor_holdtime=360), - ) - af_nbr_1 = dict(neighbor="192.51.100.1", maximum_prefix=35) - af_nbr_2 = dict(neighbor="192.51.100.3", route_reflector_client=True) - - af_1 = dict(afi="ipv4", safi="unicast", neighbors=[af_nbr_1, af_nbr_2]) - af_2 = dict(afi="ipv4", safi="multicast", networks=[net_1, net_2]) - config = dict( - bgp_as=64496, - neighbors=[nbr_1, nbr_2], - address_family=[af_1, af_2], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="override")) - commands = obj.render(self._bgp_config) - - cmd = [ - "no router bgp 64496", - "router bgp 64496", - "neighbor 192.51.100.1 remote-as 64496", - "neighbor 192.51.100.1 update-source GigabitEthernet0/1", - "neighbor 192.51.100.3 remote-as 64496", - "neighbor 192.51.100.3 timers 300 360 360", - "address-family ipv4", - "neighbor 192.51.100.1 maximum-prefix 35", - "neighbor 192.51.100.3 route-reflector-client", - "exit-address-family", - "address-family ipv4 multicast", - "network 1.0.0.0 mask 255.0.0.0 route-map RMAP_1", - "network 192.168.1.0 mask 255.255.255.0 route-map RMAP_2", - "exit-address-family", - "exit", - ] - - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_ios_bgp_operation_replace(self): - rd = dict(protocol="ospf", id=223, metric=110, route_map=None) - net = dict(prefix="203.0.113.0", masklen=27, route_map="RMAP_1") - net2 = dict(prefix="192.0.2.0", masklen=26, route_map="RMAP_2") - - af_1 = dict(afi="ipv4", safi="unicast", redistribute=[rd]) - af_2 = dict(afi="ipv4", safi="multicast", networks=[net, net2]) - - config = dict(bgp_as=64496, address_family=[af_1, af_2], networks=None) - obj = Provider(params=dict(config=config, operation="replace")) - commands = obj.render(self._bgp_config) - - cmd = [ - "router bgp 64496", - "address-family ipv4", - "redistribute ospf 223 metric 110", - "no redistribute eigrp", - "no redistribute static", - "exit-address-family", - "exit", - ] - - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_ios_bgp_operation_replace_with_new_as(self): - rd = dict(protocol="ospf", id=223, metric=110, route_map=None) - - af_1 = dict(afi="ipv4", safi="unicast", redistribute=[rd]) - - config = dict(bgp_as=64497, address_family=[af_1], networks=None) - obj = Provider(params=dict(config=config, operation="replace")) - commands = obj.render(self._bgp_config) - - cmd = [ - "no router bgp 64496", - "router bgp 64497", - "address-family ipv4", - "redistribute ospf 223 metric 110", - "exit-address-family", - "exit", - ] - - self.assertEqual(sorted(commands), sorted(cmd)) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_address_family.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_address_family.py index 259da5ece..ea5d279f4 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_address_family.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_address_family.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_bgp_address_family -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -119,8 +118,12 @@ class TestIosBgpAddressFamilyModule(TestIosModule): dict( neighbor_address="198.51.100.1", remote_as="65.11", - route_maps=[dict(name="test-route-out", out="true")], - prefix_lists=[dict(name="AS65100-PREFIX-OUT", out="true")], + route_maps=[ + dict(name="test-route-out", out="true"), + ], + prefix_lists=[ + dict(name="AS65100-PREFIX-OUT", out="true"), + ], ), ], ), @@ -128,7 +131,9 @@ class TestIosBgpAddressFamilyModule(TestIosModule): afi="nsap", bgp=dict(aggregate_timer=20, dmzlink_bw=True, scan_time=10), default_metric=10, - networks=[dict(address="192.0.1.1", route_map="test_route")], + networks=[ + dict(address="192.0.1.1", route_map="test_route"), + ], ), ], ), @@ -317,18 +322,25 @@ class TestIosBgpAddressFamilyModule(TestIosModule): "send": { "cost_community": { "id": 100, - "poi": {"igp_cost": True, "transitive": True}, + "poi": { + "igp_cost": True, + "transitive": True, + }, }, }, }, "local_as": {"number": "10.64760", "set": True}, "neighbor_address": "198.51.100.1", "nexthop_self": {"all": True}, - "prefix_lists": [{"name": "AS65100-PREFIX-OUT", "out": True}], + "prefix_lists": [ + {"name": "AS65100-PREFIX-OUT", "out": True}, + ], "remote_as": 10, "route_maps": [{"name": "test-out", "out": True}], "route_server_client": True, - "slow_peer_options": {"detection": {"threshold": 150}}, + "slow_peer_options": { + "detection": {"threshold": 150}, + }, }, ], "networks": [ @@ -426,7 +438,9 @@ class TestIosBgpAddressFamilyModule(TestIosModule): address="198.51.110.1", activate=True, remote_as=200, - route_maps=[dict(name="test-replaced-route", out=True)], + route_maps=[ + dict(name="test-replaced-route", out=True), + ], ), ], ), @@ -534,12 +548,17 @@ class TestIosBgpAddressFamilyModule(TestIosModule): send=dict( cost_community=dict( id=100, - poi=dict(igp_cost=True, transitive=True), + poi=dict( + igp_cost=True, + transitive=True, + ), ), ), ), nexthop_self=dict(all=True), - prefix_lists=[dict(name="AS65100-PREFIX-OUT", out="true")], + prefix_lists=[ + dict(name="AS65100-PREFIX-OUT", out="true"), + ], slow_peer=[dict(detection=dict(threshold=150))], remote_as=10, local_as=dict(number=20), @@ -709,12 +728,17 @@ class TestIosBgpAddressFamilyModule(TestIosModule): send=dict( cost_community=dict( id=100, - poi=dict(igp_cost=True, transitive=True), + poi=dict( + igp_cost=True, + transitive=True, + ), ), ), ), nexthop_self=dict(all=True), - prefix_lists=[dict(name="AS65100-PREFIX-OUT", out="true")], + prefix_lists=[ + dict(name="AS65100-PREFIX-OUT", out="true"), + ], slow_peer=[dict(detection=dict(threshold=150))], remote_as=10, local_as=dict(number=20), @@ -937,7 +961,10 @@ class TestIosBgpAddressFamilyModule(TestIosModule): send=dict( cost_community=dict( id=100, - poi=dict(igp_cost=True, transitive=True), + poi=dict( + igp_cost=True, + transitive=True, + ), ), ), ), @@ -1152,7 +1179,11 @@ class TestIosBgpAddressFamilyModule(TestIosModule): }, }, "networks": [ - {"address": "198.51.110.10", "mask": "255.255.255.255", "backdoor": True}, + { + "address": "198.51.110.10", + "mask": "255.255.255.255", + "backdoor": True, + }, ], "aggregate_addresses": [ { @@ -1177,7 +1208,9 @@ class TestIosBgpAddressFamilyModule(TestIosModule): }, }, "route_server_client": True, - "prefix_lists": [{"name": "AS65100-PREFIX-OUT", "out": True}], + "prefix_lists": [ + {"name": "AS65100-PREFIX-OUT", "out": True}, + ], "slow_peer_options": {"detection": {"threshold": 150}}, "route_maps": [{"name": "test-out", "out": True}], }, diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_global.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_global.py index 95aa8d8e9..16a4c9b5c 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_global.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_global.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_bgp_global -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import AnsibleFailJson, set_module_args from .ios_module import TestIosModule @@ -67,8 +66,16 @@ class TestIosBgpGlobalModule(TestIosModule): "netmask": "255.255.0.0", "summary_only": True, }, - {"address": "192.0.2.4", "as_set": True, "netmask": "255.255.255.0"}, - {"address": "192.0.2.5", "as_set": True, "netmask": "255.255.255.0"}, + { + "address": "192.0.2.4", + "as_set": True, + "netmask": "255.255.255.0", + }, + { + "address": "192.0.2.5", + "as_set": True, + "netmask": "255.255.255.0", + }, ], "as_number": "65000", "auto_summary": True, @@ -83,7 +90,9 @@ class TestIosBgpGlobalModule(TestIosModule): "med": {"confed": True, "missing_as_worst": True}, }, "confederation": {"identifier": "22"}, - "consistency_checker": {"error_message": {"interval": 10, "set": True}}, + "consistency_checker": { + "error_message": {"interval": 10, "set": True}, + }, "dampening": { "max_suppress": 44, "penalty_half_time": 22, @@ -98,12 +107,23 @@ class TestIosBgpGlobalModule(TestIosModule): "neighbors": {"time": 31}, }, "inject_maps": [ - {"copy_attributes": True, "exist_map_name": "mp2", "name": "map1"}, - {"copy_attributes": True, "exist_map_name": "mp3", "name": "map2"}, + { + "copy_attributes": True, + "exist_map_name": "mp2", + "name": "map1", + }, + { + "copy_attributes": True, + "exist_map_name": "mp3", + "name": "map2", + }, ], "listen": { "limit": 200, - "range": {"host_with_subnet": "192.0.2.9/24", "peer_group": "mygrp"}, + "range": { + "host_with_subnet": "192.0.2.9/24", + "peer_group": "mygrp", + }, }, "log_neighbor_changes": True, "maxas_limit": 2, @@ -132,8 +152,16 @@ class TestIosBgpGlobalModule(TestIosModule): }, "bmp": {"buffer_size": 22}, "distance": { - "bgp": {"routes_external": 2, "routes_internal": 3, "routes_local": 4}, - "mbgp": {"routes_external": 2, "routes_internal": 3, "routes_local": 5}, + "bgp": { + "routes_external": 2, + "routes_internal": 3, + "routes_local": 4, + }, + "mbgp": { + "routes_external": 2, + "routes_internal": 3, + "routes_local": 5, + }, }, "distributes": [ {"out": True, "prefix": "workcheck"}, @@ -141,6 +169,7 @@ class TestIosBgpGlobalModule(TestIosModule): ], "maximum_paths": {"ibgp": 22}, "maximum_secondary_paths": {"ibgp": 22, "paths": 12}, + "template": {"peer_policy": "Test1"}, "neighbors": [ { "neighbor_address": "192.0.2.3", @@ -165,7 +194,13 @@ class TestIosBgpGlobalModule(TestIosModule): ], "redistribute": [ {"application": {"metric": 22, "name": "ap1"}}, - {"application": {"metric": 33, "name": "ap112", "route_map": "mp1"}}, + { + "application": { + "metric": 33, + "name": "ap112", + "route_map": "mp1", + }, + }, {"connected": {"metric": 22}}, {"static": {"metric": 33, "route_map": "mp1"}}, {"mobile": {"metric": 211}}, @@ -232,6 +267,7 @@ class TestIosBgpGlobalModule(TestIosModule): "neighbor 192.0.2.3 remote-as 300", "neighbor 192.0.2.3 timers 10 20", "redistribute connected metric 22", + "template peer-policy Test1", "redistribute mobile metric 211", "redistribute application ap1 metric 22", "redistribute static metric 33 route-map mp1", @@ -347,11 +383,23 @@ class TestIosBgpGlobalModule(TestIosModule): config=dict( as_number="65000", aggregate_address=dict( - dict(address="192.168.0.11", attribute_map="map1", netmask="255.255.0.0"), + dict( + address="192.168.0.11", + attribute_map="map1", + netmask="255.255.0.0", + ), ), aggregate_addresses=[ - dict(address="192.168.0.1", attribute_map="map", netmask="255.255.0.0"), - dict(address="192.168.0.2", attribute_map="map2", netmask="255.255.0.0"), + dict( + address="192.168.0.1", + attribute_map="map", + netmask="255.255.0.0", + ), + dict( + address="192.168.0.2", + attribute_map="map2", + netmask="255.255.0.0", + ), ], bgp=dict( advertise_best_external=True, @@ -361,7 +409,11 @@ class TestIosBgpGlobalModule(TestIosModule): ), redistribute=[dict(connected=dict(set=True, metric=10))], neighbors=[ - dict(address="192.0.2.1", remote_as=200, description="replace neighbor"), + dict( + address="192.0.2.1", + remote_as=200, + description="replace neighbor", + ), ], ), state="overridden", @@ -403,21 +455,41 @@ class TestIosBgpGlobalModule(TestIosModule): config=dict( as_number="65000", aggregate_address=dict( - dict(address="192.168.0.11", attribute_map="map1", netmask="255.255.0.0"), + dict( + address="192.168.0.11", + attribute_map="map1", + netmask="255.255.0.0", + ), ), aggregate_addresses=[ - dict(address="192.168.0.1", attribute_map="map", netmask="255.255.0.0"), - dict(address="192.168.0.2", attribute_map="map2", netmask="255.255.0.0"), + dict( + address="192.168.0.1", + attribute_map="map", + netmask="255.255.0.0", + ), + dict( + address="192.168.0.2", + attribute_map="map2", + netmask="255.255.0.0", + ), ], bgp=dict( advertise_best_external=True, bestpath_options=dict(compare_routerid=True), + default=dict( + ipv4_unicast=False, + route_target=dict(filter=True), + ), log_neighbor_changes=True, nopeerup_delay_options=dict(cold_boot=20, post_boot=10), ), redistribute=[dict(connected=dict(set=True, metric=10))], neighbors=[ - dict(address="192.0.2.1", remote_as=200, description="replace neighbor"), + dict( + address="192.0.2.1", + remote_as=200, + description="replace neighbor", + ), ], ), state="replaced", @@ -425,6 +497,7 @@ class TestIosBgpGlobalModule(TestIosModule): ) commands = [ "router bgp 65000", + "no bgp default ipv4-unicast", "no timers bgp 100 200 150", "bgp log-neighbor-changes", "bgp nopeerup-delay cold-boot 20", @@ -481,6 +554,7 @@ class TestIosBgpGlobalModule(TestIosModule): self.execute_show_command.return_value = dedent( """\ router bgp 65000 + no bgp default ipv4-unicast bgp nopeerup-delay post-boot 10 bgp bestpath compare-routerid bgp advertise-best-external @@ -496,6 +570,7 @@ class TestIosBgpGlobalModule(TestIosModule): set_module_args(dict(config=dict(as_number=65000), state="deleted")) commands = [ "router bgp 65000", + "bgp default ipv4-unicast", "no timers bgp 100 200 150", "no bgp advertise-best-external", "no bgp bestpath compare-routerid", @@ -561,7 +636,10 @@ class TestIosBgpGlobalModule(TestIosModule): }, "listen": { "limit": 200, - "range": {"ipv4_with_subnet": "192.0.2.9/24", "peer_group": "mygrp"}, + "range": { + "ipv4_with_subnet": "192.0.2.9/24", + "peer_group": "mygrp", + }, }, "log_neighbor_changes": True, "nopeerup_delay": [ @@ -575,10 +653,22 @@ class TestIosBgpGlobalModule(TestIosModule): }, "bmp": {"buffer_size": 22, "server": 2}, "distance": { - "bgp": {"routes_external": 2, "routes_internal": 3, "routes_local": 4}, - "mbgp": {"routes_external": 2, "routes_internal": 3, "routes_local": 5}, + "bgp": { + "routes_external": 2, + "routes_internal": 3, + "routes_local": 4, + }, + "mbgp": { + "routes_external": 2, + "routes_internal": 3, + "routes_local": 5, + }, + }, + "distribute_list": { + "out": True, + "acl": "5000", + "interface": "Loopback0", }, - "distribute_list": {"out": True, "acl": "5000", "interface": "Loopback0"}, "maximum_paths": {"ibgp": 2, "paths": 2}, "maximum_secondary_paths": {"ibgp": 22, "paths": 22}, "neighbors": [ @@ -613,7 +703,11 @@ class TestIosBgpGlobalModule(TestIosModule): "send_community": {"extended": True}, "password": "new password", }, - {"activate": True, "neighbor_address": "172.21.1.2", "remote_as": 45000}, + { + "activate": True, + "neighbor_address": "172.21.1.2", + "remote_as": 45000, + }, {"neighbor_address": "192.0.2.3", "remote_as": 300}, { "neighbor_address": "192.0.2.4", @@ -655,7 +749,13 @@ class TestIosBgpGlobalModule(TestIosModule): "redistribute": [ {"static": {"metric": 33, "route_map": "mp1"}}, {"application": {"metric": 22, "name": "ap1"}}, - {"application": {"metric": 33, "name": "ap112", "route_map": "mp1"}}, + { + "application": { + "metric": 33, + "name": "ap112", + "route_map": "mp1", + }, + }, {"connected": {"metric": 22}}, {"mobile": {"metric": 211}}, ], @@ -751,6 +851,7 @@ class TestIosBgpGlobalModule(TestIosModule): "bgp": { "nopeerup_delay_options": {"post_boot": 10}, "bestpath_options": {"compare_routerid": True}, + "default": {"ipv4_unicast": True, "route_target": {"filter": True}}, "advertise_best_external": True, }, "timers": {"keepalive": 100, "holdtime": 200, "min_holdtime": 150}, @@ -764,3 +865,136 @@ class TestIosBgpGlobalModule(TestIosModule): ], } self.assertEqual(parsed_list, result["parsed"]) + + def test_ios_bgp_global_action_states_specific_default(self): + self.execute_show_command.return_value = dedent( + """\ + router bgp 6500 + bgp log-neighbor-changes + no bgp default ipv4-unicast + no bgp default route-target filter + neighbor 192.0.2.1 remote-as 100 + neighbor 192.0.2.1 description Test description + neighbor 192.0.2.2 remote-as 200 + neighbor 192.0.2.2 description Test description 2 + neighbor 192.0.2.2 shutdown + ! + address-family ipv4 + exit-address-family + """, + ) + for stt in ["merged", "replaced", "overridden"]: + set_module_args( + { + "config": { + "as_number": "6500", + "bgp": { + "default": { + "ipv4_unicast": False, + "route_target": { + "filter": False, + }, + }, + "log_neighbor_changes": True, + }, + "neighbors": [ + { + "neighbor_address": "192.0.2.1", + "remote_as": "100", + "description": "Test description", + "shutdown": { # Don't have in config, adding + "set": True, + }, + }, + { + "neighbor_address": "192.0.2.2", + "remote_as": "200", + "description": "Test description 2", + "shutdown": { # Have in config negating with false + "set": False, + }, + }, + ], + }, + "state": stt, + }, + ) + commands = [ + "router bgp 6500", + "neighbor 192.0.2.1 shutdown", + "no neighbor 192.0.2.2 shutdown", + ] + result = self.execute_module(changed=True) + self.assertEqual(sorted(result["commands"]), sorted(commands)) + + def test_ios_bgp_global_action_states_no_default(self): + self.execute_show_command.return_value = dedent( + """\ + router bgp 6500 + bgp log-neighbor-changes + no bgp default ipv4-unicast + no bgp default route-target filter + neighbor 192.0.2.1 remote-as 100 + neighbor 192.0.2.1 description Test description + neighbor 192.0.2.1 shutdown + neighbor 192.0.2.2 remote-as 200 + neighbor 192.0.2.2 description Test description 2 + neighbor 192.0.2.2 shutdown + neighbor 192.0.2.3 remote-as 300 + neighbor 192.0.2.3 description Test description 3 + neighbor 192.0.2.4 remote-as 400 + neighbor 192.0.2.4 description Test description 4 + ! + address-family ipv4 + exit-address-family + """, + ) + for stt in ["replaced", "overridden"]: + set_module_args( + { + "config": { + "as_number": "6500", + "bgp": { + "default": { + "ipv4_unicast": False, + "route_target": { + "filter": False, + }, + }, + "log_neighbor_changes": True, + }, + "neighbors": [ + { + "neighbor_address": "192.0.2.1", + "remote_as": "100", + "description": "Test description", + "shutdown": { # Have in config not adding again (idempotent) + "set": True, + }, + }, + { + "neighbor_address": "192.0.2.2", + "remote_as": "200", + "description": "Test description 2", # Have in config but don't want (to be removed) + }, + { + "neighbor_address": "192.0.2.3", + "remote_as": "300", + "description": "Test description 3", # Don't have in config don't want + }, + { + "neighbor_address": "192.0.2.4", + "remote_as": "400", + "description": "Test description 4", + "shutdown": { # Don't have in config, explicitly don't want + "set": False, + }, + }, + ], + }, + "state": stt, + }, + ) + commands = ["router bgp 6500", "no neighbor 192.0.2.2 shutdown"] + result = self.execute_module(changed=True) + self.assertEqual(sorted(result["commands"]), sorted(commands)) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_command.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_command.py index 42fee4028..69788ef3e 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_command.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_command.py @@ -20,11 +20,11 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - import json +from unittest.mock import patch + from ansible_collections.cisco.ios.plugins.modules import ios_command -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -97,17 +97,26 @@ class TestIosCommandModule(TestIosModule): self.assertEqual(self.run_commands.call_count, 1) def test_ios_command_match_any(self): - wait_for = ['result[0] contains "Cisco IOS"', 'result[0] contains "test string"'] + wait_for = [ + 'result[0] contains "Cisco IOS"', + 'result[0] contains "test string"', + ] set_module_args(dict(commands=["show version"], wait_for=wait_for, match="any")) self.execute_module() def test_ios_command_match_all(self): - wait_for = ['result[0] contains "Cisco IOS"', 'result[0] contains "IOSv Software"'] + wait_for = [ + 'result[0] contains "Cisco IOS"', + 'result[0] contains "IOSv Software"', + ] set_module_args(dict(commands=["show version"], wait_for=wait_for, match="all")) self.execute_module() def test_ios_command_match_all_failure(self): - wait_for = ['result[0] contains "Cisco IOS"', 'result[0] contains "test string"'] + wait_for = [ + 'result[0] contains "Cisco IOS"', + 'result[0] contains "test string"', + ] commands = ["show version", "show version"] set_module_args(dict(commands=commands, wait_for=wait_for, match="all")) self.execute_module(failed=True) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_config.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_config.py index 778bb1ccb..7fa3931d0 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_config.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_config.py @@ -21,10 +21,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import MagicMock, patch from ansible_collections.cisco.ios.plugins.cliconf.ios import Cliconf from ansible_collections.cisco.ios.plugins.modules import ios_config -from ansible_collections.cisco.ios.tests.unit.compat.mock import MagicMock, patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -123,7 +123,10 @@ class TestIosConfigModule(TestIosModule): lines = ["hostname foo"] set_module_args(dict(lines=lines)) self.conn.get_diff = MagicMock( - return_value=self.cliconf_obj.get_diff("\n".join(lines), self.running_config), + return_value=self.cliconf_obj.get_diff( + "\n".join(lines), + self.running_config, + ), ) commands = ["hostname foo"] self.execute_module(changed=True, commands=commands) @@ -137,7 +140,10 @@ class TestIosConfigModule(TestIosModule): candidate_config = ios_config.get_candidate_config(module) self.conn.get_diff = MagicMock( - return_value=self.cliconf_obj.get_diff(candidate_config, self.running_config), + return_value=self.cliconf_obj.get_diff( + candidate_config, + self.running_config, + ), ) commands = ["interface GigabitEthernet0/0", "shutdown"] @@ -147,7 +153,10 @@ class TestIosConfigModule(TestIosModule): lines = ["hostname foo"] set_module_args(dict(lines=lines, before=["test1", "test2"])) self.conn.get_diff = MagicMock( - return_value=self.cliconf_obj.get_diff("\n".join(lines), self.running_config), + return_value=self.cliconf_obj.get_diff( + "\n".join(lines), + self.running_config, + ), ) commands = ["test1", "test2", "hostname foo"] self.execute_module(changed=True, commands=commands, sort=False) @@ -156,16 +165,24 @@ class TestIosConfigModule(TestIosModule): lines = ["hostname foo"] set_module_args(dict(lines=lines, after=["test1", "test2"])) self.conn.get_diff = MagicMock( - return_value=self.cliconf_obj.get_diff("\n".join(lines), self.running_config), + return_value=self.cliconf_obj.get_diff( + "\n".join(lines), + self.running_config, + ), ) commands = ["hostname foo", "test1", "test2"] self.execute_module(changed=True, commands=commands, sort=False) def test_ios_config_before_after_no_change(self): lines = ["hostname router"] - set_module_args(dict(lines=lines, before=["test1", "test2"], after=["test3", "test4"])) + set_module_args( + dict(lines=lines, before=["test1", "test2"], after=["test3", "test4"]), + ) self.conn.get_diff = MagicMock( - return_value=self.cliconf_obj.get_diff("\n".join(lines), self.running_config), + return_value=self.cliconf_obj.get_diff( + "\n".join(lines), + self.running_config, + ), ) self.execute_module() @@ -242,7 +259,11 @@ class TestIosConfigModule(TestIosModule): self.execute_module(changed=True, commands=commands, sort=False) def test_ios_config_match_strict(self): - lines = ["ip address 1.2.3.4 255.255.255.0", "description test string", "shutdown"] + lines = [ + "ip address 1.2.3.4 255.255.255.0", + "description test string", + "shutdown", + ] parents = ["interface GigabitEthernet0/0"] set_module_args(dict(lines=lines, parents=parents, match="strict")) @@ -262,7 +283,11 @@ class TestIosConfigModule(TestIosModule): self.execute_module(changed=True, commands=commands, sort=False) def test_ios_config_match_exact(self): - lines = ["ip address 1.2.3.4 255.255.255.0", "description test string", "shutdown"] + lines = [ + "ip address 1.2.3.4 255.255.255.0", + "description test string", + "shutdown", + ] parents = ["interface GigabitEthernet0/0"] set_module_args(dict(lines=lines, parents=parents, match="exact")) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_evi.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_evi.py index 94008b0aa..e1178a21f 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_evi.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_evi.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_evpn_evi -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_global.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_global.py index d3bfa1585..76f467411 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_global.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_global.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_evpn_global -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_facts.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_facts.py index a99d7f011..4878d4ad7 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_facts.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_facts.py @@ -19,11 +19,11 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible.module_utils.six import assertCountEqual from ansible_collections.cisco.ios.plugins.modules import ios_facts -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -80,8 +80,14 @@ class TestIosFactsModule(TestIosModule): set_module_args(dict(gather_subset="default")) result = self.execute_module() self.assertEqual(result["ansible_facts"]["ansible_net_model"], "WS-C3750-24TS") - self.assertEqual(result["ansible_facts"]["ansible_net_serialnum"], "CAT0726R0ZU") - self.assertEqual(result["ansible_facts"]["ansible_net_operatingmode"], "autonomous") + self.assertEqual( + result["ansible_facts"]["ansible_net_serialnum"], + "CAT0726R0ZU", + ) + self.assertEqual( + result["ansible_facts"]["ansible_net_operatingmode"], + "autonomous", + ) self.assertEqual( result["ansible_facts"]["ansible_net_stacked_models"], ["WS-C3750-24TS-E", "WS-C3750-24TS-E", "WS-C3750G-12S-E"], @@ -95,9 +101,15 @@ class TestIosFactsModule(TestIosModule): set_module_args(dict(gather_subset="interfaces")) result = self.execute_module() self.assertEqual( - result["ansible_facts"]["ansible_net_interfaces"]["GigabitEthernet0/0"]["macaddress"], + result["ansible_facts"]["ansible_net_interfaces"]["GigabitEthernet0/0/0.1012"][ + "macaddress" + ], "5e00.0003.0000", ) + self.assertEqual( + result["ansible_facts"]["ansible_net_interfaces"]["GigabitEthernet0/0"]["macaddress"], + "5e00.0008.0000", + ) self.assertEqual( result["ansible_facts"]["ansible_net_interfaces"]["GigabitEthernet1"]["macaddress"], "5e00.0006.0000", diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_hostname.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_hostname.py index 6b16bddf0..359cf562a 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_hostname.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_hostname.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_hostname -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_interfaces.py index caac40ccb..63ee2341b 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -150,7 +149,10 @@ class TestIosInterfacesModule(TestIosModule): set_module_args( { "config": [ - {"description": "Ansible UT interface 1", "name": "GigabitEthernet1"}, + { + "description": "Ansible UT interface 1", + "name": "GigabitEthernet1", + }, { "description": "Ansible UT interface 2", "name": "GigabitEthernet0/1", @@ -204,7 +206,10 @@ class TestIosInterfacesModule(TestIosModule): set_module_args( { "config": [ - {"description": "Ansible UT interface 1", "name": "GigabitEthernet1"}, + { + "description": "Ansible UT interface 1", + "name": "GigabitEthernet1", + }, {"name": "GigabitEthernet0/1", "speed": 1200, "mtu": 1800}, { "name": "GigabitEthernet6", @@ -267,7 +272,10 @@ class TestIosInterfacesModule(TestIosModule): set_module_args( { "config": [ - {"description": "Ansible UT interface 1", "name": "GigabitEthernet1"}, + { + "description": "Ansible UT interface 1", + "name": "GigabitEthernet1", + }, { "description": "Ansible UT interface 2", "name": "GigabitEthernet0/1", @@ -570,14 +578,22 @@ class TestIosInterfacesModule(TestIosModule): "mtu": 1500, "enabled": True, }, - {"name": "GigabitEthernet1", "description": "Ansible UT interface 1", "enabled": True}, + { + "name": "GigabitEthernet1", + "description": "Ansible UT interface 1", + "enabled": True, + }, { "name": "GigabitEthernet3", "description": "Ansible UT interface 3", "enabled": False, "duplex": "auto", }, - {"name": "GigabitEthernet4", "description": "Ansible UT interface 4", "enabled": False}, + { + "name": "GigabitEthernet4", + "description": "Ansible UT interface 4", + "enabled": False, + }, { "name": "GigabitEthernet5", "description": "Ansible UT interface 5", diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l2_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l2_interfaces.py index d9ec2b189..e84846aeb 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l2_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l2_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_l2_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -136,7 +135,11 @@ class TestIosL2InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(access=dict(vlan=10), mode="access", name="GigabitEthernet0/1"), + dict( + access=dict(vlan=10), + mode="access", + name="GigabitEthernet0/1", + ), dict( mode="trunk", name="GigabitEthernet0/2", @@ -270,7 +273,11 @@ class TestIosL2InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(access=dict(vlan=10), mode="access", name="GigabitEthernet0/1"), + dict( + access=dict(vlan=10), + mode="access", + name="GigabitEthernet0/1", + ), dict( mode="trunk", name="GigabitEthernet0/2", @@ -281,7 +288,11 @@ class TestIosL2InterfacesModule(TestIosModule): pruning_vlans=["10", "20"], ), ), - dict(access=dict(vlan=20), mode="access", name="TwoGigabitEthernet1/0/1"), + dict( + access=dict(vlan=20), + mode="access", + name="TwoGigabitEthernet1/0/1", + ), dict( mode="trunk", name="GigabitEthernet0/3", @@ -416,7 +427,11 @@ class TestIosL2InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(access=dict(vlan=10), mode="access", name="GigabitEthernet0/1"), + dict( + access=dict(vlan=10), + mode="access", + name="GigabitEthernet0/1", + ), dict( mode="trunk", name="GigabitEthernet0/2", @@ -427,7 +442,11 @@ class TestIosL2InterfacesModule(TestIosModule): pruning_vlans=["10", "20"], ), ), - dict(access=dict(vlan=20), mode="access", name="TwoGigabitEthernet1/0/1"), + dict( + access=dict(vlan=20), + mode="access", + name="TwoGigabitEthernet1/0/1", + ), dict( mode="trunk", name="GigabitEthernet0/3", @@ -592,7 +611,11 @@ class TestIosL2InterfacesModule(TestIosModule): }, "mode": "trunk", }, - {"name": "TwoGigabitEthernet1/0/1", "mode": "access", "access": {"vlan": 20}}, + { + "name": "TwoGigabitEthernet1/0/1", + "mode": "access", + "access": {"vlan": 20}, + }, { "name": "GigabitEthernet0/3", "trunk": { @@ -695,7 +718,13 @@ class TestIosL2InterfacesModule(TestIosModule): ) set_module_args( dict( - config=[dict(access=dict(vlan=20), mode="trunk", name="TwoGigabitEthernet1/0/1")], + config=[ + dict( + access=dict(vlan=20), + mode="trunk", + name="TwoGigabitEthernet1/0/1", + ), + ], state="merged", ), ) @@ -731,7 +760,11 @@ class TestIosL2InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(access=dict(vlan=20), mode="trunk", name="FiveGigabitEthernet1/0/1"), + dict( + access=dict(vlan=20), + mode="trunk", + name="FiveGigabitEthernet1/0/1", + ), dict( access=dict(vlan_name="vlan12"), mode="trunk", diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l3_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l3_interfaces.py index de9442b59..3e3cc038b 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l3_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l3_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_l3_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -46,6 +45,9 @@ class TestIosL3InterfacesModule(TestIosModule): interface GigabitEthernet0/3.100 encapsulation dot1Q 20 ip address 192.168.0.3 255.255.255.0 + interface VirtualPortGroup0 + ip address 192.168.0.4 255.255.255.0 + ipv6 address fe80:0:3a2:84::3 link-local interface Serial3/0 ipv6 address fd5d:12c9:2201:1::1/64 interface Serial7/0 @@ -58,7 +60,20 @@ class TestIosL3InterfacesModule(TestIosModule): name="GigabitEthernet0/3.100", ipv4=[dict(address="192.168.0.3/24", secondary=True)], ), - dict(name="Serial3/0", ipv6=[dict(address="FD5D:12C9:2201:1::1/64", cga=True)]), + dict( + name="Serial3/0", + ipv6=[dict(address="FD5D:12C9:2201:1::1/64", cga=True)], + ), + dict( + name="VirtualPortGroup0", + ipv4=[dict(address="192.168.0.4/24", secondary=True)], + ipv6=[ + dict( + address="fe80:0:3a2:84::3", + link_local=True, + ), + ], + ), ], state="merged", ), @@ -94,7 +109,10 @@ class TestIosL3InterfacesModule(TestIosModule): name="GigabitEthernet0/1", ipv4=[dict(address="192.168.0.1/24", secondary=True)], ), - dict(name="GigabitEthernet0/2", ipv4=[dict(address="192.168.0.2/24")]), + dict( + name="GigabitEthernet0/2", + ipv4=[dict(address="192.168.0.2/24")], + ), dict(name="Serial1/0", ipv4=[dict(address="192.168.0.3/24")]), ], state="overridden", @@ -171,13 +189,19 @@ class TestIosL3InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(name="GigabitEthernet0/3", ipv6=[dict(address="FD5D:12C9:2202:1::1/64")]), + dict( + name="GigabitEthernet0/3", + ipv6=[dict(address="FD5D:12C9:2202:1::1/64")], + ), dict( name="GigabitEthernet0/2", ipv4=[dict(address="192.168.0.2/24", secondary=False)], ), dict(name="Serial1/0", ipv4=[dict(address="192.168.0.5/24")]), - dict(name="GigabitEthernet0/3.100", ipv4=[dict(address="192.168.0.4/24")]), + dict( + name="GigabitEthernet0/3.100", + ipv4=[dict(address="192.168.0.4/24")], + ), ], state="replaced", ), @@ -206,7 +230,9 @@ class TestIosL3InterfacesModule(TestIosModule): ), ) result = self.execute_module(changed=False) - parsed_list = [{"name": "GigabitEthernet0/3.100", "ipv4": [{"address": "192.168.0.3/24"}]}] + parsed_list = [ + {"name": "GigabitEthernet0/3.100", "ipv4": [{"address": "192.168.0.3/24"}]}, + ] self.assertEqual(parsed_list, result["parsed"]) def test_ios_l3_interfaces_rendered(self): @@ -279,6 +305,8 @@ class TestIosL3InterfacesModule(TestIosModule): ip address 192.168.0.3 255.255.255.0 interface Serial1/0 description Configured by PAUL + interface Vlan901 + ip unnumbered Loopback2 """, ) set_module_args( @@ -286,7 +314,14 @@ class TestIosL3InterfacesModule(TestIosModule): config=[ dict( name="GigabitEthernet0/1", - ipv4=[dict(dhcp=dict(client_id="GigabitEthernet0/2", hostname="test.com"))], + ipv4=[ + dict( + dhcp=dict( + client_id="GigabitEthernet0/2", + hostname="test.com", + ), + ), + ], ), dict(name="GigabitEthernet0/2", ipv4=[dict(pool="PoolName1")]), dict(name="Serial1/0", ipv6=[dict(autoconfig=dict(default=True))]), @@ -296,8 +331,14 @@ class TestIosL3InterfacesModule(TestIosModule): ipv6=[dict(address="FD5D:12C9:2201:1::1/64", anycast=True)], ), dict(name="Vlan51", ipv4=[dict(address="192.168.0.4/31")]), - dict(name="Serial4/0", ipv6=[dict(address="FD5D:12C9:2201:2::1/64", cga=True)]), - dict(name="Serial5/0", ipv6=[dict(address="FD5D:12C9:2201:3::1/64", eui=True)]), + dict( + name="Serial4/0", + ipv6=[dict(address="FD5D:12C9:2201:2::1/64", cga=True)], + ), + dict( + name="Serial5/0", + ipv6=[dict(address="FD5D:12C9:2201:3::1/64", eui=True)], + ), dict( name="Serial6/0", ipv6=[dict(address="FD5D:12C9:2201:4::1/64", link_local=True)], @@ -320,6 +361,20 @@ class TestIosL3InterfacesModule(TestIosModule): ), ], ), + dict( + autostate=False, + name="Vlan901", + ipv6=[ + dict( + enable=True, + ), + ], + ipv4=[ + dict( + source_interface=dict(name="Loopback1"), + ), + ], + ), ], state="merged", ), @@ -347,6 +402,10 @@ class TestIosL3InterfacesModule(TestIosModule): "ipv6 address fd5d:12c9:2201:3::1/64 eui", "interface Vlan51", "ip address 192.168.0.4 255.255.255.254", + "interface Vlan901", + "ip unnumbered Loopback1", + "ipv6 enable", + "no autostate", ] result = self.execute_module(changed=True) @@ -381,16 +440,32 @@ class TestIosL3InterfacesModule(TestIosModule): config=[ dict( name="GigabitEthernet0/1", - ipv4=[dict(dhcp=dict(client_id="GigabitEthernet0/2", hostname="test.com"))], + ipv4=[ + dict( + dhcp=dict( + client_id="GigabitEthernet0/2", + hostname="test.com", + ), + ), + ], + ), + dict( + name="GigabitEthernet0/3.100", + ipv4=[dict(address="192.168.0.3/24")], ), - dict(name="GigabitEthernet0/3.100", ipv4=[dict(address="192.168.0.3/24")]), dict(name="Serial2/0", ipv6=[dict(dhcp=dict(rapid_commit=True))]), dict( name="Serial3/0", ipv6=[dict(address="FD5D:12C9:2201:1::1/64", anycast=True)], ), - dict(name="Serial4/0", ipv6=[dict(address="FD5D:12C9:2201:2::1/64", cga=True)]), - dict(name="Serial5/0", ipv6=[dict(address="FD5D:12C9:2201:3::1/64", eui=True)]), + dict( + name="Serial4/0", + ipv6=[dict(address="FD5D:12C9:2201:2::1/64", cga=True)], + ), + dict( + name="Serial5/0", + ipv6=[dict(address="FD5D:12C9:2201:3::1/64", eui=True)], + ), dict( name="Serial6/0", ipv6=[dict(address="FD5D:12C9:2201:4::1/64", link_local=True)], @@ -433,7 +508,10 @@ class TestIosL3InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(name="GigabitEthernet0/3.100", ipv4=[dict(address="192.168.1.3/24")]), + dict( + name="GigabitEthernet0/3.100", + ipv4=[dict(address="192.168.1.3/24")], + ), ], state="replaced", ), diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp.py index 6c56406e6..f4460162a 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_lacp -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp_interfaces.py index f58aa9d65..817c6869c 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_lacp_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -83,7 +82,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"name": "Port-channel10", "fast_switchover": True, "max_bundle": 12}, + { + "name": "Port-channel10", + "fast_switchover": True, + "max_bundle": 12, + }, {"name": "Port-channel40", "max_bundle": 5}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 20}, @@ -121,7 +124,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"name": "Port-channel10", "fast_switchover": True, "max_bundle": 2}, + { + "name": "Port-channel10", + "fast_switchover": True, + "max_bundle": 2, + }, {"name": "Port-channel40", "max_bundle": 5}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 30}, @@ -150,7 +157,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"name": "Port-channel10", "fast_switchover": True, "max_bundle": 12}, + { + "name": "Port-channel10", + "fast_switchover": True, + "max_bundle": 12, + }, {"name": "Port-channel40", "max_bundle": 5}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 20}, @@ -188,7 +199,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"name": "Port-channel10", "fast_switchover": True, "max_bundle": 12}, + { + "name": "Port-channel10", + "fast_switchover": True, + "max_bundle": 12, + }, {"name": "Port-channel40", "max_bundle": 5}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 20}, @@ -226,7 +241,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"name": "Port-channel10", "fast_switchover": True, "max_bundle": 12}, + { + "name": "Port-channel10", + "fast_switchover": True, + "max_bundle": 12, + }, {"name": "Port-channel40", "max_bundle": 5}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 20}, @@ -287,7 +306,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"fast_switchover": True, "max_bundle": 2, "name": "Port-channel10"}, + { + "fast_switchover": True, + "max_bundle": 2, + "name": "Port-channel10", + }, {"max_bundle": 5, "name": "Port-channel40"}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 30}, diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lag_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lag_interfaces.py index 1f97bef24..71d6ff933 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lag_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lag_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_lag_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -73,7 +72,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "passive"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -120,7 +123,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "active"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -164,7 +171,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/1", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "on"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -219,7 +230,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "active"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -259,7 +274,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "active"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -314,7 +333,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "active"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -459,7 +482,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "active"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_global.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_global.py index 4c54ef5c9..2c5eb1c40 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_global.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_global.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_lldp_global -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -154,7 +153,12 @@ class TestIosLldpGlobalModule(TestIosModule): state="deleted", ), ) - commands = ["no lldp holdtime", "no lldp run", "no lldp timer", "no lldp reinit"] + commands = [ + "no lldp holdtime", + "no lldp run", + "no lldp timer", + "no lldp reinit", + ] result = self.execute_module(changed=True) self.assertEqual(result["commands"], commands) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_inteface.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_inteface.py index a3dfe9706..04a25993a 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_inteface.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_inteface.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_lldp_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -241,7 +240,10 @@ class TestIosLldpInterfacesModule(TestIosModule): ) set_module_args( dict( - config=[dict(name="GigabitEthernet0/2"), dict(name="GigabitEthernet0/1")], + config=[ + dict(name="GigabitEthernet0/2"), + dict(name="GigabitEthernet0/1"), + ], state="deleted", ), ) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_logging_global.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_logging_global.py index c3024636a..f1b3eada3 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_logging_global.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_logging_global.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_logging_global -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -120,7 +119,10 @@ class TestIosLoggingGlobalModule(TestIosModule): reload=dict(severity="alerts"), server_arp=True, snmp_trap=["errors"], - source_interface=[dict(interface="GBit1/0"), dict(interface="CTunnel2")], + source_interface=[ + dict(interface="GBit1/0"), + dict(interface="CTunnel2"), + ], trap="errors", userinfo=True, ), @@ -250,7 +252,10 @@ class TestIosLoggingGlobalModule(TestIosModule): ], message_counter=["log", "debug"], snmp_trap=["errors"], - source_interface=[dict(interface="GBit1/0"), dict(interface="CTunnel2")], + source_interface=[ + dict(interface="GBit1/0"), + dict(interface="CTunnel2"), + ], ), ) deleted = [ @@ -317,7 +322,10 @@ class TestIosLoggingGlobalModule(TestIosModule): ], message_counter=["log", "debug"], snmp_trap=["errors"], - source_interface=[dict(interface="GBit1/0"), dict(interface="CTunnel2")], + source_interface=[ + dict(interface="GBit1/0"), + dict(interface="CTunnel2"), + ], ), ) overridden = [ @@ -402,9 +410,16 @@ class TestIosLoggingGlobalModule(TestIosModule): ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7304", discriminator="msglog01 severity includes 5", ), - dict(ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7314", sequence_num_session=True), + dict( + ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7314", + sequence_num_session=True, + ), dict(ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7324", vrf="vpn1"), - dict(ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7334", stream=10, filtered=True), + dict( + ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7334", + stream=10, + filtered=True, + ), dict( ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7344", session_id=dict(tag="ipv4"), @@ -416,7 +431,9 @@ class TestIosLoggingGlobalModule(TestIosModule): dict( ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7374", vrf="Apn2", - transport=dict(udp=dict(discriminator="msglog01 severity includes 5")), + transport=dict( + udp=dict(discriminator="msglog01 severity includes 5"), + ), ), dict( ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7384", @@ -509,7 +526,13 @@ class TestIosLoggingGlobalModule(TestIosModule): ) set_module_args(dict(state="gathered")) gathered = dict( - hosts=[dict(hostname="172.16.1.1", vrf="vpn-1", transport=dict(tcp=dict(audit=True)))], + hosts=[ + dict( + hostname="172.16.1.1", + vrf="vpn-1", + transport=dict(tcp=dict(audit=True)), + ), + ], ) result = self.execute_module(changed=False) @@ -617,9 +640,14 @@ class TestIosLoggingGlobalModule(TestIosModule): """, ) playbook = dict( - config=dict(hosts=[dict(hostname="172.16.2.15", session_id=dict(text="Test"))]), + config=dict( + hosts=[dict(hostname="172.16.2.15", session_id=dict(text="Test"))], + ), ) - replaced = ["no logging host 172.16.1.1", "logging host 172.16.2.15 session-id string Test"] + replaced = [ + "no logging host 172.16.1.1", + "logging host 172.16.2.15 session-id string Test", + ] playbook["state"] = "replaced" set_module_args(playbook) result = self.execute_module(changed=True) @@ -651,8 +679,14 @@ class TestIosLoggingGlobalModule(TestIosModule): {"hostname": "172.16.0.4", "vrf": "Mgmt-intf"}, ], "origin_id": {"tag": "hostname"}, - "rate_limit": {"console": True, "except_severity": "errors", "size": 10}, - "source_interface": [{"interface": "GigabitEthernet0", "vrf": "Mgmt-intf"}], + "rate_limit": { + "console": True, + "except_severity": "errors", + "size": 10, + }, + "source_interface": [ + {"interface": "GigabitEthernet0", "vrf": "Mgmt-intf"}, + ], "trap": "informational", }, } diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp.py deleted file mode 100644 index 3e73fdfd4..000000000 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp.py +++ /dev/null @@ -1,110 +0,0 @@ -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -from ansible_collections.cisco.ios.plugins.modules import ios_ntp -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch -from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args - -from .ios_module import TestIosModule, load_fixture - - -class TestIosNtpModule(TestIosModule): - module = ios_ntp - - def setUp(self): - super(TestIosNtpModule, self).setUp() - - self.mock_get_config = patch( - "ansible_collections.cisco.ios.plugins.modules.ios_ntp.get_config", - ) - self.get_config = self.mock_get_config.start() - - self.mock_load_config = patch( - "ansible_collections.cisco.ios.plugins.modules.ios_ntp.load_config", - ) - self.load_config = self.mock_load_config.start() - - def tearDown(self): - super(TestIosNtpModule, self).tearDown() - self.mock_get_config.stop() - self.mock_load_config.stop() - - def load_fixtures(self, commands=None): - self.get_config.return_value = load_fixture("ios_ntp_config.cfg").strip() - self.load_config.return_value = dict(diff=None, session="session") - - def test_ios_ntp_idempotent(self): - set_module_args( - dict( - server="10.75.32.5", - source_int="Loopback0", - acl="NTP_ACL", - logging=True, - auth=True, - auth_key="15435A030726242723273C21181319000A", - key_id="10", - vrf="my_mgmt_vrf", - state="present", - ), - ) - commands = [] - self.execute_module(changed=False, commands=commands) - - def test_ios_ntp_config(self): - set_module_args( - dict( - server="10.75.33.5", - source_int="Vlan2", - acl="NTP_ACL", - logging=True, - auth=True, - auth_key="15435A030726242723273C21181319000A", - key_id="10", - state="present", - ), - ) - commands = ["ntp server 10.75.33.5", "ntp source Vlan2"] - self.execute_module(changed=True, commands=commands) - - def test_ios_ntp_remove(self): - set_module_args( - dict( - server="10.75.32.5", - source_int="Loopback0", - acl="NTP_ACL", - logging=True, - auth=True, - auth_key="15435A030726242723273C21181319000A", - key_id="10", - vrf="my_mgmt_vrf", - state="absent", - ), - ) - commands = [ - "no ntp server vrf my_mgmt_vrf 10.75.32.5", - "no ntp source Loopback0", - "no ntp access-group peer NTP_ACL", - "no ntp logging", - "no ntp authenticate", - "no ntp trusted-key 10", - "no ntp authentication-key 10 md5 15435A030726242723273C21181319000A 7", - ] - self.execute_module(changed=True, commands=commands) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp_global.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp_global.py index a9d0392c1..e955c2929 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp_global.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp_global.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_ntp_global -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -86,7 +85,12 @@ class TestIosNtpGlobalModule(TestIosModule): allow=dict(control=dict(rate_limit=4)), authenticate=True, authentication_keys=[ - dict(algorithm="md5", encryption=7, id=2, key="SomeSecurePassword"), + dict( + algorithm="md5", + encryption=7, + id=2, + key="SomeSecurePassword", + ), ], broadcast_delay=22, logging=True, @@ -98,8 +102,18 @@ class TestIosNtpGlobalModule(TestIosModule): panic_update=True, peers=[ dict(peer="172.16.1.10", version=2), - dict(key_id=2, minpoll=5, peer="172.16.1.11", prefer=True, version=2), - dict(peer="checkPeerDomainIpv4.com", prefer=True, use_ipv4=True), + dict( + key_id=2, + minpoll=5, + peer="172.16.1.11", + prefer=True, + version=2, + ), + dict( + peer="checkPeerDomainIpv4.com", + prefer=True, + use_ipv4=True, + ), dict(peer="checkPeerDomainIpv6.com", use_ipv6=True), dict(peer="testPeerDomainIpv6.com", prefer=True, use_ipv6=True), ], @@ -109,7 +123,10 @@ class TestIosNtpGlobalModule(TestIosModule): dict(server="checkServerDomainIpv6.com", use_ipv6=True), ], source="GigabitEthernet0/1", - trusted_keys=[dict(range_start=21), dict(range_end=13, range_start=3)], + trusted_keys=[ + dict(range_start=21), + dict(range_end=13, range_start=3), + ], update_calendar=True, ), state="merged", @@ -138,7 +155,12 @@ class TestIosNtpGlobalModule(TestIosModule): allow=dict(control=dict(rate_limit=4)), authenticate=True, authentication_keys=[ - dict(algorithm="md5", encryption=7, id=2, key="SomeSecurePassword"), + dict( + algorithm="md5", + encryption=7, + id=2, + key="SomeSecurePassword", + ), ], broadcast_delay=22, logging=True, @@ -150,8 +172,18 @@ class TestIosNtpGlobalModule(TestIosModule): panic_update=True, peers=[ dict(peer="172.16.1.10", version=2), - dict(key=2, minpoll=5, peer="172.16.1.11", prefer=True, version=2), - dict(peer="checkPeerDomainIpv4.com", prefer=True, use_ipv4=True), + dict( + key=2, + minpoll=5, + peer="172.16.1.11", + prefer=True, + version=2, + ), + dict( + peer="checkPeerDomainIpv4.com", + prefer=True, + use_ipv4=True, + ), dict(peer="checkPeerDomainIpv6.com", use_ipv6=True), dict(peer="testPeerDomainIpv6.com", prefer=True, use_ipv6=True), ], @@ -162,7 +194,10 @@ class TestIosNtpGlobalModule(TestIosModule): dict(server="checkServerDomainIpv6.com", use_ipv6=True), ], source="GigabitEthernet0/1", - trusted_keys=[dict(range_start=21), dict(range_end=13, range_start=3)], + trusted_keys=[ + dict(range_start=21), + dict(range_end=13, range_start=3), + ], update_calendar=True, ), state="merged", @@ -324,7 +359,12 @@ class TestIosNtpGlobalModule(TestIosModule): allow=dict(control=dict(rate_limit=4)), authenticate=True, authentication_keys=[ - dict(algorithm="md5", encryption=7, id=2, key="SomeSecurePassword"), + dict( + algorithm="md5", + encryption=7, + id=2, + key="SomeSecurePassword", + ), ], broadcast_delay=22, logging=True, @@ -336,8 +376,18 @@ class TestIosNtpGlobalModule(TestIosModule): panic_update=True, peers=[ dict(peer="172.16.1.10", version=2), - dict(key=2, minpoll=5, peer="172.16.1.11", prefer=True, version=2), - dict(peer="checkPeerDomainIpv4.com", prefer=True, use_ipv4=True), + dict( + key=2, + minpoll=5, + peer="172.16.1.11", + prefer=True, + version=2, + ), + dict( + peer="checkPeerDomainIpv4.com", + prefer=True, + use_ipv4=True, + ), dict(peer="checkPeerDomainIpv6.com", use_ipv6=True), dict(peer="testPeerDomainIpv6.com", prefer=True, use_ipv6=True), ], @@ -347,7 +397,10 @@ class TestIosNtpGlobalModule(TestIosModule): dict(server="checkServerDomainIpv6.com", use_ipv6=True), ], source="GigabitEthernet0/1", - trusted_keys=[dict(range_start=21), dict(range_end=13, range_start=3)], + trusted_keys=[ + dict(range_start=21), + dict(range_end=13, range_start=3), + ], update_calendar=True, ), state="replaced", @@ -415,7 +468,12 @@ class TestIosNtpGlobalModule(TestIosModule): allow=dict(control=dict(rate_limit=4)), authenticate=True, authentication_keys=[ - dict(algorithm="md5", encryption=7, id=2, key="SomeSecurePassword"), + dict( + algorithm="md5", + encryption=7, + id=2, + key="SomeSecurePassword", + ), ], broadcast_delay=22, logging=True, @@ -426,15 +484,28 @@ class TestIosNtpGlobalModule(TestIosModule): orphan=4, panic_update=True, peers=[ - dict(key_id=2, minpoll=5, peer="172.16.1.11", prefer=True, version=2), - dict(peer="checkPeerDomainIpv4.com", prefer=True, use_ipv4=True), + dict( + key_id=2, + minpoll=5, + peer="172.16.1.11", + prefer=True, + version=2, + ), + dict( + peer="checkPeerDomainIpv4.com", + prefer=True, + use_ipv4=True, + ), ], servers=[ dict(server="172.16.1.13", source="GigabitEthernet0/1"), dict(server="checkServerDomainIpv6.com", use_ipv6=True), ], source="Loopback888", - trusted_keys=[dict(range_start=21), dict(range_end=13, range_start=3)], + trusted_keys=[ + dict(range_start=21), + dict(range_end=13, range_start=3), + ], update_calendar=True, ), state="overridden", diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospf_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospf_interfaces.py index 3721ba3ba..ea500f540 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospf_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospf_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_ospf_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv2.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv2.py index b73e34395..e14def8d8 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv2.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv2.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_ospfv2 -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -76,13 +75,24 @@ class TestIosOspfV2Module(TestIosModule): ), ), network=[ - dict(address="198.51.100.0", wildcard_bits="0.0.0.255", area=5), - dict(address="192.0.2.0", wildcard_bits="0.0.0.255", area=5), + dict( + address="198.51.100.0", + wildcard_bits="0.0.0.255", + area=5, + ), + dict( + address="192.0.2.0", + wildcard_bits="0.0.0.255", + area=5, + ), ], domain_id=dict(ip_address=dict(address="192.0.3.1")), max_metric=dict(on_startup=dict(time=100), router_lsa=True), passive_interfaces=dict( - interface=dict(set_interface=False, name=["GigabitEthernet0/2"]), + interface=dict( + set_interface=False, + name=["GigabitEthernet0/2"], + ), ), vrf="blue", ), @@ -284,11 +294,17 @@ class TestIosOspfV2Module(TestIosModule): "areas": [ { "area_id": "5", - "authentication": {"enable": True, "message_digest": True}, + "authentication": { + "enable": True, + "message_digest": True, + }, }, { "area_id": "10", - "authentication": {"enable": True, "message_digest": True}, + "authentication": { + "enable": True, + "message_digest": True, + }, "capability": True, "default_cost": 10, "filter_list": [ @@ -470,7 +486,10 @@ class TestIosOspfV2Module(TestIosModule): "passive_interfaces": { "default": True, "interface": { - "name": ["GigabitEthernet0/1", "GigabitEthernet0/2"], + "name": [ + "GigabitEthernet0/1", + "GigabitEthernet0/2", + ], "set_interface": False, }, }, @@ -535,6 +554,7 @@ class TestIosOspfV2Module(TestIosModule): "default-information originate always metric 25 metric-type 26 route-map rmap1", "default-metric 50", "discard-route external 5 internal 2", + "distance 2 192.168.1.0 0.0.0.255 acl1", "distance ospf inter-area 2 intra-area 3 external 1", "domain-id 192.168.1.0 secondary", "domain-tag 54", @@ -601,7 +621,10 @@ class TestIosOspfV2Module(TestIosModule): """, ) set_module_args( - dict(config=dict(processes=[dict(process_id="200", vrf="blue")]), state="deleted"), + dict( + config=dict(processes=[dict(process_id="200", vrf="blue")]), + state="deleted", + ), ) commands = ["no router ospf 200 vrf blue"] self.execute_module(changed=True, commands=commands) @@ -632,7 +655,11 @@ class TestIosOspfV2Module(TestIosModule): "processes": [ { "areas": [ - {"area_id": "5", "authentication": {"enable": True}, "capability": True}, + { + "area_id": "5", + "authentication": {"enable": True}, + "capability": True, + }, ], "process_id": 1, }, @@ -677,11 +704,17 @@ class TestIosOspfV2Module(TestIosModule): "areas": [ { "area_id": "5", - "authentication": {"enable": True, "message_digest": True}, + "authentication": { + "enable": True, + "message_digest": True, + }, }, { "area_id": "10", - "authentication": {"enable": True, "message_digest": True}, + "authentication": { + "enable": True, + "message_digest": True, + }, "capability": True, "default_cost": 10, "filter_list": [ @@ -862,7 +895,10 @@ class TestIosOspfV2Module(TestIosModule): "passive_interfaces": { "default": True, "interface": { - "name": ["GigabitEthernet0/1", "GigabitEthernet0/2"], + "name": [ + "GigabitEthernet0/1", + "GigabitEthernet0/2", + ], "set_interface": False, }, }, @@ -933,6 +969,7 @@ class TestIosOspfV2Module(TestIosModule): "default-information originate always metric 25 metric-type 26 route-map rmap1", "default-metric 50", "discard-route external 5 internal 2", + "distance 2 192.168.1.0 0.0.0.255 acl1", "distance ospf inter-area 2 intra-area 3 external 1", "domain-id 192.168.1.0 secondary", "domain-tag 54", @@ -1029,13 +1066,19 @@ class TestIosOspfV2Module(TestIosModule): "lsa_group": 25, }, }, - "max_metric": {"router_lsa": True, "on_startup": {"time": 100}}, + "max_metric": { + "router_lsa": True, + "on_startup": {"time": 100}, + }, "areas": [{"area_id": "10", "capability": True}], "passive_interfaces": { "default": True, "interface": { "set_interface": False, - "name": ["GigabitEthernet0/2", "GigabitEthernet0/1"], + "name": [ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], }, }, }, @@ -1141,13 +1184,19 @@ class TestIosOspfV2Module(TestIosModule): ], }, "domain_id": {"ip_address": {"address": "192.0.3.1"}}, - "max_metric": {"router_lsa": True, "on_startup": {"time": 100}}, + "max_metric": { + "router_lsa": True, + "on_startup": {"time": 100}, + }, "areas": [{"area_id": "10", "capability": True}], "passive_interfaces": { "default": True, "interface": { "set_interface": False, - "name": ["GigabitEthernet0/2", "GigabitEthernet0/1"], + "name": [ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], }, }, }, diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv3.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv3.py index 30c646123..efaae19ac 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv3.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv3.py @@ -7,9 +7,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_ospfv3 -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -58,7 +58,10 @@ class TestIosOspfV3Module(TestIosModule): afi="ipv4", unicast=True, vrf="blue", - adjacency=dict(min_adjacency=100, max_adjacency=100), + adjacency=dict( + min_adjacency=100, + max_adjacency=100, + ), ), ], ), @@ -89,7 +92,9 @@ class TestIosOspfV3Module(TestIosModule): areas=[ dict( area_id=10, - nssa=dict(default_information_originate=dict(metric=10)), + nssa=dict( + default_information_originate=dict(metric=10), + ), ), ], address_family=[ @@ -132,7 +137,10 @@ class TestIosOspfV3Module(TestIosModule): afi="ipv4", unicast=True, vrf="blue", - adjacency=dict(min_adjacency=100, max_adjacency=100), + adjacency=dict( + min_adjacency=100, + max_adjacency=100, + ), ), ], ), @@ -164,7 +172,9 @@ class TestIosOspfV3Module(TestIosModule): areas=[ dict( area_id=10, - nssa=dict(default_information_originate=dict(metric=10)), + nssa=dict( + default_information_originate=dict(metric=10), + ), ), ], address_family=[ @@ -205,7 +215,9 @@ class TestIosOspfV3Module(TestIosModule): areas=[ dict( area_id=10, - nssa=dict(default_information_originate=dict(metric=10)), + nssa=dict( + default_information_originate=dict(metric=10), + ), ), ], address_family=[ @@ -256,7 +268,9 @@ class TestIosOspfV3Module(TestIosModule): areas=[ dict( area_id=10, - nssa=dict(default_information_originate=dict(metric=10)), + nssa=dict( + default_information_originate=dict(metric=10), + ), ), ], address_family=[ @@ -287,7 +301,9 @@ class TestIosOspfV3Module(TestIosModule): self.execute_module(changed=False, commands=[]) def test_ios_ospfv3_deleted(self): - set_module_args(dict(config=dict(processes=[dict(process_id="1")]), state="deleted")) + set_module_args( + dict(config=dict(processes=[dict(process_id="1")]), state="deleted"), + ) commands = ["no router ospfv3 1"] self.execute_module(changed=True, commands=commands) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ping.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ping.py index bdb822e62..02969ffe0 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ping.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ping.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_ping -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -61,7 +60,9 @@ class TestIosPingModule(TestIosModule): Success rate is 100 percent (2/2), round-trip min/avg/max = 25/25/25 ms """, ) - set_module_args(dict(count=2, dest="2001:db8:ffff:ffff:ffff:ffff:ffff:ffff", afi="ipv6")) + set_module_args( + dict(count=2, dest="2001:db8:ffff:ffff:ffff:ffff:ffff:ffff", afi="ipv6"), + ) result = self.execute_module() mock_res = { "commands": "ping ipv6 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff repeat 2", diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_prefix_lists.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_prefix_lists.py index 2aac373dd..0df4be859 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_prefix_lists.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_prefix_lists.py @@ -7,9 +7,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_prefix_lists -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -74,7 +74,12 @@ class TestIosPrefixListsModule(TestIosModule): prefix="35.0.0.0/8", sequence=5, ), - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_prefix", ), @@ -121,9 +126,24 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test description", entries=[ - dict(action="deny", le=15, prefix="1.0.0.0/8", sequence=5), - dict(action="deny", ge=10, prefix="35.0.0.0/8", sequence=10), - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=15), + dict( + action="deny", + le=15, + prefix="1.0.0.0/8", + sequence=5, + ), + dict( + action="deny", + ge=10, + prefix="35.0.0.0/8", + sequence=10, + ), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=15, + ), dict( action="deny", ge=20, @@ -137,7 +157,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test", entries=[ - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=50), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=50, + ), ], name="test", ), @@ -151,7 +176,12 @@ class TestIosPrefixListsModule(TestIosModule): prefix="35.0.0.0/8", sequence=5, ), - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_prefix", ), @@ -190,7 +220,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is replace test", entries=[ - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=15), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=15, + ), dict( action="deny", ge=20, @@ -204,7 +239,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is replace test", entries=[ - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_replace", ), @@ -255,9 +295,24 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test description", entries=[ - dict(action="deny", le=15, prefix="1.0.0.0/8", sequence=5), - dict(action="deny", ge=10, prefix="35.0.0.0/8", sequence=10), - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=15), + dict( + action="deny", + le=15, + prefix="1.0.0.0/8", + sequence=5, + ), + dict( + action="deny", + ge=10, + prefix="35.0.0.0/8", + sequence=10, + ), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=15, + ), dict( action="deny", ge=20, @@ -271,7 +326,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test", entries=[ - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=50), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=50, + ), ], name="test", ), @@ -285,7 +345,12 @@ class TestIosPrefixListsModule(TestIosModule): prefix="35.0.0.0/8", sequence=5, ), - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_prefix", ), @@ -324,7 +389,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is override test", entries=[ - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=15), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=15, + ), dict( action="deny", ge=20, @@ -338,7 +408,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is override test", entries=[ - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_override", ), @@ -391,9 +466,24 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test description", entries=[ - dict(action="deny", le=15, prefix="1.0.0.0/8", sequence=5), - dict(action="deny", ge=10, prefix="35.0.0.0/8", sequence=10), - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=15), + dict( + action="deny", + le=15, + prefix="1.0.0.0/8", + sequence=5, + ), + dict( + action="deny", + ge=10, + prefix="35.0.0.0/8", + sequence=10, + ), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=15, + ), dict( action="deny", ge=20, @@ -407,7 +497,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test", entries=[ - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=50), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=50, + ), ], name="test", ), @@ -421,7 +516,12 @@ class TestIosPrefixListsModule(TestIosModule): prefix="35.0.0.0/8", sequence=5, ), - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_prefix", ), @@ -491,7 +591,12 @@ class TestIosPrefixListsModule(TestIosModule): prefix="35.0.0.0/8", sequence=5, ), - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_prefix", ), diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_route_maps.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_route_maps.py index 0e450f908..27c5aa7f6 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_route_maps.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_route_maps.py @@ -7,9 +7,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_route_maps -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -58,7 +58,10 @@ class TestIosRouteMapsModule(TestIosModule): additional_paths=dict(all=True), as_path=dict(acls=[100, 120]), clns=dict(address="test_osi"), - community=dict(exact_match=True, name=["new_merge"]), + community=dict( + exact_match=True, + name=["new_merge"], + ), ip=dict(address=dict(acls=[10, 100])), length=dict(maximum=50000, minimum=5000), mpls_label=True, @@ -213,7 +216,10 @@ class TestIosRouteMapsModule(TestIosModule): vpn_distinguisher=dict(address="192.0.2.1:12"), ), global_route=True, - interfaces=["GigabitEthernet0/2", "GigabitEthernet0/1"], + interfaces=[ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], level=dict(level_1_2=True), lisp="test_lisp", local_preference=100, @@ -249,7 +255,10 @@ class TestIosRouteMapsModule(TestIosModule): additional_paths=dict(all=True), as_path=dict(acls=[100, 120]), clns=dict(address="test_osi"), - community=dict(exact_match=True, name=["new_replace"]), + community=dict( + exact_match=True, + name=["new_replace"], + ), ip=dict(address=dict(acls=[10, 100])), length=dict(maximum=50000, minimum=5000), mpls_label=True, @@ -418,7 +427,10 @@ class TestIosRouteMapsModule(TestIosModule): vpn_distinguisher=dict(address="192.0.2.1:12"), ), global_route=True, - interfaces=["GigabitEthernet0/2", "GigabitEthernet0/1"], + interfaces=[ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], level=dict(level_1_2=True), lisp="test_lisp", local_preference=100, @@ -454,7 +466,10 @@ class TestIosRouteMapsModule(TestIosModule): additional_paths=dict(all=True), as_path=dict(acls=[100, 120]), clns=dict(address="test_osi"), - community=dict(exact_match=True, name=["new_override"]), + community=dict( + exact_match=True, + name=["new_override"], + ), ip=dict(address=dict(acls=[10, 100])), length=dict(maximum=50000, minimum=5000), mpls_label=True, @@ -623,7 +638,10 @@ class TestIosRouteMapsModule(TestIosModule): vpn_distinguisher=dict(address="192.0.2.1:12"), ), global_route=True, - interfaces=["GigabitEthernet0/2", "GigabitEthernet0/1"], + interfaces=[ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], level=dict(level_1_2=True), lisp="test_lisp", local_preference=100, @@ -676,7 +694,10 @@ class TestIosRouteMapsModule(TestIosModule): name=["99", "98", "test_1", "test_2"], ), extcommunity=["110", "130"], - interfaces=["GigabitEthernet0/1", "GigabitEthernet0/2"], + interfaces=[ + "GigabitEthernet0/1", + "GigabitEthernet0/2", + ], ip=dict(address=dict(acls=[10, 100])), ipv6=dict(route_source=dict(acl="test_ipv6")), length=dict(maximum=10000, minimum=1000), @@ -702,7 +723,9 @@ class TestIosRouteMapsModule(TestIosModule): sequence=30, set=dict( as_path=dict( - prepend=dict(as_number=["65512", 65522, "65532", 65543]), + prepend=dict( + as_number=["65512", 65522, "65532", 65543], + ), ), ), ), @@ -727,7 +750,10 @@ class TestIosRouteMapsModule(TestIosModule): vpn_distinguisher=dict(address="192.0.2.1:12"), ), global_route=True, - interfaces=["GigabitEthernet0/2", "GigabitEthernet0/1"], + interfaces=[ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], level=dict(level_1_2=True), lisp="test_lisp", local_preference=100, diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_service.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_service.py index cbf9a9fd7..fa92efcdc 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_service.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_service.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_service -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_snmp_server.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_snmp_server.py index c45f3548a..0b8f797a1 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_snmp_server.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_snmp_server.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_snmp_server -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -54,11 +53,13 @@ class TestIosSnmpServerModule(TestIosModule): snmp-server engineID remote 172.16.0.2 udp-port 23 AB0C5342FAAB snmp-server engineID remote 172.16.0.1 udp-port 22 AB0C5342FAAA snmp-server user newuser newfamily v1 access 24 - snmp-server user paul familypaul v3 access ipv6 ipv6acl + snmp-server user paul familypaul v3 access ipv6 ipv6acl ipv4acl snmp-server user replaceUser replaceUser v3 snmp-server group group0 v3 auth - snmp-server group group1 v1 notify me access 2 + snmp-server group group1 v1 notify me access ipv6 ipv6acl 2 snmp-server group group2 v3 priv + snmp-server group group3 v1 access ipv6 ipv6acl + snmp-server group group4 v1 access 2 snmp-server group replaceUser v3 noauth snmp-server community commu1 view view1 RO ipv6 te snmp-server community commu2 RO 1322 @@ -166,15 +167,36 @@ class TestIosSnmpServerModule(TestIosModule): "context": ["contextWord2", "contextWord1"], "engine_id": [ {"id": "AB0C5342FA0A", "local": True}, - {"id": "AB0C5342FAAA", "remote": {"host": "172.16.0.1", "udp_port": 22}}, - {"id": "AB0C5342FAAB", "remote": {"host": "172.16.0.2", "udp_port": 23}}, + { + "id": "AB0C5342FAAA", + "remote": {"host": "172.16.0.1", "udp_port": 22}, + }, + { + "id": "AB0C5342FAAB", + "remote": {"host": "172.16.0.2", "udp_port": 23}, + }, ], - "file_transfer": {"access_group": "testAcl", "protocol": ["ftp", "rcp"]}, + "file_transfer": { + "access_group": "testAcl", + "protocol": ["ftp", "rcp"], + }, "groups": [ {"group": "group0", "version": "v3", "version_option": "auth"}, - {"acl_v4": "2", "group": "group1", "notify": "me", "version": "v1"}, + { + "acl_v4": "2", + "acl_v6": "ipv6acl", + "group": "group1", + "notify": "me", + "version": "v1", + }, {"group": "group2", "version": "v3", "version_option": "priv"}, - {"group": "replaceUser", "version": "v3", "version_option": "noauth"}, + { + "group": "replaceUser", + "version": "v3", + "version_option": "noauth", + }, + {"acl_v6": "ipv6acl", "group": "group3", "version": "v1"}, + {"acl_v4": "2", "group": "group4", "version": "v1"}, ], "hosts": [ { @@ -211,8 +233,16 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp"], "version": "2c", }, - {"community_string": "check", "host": "172.16.2.99", "traps": ["slb"]}, - {"community_string": "checktrap", "host": "172.16.2.99", "traps": ["isis"]}, + { + "community_string": "check", + "host": "172.16.2.99", + "traps": ["slb"], + }, + { + "community_string": "checktrap", + "host": "172.16.2.99", + "traps": ["isis"], + }, ], "inform": {"pending": 2}, "ip": {"dscp": 2}, @@ -294,7 +324,12 @@ class TestIosSnmpServerModule(TestIosModule): }, "ipmulticast": True, "ipsec": { - "cryptomap": {"add": True, "attach": True, "delete": True, "detach": True}, + "cryptomap": { + "add": True, + "attach": True, + "delete": True, + "detach": True, + }, "too_many_sas": True, "tunnel": {"start": True, "stop": True}, }, @@ -347,14 +382,24 @@ class TestIosSnmpServerModule(TestIosModule): }, }, "users": [ - {"acl_v4": "24", "group": "newfamily", "username": "newuser", "version": "v1"}, { + "acl_v4": "24", + "group": "newfamily", + "username": "newuser", + "version": "v1", + }, + { + "acl_v4": "ipv4acl", "acl_v6": "ipv6acl", "group": "familypaul", "username": "paul", "version": "v3", }, - {"group": "replaceUser", "username": "replaceUser", "version": "v3"}, + { + "group": "replaceUser", + "username": "replaceUser", + "version": "v3", + }, ], }, } @@ -430,14 +475,32 @@ class TestIosSnmpServerModule(TestIosModule): "id": "AB0C5342FAAA", "remote": {"host": "172.16.0.1", "udp_port": 22, "vrf": "mgmt"}, }, - {"id": "AB0C5342FAAB", "remote": {"host": "172.16.0.2", "udp_port": 23}}, + { + "id": "AB0C5342FAAB", + "remote": {"host": "172.16.0.2", "udp_port": 23}, + }, ], - "file_transfer": {"access_group": "testAcl", "protocol": ["ftp", "rcp"]}, + "file_transfer": { + "access_group": "testAcl", + "protocol": ["ftp", "rcp"], + }, "groups": [ {"group": "group0", "version": "v3", "version_option": "auth"}, - {"acl_v4": "2", "group": "group1", "notify": "me", "version": "v1"}, + { + "acl_v4": "2", + "acl_v6": "ipv6acl", + "group": "group1", + "notify": "me", + "version": "v1", + }, {"group": "group2", "version": "v3", "version_option": "priv"}, - {"group": "replaceUser", "version": "v3", "version_option": "noauth"}, + { + "group": "replaceUser", + "version": "v3", + "version_option": "noauth", + }, + {"acl_v6": "ipv6acl", "group": "group3", "version": "v1"}, + {"acl_v4": "2", "group": "group4", "version": "v1"}, ], "hosts": [ { @@ -474,8 +537,16 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp"], "version": "2c", }, - {"community_string": "check", "host": "172.16.2.99", "traps": ["slb"]}, - {"community_string": "checktrap", "host": "172.16.2.99", "traps": ["isis"]}, + { + "community_string": "check", + "host": "172.16.2.99", + "traps": ["slb"], + }, + { + "community_string": "checktrap", + "host": "172.16.2.99", + "traps": ["isis"], + }, ], "inform": {"pending": 2}, "ip": {"dscp": 2}, @@ -567,7 +638,12 @@ class TestIosSnmpServerModule(TestIosModule): }, "ipmulticast": True, "ipsec": { - "cryptomap": {"add": True, "attach": True, "delete": True, "detach": True}, + "cryptomap": { + "add": True, + "attach": True, + "delete": True, + "detach": True, + }, "too_many_sas": True, "tunnel": {"start": True, "stop": True}, }, @@ -620,15 +696,29 @@ class TestIosSnmpServerModule(TestIosModule): }, }, "users": [ - {"acl_v4": "24", "group": "newfamily", "username": "newuser", "version": "v1"}, + { + "acl_v4": "24", + "group": "newfamily", + "username": "newuser", + "version": "v1", + }, { "acl_v6": "ipv6only", "group": "familypaul", "username": "paul", "version": "v3", }, - {"group": "replaceUser", "username": "replaceUser", "version": "v3"}, - {"acl_v4": "27", "group": "mfamily", "username": "flow", "version": "v3"}, + { + "group": "replaceUser", + "username": "replaceUser", + "version": "v3", + }, + { + "acl_v4": "27", + "group": "mfamily", + "username": "flow", + "version": "v3", + }, ], }, } @@ -692,8 +782,10 @@ class TestIosSnmpServerModule(TestIosModule): "snmp-server host 172.16.2.99 check slb", "snmp-server host 172.16.2.99 checktrap isis", "snmp-server group group0 v3 auth", - "snmp-server group group1 v1 notify me access 2", + "snmp-server group group1 v1 notify me access ipv6 ipv6acl 2", "snmp-server group group2 v3 priv", + "snmp-server group group3 v1 access ipv6 ipv6acl", + "snmp-server group group4 v1 access 2", "snmp-server group replaceUser v3 noauth", "snmp-server engineID remote 172.16.0.1 udp-port 22 vrf mgmt AB0C5342FAAA", "snmp-server community commu1 view view1 ro ipv6 te", @@ -723,8 +815,10 @@ class TestIosSnmpServerModule(TestIosModule): snmp-server user replaceUser replaceUser v3 snmp-server user flow mfamily v3 access 27 snmp-server group group0 v3 auth - snmp-server group group1 v1 notify me access 2 + snmp-server group group1 v1 notify me access ipv6 ipv6acl 2 snmp-server group group2 v3 priv + snmp-server group group3 v1 access ipv6 ipv6acl + snmp-server group group4 v1 access 2 snmp-server group replaceUser v3 noauth snmp-server community commu1 view view1 RO ipv6 te snmp-server community commu2 RO 1322 @@ -985,8 +1079,10 @@ class TestIosSnmpServerModule(TestIosModule): "no snmp-server host 172.16.2.99 check slb", "no snmp-server host 172.16.2.99 checktrap isis", "no snmp-server group group0 v3 auth", - "no snmp-server group group1 v1 notify me access 2", + "no snmp-server group group1 v1 notify me access ipv6 ipv6acl 2", "no snmp-server group group2 v3 priv", + "no snmp-server group group3 v1 access ipv6 ipv6acl", + "no snmp-server group group4 v1 access 2", "no snmp-server group replaceUser v3 noauth", "no snmp-server engineID local AB0C5342FA0A", "no snmp-server engineID remote 172.16.0.1 udp-port 22 AB0C5342FAAA", @@ -1097,15 +1193,34 @@ class TestIosSnmpServerModule(TestIosModule): "context": ["contextWord2", "contextWord1"], "engine_id": [ {"id": "AB0C5342FA0A", "local": True}, - {"id": "AB0C5342FAAA", "remote": {"host": "172.16.0.1", "udp_port": 22}}, - {"id": "AB0C5342FAAB", "remote": {"host": "172.16.0.2", "udp_port": 23}}, + { + "id": "AB0C5342FAAA", + "remote": {"host": "172.16.0.1", "udp_port": 22}, + }, + { + "id": "AB0C5342FAAB", + "remote": {"host": "172.16.0.2", "udp_port": 23}, + }, ], - "file_transfer": {"access_group": "testAcl", "protocol": ["ftp", "rcp"]}, + "file_transfer": { + "access_group": "testAcl", + "protocol": ["ftp", "rcp"], + }, "groups": [ {"group": "group0", "version": "v3", "version_option": "auth"}, - {"acl_v4": "2", "group": "group1", "notify": "me", "version": "v1"}, + { + "acl_v4": "2", + "acl_v6": "ipv6acl", + "group": "group1", + "notify": "me", + "version": "v1", + }, {"group": "group2", "version": "v3", "version_option": "priv"}, - {"group": "replaceUser", "version": "v3", "version_option": "noauth"}, + { + "group": "replaceUser", + "version": "v3", + "version_option": "noauth", + }, ], "hosts": [ { @@ -1142,8 +1257,16 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp"], "version": "2c", }, - {"community_string": "check", "host": "172.16.2.99", "traps": ["slb"]}, - {"community_string": "checktrap", "host": "172.16.2.99", "traps": ["isis"]}, + { + "community_string": "check", + "host": "172.16.2.99", + "traps": ["slb"], + }, + { + "community_string": "checktrap", + "host": "172.16.2.99", + "traps": ["isis"], + }, ], "inform": {"pending": 2}, "ip": {"dscp": 2}, @@ -1225,7 +1348,12 @@ class TestIosSnmpServerModule(TestIosModule): }, "ipmulticast": True, "ipsec": { - "cryptomap": {"add": True, "attach": True, "delete": True, "detach": True}, + "cryptomap": { + "add": True, + "attach": True, + "delete": True, + "detach": True, + }, "too_many_sas": True, "tunnel": {"start": True, "stop": True}, }, @@ -1278,18 +1406,35 @@ class TestIosSnmpServerModule(TestIosModule): }, }, "users": [ - {"acl_v4": "24", "group": "newfamily", "username": "newuser", "version": "v1"}, + { + "acl_v4": "24", + "group": "newfamily", + "username": "newuser", + "version": "v1", + }, { "acl_v6": "ipv6acl", "group": "familypaul", "username": "paul", "version": "v3", }, - {"group": "replaceUser", "username": "replaceUser", "version": "v3"}, + { + "group": "replaceUser", + "username": "replaceUser", + "version": "v3", + }, ], "views": [ - {"name": "no-write.test", "family_name": "testiso", "excluded": True}, - {"name": "newView", "family_name": "TestFamilyName", "included": True}, + { + "name": "no-write.test", + "family_name": "testiso", + "excluded": True, + }, + { + "name": "newView", + "family_name": "TestFamilyName", + "included": True, + }, ], }, } @@ -1318,7 +1463,7 @@ class TestIosSnmpServerModule(TestIosModule): "snmp-server host 172.16.2.1 version 2c trapsac tty", "snmp-server host 172.16.2.99 checktrap isis", "snmp-server group group0 v3 auth", - "snmp-server group group1 v1 notify me access 2", + "snmp-server group group1 v1 notify me access ipv6 ipv6acl 2", "snmp-server engineID local AB0C5342FA0A", "snmp-server engineID remote 172.16.0.1 udp-port 22 AB0C5342FAAA", "snmp-server community commu1 view view1 ro ipv6 te", @@ -1362,7 +1507,11 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp"], "version": "2c", }, - {"community_string": "check", "host": "172.16.2.99", "traps": ["slb"]}, + { + "community_string": "check", + "host": "172.16.2.99", + "traps": ["slb"], + }, ], }, } @@ -1414,10 +1563,18 @@ class TestIosSnmpServerModule(TestIosModule): parsed = { "engine_id": [ {"id": "AB0C5342FA0A", "local": True}, - {"id": "AB0C5342FAAB", "remote": {"host": "172.16.0.2", "udp_port": 23}}, + { + "id": "AB0C5342FAAB", + "remote": {"host": "172.16.0.2", "udp_port": 23}, + }, ], "users": [ - {"username": "paul", "group": "familypaul", "version": "v3", "acl_v6": "ipv6acl"}, + { + "username": "paul", + "group": "familypaul", + "version": "v3", + "acl_v6": "ipv6acl", + }, ], "traps": { "ospf": { @@ -1494,8 +1651,16 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp", "stun"], "version": "2c", }, - {"host": "172.16.2.99", "community_string": "check", "traps": ["slb", "pki"]}, - {"host": "172.16.2.99", "community_string": "checktrap", "traps": ["isis", "hsrp"]}, + { + "host": "172.16.2.99", + "community_string": "check", + "traps": ["slb", "pki"], + }, + { + "host": "172.16.2.99", + "community_string": "checktrap", + "traps": ["isis", "hsrp"], + }, ], "groups": [ { @@ -1583,7 +1748,11 @@ class TestIosSnmpServerModule(TestIosModule): "version": "3", "version_option": "noauth", }, - {"host": "172.16.2.99", "community_string": "checktrap", "traps": ["isis", "hsrp"]}, + { + "host": "172.16.2.99", + "community_string": "checktrap", + "traps": ["isis", "hsrp"], + }, ], "users": [ { @@ -1632,7 +1801,10 @@ class TestIosSnmpServerModule(TestIosModule): "config": { "engine_id": [ {"id": "AB0C5342FA0A", "local": True}, - {"id": "AB0C5342FAAB", "remote": {"host": "172.16.0.2", "udp_port": 23}}, + { + "id": "AB0C5342FAAB", + "remote": {"host": "172.16.0.2", "udp_port": 23}, + }, ], "views": [ {"family_name": "iso", "name": "ro"}, @@ -1728,8 +1900,16 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp"], "version": "2c", }, - {"host": "172.16.2.99", "community_string": "check", "traps": ["slb"]}, - {"host": "172.16.2.99", "community_string": "checktrap", "traps": ["isis"]}, + { + "host": "172.16.2.99", + "community_string": "check", + "traps": ["slb"], + }, + { + "host": "172.16.2.99", + "community_string": "checktrap", + "traps": ["isis"], + }, ], }, "state": "rendered", @@ -1777,7 +1957,10 @@ class TestIosSnmpServerModule(TestIosModule): "username": "paul", "group": "familypaul", "version": "v3", - "authentication": {"algorithm": "md5", "password": "somepass"}, + "authentication": { + "algorithm": "md5", + "password": "somepass", + }, "encryption": { "priv": "aes", "priv_option": 128, @@ -1789,7 +1972,9 @@ class TestIosSnmpServerModule(TestIosModule): "state": "rendered", }, ) - rendered = ["snmp-server user paul familypaul v3 auth md5 somepass priv aes 128 somepass"] + rendered = [ + "snmp-server user paul familypaul v3 auth md5 somepass priv aes 128 somepass", + ] result = self.execute_module(changed=False) self.maxDiff = None self.assertEqual(sorted(result["rendered"]), sorted(rendered)) @@ -1902,10 +2087,11 @@ class TestIosSnmpServerModule(TestIosModule): }, } overridden = [ - "no snmp-server user flow mfamily v3 access 27", + "snmp-server user replaceUser replaceUser v3 auth md5 replaceUser access 22", "snmp-server user flow mfamily v3 access 27", "no snmp-server user newuser newfamily v1 access 24", ] + playbook["state"] = "overridden" set_module_args(playbook) result = self.execute_module(changed=True) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_static_routes.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_static_routes.py index d1046cc72..57a416433 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_static_routes.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_static_routes.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_static_routes -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -232,7 +231,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -422,7 +424,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -639,7 +644,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -829,7 +837,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -1046,7 +1057,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -1236,7 +1250,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -1716,7 +1733,9 @@ class TestIosStaticRoutesModule(TestIosModule): config=[ dict( vrf="testVrf2", - address_families=[dict(afi="ipv4", routes=[dict(dest="192.0.2.0/24")])], + address_families=[ + dict(afi="ipv4", routes=[dict(dest="192.0.2.0/24")]), + ], ), dict( vrf="testVrfv6", @@ -1840,7 +1859,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -2127,7 +2149,9 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "dest": "10.0.0.0/8", - "next_hops": [{"interface": "Null0", "permanent": True}], + "next_hops": [ + {"interface": "Null0", "permanent": True}, + ], }, ], }, diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_system.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_system.py index b82d7ae48..915d7a1f7 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_system.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_system.py @@ -21,9 +21,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_system -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -70,7 +70,12 @@ class TestIosSystemModule(TestIosModule): def test_ios_system_domain_name_complex(self): set_module_args( - dict(domain_name=[{"name": "test.com", "vrf": "test"}, {"name": "eng.example.net"}]), + dict( + domain_name=[ + {"name": "test.com", "vrf": "test"}, + {"name": "eng.example.net"}, + ], + ), ) commands = [ "ip domain name vrf test test.com", @@ -107,7 +112,10 @@ class TestIosSystemModule(TestIosModule): def test_ios_system_name_servers(self): name_servers = ["8.8.8.8", "8.8.4.4"] set_module_args(dict(name_servers=name_servers)) - commands = ["no ip name-server vrf management 8.8.8.8", "ip name-server 8.8.4.4"] + commands = [ + "no ip name-server vrf management 8.8.8.8", + "ip name-server 8.8.4.4", + ] self.execute_module(changed=True, commands=commands, sort=False) def rest_ios_system_name_servers_complex(self): diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_user.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_user.py index 8cd3c07c3..a13467afb 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_user.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_user.py @@ -20,9 +20,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_user -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -93,18 +93,23 @@ class TestIosUserModule(TestIosModule): def test_ios_user_purge(self): set_module_args(dict(purge=True)) result = self.execute_module(changed=True) - cmd = { - "command": "no username ansible", - "answer": "y", - "newline": False, - "prompt": "This operation will remove all username related configurations with same name", - } + cmd = [ + "ip ssh pubkey-chain", + "no username ansible", + "exit", + { + "command": "no username ansible", + "answer": "y", + "newline": False, + "prompt": "This operation will remove all username related configurations with same name", + }, + ] result_cmd = [] for i in result["commands"]: result_cmd.append(i) - self.assertEqual(result_cmd, [cmd]) + self.assertEqual(result_cmd, cmd) def test_ios_user_view(self): set_module_args(dict(name="ansible", view="test")) @@ -112,18 +117,26 @@ class TestIosUserModule(TestIosModule): self.assertEqual(result["commands"], ["username ansible view test"]) def test_ios_user_update_password_changed(self): - set_module_args(dict(name="test", configured_password="test", update_password="on_create")) + set_module_args( + dict(name="test", configured_password="test", update_password="on_create"), + ) result = self.execute_module(changed=True) self.assertEqual(result["commands"], ["username test secret test"]) def test_ios_user_update_password_on_create_ok(self): set_module_args( - dict(name="ansible", configured_password="test", update_password="on_create"), + dict( + name="ansible", + configured_password="test", + update_password="on_create", + ), ) self.execute_module() def test_ios_user_update_password_always(self): - set_module_args(dict(name="ansible", configured_password="test", update_password="always")) + set_module_args( + dict(name="ansible", configured_password="test", update_password="always"), + ) result = self.execute_module(changed=True) self.assertEqual(result["commands"], ["username ansible secret test"]) @@ -151,3 +164,34 @@ class TestIosUserModule(TestIosModule): ] result = self.execute_module(changed=True, commands=commands) self.assertEqual(result["commands"], commands) + + def test_add_hashed_password(self): + hashed_password_val = "replacementforhashwhichissupposedtogohereonlyfortestingpurposes" + set_module_args( + dict( + name="ansible", + hashed_password={ + "type": 9, + "value": hashed_password_val, + }, + ), + ) + result = self.execute_module(changed=True) + self.assertEqual( + result["commands"], + [f"username ansible secret 9 {hashed_password_val}"], + ) + + def test_add_hpassword_with_type(self): + set_module_args( + dict( + name="ansible", + hashed_password={ + "type": 0, + "value": "test", + }, + password_type="password", + ), + ) + result = self.execute_module(changed=True) + self.assertEqual(result["commands"], ["username ansible password 0 test"]) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vlans.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vlans.py index c19d58ffd..10b30e140 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vlans.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vlans.py @@ -7,14 +7,13 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_vlans -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args -from .ios_module import TestIosModule, load_fixture +from .ios_module import TestIosModule class TestIosVlansModule(TestIosModule): @@ -23,50 +22,22 @@ class TestIosVlansModule(TestIosModule): def setUp(self): super(TestIosVlansModule, self).setUp() - self.mock_get_config = patch( - "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.network.Config.get_config", - ) - self.get_config = self.mock_get_config.start() - - self.mock_load_config = patch( - "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.network.Config.load_config", - ) - self.load_config = self.mock_load_config.start() - - self.mock_get_resource_connection_config = patch( - "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.cfg.base." - "get_resource_connection", - ) - self.get_resource_connection_config = self.mock_get_resource_connection_config.start() - self.mock_get_resource_connection_facts = patch( - "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.facts.facts." - "get_resource_connection", - ) - self.get_resource_connection_facts = self.mock_get_resource_connection_facts.start() - - self.mock_edit_config = patch( - "ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.providers.CliProvider.edit_config", - ) - self.edit_config = self.mock_edit_config.start() - - self.mock_get_resource_connection_facts_2 = patch( "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.resource_module_base." "get_resource_connection", ) - self.get_resource_connection_facts_2 = self.mock_get_resource_connection_facts_2.start() - - self.mock_execute_show_command_2 = patch( - "ansible_collections.cisco.ios.plugins.module_utils.network.ios.facts.vlans.vlans." - "VlansFacts.get_vlans_data", - ) - self.execute_show_command_2 = self.mock_execute_show_command_2.start() + self.get_resource_connection_facts = self.mock_get_resource_connection_facts.start() self.mock_execute_show_command = patch( "ansible_collections.cisco.ios.plugins.module_utils.network.ios.facts.vlans.vlans." "VlansFacts.get_vlans_data", ) self.execute_show_command = self.mock_execute_show_command.start() + self.mock_execute_show_command_conf = patch( + "ansible_collections.cisco.ios.plugins.module_utils.network.ios.facts.vlans.vlans." + "VlansFacts.get_vlan_conf_data", + ) + self.execute_show_command_conf = self.mock_execute_show_command_conf.start() self.mock_l2_device_command = patch( "ansible_collections.cisco.ios.plugins.modules.ios_vlans._is_l2_device", ) @@ -74,24 +45,55 @@ class TestIosVlansModule(TestIosModule): def tearDown(self): super(TestIosVlansModule, self).tearDown() - self.mock_get_resource_connection_config.stop() - self.mock_get_resource_connection_facts.stop() - self.mock_edit_config.stop() - self.mock_get_config.stop() - self.mock_load_config.stop() self.mock_execute_show_command.stop() + self.mock_execute_show_command_conf.stop() self.mock_l2_device_command.stop() - self.mock_get_resource_connection_facts_2.stop() - self.mock_execute_show_command_2.stop() - - def load_fixtures(self, commands=None): - def load_from_file(*args, **kwargs): - return load_fixture("ios_vlans_config.cfg") + def test_ios_vlans_merged(self): self.mock_l2_device_command.side_effect = True - self.execute_show_command.side_effect = load_from_file + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup - def test_ios_vlans_merged(self): + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ @@ -107,14 +109,70 @@ class TestIosVlansModule(TestIosModule): ), ) result = self.execute_module(changed=True) - commands = ["vlan 200", "name test_vlan_200", "state active", "remote-span", "no shutdown"] + commands = [ + "vlan 200", + "name test_vlan_200", + "state active", + "remote-span", + "no shutdown", + ] self.assertEqual(result["commands"], commands) def test_ios_vlans_merged_idempotent(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ - dict(mtu=1500, name="default", shutdown="disabled", state="active", vlan_id=1), + dict( + mtu=1500, + name="default", + shutdown="disabled", + state="active", + vlan_id=1, + ), dict( mtu=610, name="RemoteIsInMyName", @@ -172,6 +230,50 @@ class TestIosVlansModule(TestIosModule): self.execute_module(changed=False, commands=[], sort=True) def test_ios_vlans_replaced(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ @@ -182,14 +284,26 @@ class TestIosVlansModule(TestIosModule): remote_span=True, vlan_id=200, ), - dict(name="Replace_RemoteIsInMyName", remote_span=True, vlan_id=123), + dict( + name="Replace_RemoteIsInMyName", + remote_span=True, + vlan_id=123, + ), dict( name="pvlan-primary", private_vlan=dict(type="primary", associated=[11, 12]), vlan_id=10, ), - dict(name="pvlan-community", private_vlan=dict(type="community"), vlan_id=11), - dict(name="pvlan-isolated", private_vlan=dict(type="isolated"), vlan_id=12), + dict( + name="pvlan-community", + private_vlan=dict(type="community"), + vlan_id=11, + ), + dict( + name="pvlan-isolated", + private_vlan=dict(type="isolated"), + vlan_id=12, + ), ], state="replaced", ), @@ -202,38 +316,79 @@ class TestIosVlansModule(TestIosModule): "remote-span", "no shutdown", "vlan 123", + "name Replace_RemoteIsInMyName", "no state active", - "no shutdown", "no mtu 610", - "name Replace_RemoteIsInMyName", "remote-span", + "shutdown", "vlan 10", - "no state active", - "no shutdown", - "no mtu 4472", "name pvlan-primary", "private-vlan primary", "private-vlan association 11,12", "vlan 11", - "no state active", - "no shutdown", - "no mtu 4472", "name pvlan-community", "private-vlan community", "vlan 12", - "no state active", - "no shutdown", - "no mtu 4472", "name pvlan-isolated", "private-vlan isolated", ] self.assertEqual(result["commands"], commands) def test_ios_vlans_replaced_idempotent(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ - dict(mtu=1500, name="default", shutdown="disabled", state="active", vlan_id=1), + dict( + mtu=1500, + name="default", + shutdown="disabled", + state="active", + vlan_id=1, + ), dict( mtu=610, name="RemoteIsInMyName", @@ -291,6 +446,50 @@ class TestIosVlansModule(TestIosModule): self.execute_module(changed=False, commands=[], sort=True) def test_ios_vlans_overridden(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ @@ -301,35 +500,123 @@ class TestIosVlansModule(TestIosModule): remote_span=True, vlan_id=200, ), - dict(name="Override_RemoteIsInMyName", remote_span=True, vlan_id=123), + dict( + name="Override_RemoteIsInMyName", + remote_span=True, + vlan_id=123, + ), ], state="overridden", ), ) result = self.execute_module(changed=True) commands = [ - "vlan 123", + "vlan 1", + "no name default", "no state active", - "no shutdown", - "no mtu 610", - "name Override_RemoteIsInMyName", - "remote-span", - "no vlan 150", - "no vlan 888", + "no mtu 1500", + "shutdown", + "vlan 150", + "no name VLAN0150", + "no state active", + "no mtu 1500", + "no remote-span", + "shutdown", + "vlan 888", + "no name a_very_long_vlan_name_a_very_long_vlan_name", + "no state active", + "no mtu 1500", + "shutdown", + "vlan 1002", + "no name fddi-default", + "no state active", + "no mtu 1500", + "shutdown", + "vlan 1003", + "no name trcrf-default", + "no state active", + "no mtu 4472", + "shutdown", + "vlan 1004", + "no name fddinet-default", + "no state active", + "no mtu 1500", + "shutdown", + "vlan 1005", + "no name trbrf-default", + "no state active", + "no mtu 4472", + "shutdown", "vlan 200", "name test_vlan_200", "state active", "remote-span", "no shutdown", + "vlan 123", + "name Override_RemoteIsInMyName", + "no state active", + "no mtu 610", + "remote-span", + "shutdown", ] self.assertEqual(result["commands"], commands) def test_ios_vlans_overridden_idempotent(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ - dict(mtu=1500, name="default", shutdown="disabled", state="active", vlan_id=1), + dict( + mtu=1500, + name="default", + shutdown="disabled", + state="active", + vlan_id=1, + ), dict( mtu=610, name="RemoteIsInMyName", @@ -386,13 +673,108 @@ class TestIosVlansModule(TestIosModule): ) self.execute_module(changed=False, commands=[], sort=True) - def test_ios_delete_vlans(self): + def test_ios_delete_vlans_config(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args(dict(config=[dict(vlan_id=150)], state="deleted")) result = self.execute_module(changed=True) - commands = ["no vlan 150"] + commands = [ + "vlan 150", + "no name VLAN0150", + "no state active", + "no mtu 1500", + "no remote-span", + "shutdown", + ] self.assertEqual(result["commands"], commands) def test_vlans_rendered(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ @@ -407,7 +789,13 @@ class TestIosVlansModule(TestIosModule): state="rendered", ), ) - commands = ["name test_vlan_200", "no shutdown", "remote-span", "state active", "vlan 200"] + commands = [ + "name test_vlan_200", + "no shutdown", + "remote-span", + "state active", + "vlan 200", + ] result = self.execute_module(changed=False) self.assertEqual(sorted(result["rendered"]), commands) @@ -598,6 +986,50 @@ class TestIosVlansModule(TestIosModule): self.assertEqual(result["parsed"], parsed) def test_ios_vlans_gathered(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args(dict(state="gathered")) gathered = [ { @@ -664,6 +1096,22 @@ class TestIosVlansModule(TestIosModule): self.assertEqual(result["gathered"], gathered) def test_ios_vlans_config_merged(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + vlan configuration 102 + member evpn-instance 102 vni 10102 + vlan configuration 201 + member evpn-instance 201 vni 10201 + vlan configuration 202 + member evpn-instance 202 vni 10202 + vlan configuration 901 + member vni 50901 + vlan configuration 902 + member vni 50902 + """, + ) set_module_args( dict( config=[ @@ -676,7 +1124,6 @@ class TestIosVlansModule(TestIosModule): ), ], state="merged", - configuration=True, ), ) result = self.execute_module(changed=True) @@ -687,21 +1134,37 @@ class TestIosVlansModule(TestIosModule): self.assertEqual(result["commands"], commands) def test_ios_vlans_config_merged_idempotent(self): - self.execute_show_command_2 = self.mock_execute_show_command_2.start() - self.execute_show_command_2.return_value = dedent( + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = dedent( """\ vlan configuration 101 - member evpn-instance 101 vni 10101 + member evpn-instance 101 vni 10101 vlan configuration 102 - member evpn-instance 102 vni 10102 + member evpn-instance 102 vni 10102 vlan configuration 201 - member evpn-instance 201 vni 10201 + member evpn-instance 201 vni 10201 vlan configuration 202 - member evpn-instance 202 vni 10202 + member evpn-instance 202 vni 10202 vlan configuration 901 - member vni 50901 + member vni 50901 vlan configuration 902 - member vni 50902 + member vni 50902 + """, + ) + self.execute_show_command.return_value = dedent( + """\ + vlan configuration 101 + member evpn-instance 101 vni 10101 + vlan configuration 102 + member evpn-instance 102 vni 10102 + vlan configuration 201 + member evpn-instance 201 vni 10201 + vlan configuration 202 + member evpn-instance 202 vni 10202 + vlan configuration 901 + member vni 50901 + vlan configuration 902 + member vni 50902 """, ) set_module_args( @@ -716,27 +1179,27 @@ class TestIosVlansModule(TestIosModule): ), ], state="merged", - configuration=True, ), ) self.execute_module(changed=False, commands=[], sort=True) def test_ios_vlans_config_overridden(self): - self.execute_show_command_2 = self.mock_execute_show_command_2.start() - self.execute_show_command_2.return_value = dedent( + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( """\ vlan configuration 101 - member evpn-instance 101 vni 10101 + member evpn-instance 101 vni 10101 vlan configuration 102 - member evpn-instance 102 vni 10102 + member evpn-instance 102 vni 10102 vlan configuration 201 - member evpn-instance 201 vni 10201 + member evpn-instance 201 vni 10201 vlan configuration 202 - member evpn-instance 202 vni 10202 + member evpn-instance 202 vni 10202 vlan configuration 901 - member vni 50901 + member vni 50901 vlan configuration 902 - member vni 50902 + member vni 50902 """, ) set_module_args( @@ -758,29 +1221,29 @@ class TestIosVlansModule(TestIosModule): ), ], state="overridden", - configuration=True, ), ) result = self.execute_module(changed=True) commands = [ - "vlan configuration 101", - "no member evpn-instance 101 vni 10101", - "vlan configuration 102", - "no member evpn-instance 102 vni 10102", + "vlan configuration 201", + "no member evpn-instance 201 vni 10201", + "vlan configuration 202", + "no member evpn-instance 202 vni 10202", + "vlan configuration 901", + "no member vni 50901", + "vlan configuration 902", + "no member vni 50902", "vlan configuration 101", "member evpn-instance 102 vni 10102", "vlan configuration 102", "member evpn-instance 101 vni 10101", - "no vlan configuration 201", - "no vlan configuration 202", - "no vlan configuration 901", - "no vlan configuration 902", ] self.assertEqual(result["commands"], commands) - def test_ios_delete_vlans_config(self): - self.execute_show_command_2 = self.mock_execute_show_command_2.start() - self.execute_show_command_2.return_value = dedent( + def test_ios_delete_vlans_config_2(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( """\ vlan configuration 101 member evpn-instance 101 vni 10101 @@ -801,16 +1264,48 @@ class TestIosVlansModule(TestIosModule): config=[ {"vlan_id": 101}, ], - configuration=True, state="deleted", ), ) result = self.execute_module(changed=True) + commands = ["vlan configuration 101", "no member evpn-instance 101 vni 10101"] + self.assertEqual(result["commands"], commands) + + def test_ios_purged_vlans_config(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + vlan configuration 101 + member evpn-instance 101 vni 10101 + vlan configuration 102 + member evpn-instance 102 vni 10102 + vlan configuration 201 + member evpn-instance 201 vni 10201 + vlan configuration 202 + member evpn-instance 202 vni 10202 + vlan configuration 901 + member vni 50901 + vlan configuration 902 + member vni 50902 + """, + ) + set_module_args( + dict( + config=[ + {"vlan_id": 101}, + ], + state="purged", + ), + ) + result = self.execute_module(changed=True) commands = ["no vlan configuration 101"] self.assertEqual(result["commands"], commands) - def test_vlans_config_rendered(self): - self.execute_show_command_2.return_value = dedent( + def test_ios_vlans_config_rendered(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( """\ """, ) @@ -825,7 +1320,6 @@ class TestIosVlansModule(TestIosModule): ), ), ], - configuration=True, state="rendered", ), ) @@ -836,11 +1330,50 @@ class TestIosVlansModule(TestIosModule): result = self.execute_module(changed=False) self.assertEqual(result["rendered"], commands) - def test_vlans_config_parsed(self): + def test_ios_vlans_config_parsed(self): set_module_args( dict( running_config=dedent( """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 101 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 101 enet 100101 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + vlan configuration 101 member evpn-instance 101 vni 10101 vlan configuration 102 @@ -850,30 +1383,69 @@ class TestIosVlansModule(TestIosModule): """, ), state="parsed", - configuration=True, ), ) parsed = [ { - "member": { - "evi": 101, - "vni": 10101, - }, + "name": "default", + "vlan_id": 1, + "state": "active", + "shutdown": "disabled", + "mtu": 1500, + }, + { + "name": "RemoteIsInMyName", "vlan_id": 101, + "state": "active", + "shutdown": "enabled", + "mtu": 610, + "member": {"evi": 101, "vni": 10101}, }, { - "member": { - "evi": 102, - "vni": 10102, - }, - "vlan_id": 102, + "name": "VLAN0150", + "vlan_id": 150, + "state": "active", + "shutdown": "disabled", + "mtu": 1500, + "remote_span": True, + }, + { + "name": "a_very_long_vlan_name_a_very_long_vlan_name", + "vlan_id": 888, + "state": "active", + "shutdown": "disabled", + "mtu": 1500, + }, + { + "name": "fddi-default", + "vlan_id": 1002, + "state": "active", + "shutdown": "enabled", + "mtu": 1500, }, { - "member": { - "vni": 50901, - }, - "vlan_id": 901, + "name": "trcrf-default", + "vlan_id": 1003, + "state": "active", + "shutdown": "enabled", + "mtu": 4472, + }, + { + "name": "fddinet-default", + "vlan_id": 1004, + "state": "active", + "shutdown": "enabled", + "mtu": 1500, + }, + { + "name": "trbrf-default", + "vlan_id": 1005, + "state": "active", + "shutdown": "enabled", + "mtu": 4472, }, + {"vlan_id": 102, "member": {"evi": 102, "vni": 10102}}, + {"vlan_id": 901, "member": {"vni": 50901}}, ] result = self.execute_module(changed=False) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vrf.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vrf.py index d36ea41e1..f39061989 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vrf.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vrf.py @@ -21,9 +21,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_vrf -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -58,7 +58,11 @@ class TestIosVrfModule(TestIosModule): def load_fixtures(self, commands=None): self.get_config.return_value = load_fixture("ios_vrf_config.cfg") - self.exec_command.return_value = (0, load_fixture("ios_vrf_config.cfg").strip(), None) + self.exec_command.return_value = ( + 0, + load_fixture("ios_vrf_config.cfg").strip(), + None, + ) self.load_config.return_value = None def test_ios_vrf_name(self): @@ -158,7 +162,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrfs_local_override_state(self): vrfs = [{"name": "test_1", "state": "absent"}, {"name": "test_2"}] set_module_args(dict(vrfs=vrfs, description="test string")) - commands = ["no vrf definition test_1", "vrf definition test_2", "description test string"] + commands = [ + "no vrf definition test_1", + "vrf definition test_2", + "description test string", + ] self.execute_module(changed=True, commands=commands, sort=False) def test_ios_vrf_route_both(self): @@ -178,7 +186,9 @@ class TestIosVrfModule(TestIosModule): self.execute_module(changed=True, commands=commands, sort=False) def test_ios_vrf_route_import(self): - set_module_args(dict(name="test_6", rd="3:100", route_import=["3:100", "4:100"])) + set_module_args( + dict(name="test_6", rd="3:100", route_import=["3:100", "4:100"]), + ) commands = [ "vrf definition test_6", "rd 3:100", @@ -188,7 +198,9 @@ class TestIosVrfModule(TestIosModule): self.execute_module(changed=True, commands=commands, sort=False) def test_ios_vrf_route_export(self): - set_module_args(dict(name="test_7", rd="4:100", route_export=["3:100", "4:100"])) + set_module_args( + dict(name="test_7", rd="4:100", route_export=["3:100", "4:100"]), + ) commands = [ "vrf definition test_7", "rd 4:100", @@ -210,7 +222,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrf_route_both_ipv4(self): set_module_args( - dict(name="test_9", rd="168.0.0.9:100", route_both_ipv4=["168.0.0.9:100", "3:100"]), + dict( + name="test_9", + rd="168.0.0.9:100", + route_both_ipv4=["168.0.0.9:100", "3:100"], + ), ) commands = [ "vrf definition test_9", @@ -281,7 +297,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrf_route_both_ipv6(self): set_module_args( - dict(name="test_13", rd="2:100", route_both_ipv6=["2:100", "168.0.0.13:100"]), + dict( + name="test_13", + rd="2:100", + route_both_ipv6=["2:100", "168.0.0.13:100"], + ), ) commands = [ "vrf definition test_13", @@ -301,7 +321,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrf_route_import_ipv6(self): set_module_args( - dict(name="test_14", rd="3:100", route_import_ipv6=["3:100", "168.0.0.14:100"]), + dict( + name="test_14", + rd="3:100", + route_import_ipv6=["3:100", "168.0.0.14:100"], + ), ) commands = [ "vrf definition test_14", @@ -317,7 +341,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrf_route_export_ipv6(self): set_module_args( - dict(name="test_15", rd="4:100", route_export_ipv6=["168.0.0.15:100", "4:100"]), + dict( + name="test_15", + rd="4:100", + route_export_ipv6=["168.0.0.15:100", "4:100"], + ), ) commands = [ "vrf definition test_15", @@ -386,7 +414,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrf_interface_brownfield(self): set_module_args(dict(name="test_19", interfaces=["Ethernet1"])) - commands = ["interface Ethernet1", "vrf forwarding test_19", "ip address 1.2.3.4/5"] + commands = [ + "interface Ethernet1", + "vrf forwarding test_19", + "ip address 1.2.3.4/5", + ] self.execute_module(changed=True, commands=commands, sort=False) def test_ios_mdt(self): diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vxlan_vtep.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vxlan_vtep.py index 25b0bc8a6..13e6a5380 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vxlan_vtep.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vxlan_vtep.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_vxlan_vtep -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/utils.py b/ansible_collections/cisco/ios/tests/unit/modules/utils.py index 6184c48c3..87be9cf8e 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/utils.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/utils.py @@ -4,12 +4,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import json +from unittest import TestCase +from unittest.mock import patch + from ansible.module_utils import basic from ansible.module_utils._text import to_bytes -from ansible_collections.cisco.ios.tests.unit.compat import unittest -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch - def set_module_args(args): if "_ansible_remote_tmp" not in args: @@ -40,7 +40,7 @@ def fail_json(*args, **kwargs): raise AnsibleFailJson(kwargs) -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self): self.mock_module = patch.multiple( basic.AnsibleModule, diff --git a/ansible_collections/cisco/ios/tests/unit/plugins/cliconf/test_ios.py b/ansible_collections/cisco/ios/tests/unit/plugins/cliconf/test_ios.py index 0b7cf8704..eb094b2c7 100644 --- a/ansible_collections/cisco/ios/tests/unit/plugins/cliconf/test_ios.py +++ b/ansible_collections/cisco/ios/tests/unit/plugins/cliconf/test_ios.py @@ -31,10 +31,11 @@ try: except ImportError: from mock import MagicMock +from unittest import TestCase + from ansible.module_utils._text import to_bytes from ansible_collections.cisco.ios.plugins.cliconf import ios -from ansible_collections.cisco.ios.tests.unit.compat import unittest b_FIXTURE_DIR = b"%s/fixtures/ios" % ( @@ -49,7 +50,9 @@ def _connection_side_effect(*args, **kwargs): else: value = kwargs.get("command") - fixture_path = path.abspath(b"%s/%s" % (b_FIXTURE_DIR, b"_".join(value.split(b" ")))) + fixture_path = path.abspath( + b"%s/%s" % (b_FIXTURE_DIR, b"_".join(value.split(b" "))), + ) with open(fixture_path, "rb") as file_desc: return file_desc.read() except (OSError, IOError): @@ -63,7 +66,7 @@ def _connection_side_effect(*args, **kwargs): return "Nope" -class TestPluginCLIConfIOS(unittest.TestCase): +class TestPluginCLIConfIOS(TestCase): """Test class for IOS CLI Conf Methods""" def setUp(self): diff --git a/ansible_collections/cisco/ios/tox-ansible.ini b/ansible_collections/cisco/ios/tox-ansible.ini new file mode 100644 index 000000000..5e1f4b36a --- /dev/null +++ b/ansible_collections/cisco/ios/tox-ansible.ini @@ -0,0 +1,10 @@ +[ansible] + +skip = + py3.7 + py3.8 + 2.9 + 2.10 + 2.11 + 2.12 + 2.13 diff --git a/ansible_collections/cisco/ios/tox.ini b/ansible_collections/cisco/ios/tox.ini deleted file mode 100644 index 6ada631cb..000000000 --- a/ansible_collections/cisco/ios/tox.ini +++ /dev/null @@ -1,31 +0,0 @@ -[tox] -minversion = 1.4.2 -envlist = linters -skipsdist = True - -[testenv] -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -[testenv:black] -install_command = pip install {opts} {packages} -commands = - black -v {toxinidir} - -[testenv:linters] -install_command = pip install {opts} {packages} -commands = - black -v --diff --check {toxinidir} - flake8 {posargs} - -[testenv:venv] -commands = {posargs} - -[flake8] -# E123, E125 skipped as they are invalid PEP-8. - -show-source = True -ignore = E123,E125,E203,E402,E501,E741,F401,F811,F841,W503 -max-line-length = 160 -builtins = _ -exclude = .git,.tox,tests/unit/compat/ diff --git a/ansible_collections/cisco/iosxr/.ansible-lint b/ansible_collections/cisco/iosxr/.ansible-lint new file mode 100644 index 000000000..7324ff454 --- /dev/null +++ b/ansible_collections/cisco/iosxr/.ansible-lint @@ -0,0 +1,6 @@ +--- + +profile: production +skip_list: + # ansible-lint does not like the `import-3.11` ignore in tests/sanity/ignore-*.txt + - sanity diff --git a/ansible_collections/cisco/iosxr/.flake8 b/ansible_collections/cisco/iosxr/.flake8 new file mode 100644 index 000000000..9a7fc1251 --- /dev/null +++ b/ansible_collections/cisco/iosxr/.flake8 @@ -0,0 +1,67 @@ +[flake8] + +builtins = _ + +# Print the total number of errors: +count = true + +# Don't even try to analyze these: +extend-exclude = + # No need to traverse egg info dir + *.egg-info, + # tool cache dirs + *_cache + # project env vars + .env, + # GitHub configs + .github, + # Cache files of MyPy + .mypy_cache, + # Cache files of pytest + .pytest_cache, + # Temp dir of pytest-testmon + .tmontmp, + # Occasional virtualenv dir + .venv + # VS Code + .vscode, + # Temporary build dir + build, + # This contains sdists and wheels of ansible-navigator that we don't want to check + dist, + # Metadata of `pip wheel` cmd is autogenerated + pip-wheel-metadata, + # adjacent venv + venv + # ansible won't let me + __init__.py + +# IMPORTANT: avoid using ignore option, always use extend-ignore instead +# Completely and unconditionally ignore the following errors: +extend-ignore = + F841, + # line-length + E501, + # module level import not at top of file + E402 + +# Accessibility/large fonts and PEP8 unfriendly: +max-line-length = 120 + +# Allow certain violations in certain files: +# Please keep both sections of this list sorted, as it will be easier for others to find and add entries in the future +per-file-ignores = + # The following ignores have been researched and should be considered permanent + # each should be preceeded with an explanation of each of the error codes + # If other ignores are added for a specific file in the section following this, + # these will need to be added to that line as well. + + + # S101: Allow the use of assert within the tests directory, since tests require it. + tests/**.py: S101 + + # The following were present during the initial implementation. + # They are expected to be fixed and unignored over time. + +# Count the number of occurrences of each error/warning code and print a report: +statistics = true diff --git a/ansible_collections/cisco/iosxr/.github/CODEOWNERS b/ansible_collections/cisco/iosxr/.github/CODEOWNERS new file mode 100644 index 000000000..e69de29bb diff --git a/ansible_collections/cisco/iosxr/.github/workflows/ack.yml b/ansible_collections/cisco/iosxr/.github/workflows/ack.yml deleted file mode 100644 index fda595dc5..000000000 --- a/ansible_collections/cisco/iosxr/.github/workflows/ack.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml -name: ack - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - pull_request_target: - types: [opened, labeled, unlabeled, synchronize] - -jobs: - ack: - uses: ansible/devtools/.github/workflows/ack.yml@main diff --git a/ansible_collections/cisco/iosxr/.github/workflows/check_label.yml b/ansible_collections/cisco/iosxr/.github/workflows/check_label.yml new file mode 100644 index 000000000..b120bfa32 --- /dev/null +++ b/ansible_collections/cisco/iosxr/.github/workflows/check_label.yml @@ -0,0 +1,11 @@ +--- +name: "Check label" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + pull_request_target: + types: [opened, labeled, unlabeled, synchronize] +jobs: + check_label: + uses: ansible/ansible-content-actions/.github/workflows/check_label.yaml@main diff --git a/ansible_collections/cisco/iosxr/.github/workflows/codecoverage.yml b/ansible_collections/cisco/iosxr/.github/workflows/codecoverage.yml index b425edcc2..3e0f17919 100644 --- a/ansible_collections/cisco/iosxr/.github/workflows/codecoverage.yml +++ b/ansible_collections/cisco/iosxr/.github/workflows/codecoverage.yml @@ -1,8 +1,9 @@ --- -name: Code Coverage +name: "Code coverage" on: # yamllint disable-line rule:truthy push: + branches: [main] pull_request: branches: [ main ] diff --git a/ansible_collections/cisco/iosxr/.github/workflows/draft_release.yml b/ansible_collections/cisco/iosxr/.github/workflows/draft_release.yml new file mode 100644 index 000000000..88b45f2b0 --- /dev/null +++ b/ansible_collections/cisco/iosxr/.github/workflows/draft_release.yml @@ -0,0 +1,18 @@ +--- +name: "Draft release" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + workflow_dispatch: +env: + NAMESPACE: ${{ github.repository_owner }} + COLLECTION_NAME: iosxr + ANSIBLE_COLLECTIONS_PATHS: ./ +jobs: + update_release_draft: + uses: ansible/ansible-content-actions/.github/workflows/draft_release.yaml@main + with: + repo: ${{ github.event.pull_request.head.repo.full_name }} + secrets: + BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/cisco/iosxr/.github/workflows/push.yml b/ansible_collections/cisco/iosxr/.github/workflows/push.yml deleted file mode 100644 index 06d11b8a0..000000000 --- a/ansible_collections/cisco/iosxr/.github/workflows/push.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -# push workflow is shared and expected to perform actions after a merge happens -# on a maintenance branch (default or release). For example updating the -# draft release-notes. -# based on great work from -# https://github.com/T-Systems-MMS/ansible-collection-icinga-director -name: push - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - workflow_dispatch: - -env: - NAMESPACE: cisco - COLLECTION_NAME: iosxr - ANSIBLE_COLLECTIONS_PATHS: ./ - -jobs: - update_release_draft: - uses: ansible/devtools/.github/workflows/push_network.yml@main - with: - repo: ansible-collections/cisco.iosxr - secrets: - BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/cisco/iosxr/.github/workflows/release.yml b/ansible_collections/cisco/iosxr/.github/workflows/release.yml index eb04259d1..6dbb1aa39 100644 --- a/ansible_collections/cisco/iosxr/.github/workflows/release.yml +++ b/ansible_collections/cisco/iosxr/.github/workflows/release.yml @@ -1,12 +1,12 @@ --- -name: release +name: "Release collection" on: # yamllint disable-line rule:truthy release: types: [published] jobs: release: - uses: ansible/devtools/.github/workflows/release_collection.yml@main + uses: ansible/ansible-content-actions/.github/workflows/release.yaml@main with: environment: release secrets: diff --git a/ansible_collections/cisco/iosxr/.github/workflows/tests.yml b/ansible_collections/cisco/iosxr/.github/workflows/tests.yml index 21f8ea565..64409a9a4 100644 --- a/ansible_collections/cisco/iosxr/.github/workflows/tests.yml +++ b/ansible_collections/cisco/iosxr/.github/workflows/tests.yml @@ -1,5 +1,5 @@ --- -name: CI +name: "CI" concurrency: group: ${{ github.head_ref || github.run_id }} @@ -13,15 +13,17 @@ on: # yamllint disable-line rule:truthy - cron: '0 0 * * *' jobs: - ansible-lint: - uses: ansible-network/github_actions/.github/workflows/ansible-lint.yml@main changelog: - uses: ansible-network/github_actions/.github/workflows/changelog.yml@main + uses: ansible/ansible-content-actions/.github/workflows/changelog.yaml@main if: github.event_name == 'pull_request' + build-import: + uses: ansible/ansible-content-actions/.github/workflows/build_import.yaml@main + ansible-lint: + uses: ansible/ansible-content-actions/.github/workflows/ansible_lint.yaml@main sanity: - uses: ansible-network/github_actions/.github/workflows/sanity.yml@main + uses: ansible/ansible-content-actions/.github/workflows/sanity.yaml@main unit-galaxy: - uses: ansible-network/github_actions/.github/workflows/unit_galaxy.yml@main + uses: ansible/ansible-content-actions/.github/workflows/unit.yaml@main unit-source: uses: ansible-network/github_actions/.github/workflows/unit_source.yml@main with: @@ -31,19 +33,20 @@ jobs: all_green: if: ${{ always() }} needs: - - ansible-lint - changelog + - build-import - sanity - unit-galaxy + - ansible-lint - unit-source runs-on: ubuntu-latest steps: - run: >- python -c "assert 'failure' not in set([ - '${{ needs.ansible-lint.result }}', '${{ needs.changelog.result }}', '${{ needs.sanity.result }}', '${{ needs.unit-galaxy.result }}', + '${{ needs.ansible-lint.result }}', '${{ needs.unit-source.result }}' ])" diff --git a/ansible_collections/cisco/iosxr/.pre-commit-config.yaml b/ansible_collections/cisco/iosxr/.pre-commit-config.yaml index 8fdbd4b3a..90167726d 100644 --- a/ansible_collections/cisco/iosxr/.pre-commit-config.yaml +++ b/ansible_collections/cisco/iosxr/.pre-commit-config.yaml @@ -3,7 +3,6 @@ repos: - repo: https://github.com/ansible-network/collection_prep rev: 1.1.1 hooks: - # - id: autoversion # removed as being handled by GHA push and release drafter - id: update-docs - repo: https://github.com/pre-commit/pre-commit-hooks @@ -23,7 +22,7 @@ repos: - id: add-trailing-comma - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.0.3" + rev: "v4.0.0-alpha.8" hooks: - id: prettier entry: env CI=1 bash -c "prettier --list-different . || ec=$? && prettier --loglevel=error --write . && exit $ec" @@ -34,13 +33,18 @@ repos: - prettier-plugin-toml - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort name: Sort import statements using isort args: ["--filter-files"] - repo: https://github.com/psf/black - rev: 23.9.1 + rev: 23.12.1 hooks: - id: black + + - repo: https://github.com/pycqa/flake8 + rev: 7.0.0 + hooks: + - id: flake8 diff --git a/ansible_collections/cisco/iosxr/.zuul.yaml b/ansible_collections/cisco/iosxr/.zuul.yaml deleted file mode 100644 index a892ec722..000000000 --- a/ansible_collections/cisco/iosxr/.zuul.yaml +++ /dev/null @@ -1,8 +0,0 @@ ---- -- project: - check: - jobs: - - ansible-tox-linters - gate: - jobs: - - ansible-tox-linters diff --git a/ansible_collections/cisco/iosxr/CHANGELOG.rst b/ansible_collections/cisco/iosxr/CHANGELOG.rst index b2f32296d..dfed48dc5 100644 --- a/ansible_collections/cisco/iosxr/CHANGELOG.rst +++ b/ansible_collections/cisco/iosxr/CHANGELOG.rst @@ -5,6 +5,68 @@ Cisco Iosxr Collection Release Notes .. contents:: Topics +v9.0.0 +====== + +Major Changes +------------- + +- Update the netcommon base version to support cli_restore plugin. + +Minor Changes +------------- + +- Add support for cli_restore functionality. +- Please refer the PR to know more about core changes (https://github.com/ansible-collections/ansible.netcommon/pull/618). +- cli_restore module is part of netcommon. + +v8.0.0 +====== + +Major Changes +------------- + +- This release removes previously deprecated module and attributes from this collection. Please refer to the **Removed Features** section for details. + +Removed Features (previously deprecated) +---------------------------------------- + +- Remove deprecated iosxr_logging module which is replaced with iosxr_logging_global resource module. + +v7.2.0 +====== + +Minor Changes +------------- + +- Add missing options in afi and safi in address-family of bgp_templates RM. + +Bugfixes +-------- + +- Fix 'afi' value in bgp_templates RM to valid values. + +v7.1.0 +====== + +Minor Changes +------------- + +- iosxr_facts - Add cdp neighbors in ansible_net_neighbors dictionary (https://github.com/ansible-collections/cisco.iosxr/pull/457). + +v7.0.0 +====== + +Release Summary +--------------- + +Starting from this release, the minimum `ansible-core` version this collection requires is `2.14.0`. The last known version compatible with ansible-core<2.14 is `v6.1.1`. + +Major Changes +------------- + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. + v6.1.1 ====== @@ -323,7 +385,7 @@ Minor Changes New Modules ----------- -- iosxr_hostname - Manages hostname resource module +- iosxr_hostname - Resource module to configure hostname. v2.6.0 ====== @@ -348,7 +410,7 @@ Documentation Changes New Modules ----------- -- iosxr_snmp_server - Manages snmp-server resource module +- iosxr_snmp_server - Resource module to configure snmp server. v2.5.0 ====== @@ -384,7 +446,7 @@ Bugfixes New Modules ----------- -- iosxr_logging_global - Manages logging attributes of Cisco IOSXR network devices +- iosxr_logging_global - Resource module to configure logging. v2.3.0 ====== @@ -406,7 +468,7 @@ Bugfixes New Modules ----------- -- iosxr_prefix_lists - Prefix-Lists resource module. +- iosxr_prefix_lists - Resource module to configure prefix lists. v2.2.0 ====== @@ -492,9 +554,9 @@ Bugfixes New Modules ----------- -- iosxr_bgp_address_family - Manages BGP Address Family resource module. -- iosxr_bgp_global - Manages BGP global resource module. -- iosxr_bgp_neighbor_address_family - Manages BGP neighbor address family resource module. +- iosxr_bgp_address_family - Resource module to configure BGP Address family. +- iosxr_bgp_global - Resource module to configure BGP. +- iosxr_bgp_neighbor_address_family - Resource module to configure BGP Neighbor Address family. v1.2.1 ====== @@ -522,7 +584,7 @@ Bugfixes New Modules ----------- -- iosxr_ospf_interfaces - OSPF Interfaces Resource Module. +- iosxr_ospf_interfaces - Resource module to configure OSPF interfaces. v1.1.0 ====== @@ -536,7 +598,7 @@ Minor Changes New Modules ----------- -- iosxr_ospfv3 - ospfv3 resource module +- iosxr_ospfv3 - Resource module to configure OSPFv3. v1.0.5 ====== @@ -600,25 +662,22 @@ Netconf New Modules ----------- -- iosxr_acl_interfaces - ACL interfaces resource module -- iosxr_acls - ACLs resource module -- iosxr_banner - Manage multiline banners on Cisco IOS XR devices -- iosxr_bgp - Configure global BGP protocol settings on Cisco IOS-XR -- iosxr_command - Run commands on remote devices running Cisco IOS XR -- iosxr_config - Manage Cisco IOS XR configuration sections -- iosxr_facts - Get facts about iosxr devices. -- iosxr_interface - (deprecated, removed after 2022-06-01) Manage Interface on Cisco IOS XR network devices -- iosxr_interfaces - Interfaces resource module -- iosxr_l2_interfaces - L2 interfaces resource module -- iosxr_l3_interfaces - L3 interfaces resource module -- iosxr_lacp - LACP resource module -- iosxr_lacp_interfaces - LACP interfaces resource module -- iosxr_lag_interfaces - LAG interfaces resource module -- iosxr_lldp_global - LLDP resource module -- iosxr_lldp_interfaces - LLDP interfaces resource module -- iosxr_logging - Configuration management of system logging services on network devices +- iosxr_acl_interfaces - Resource module to configure ACL interfaces. +- iosxr_acls - Resource module to configure ACLs. +- iosxr_banner - Module to configure multiline banners. +- iosxr_command - Module to run commands on remote devices. +- iosxr_config - Module to manage configuration sections. +- iosxr_facts - Module to collect facts from remote devices. +- iosxr_interfaces - Resource module to configure interfaces. +- iosxr_l2_interfaces - Resource Module to configure L2 interfaces. +- iosxr_l3_interfaces - Resource module to configure L3 interfaces. +- iosxr_lacp - Resource module to configure LACP. +- iosxr_lacp_interfaces - Resource module to configure LACP interfaces. +- iosxr_lag_interfaces - Resource module to configure LAG interfaces. +- iosxr_lldp_global - Resource module to configure LLDP. +- iosxr_lldp_interfaces - Resource module to configure LLDP interfaces. - iosxr_netconf - Configures NetConf sub-system service on Cisco IOS-XR devices -- iosxr_ospfv2 - OSPFv2 resource module -- iosxr_static_routes - Static routes resource module -- iosxr_system - Manage the system attributes on Cisco IOS XR devices -- iosxr_user - Manage the aggregate of local users on Cisco IOS XR device +- iosxr_ospfv2 - Resource module to configure OSPFv2. +- iosxr_static_routes - Resource module to configure static routes. +- iosxr_system - Module to manage the system attributes. +- iosxr_user - Module to manage the aggregates of local users. diff --git a/ansible_collections/cisco/iosxr/FILES.json b/ansible_collections/cisco/iosxr/FILES.json index 6a5e295ed..cb0109374 100644 --- a/ansible_collections/cisco/iosxr/FILES.json +++ b/ansible_collections/cisco/iosxr/FILES.json @@ -8,80 +8,73 @@ "format": 1 }, { - "name": "codecov.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2", + "name": ".github", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": ".zuul.yaml", + "name": ".github/dependabot.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "98905acf2eec9aa791cbf5a9effe6e7402bfaa3d2d204c30013120e00668da6e", + "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461", "format": 1 }, { - "name": "LICENSE", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "name": ".github/workflows", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": ".yamllint", + "name": ".github/workflows/codecoverage.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", + "chksum_sha256": "57e1fa3c1edef3b462e23b36f5ea116f8675a71d7f49731193e38b708c859742", "format": 1 }, { - "name": "requirements.txt", + "name": ".github/workflows/draft_release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0aaeda602db4a8ddfe5bc8dd02ee4f0b3f9bb6ca8cdbf621f182aa97684f9cf3", - "format": 1 - }, - { - "name": "meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "21ca3cc510cc10bdf4e5e307ddb88f579a61d9930590df5aa0f9651138e48c96", "format": 1 }, { - "name": "meta/runtime.yml", + "name": ".github/workflows/check_label.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "282baf25a62b30df4890c49e1c801e8cae2c99f5ae8fbc2b8cdfde9696b0fd86", + "chksum_sha256": "9eb6abad2038b10cd6ea70310aa88d163f10c374d1728df29bb553eff2acfaba", "format": 1 }, { - "name": "meta/__init__.py", + "name": ".github/workflows/tests.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b008151848bb3b3ae567b7e86cc9427a92d3d6a1251d5f5bcc8b006c43e1db00", "format": 1 }, { - "name": ".config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".github/workflows/release.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2e3f90a3147d93b97347d8418352f23e201417e05539a466399dd258a65d699c", "format": 1 }, { - "name": ".config/ansible-lint.yml", + "name": ".github/CODEOWNERS", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f9938ba933b832ccd61f3871926f0e9f9380d87b1eae1b678f4faf8e2a43caaa", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "README.md", + "name": ".github/release-drafter.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc53e9f4e2f3828eb3c7759244b530b25b54fc4cc8d036b43110b170cd875d6d", + "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", "format": 1 }, { @@ -92,325 +85,346 @@ "format": 1 }, { - "name": "plugins/terminal", + "name": "plugins/doc_fragments", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/terminal/iosxr.py", + "name": "plugins/doc_fragments/iosxr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d394b38929e905705fa833d4b590809c2af92af65a020d0ae91d5d2d1db72552", + "chksum_sha256": "183557f42150c3888baca407c30a651bb6d0c70a06ac55f409b271323dfcbacf", "format": 1 }, { - "name": "plugins/terminal/__init__.py", + "name": "plugins/doc_fragments/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/inventory", + "name": "plugins/lookup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/inventory/__init__.py", + "name": "plugins/lookup/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/netconf", + "name": "plugins/action", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/netconf/iosxr.py", + "name": "plugins/action/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73becb51b5fb1fb658f10fb8e769968743f8568c6e51dc1efda0849ca47eb8e0", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/netconf/__init__.py", + "name": "plugins/action/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/cache", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/hostname.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/cache/__init__.py", + "name": "plugins/action/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/cliconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/lacp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/cliconf/iosxr.py", + "name": "plugins/action/interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0f18b848a9e72c90c0ce622e251140d5f1382feb76ead150b765b21691ca271b", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/cliconf/__init__.py", + "name": "plugins/action/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/plugin_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/bgp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/plugin_utils/__init__.py", + "name": "plugins/action/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/lag_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_prefix_lists.py", + "name": "plugins/action/iosxr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b3f0327ec949a4b8ab7a5048a103a5cb3289b024622abec4bbe2b3492804c6c", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_lldp_global.py", + "name": "plugins/action/command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49bc5864ee42613d3a0cac34d9c146fb97297ef461d7fa497c94162662160e59", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_l3_interfaces.py", + "name": "plugins/action/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6c6340d2945f3e168b9a9fcd03b8abae7ee52871b76579ff65b0b4903da00f6", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_ntp_global.py", + "name": "plugins/action/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44b57fde643c0f5a18af667beb17595dfc30158fe67ca88402360fda946eceaa", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/iosxr_logging.py", + "name": "plugins/action/system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb44b2574a5805f3a9c9a404975b04cf08a9904909005d03af66af013d84457c", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_ospf_interfaces.py", + "name": "plugins/action/bgp_neighbor_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab437abd41913bd6920581de125b9066482173009f6b622f626274d8836cda86", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_lag_interfaces.py", + "name": "plugins/action/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "569864637dc35847d5a0aacf66c5409fb65f4710a2e84e9799a80eab0339294b", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_config.py", + "name": "plugins/action/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba4792a4d08586afb467f7e0cf3dd6d6d5fcc47d36422a959f5184fc8d57cc06", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_bgp_templates.py", + "name": "plugins/action/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40ee7eb47dd6a3033bc45b091baa7ae3fba0526bca4fe37df5bf10a6689db834", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_interfaces.py", + "name": "plugins/action/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1e798a795b46dff95909b6b4011b547615e62f5dc54386937db8295093e2d18", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_hostname.py", + "name": "plugins/action/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1f8d7e5854c1c58c1042dbccaa889a900ee6cea16e60d4e07bddedb78e6f47bf", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_bgp_global.py", + "name": "plugins/action/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bbdd49a43dc1e503dc098cee9c4674e6361f84ca2ed4322f61f8cb13cca170ad", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_banner.py", + "name": "plugins/action/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8eb8ad5c48dd48fad1e11367cd855dc063ce885756af15ffebdc7f532c4df8d0", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/__init__.py", + "name": "plugins/action/banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_command.py", + "name": "plugins/action/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "196518472d9b34a2a21ae411f2502cf727a43a514cd6ddc41c7f8901ba324d09", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_facts.py", + "name": "plugins/action/user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c6cb58faec6618afd00f86a150b6c988ec45eee37374b68dba4ebea2fbad540", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_acl_interfaces.py", + "name": "plugins/action/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "275c9849b7acc55cbe09e5e0f0ad131d5a5d353b81afae668cb09bf3790adf33", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_logging_global.py", + "name": "plugins/action/logging.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1077c960c02152e04c430f7cd1d297fb13561bdc69f57487aa1f5f1a4812c476", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_acls.py", + "name": "plugins/action/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bc4cd90965c93b844a1f92b190ee7d7b04a9f9db28a3ffe06827f5019e37aace", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_ping.py", + "name": "plugins/action/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ef89908231a1608a01697d48679fa84d68ec3c15b92578121f404f992f261cb", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_l2_interfaces.py", + "name": "plugins/action/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c1d442ca73d5a3659890b219f3644d6f6017a1741a774003e21f8f9d93fdaec", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_snmp_server.py", + "name": "plugins/action/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61a2f4ec4c96619ce0f0a2a17e16c4b60782521b37c092a1d9e902e59b21743b", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_bgp_address_family.py", + "name": "plugins/action/config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4f4ad72baa6d8b68c826b6847e8a596f71412bc4df59baedadfa8442886de4b3", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_netconf.py", + "name": "plugins/action/netconf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e82057821034292044e1bf88de21e27e440ab0c733dabc12538937fffb0f92c6", + "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", "format": 1 }, { - "name": "plugins/modules/iosxr_user.py", + "name": "plugins/cache", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/cache/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d671a10633187ffc93ffaf4cecacc9f2075291f4c8d56507fd804cc3007e3bcd", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/iosxr_ospfv3.py", + "name": "plugins/inventory", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/inventory/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa830b22d8c7b638523ce66b715e546f426f9fcde1ea6397d4fdf2475fe05610", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/iosxr_lacp_interfaces.py", + "name": "plugins/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/modules/iosxr_ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "72e780af8c3b18294edbe23fd39c1a2a9d180b0866f61be108dc3e5ce40e7cf8", + "chksum_sha256": "aa830b22d8c7b638523ce66b715e546f426f9fcde1ea6397d4fdf2475fe05610", "format": 1 }, { - "name": "plugins/modules/iosxr_lacp.py", + "name": "plugins/modules/iosxr_bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a4e892df5e655246bac1268b8830f4aedabe3da7f5589cf658b88d81119e972", + "chksum_sha256": "bbdd49a43dc1e503dc098cee9c4674e6361f84ca2ed4322f61f8cb13cca170ad", "format": 1 }, { - "name": "plugins/modules/iosxr_ospfv2.py", + "name": "plugins/modules/iosxr_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f05278972e5a7fac3caea9d2373c1dc4c2cd13d8f686fd8fc14c46d86426e676", + "chksum_sha256": "ba4792a4d08586afb467f7e0cf3dd6d6d5fcc47d36422a959f5184fc8d57cc06", "format": 1 }, { - "name": "plugins/modules/iosxr_system.py", + "name": "plugins/modules/iosxr_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "193c0aa18d31526387e4b0c84826661613da5ebe5dca17b66ec02e3c21f6fc82", + "chksum_sha256": "d671a10633187ffc93ffaf4cecacc9f2075291f4c8d56507fd804cc3007e3bcd", "format": 1 }, { @@ -421,10 +435,66 @@ "format": 1 }, { - "name": "plugins/modules/iosxr_static_routes.py", + "name": "plugins/modules/iosxr_lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8101a07f18d5eb1098681b40627c3d64b660bb767040a59f81ab7655d785b0fb", + "chksum_sha256": "569864637dc35847d5a0aacf66c5409fb65f4710a2e84e9799a80eab0339294b", + "format": 1 + }, + { + "name": "plugins/modules/iosxr_command.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "196518472d9b34a2a21ae411f2502cf727a43a514cd6ddc41c7f8901ba324d09", + "format": 1 + }, + { + "name": "plugins/modules/iosxr_bgp_address_family.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4f4ad72baa6d8b68c826b6847e8a596f71412bc4df59baedadfa8442886de4b3", + "format": 1 + }, + { + "name": "plugins/modules/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "plugins/modules/iosxr_lacp_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "72e780af8c3b18294edbe23fd39c1a2a9d180b0866f61be108dc3e5ce40e7cf8", + "format": 1 + }, + { + "name": "plugins/modules/iosxr_ospf_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ab437abd41913bd6920581de125b9066482173009f6b622f626274d8836cda86", + "format": 1 + }, + { + "name": "plugins/modules/iosxr_acl_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "275c9849b7acc55cbe09e5e0f0ad131d5a5d353b81afae668cb09bf3790adf33", + "format": 1 + }, + { + "name": "plugins/modules/iosxr_ntp_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "44b57fde643c0f5a18af667beb17595dfc30158fe67ca88402360fda946eceaa", + "format": 1 + }, + { + "name": "plugins/modules/iosxr_static_routes.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8101a07f18d5eb1098681b40627c3d64b660bb767040a59f81ab7655d785b0fb", "format": 1 }, { @@ -435,140 +505,147 @@ "format": 1 }, { - "name": "plugins/sub_plugins", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/iosxr_logging_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1077c960c02152e04c430f7cd1d297fb13561bdc69f57487aa1f5f1a4812c476", "format": 1 }, { - "name": "plugins/sub_plugins/grpc", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/iosxr_acls.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bc4cd90965c93b844a1f92b190ee7d7b04a9f9db28a3ffe06827f5019e37aace", "format": 1 }, { - "name": "plugins/sub_plugins/grpc/iosxr.py", + "name": "plugins/modules/iosxr_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8003d9ffb32e5cd8ab1926463a1ff2f9443eb0566ada4a9150cbf3a82d231293", + "chksum_sha256": "c1e798a795b46dff95909b6b4011b547615e62f5dc54386937db8295093e2d18", "format": 1 }, { - "name": "plugins/sub_plugins/grpc/__init__.py", + "name": "plugins/modules/iosxr_lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8a4e892df5e655246bac1268b8830f4aedabe3da7f5589cf658b88d81119e972", "format": 1 }, { - "name": "plugins/sub_plugins/grpc/pb", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/iosxr_hostname.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1f8d7e5854c1c58c1042dbccaa889a900ee6cea16e60d4e07bddedb78e6f47bf", "format": 1 }, { - "name": "plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py", + "name": "plugins/modules/iosxr_lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "978c4404c6dd6bbbe494930f6aa0f8268e9d365e4e8c4cacc8a9eea40de96a41", + "chksum_sha256": "49bc5864ee42613d3a0cac34d9c146fb97297ef461d7fa497c94162662160e59", "format": 1 }, { - "name": "plugins/sub_plugins/grpc/pb/__init__.py", + "name": "plugins/modules/iosxr_snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "61a2f4ec4c96619ce0f0a2a17e16c4b60782521b37c092a1d9e902e59b21743b", "format": 1 }, { - "name": "plugins/doc_fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/iosxr_prefix_lists.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0b3f0327ec949a4b8ab7a5048a103a5cb3289b024622abec4bbe2b3492804c6c", "format": 1 }, { - "name": "plugins/doc_fragments/iosxr.py", + "name": "plugins/modules/iosxr_bgp_templates.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "183557f42150c3888baca407c30a651bb6d0c70a06ac55f409b271323dfcbacf", + "chksum_sha256": "f4eebed9887f02d153af7ca98c7b890e9a76f31b0bdabe84a7a57b6c024eefec", "format": 1 }, { - "name": "plugins/doc_fragments/__init__.py", + "name": "plugins/modules/iosxr_l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8c1d442ca73d5a3659890b219f3644d6f6017a1741a774003e21f8f9d93fdaec", "format": 1 }, { - "name": "plugins/lookup", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/iosxr_facts.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5fda4a78e44200b1b3cd6bece6b0bb5990058dbd355c880e8d3fd8c8674e0d9c", "format": 1 }, { - "name": "plugins/lookup/__init__.py", + "name": "plugins/modules/iosxr_netconf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e82057821034292044e1bf88de21e27e440ab0c733dabc12538937fffb0f92c6", "format": 1 }, { - "name": "plugins/filter", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/iosxr_banner.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8eb8ad5c48dd48fad1e11367cd855dc063ce885756af15ffebdc7f532c4df8d0", "format": 1 }, { - "name": "plugins/filter/__init__.py", + "name": "plugins/modules/iosxr_ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "6ef89908231a1608a01697d48679fa84d68ec3c15b92578121f404f992f261cb", "format": 1 }, { - "name": "plugins/test", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/iosxr_ospfv2.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f05278972e5a7fac3caea9d2373c1dc4c2cd13d8f686fd8fc14c46d86426e676", "format": 1 }, { - "name": "plugins/test/__init__.py", + "name": "plugins/modules/iosxr_l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c6c6340d2945f3e168b9a9fcd03b8abae7ee52871b76579ff65b0b4903da00f6", "format": 1 }, { - "name": "plugins/module_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/iosxr_system.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "193c0aa18d31526387e4b0c84826661613da5ebe5dca17b66ec02e3c21f6fc82", "format": 1 }, { - "name": "plugins/module_utils/common", + "name": "plugins/module_utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/common/__init__.py", + "name": "plugins/module_utils/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/__init__.py", + "name": "plugins/module_utils/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/common/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", @@ -596,31 +673,38 @@ "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates", + "name": "plugins/module_utils/network/iosxr/utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_global.py", + "name": "plugins/module_utils/network/iosxr/utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25b8c064cd99853d76b014b92f3c76a338938acf94adb3a72fa542472406b942", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_address_family.py", + "name": "plugins/module_utils/network/iosxr/utils/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f1e960a978c09f2a52b03c805161f233eb8ceae9410cec582fac8844654c34f1", + "chksum_sha256": "c445382425553068e00713ecd367720b9b4d4081558e4d8f5cb35c96d511fea9", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_neighbor_address_family.py", + "name": "plugins/module_utils/network/iosxr/iosxr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ccb3f34513a75b6eb7f2935db597bea5be13fb3e4241c5fee2ba0b1b5ead559b", + "chksum_sha256": "f6657f778058c2d8d464841539530043d63499640944be209a90bbd886c1d55e", + "format": 1 + }, + { + "name": "plugins/module_utils/network/iosxr/rm_templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { @@ -631,17 +715,17 @@ "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/ntp_global.py", + "name": "plugins/module_utils/network/iosxr/rm_templates/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fac890a98ecef634dd387d338339354b7dc258f4263a5d54d3941e4acc94a17f", + "chksum_sha256": "6ade3f90bab09cd4105e319c9c003b9d9fc7f5a5c75b507bd3f4ec1f3f8089f3", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/snmp_server.py", + "name": "plugins/module_utils/network/iosxr/rm_templates/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d4e7c9a631f91d84ba1224891fe4397e69b51ba23d06c4c3469e2f8ec6b1fc2e", + "chksum_sha256": "fac890a98ecef634dd387d338339354b7dc258f4263a5d54d3941e4acc94a17f", "format": 1 }, { @@ -652,38 +736,45 @@ "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/ospfv3.py", + "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_neighbor_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea3917736e2a559bd42a445aba19a6995ea8667f10175ffe97a08bf503c8fbd2", + "chksum_sha256": "ccb3f34513a75b6eb7f2935db597bea5be13fb3e4241c5fee2ba0b1b5ead559b", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_templates.py", + "name": "plugins/module_utils/network/iosxr/rm_templates/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "876b6f3b7e30fee8a44bfebeab37157ea103bca3b352d0cdc70939ef2b8861eb", + "chksum_sha256": "d4e7c9a631f91d84ba1224891fe4397e69b51ba23d06c4c3469e2f8ec6b1fc2e", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/acl_interfaces.py", + "name": "plugins/module_utils/network/iosxr/rm_templates/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ade3f90bab09cd4105e319c9c003b9d9fc7f5a5c75b507bd3f4ec1f3f8089f3", + "chksum_sha256": "816f210592bb1df59561a09a6e8f8d785ec92aec48bcc5f0504b3dd47440cf58", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/ospfv2.py", + "name": "plugins/module_utils/network/iosxr/rm_templates/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "816f210592bb1df59561a09a6e8f8d785ec92aec48bcc5f0504b3dd47440cf58", + "chksum_sha256": "ea3917736e2a559bd42a445aba19a6995ea8667f10175ffe97a08bf503c8fbd2", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/ping.py", + "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b790e08ba0a4c1a36274554607d74f62cb773680cd8a326075694d8eee4db64c", + "chksum_sha256": "25b8c064cd99853d76b014b92f3c76a338938acf94adb3a72fa542472406b942", + "format": 1 + }, + { + "name": "plugins/module_utils/network/iosxr/rm_templates/logging_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d486e4deec80e5b9ea169ffc09571cc1674c4dbe2029efff4ad3cb8fe683750a", "format": 1 }, { @@ -694,24 +785,31 @@ "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/logging_global.py", + "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d486e4deec80e5b9ea169ffc09571cc1674c4dbe2029efff4ad3cb8fe683750a", + "chksum_sha256": "f1e960a978c09f2a52b03c805161f233eb8ceae9410cec582fac8844654c34f1", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/rm_templates/prefix_lists.py", + "name": "plugins/module_utils/network/iosxr/rm_templates/bgp_templates.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f3032f6828fe63605f2360f996d3981b6d0677758ff33e87fc60ad2dda1f151", + "chksum_sha256": "876b6f3b7e30fee8a44bfebeab37157ea103bca3b352d0cdc70939ef2b8861eb", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/iosxr.py", + "name": "plugins/module_utils/network/iosxr/rm_templates/ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6657f778058c2d8d464841539530043d63499640944be209a90bbd886c1d55e", + "chksum_sha256": "b790e08ba0a4c1a36274554607d74f62cb773680cd8a326075694d8eee4db64c", + "format": 1 + }, + { + "name": "plugins/module_utils/network/iosxr/rm_templates/prefix_lists.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5f3032f6828fe63605f2360f996d3981b6d0677758ff33e87fc60ad2dda1f151", "format": 1 }, { @@ -729,367 +827,353 @@ "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_address_family", + "name": "plugins/module_utils/network/iosxr/facts/lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/iosxr/facts/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b24aa48cc4250d0c35970a15b79a1ebc374b3fb85ffa93ce1da93d50770faf6c", + "chksum_sha256": "080864178932c583b11f29ceec1d86ba31f0f4d4751dce9d4bcdb30a4136162e", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/static_routes", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "plugins/module_utils/network/iosxr/facts/static_routes/static_routes.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d0fa9a0327c99fbf0af8fe66e68927427e0550c651bd0c20d98a0867e64e4c17", - "format": 1 - }, - { - "name": "plugins/module_utils/network/iosxr/facts/static_routes/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "be87e4de33120eb7c34ddae26f81cce6b290a2031e890782af82ab5200bb953a", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/prefix_lists", + "name": "plugins/module_utils/network/iosxr/facts/legacy", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/legacy/base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "1b3e042fe5528b6be3d3a3830e3856f36348a1ac02d9264774753c2feded3300", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/iosxr/facts/legacy/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0f5787451ba55b8bbb7d7e7bce4d4b63362f83fe13c7f6df8bacd71c26cc9e6f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/hostname", + "name": "plugins/module_utils/network/iosxr/facts/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/hostname/hostname.py", + "name": "plugins/module_utils/network/iosxr/facts/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "778551a6d5240dc85297041639ae94c4a4d6ec0d1781f44b2527081702e62fdc", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/hostname/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "21d2d34be3e88000fa4c64da457b2d85dc53800d3c45583ecc02842e31916163", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lldp_interfaces", + "name": "plugins/module_utils/network/iosxr/facts/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9a6f4b29fc202cb7c343598c50d0de15708207c98e723bea1333bf3451877ff2", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/iosxr/facts/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f4b71b3d54842146e02ab84d93e0d2616790e7039db63b04a3f6ffc618b15bca", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lacp", + "name": "plugins/module_utils/network/iosxr/facts/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lacp/lacp.py", + "name": "plugins/module_utils/network/iosxr/facts/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "080864178932c583b11f29ceec1d86ba31f0f4d4751dce9d4bcdb30a4136162e", + "chksum_sha256": "1bbe7d9835d9c8d883a86444d77ea71c61bf0e9b5927bd4036c880b8b1e57e52", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lacp/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ospfv2", + "name": "plugins/module_utils/network/iosxr/facts/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ospfv2/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a92bb174bb343d43cc987bc2bef2c1a213be19c0b3fc775e1220d88961a1ab4e", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/iosxr/facts/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21d2d34be3e88000fa4c64da457b2d85dc53800d3c45583ecc02842e31916163", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/logging_global", + "name": "plugins/module_utils/network/iosxr/facts/lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/logging_global/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "0de675b8a438054c38af32059948d99e9aa80584cac4d3a862096c5733f8b8d1", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/logging_global/logging_global.py", + "name": "plugins/module_utils/network/iosxr/facts/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "50e7cebaa5d2b4073eb83908be1cdc2e616b90a76a3683fe4909ca55c9fe1e6a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ospfv3", + "name": "plugins/module_utils/network/iosxr/facts/bgp_templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ospfv3/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/bgp_templates/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/iosxr/facts/bgp_templates/bgp_templates.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d9f7585ec696598b8adfbeb1d46670ea49ef94e4811fd41dd5d62cb9574460d", + "chksum_sha256": "ae637abb3b5e35bf8b0c7b9992af8918fe0dcd2086d99c193bc7242f765faa07", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_neighbor_address_family", + "name": "plugins/module_utils/network/iosxr/facts/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_neighbor_address_family/bgp_neighbor_address_family.py", + "name": "plugins/module_utils/network/iosxr/facts/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "76c598a854f41b6c0b661c3b53e5f4d57577d5fe5055f67f291d92b08b612192", + "chksum_sha256": "778551a6d5240dc85297041639ae94c4a4d6ec0d1781f44b2527081702e62fdc", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_neighbor_address_family/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/legacy", + "name": "plugins/module_utils/network/iosxr/facts/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/legacy/base.py", + "name": "plugins/module_utils/network/iosxr/facts/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3eef25f6033d14eeac6bd15f29a4da63b9096c8acb1003688f66106100da3650", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/legacy/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/lldp_interfaces/lldp_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f4b71b3d54842146e02ab84d93e0d2616790e7039db63b04a3f6ffc618b15bca", + "format": 1 + }, + { + "name": "plugins/module_utils/network/iosxr/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/l2_interfaces", + "name": "plugins/module_utils/network/iosxr/facts/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/iosxr/facts/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a92bb174bb343d43cc987bc2bef2c1a213be19c0b3fc775e1220d88961a1ab4e", + "chksum_sha256": "ec3fd5ec1b45f898ae1c2ff3d3e8d51351e2b1c3e8ab821a3848530eb623a538", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ospf_interfaces", + "name": "plugins/module_utils/network/iosxr/facts/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/iosxr/facts/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d04195c95a2e1ff3a77ee404f87cd42fd9483514de5b3feece08a22bdfe77724", + "chksum_sha256": "095dd110baacfacf73b1c5b46462eae782157028bfdf6609ddda26c5ce87ced3", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/acl_interfaces", + "name": "plugins/module_utils/network/iosxr/facts/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/iosxr/facts/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1bbe7d9835d9c8d883a86444d77ea71c61bf0e9b5927bd4036c880b8b1e57e52", + "chksum_sha256": "0f5787451ba55b8bbb7d7e7bce4d4b63362f83fe13c7f6df8bacd71c26cc9e6f", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lldp_global", + "name": "plugins/module_utils/network/iosxr/facts/ntp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lldp_global/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/iosxr/facts/lldp_global/lldp_global.py", + "name": "plugins/module_utils/network/iosxr/facts/ntp_global/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec3fd5ec1b45f898ae1c2ff3d3e8d51351e2b1c3e8ab821a3848530eb623a538", + "chksum_sha256": "daff309945181af4af9bd9e063bb6a8271236a5fe810d11b95adeb9b5ff1e636", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/ntp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/snmp_server", + "name": "plugins/module_utils/network/iosxr/facts/bgp_neighbor_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/iosxr/facts/bgp_neighbor_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "095dd110baacfacf73b1c5b46462eae782157028bfdf6609ddda26c5ce87ced3", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/snmp_server/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/bgp_neighbor_address_family/bgp_neighbor_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "76c598a854f41b6c0b661c3b53e5f4d57577d5fe5055f67f291d92b08b612192", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lacp_interfaces", + "name": "plugins/module_utils/network/iosxr/facts/l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/iosxr/facts/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f3737faee14179f8265f8f1c3a2039bb32de6e6c884161801d09179a813568e", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "20944d6b40f8e0edb1fde36d862f69a34350dbe3a4277270dfd8b7fcaf8cac0e", "format": 1 }, { @@ -1114,136 +1198,150 @@ "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ntp_global", + "name": "plugins/module_utils/network/iosxr/facts/bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ntp_global/ntp_global.py", + "name": "plugins/module_utils/network/iosxr/facts/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "daff309945181af4af9bd9e063bb6a8271236a5fe810d11b95adeb9b5ff1e636", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/ntp_global/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "edf76eb5396aa5b5fd6bdc185a974f51a6ceae7020fd28b5a3cd1fd1a2a99ef4", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lag_interfaces", + "name": "plugins/module_utils/network/iosxr/facts/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/iosxr/facts/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0de675b8a438054c38af32059948d99e9aa80584cac4d3a862096c5733f8b8d1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d0fa9a0327c99fbf0af8fe66e68927427e0550c651bd0c20d98a0867e64e4c17", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_templates", + "name": "plugins/module_utils/network/iosxr/facts/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_templates/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_templates/bgp_templates.py", + "name": "plugins/module_utils/network/iosxr/facts/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae637abb3b5e35bf8b0c7b9992af8918fe0dcd2086d99c193bc7242f765faa07", + "chksum_sha256": "50e7cebaa5d2b4073eb83908be1cdc2e616b90a76a3683fe4909ca55c9fe1e6a", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/interfaces", + "name": "plugins/module_utils/network/iosxr/facts/ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/interfaces/interfaces.py", + "name": "plugins/module_utils/network/iosxr/facts/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a6f4b29fc202cb7c343598c50d0de15708207c98e723bea1333bf3451877ff2", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d04195c95a2e1ff3a77ee404f87cd42fd9483514de5b3feece08a22bdfe77724", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/l3_interfaces", + "name": "plugins/module_utils/network/iosxr/facts/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/iosxr/facts/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "20944d6b40f8e0edb1fde36d862f69a34350dbe3a4277270dfd8b7fcaf8cac0e", + "chksum_sha256": "b24aa48cc4250d0c35970a15b79a1ebc374b3fb85ffa93ce1da93d50770faf6c", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_global", + "name": "plugins/module_utils/network/iosxr/facts/lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_global/bgp_global.py", + "name": "plugins/module_utils/network/iosxr/facts/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "edf76eb5396aa5b5fd6bdc185a974f51a6ceae7020fd28b5a3cd1fd1a2a99ef4", + "chksum_sha256": "9f3737faee14179f8265f8f1c3a2039bb32de6e6c884161801d09179a813568e", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/bgp_global/__init__.py", + "name": "plugins/module_utils/network/iosxr/facts/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/facts/facts.py", + "name": "plugins/module_utils/network/iosxr/facts/ospfv3", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/iosxr/facts/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be87e4de33120eb7c34ddae26f81cce6b290a2031e890782af82ab5200bb953a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "plugins/module_utils/network/iosxr/facts/ospfv3/ospfv3.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3d9f7585ec696598b8adfbeb1d46670ea49ef94e4811fd41dd5d62cb9574460d", "format": 1 }, { @@ -1254,535 +1352,535 @@ "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_address_family", + "name": "plugins/module_utils/network/iosxr/argspec/lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/iosxr/argspec/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb06c342c63aebbc811d95083567b4a051d9aa5a2f8c2fa952931e7a90777e5d", + "chksum_sha256": "a5927bb24072718bf3589f203dc59f01a12d588543b2c1b6073cae257a01a2af", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/static_routes", + "name": "plugins/module_utils/network/iosxr/argspec/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/static_routes/static_routes.py", + "name": "plugins/module_utils/network/iosxr/argspec/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc45db620ae60f0508046c12e231a33435e8d4b5433be6b778965e615173698d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/static_routes/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "41814b7565d7466df54c6a3163afd464f50ebadddc82be1d1fb82d117bb47ccb", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/prefix_lists", + "name": "plugins/module_utils/network/iosxr/argspec/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "844e1316a16a3118600072fc9204757d95ad0ed3162501085d8bac30a6e11804", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/iosxr/argspec/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b35f3445ce05129c8c3b771faf4db6ef5bafbadcdca4d865cd07ada52fac061", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/hostname", + "name": "plugins/module_utils/network/iosxr/argspec/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/hostname/hostname.py", + "name": "plugins/module_utils/network/iosxr/argspec/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87eada9722f328072f51f75820ced43c8024a3a195d275316144ecb833b8d8e2", + "chksum_sha256": "7759ff598b56bc07a99921ff4f94cd65b96ea927ddacf27c7ae00c237dc6c9ce", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/hostname/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lldp_interfaces", + "name": "plugins/module_utils/network/iosxr/argspec/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "3ea8177f270f8a430fa3e62d2589406a854d350b1c732cf8ca27643c102a1c68", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/iosxr/argspec/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b762584a0f4d5b03103e4aa1d901bce30408fa11fce113cbc7941929490b852", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lacp", + "name": "plugins/module_utils/network/iosxr/argspec/lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lacp/lacp.py", + "name": "plugins/module_utils/network/iosxr/argspec/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a5927bb24072718bf3589f203dc59f01a12d588543b2c1b6073cae257a01a2af", + "chksum_sha256": "3212b99c8dc4190c1bd4fdf5b31ab6a0d0d70125bbc8c6f7b3594bd5753cb480", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lacp/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ospfv2", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ospfv2/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_templates/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_templates/bgp_templates.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41814b7565d7466df54c6a3163afd464f50ebadddc82be1d1fb82d117bb47ccb", + "chksum_sha256": "f3ab5cccdddf5c608840b57b814d9b2d4631f0d376f380e8c2d5ef2832625976", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/logging_global", + "name": "plugins/module_utils/network/iosxr/argspec/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/logging_global/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "87eada9722f328072f51f75820ced43c8024a3a195d275316144ecb833b8d8e2", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/logging_global/logging_global.py", + "name": "plugins/module_utils/network/iosxr/argspec/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5f27a3ff02a06978bf14912e0489587f9cbf17336065ed046ae66d020e98ea4", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ospfv3", + "name": "plugins/module_utils/network/iosxr/argspec/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ospfv3/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/iosxr/argspec/lldp_interfaces/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fda0edcc4ebdc1b2da68bc918fc9a72551c1f266dffe0999faab28934cca882d", + "chksum_sha256": "1b762584a0f4d5b03103e4aa1d901bce30408fa11fce113cbc7941929490b852", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_neighbor_address_family", + "name": "plugins/module_utils/network/iosxr/argspec/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "plugins/module_utils/network/iosxr/argspec/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_neighbor_address_family/bgp_neighbor_address_family.py", + "name": "plugins/module_utils/network/iosxr/argspec/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0cd93cff30a775adcc07eaf0c792817bfe1562d83777cd6d6956a81e01750739", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_neighbor_address_family/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c698527971eb9394265200984d070719a047cd3c3c1443ab385510e99d39f74b", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/l2_interfaces", + "name": "plugins/module_utils/network/iosxr/argspec/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/iosxr/argspec/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ea8177f270f8a430fa3e62d2589406a854d350b1c732cf8ca27643c102a1c68", + "chksum_sha256": "6e8abca564d7d892efe70b5aaa391567175176cd5494cd1238029deffcc4174d", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ospf_interfaces", + "name": "plugins/module_utils/network/iosxr/argspec/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/iosxr/argspec/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "20b179841cf2cebbea24a8bda72e5edd74be5419bd476ca734567aa4499cbf52", + "chksum_sha256": "7b35f3445ce05129c8c3b771faf4db6ef5bafbadcdca4d865cd07ada52fac061", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/acl_interfaces", + "name": "plugins/module_utils/network/iosxr/argspec/ntp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/ntp_global/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b801e133d8d321e12dc7289bf1ccd9992d1d7502e683a2cd5d62ef4463ae784b", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/iosxr/argspec/ntp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7759ff598b56bc07a99921ff4f94cd65b96ea927ddacf27c7ae00c237dc6c9ce", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lldp_global", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_neighbor_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lldp_global/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_neighbor_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lldp_global/lldp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c698527971eb9394265200984d070719a047cd3c3c1443ab385510e99d39f74b", - "format": 1 - }, - { - "name": "plugins/module_utils/network/iosxr/argspec/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_neighbor_address_family/bgp_neighbor_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "0cd93cff30a775adcc07eaf0c792817bfe1562d83777cd6d6956a81e01750739", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/snmp_server", + "name": "plugins/module_utils/network/iosxr/argspec/facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/iosxr/argspec/facts/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e8abca564d7d892efe70b5aaa391567175176cd5494cd1238029deffcc4174d", + "chksum_sha256": "be8244aad794929184f824e21f498740f90b47f810cc1ed37cd07b37f8d596e3", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/snmp_server/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ping", + "name": "plugins/module_utils/network/iosxr/argspec/l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ping/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ping/ping.py", + "name": "plugins/module_utils/network/iosxr/argspec/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3a9e672170633f82bf0c1323bc7431b6d88eff5f096c40fdfbed7f851d95ce7c", + "chksum_sha256": "e46afb2541c2aaec2fc690973b351f23ffbc3f07624616e61a7d13d57cf3798f", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/facts", + "name": "plugins/module_utils/network/iosxr/argspec/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/facts/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/facts/facts.py", + "name": "plugins/module_utils/network/iosxr/argspec/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be8244aad794929184f824e21f498740f90b47f810cc1ed37cd07b37f8d596e3", + "chksum_sha256": "0bb198af8188b36cb1235a3b0e1931f4910908076a5c8c3f5fd7d877cbc038d0", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lacp_interfaces", + "name": "plugins/module_utils/network/iosxr/argspec/ping", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/iosxr/argspec/ping/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9531600850e779f65072369be05a2dc142aa10b044864a5aecf72b8305afe1d9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/ping/ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "3a9e672170633f82bf0c1323bc7431b6d88eff5f096c40fdfbed7f851d95ce7c", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/acls", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/acls/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/acls/acls.py", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0bb198af8188b36cb1235a3b0e1931f4910908076a5c8c3f5fd7d877cbc038d0", + "chksum_sha256": "93b1c8d33c5d79a7efac59125f8af5ecca0009cf051810a1aac6234d38bdfaef", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ntp_global", + "name": "plugins/module_utils/network/iosxr/argspec/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ntp_global/ntp_global.py", + "name": "plugins/module_utils/network/iosxr/argspec/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b801e133d8d321e12dc7289bf1ccd9992d1d7502e683a2cd5d62ef4463ae784b", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/ntp_global/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "dc45db620ae60f0508046c12e231a33435e8d4b5433be6b778965e615173698d", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lag_interfaces", + "name": "plugins/module_utils/network/iosxr/argspec/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/iosxr/argspec/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3212b99c8dc4190c1bd4fdf5b31ab6a0d0d70125bbc8c6f7b3594bd5753cb480", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c5f27a3ff02a06978bf14912e0489587f9cbf17336065ed046ae66d020e98ea4", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_templates", + "name": "plugins/module_utils/network/iosxr/argspec/ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_templates/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_templates/bgp_templates.py", + "name": "plugins/module_utils/network/iosxr/argspec/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83017eb412cf98eadb8eaefdf7460d6a39f7a634c36dd756b2634a02c8b73dab", + "chksum_sha256": "20b179841cf2cebbea24a8bda72e5edd74be5419bd476ca734567aa4499cbf52", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/interfaces", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/interfaces/interfaces.py", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "844e1316a16a3118600072fc9204757d95ad0ed3162501085d8bac30a6e11804", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cb06c342c63aebbc811d95083567b4a051d9aa5a2f8c2fa952931e7a90777e5d", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/l3_interfaces", + "name": "plugins/module_utils/network/iosxr/argspec/lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9531600850e779f65072369be05a2dc142aa10b044864a5aecf72b8305afe1d9", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/iosxr/argspec/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e46afb2541c2aaec2fc690973b351f23ffbc3f07624616e61a7d13d57cf3798f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_global", + "name": "plugins/module_utils/network/iosxr/argspec/ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_global/bgp_global.py", + "name": "plugins/module_utils/network/iosxr/argspec/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93b1c8d33c5d79a7efac59125f8af5ecca0009cf051810a1aac6234d38bdfaef", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/argspec/bgp_global/__init__.py", + "name": "plugins/module_utils/network/iosxr/argspec/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "fda0edcc4ebdc1b2da68bc918fc9a72551c1f266dffe0999faab28934cca882d", "format": 1 }, { @@ -1793,325 +1891,346 @@ "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_address_family", + "name": "plugins/module_utils/network/iosxr/config/lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/iosxr/config/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cf952b8205f5fb618712816947770ae4b88100b8a5206a5618b0403d2a17ad16", + "chksum_sha256": "5fb11d241da71d244fcc386e28fd4102d6b632c05f8f55f6259e8d9d72651048", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/static_routes", + "name": "plugins/module_utils/network/iosxr/config/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/static_routes/static_routes.py", + "name": "plugins/module_utils/network/iosxr/config/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4e18a21b3b395e6a88135b71f877f41b66e9aeff88c534b832f45419817a8de1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/static_routes/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "531fb7ad8a7a997633095cb01ffc514865381c45d24e36d17eb553c391becf63", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/prefix_lists", + "name": "plugins/module_utils/network/iosxr/config/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "119d56ea0c0849feb466022d5905927a19c96299fcb1164078eb7481b26b1d59", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/iosxr/config/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2cd165d87a347df66575587a0221e4bd80c26bb6d12098fcf15244aa81c0cd7b", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/hostname", + "name": "plugins/module_utils/network/iosxr/config/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/hostname/hostname.py", + "name": "plugins/module_utils/network/iosxr/config/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2baccb28e2ac374f4ff89eecd211fbfd3bb72b535ca95d424ce60f494eb47f5d", + "chksum_sha256": "26b0b473826e35e9f9ae20509e7c5f7bc00f095b3f487138b018a945291b0174", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/hostname/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lldp_interfaces", + "name": "plugins/module_utils/network/iosxr/config/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "0a9eba4f5bf6d26f534ff9919152e939ce0cc21b8501a0d2df2b61b8890163ee", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/iosxr/config/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d43c06ced71873fc30c4be7d4f919e2c14207452bb1a365620516cf746b9fbcf", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lacp", + "name": "plugins/module_utils/network/iosxr/config/lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lacp/lacp.py", + "name": "plugins/module_utils/network/iosxr/config/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5fb11d241da71d244fcc386e28fd4102d6b632c05f8f55f6259e8d9d72651048", + "chksum_sha256": "e81b0808b1dd9667a81e09a4c39a1d9d2ae30c9d4848385d5222a801c6b9a9dc", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lacp/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ospfv2", + "name": "plugins/module_utils/network/iosxr/config/bgp_templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ospfv2/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/bgp_templates/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/iosxr/config/bgp_templates/bgp_templates.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "531fb7ad8a7a997633095cb01ffc514865381c45d24e36d17eb553c391becf63", + "chksum_sha256": "78761e9389083d5e2ad18725a37721ba994404b29e2f5fef0f83d5e626ed7eb7", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/logging_global", + "name": "plugins/module_utils/network/iosxr/config/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/logging_global/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "2baccb28e2ac374f4ff89eecd211fbfd3bb72b535ca95d424ce60f494eb47f5d", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/logging_global/logging_global.py", + "name": "plugins/module_utils/network/iosxr/config/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "781ef51a098b082d8e3d5cde9be910382c6acf0506270063e604d04a7237129b", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ospfv3", + "name": "plugins/module_utils/network/iosxr/config/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ospfv3/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/iosxr/config/lldp_interfaces/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b21b6481a508c8684ef679bb101893df292ff9b04af0b18b5cedaf3d2132ce3f", + "chksum_sha256": "d43c06ced71873fc30c4be7d4f919e2c14207452bb1a365620516cf746b9fbcf", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family", + "name": "plugins/module_utils/network/iosxr/config/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "plugins/module_utils/network/iosxr/config/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py", + "name": "plugins/module_utils/network/iosxr/config/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd69a43075b1e4572a1bb830d8efc31ba218141246e16cf7154725bc608e2da6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "2b5809b893d79700a7ee8e10c0e36fc8c10ba66a4008abf07fc2e2548a360100", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/l2_interfaces", + "name": "plugins/module_utils/network/iosxr/config/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/iosxr/config/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a9eba4f5bf6d26f534ff9919152e939ce0cc21b8501a0d2df2b61b8890163ee", + "chksum_sha256": "e6aa8e4aaf697e464a933218032e82e3c0dc0f62308ba5d38c3d06ec154708af", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ospf_interfaces", + "name": "plugins/module_utils/network/iosxr/config/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/iosxr/config/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b75e4e77ddc6c397561c1c39fa7aa6608606ba2d815b2fd75f0b8ec9004162b8", + "chksum_sha256": "2cd165d87a347df66575587a0221e4bd80c26bb6d12098fcf15244aa81c0cd7b", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/acl_interfaces", + "name": "plugins/module_utils/network/iosxr/config/ntp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/ntp_global/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "4795017ccd58af737eddbd6554da38a0ddb5573f32dcb098a9d702120c2e4f72", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/iosxr/config/ntp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26b0b473826e35e9f9ae20509e7c5f7bc00f095b3f487138b018a945291b0174", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lldp_global", + "name": "plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lldp_global/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lldp_global/lldp_global.py", + "name": "plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b5809b893d79700a7ee8e10c0e36fc8c10ba66a4008abf07fc2e2548a360100", + "chksum_sha256": "cd69a43075b1e4572a1bb830d8efc31ba218141246e16cf7154725bc608e2da6", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/l3_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/iosxr/config/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/snmp_server", + "name": "plugins/module_utils/network/iosxr/config/l3_interfaces/l3_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "61ed9c696fa29d39b6efcb385d4d9e265370abf60a7b74116072c9e8cc715dfe", + "format": 1 + }, + { + "name": "plugins/module_utils/network/iosxr/config/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/iosxr/config/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6aa8e4aaf697e464a933218032e82e3c0dc0f62308ba5d38c3d06ec154708af", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/snmp_server/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "1b6c923aacec2f03fd8efd5566f5eb388817dafbe91a709a17286cfba77acfbb", "format": 1 }, { @@ -2136,444 +2255,430 @@ "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lacp_interfaces", + "name": "plugins/module_utils/network/iosxr/config/bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/iosxr/config/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "72f8f047d8c9bc3795d281b6b3daf88886c6b12b5a0a4d30898daf923c92d4ec", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d9e3408e81e0d8e65e9c623ec4262089393937bd354fcd42d1fa6cb0bfb88f0b", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/acls", + "name": "plugins/module_utils/network/iosxr/config/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/acls/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/acls/acls.py", + "name": "plugins/module_utils/network/iosxr/config/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b6c923aacec2f03fd8efd5566f5eb388817dafbe91a709a17286cfba77acfbb", + "chksum_sha256": "4e18a21b3b395e6a88135b71f877f41b66e9aeff88c534b832f45419817a8de1", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ntp_global", + "name": "plugins/module_utils/network/iosxr/config/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ntp_global/ntp_global.py", + "name": "plugins/module_utils/network/iosxr/config/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4795017ccd58af737eddbd6554da38a0ddb5573f32dcb098a9d702120c2e4f72", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/ntp_global/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "781ef51a098b082d8e3d5cde9be910382c6acf0506270063e604d04a7237129b", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lag_interfaces", + "name": "plugins/module_utils/network/iosxr/config/ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/iosxr/config/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e81b0808b1dd9667a81e09a4c39a1d9d2ae30c9d4848385d5222a801c6b9a9dc", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b75e4e77ddc6c397561c1c39fa7aa6608606ba2d815b2fd75f0b8ec9004162b8", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_templates", + "name": "plugins/module_utils/network/iosxr/config/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_templates/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_templates/bgp_templates.py", + "name": "plugins/module_utils/network/iosxr/config/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78761e9389083d5e2ad18725a37721ba994404b29e2f5fef0f83d5e626ed7eb7", + "chksum_sha256": "cf952b8205f5fb618712816947770ae4b88100b8a5206a5618b0403d2a17ad16", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/interfaces", + "name": "plugins/module_utils/network/iosxr/config/lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/interfaces/interfaces.py", + "name": "plugins/module_utils/network/iosxr/config/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "119d56ea0c0849feb466022d5905927a19c96299fcb1164078eb7481b26b1d59", + "chksum_sha256": "72f8f047d8c9bc3795d281b6b3daf88886c6b12b5a0a4d30898daf923c92d4ec", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/l3_interfaces", + "name": "plugins/module_utils/network/iosxr/config/ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/iosxr/config/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61ed9c696fa29d39b6efcb385d4d9e265370abf60a7b74116072c9e8cc715dfe", + "chksum_sha256": "b21b6481a508c8684ef679bb101893df292ff9b04af0b18b5cedaf3d2132ce3f", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_global", + "name": "plugins/terminal", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_global/bgp_global.py", + "name": "plugins/terminal/iosxr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d9e3408e81e0d8e65e9c623ec4262089393937bd354fcd42d1fa6cb0bfb88f0b", + "chksum_sha256": "d394b38929e905705fa833d4b590809c2af92af65a020d0ae91d5d2d1db72552", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/config/bgp_global/__init__.py", + "name": "plugins/terminal/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/utils", + "name": "plugins/test", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/utils/__init__.py", + "name": "plugins/test/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/iosxr/utils/utils.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c445382425553068e00713ecd367720b9b4d4081558e4d8f5cb35c96d511fea9", - "format": 1 - }, - { - "name": "plugins/action", + "name": "plugins/cliconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/bgp_global.py", + "name": "plugins/cliconf/iosxr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "9dd6b778419c39c2a0e4b6c9bd64572545e57159a016b8b9e48589d7beb0a672", "format": 1 }, { - "name": "plugins/action/lacp.py", + "name": "plugins/cliconf/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/lag_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "name": "plugins/plugin_utils", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/user.py", + "name": "plugins/plugin_utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "name": "plugins/sub_plugins", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/bgp_address_family.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "name": "plugins/sub_plugins/grpc", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/bgp_neighbor_address_family.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "name": "plugins/sub_plugins/grpc/pb", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/system.py", + "name": "plugins/sub_plugins/grpc/pb/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/static_routes.py", + "name": "plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "978c4404c6dd6bbbe494930f6aa0f8268e9d365e4e8c4cacc8a9eea40de96a41", "format": 1 }, { - "name": "plugins/action/netconf.py", + "name": "plugins/sub_plugins/grpc/iosxr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "8003d9ffb32e5cd8ab1926463a1ff2f9443eb0566ada4a9150cbf3a82d231293", "format": 1 }, { - "name": "plugins/action/hostname.py", + "name": "plugins/sub_plugins/grpc/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/lacp_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", - "format": 1 - }, - { - "name": "plugins/action/logging.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "name": "plugins/filter", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/iosxr.py", + "name": "plugins/filter/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/ntp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "name": "plugins/netconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/snmp_server.py", + "name": "plugins/netconf/iosxr.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "73becb51b5fb1fb658f10fb8e769968743f8568c6e51dc1efda0849ca47eb8e0", "format": 1 }, { - "name": "plugins/action/__init__.py", + "name": "plugins/netconf/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/interface.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "name": "meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/ospfv3.py", + "name": "meta/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/bgp.py", + "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "f1730a69a7cc01e0d832e312c991c5c72435ced82a8fccfdc027ed6596ed6751", "format": 1 }, { - "name": "plugins/action/l2_interfaces.py", + "name": ".ansible-lint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "8e363e6b28b1163bc175b7be848ecf6925803462b9287745d1672dcfd098b095", "format": 1 }, { - "name": "plugins/action/command.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "name": ".config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/acl_interfaces.py", + "name": ".config/ansible-lint.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "f9938ba933b832ccd61f3871926f0e9f9380d87b1eae1b678f4faf8e2a43caaa", "format": 1 }, { - "name": "plugins/action/ospfv2.py", + "name": ".pre-commit-config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "1320c5ff9b11290023c644644c9aabd686c2a042b82808a041c81b89709323b8", "format": 1 }, { - "name": "plugins/action/config.py", + "name": "pyproject.toml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc", "format": 1 }, { - "name": "plugins/action/acls.py", + "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "02f71abaa2298e288406d32303715d8cf7ed39c626c68c0e7aa481629b4e8990", "format": 1 }, { - "name": "plugins/action/l3_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "name": "changelogs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/ospf_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "name": "changelogs/fragments", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/lldp_interfaces.py", + "name": "changelogs/fragments/.keep", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/logging_global.py", + "name": "changelogs/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "e9313ae1bb365e94e03fc01e2c0bd2df437019a987f388ae98e8ec669d498984", "format": 1 }, { - "name": "plugins/action/prefix_lists.py", + "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "0cd0de0b505afc09149bad60bf51162f2c9129c378eebaecc7da9764f8f664cb", "format": 1 }, { - "name": "plugins/action/banner.py", + "name": ".isort.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "5328af170b936cfea2a47b7155e4647a89662e559bc2664cfb93dbab968aaea4", "format": 1 }, { - "name": "plugins/action/facts.py", + "name": ".yamllint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", "format": 1 }, { - "name": "plugins/action/lldp_global.py", + "name": "test-requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03a1c33b41d1f37a93f576495b9755602337fe3b3014893847f232b37fd807d", + "chksum_sha256": "9827b21d24f3ff2ebbcc07b56cb49e610f901f22e0b5fe91fdb329ead368c1f4", "format": 1 }, { - "name": "test-requirements.txt", + "name": ".prettierignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "67ac8fa83eab8c43a702d5aa224225a1c5ff1e4de72df613c63cf60398e51058", + "chksum_sha256": "6fd3c3897f57e5447aa2809cf63ff611cbe624192bcc5e0f849cbb699a39eff8", "format": 1 }, { @@ -2584,6310 +2689,6072 @@ "format": 1 }, { - "name": "tests/sanity", + "name": "tests/integration", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.9.txt", + "name": "tests/integration/target-prefixes.network", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "158e0096bade515d4b5ffdf147a7d68dc5533c6bb8facd1e079639e7e49d9cfb", + "chksum_sha256": "d577d6580d29511474adecf53c2c66b66aced6b624c4f6c3781138d69870707a", "format": 1 }, { - "name": "tests/sanity/ignore-2.13.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8cb3b8f8fe3db0b589c4b3949ddbf715c7faa8917bc28c7d83958164dc2e9678", + "name": "tests/integration/targets", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.11.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a78ebdfd69db8e98d3c61a6296c6b69e1a854edff052dc62a418ee0b4f0c2f48", + "name": "tests/integration/targets/iosxr_ntp_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.10.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f5883f3880f187de0b2e7bcfd12f602d51ce7d2e5ce8b7950bf6be9b54625ea0", + "name": "tests/integration/targets/iosxr_ntp_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.14.txt", + "name": "tests/integration/targets/iosxr_ntp_global/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0874c9664e754bdf0781fc3ab4189276f92a38ed1ebd1c35c88063ee3b4badc", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/sanity/ignore-2.17.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4f6ecb77dad740fd70c0551acbed97a8df654127247051c541b091b07d1c415b", + "name": "tests/integration/targets/iosxr_ntp_global/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.16.txt", + "name": "tests/integration/targets/iosxr_ntp_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4f6ecb77dad740fd70c0551acbed97a8df654127247051c541b091b07d1c415b", + "chksum_sha256": "33b4175617133438627a3921128a558f7c3cfd5e70b930808c06634e4fe3cbc1", "format": 1 }, { - "name": "tests/sanity/ignore-2.12.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "02023c72751a2b4b25bba12df7722b2546c2be0af2a2279ccccb43845bbf27b7", + "name": "tests/integration/targets/iosxr_ntp_global/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.15.txt", + "name": "tests/integration/targets/iosxr_ntp_global/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0874c9664e754bdf0781fc3ab4189276f92a38ed1ebd1c35c88063ee3b4badc", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration/targets/iosxr_ntp_global/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/config.yml", + "name": "tests/integration/targets/iosxr_ntp_global/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_ntp_global/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "de5087316490411841c67aa3307cfdd3acaea09875c9b4dee6852bca7c120764", + "chksum_sha256": "37b4fdb1a797393df3d182478993235633244c539af30725013db77cec0d1178", "format": 1 }, { - "name": "tests/unit", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_ntp_global/tests/common/_populate_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3ed2c59015cb8f315b1a7d5475e42fa855009b2e5d26f656eb6f80eaacf718da", "format": 1 }, { - "name": "tests/unit/requirements.txt", + "name": "tests/integration/targets/iosxr_ntp_global/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", + "chksum_sha256": "be949100104e75250b3f92b5f02d93e8a471631a4ef398d2c24d2030c1b3a57a", "format": 1 }, { - "name": "tests/unit/__init__.py", + "name": "tests/integration/targets/iosxr_ntp_global/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c8999671a348fba3821b25049396c8971fe8a24a577d5d704c8c220c81d0ecf8", "format": 1 }, { - "name": "tests/unit/mock", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_ntp_global/tests/common/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "07b3031d563cd5f7a06f39a5e4edb6f5b3334d8dd70070337cec600a6355b08f", "format": 1 }, { - "name": "tests/unit/mock/vault_helper.py", + "name": "tests/integration/targets/iosxr_ntp_global/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661", + "chksum_sha256": "5ecf37c4d4f8799590d36debba286353a94b76fc0f89929f5cef6cf762337fe3", "format": 1 }, { - "name": "tests/unit/mock/__init__.py", + "name": "tests/integration/targets/iosxr_ntp_global/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "12edb69044ee3a03f3bba8317b8d590ab8f7cb428e0b6047c6e86acbf91cfa23", "format": 1 }, { - "name": "tests/unit/mock/procenv.py", + "name": "tests/integration/targets/iosxr_ntp_global/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8355a91c013778f8b70896222e8223d67b743fd8ba2bf541f4ea4d7d460b01ef", + "chksum_sha256": "3116e5b1f3807158456527c7d2ec5c4ba73c2f53d75a464c9aa0257257279ef1", "format": 1 }, { - "name": "tests/unit/mock/loader.py", + "name": "tests/integration/targets/iosxr_ntp_global/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b", + "chksum_sha256": "4c551ac7c741dcae87dfa4237c9c2387202c54e86e04d9140b8d7684d3560fb2", "format": 1 }, { - "name": "tests/unit/mock/yaml_helper.py", + "name": "tests/integration/targets/iosxr_ntp_global/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "134eef238c83a9611799871b743e49e9bfbcd8bdddf2cc6a7bf69fd1000345b3", + "chksum_sha256": "fd90f3a750d4f51a1d947cd1952156f4b8245d1d09d4741d57b882a9ee302c2f", "format": 1 }, { - "name": "tests/unit/mock/path.py", + "name": "tests/integration/targets/iosxr_ntp_global/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb57942afe0176fd422c5d6575f6b0bdbbd65d6293fe9709629b43febde81bef", + "chksum_sha256": "aa640d9b74a58c56f1bff39b0d710b0f9e072c59d1029e8028071ad927e83119", "format": 1 }, { - "name": "tests/unit/modules", + "name": "tests/integration/targets/iosxr_ntp_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/__init__.py", + "name": "tests/integration/targets/iosxr_ntp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", "format": 1 }, { - "name": "tests/unit/modules/conftest.py", + "name": "tests/integration/targets/iosxr_ntp_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048", + "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac", "format": 1 }, { - "name": "tests/unit/modules/utils.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "28eb2c4f6e6e313a757a627b1f895640d085503b0c65cbca688e55d8679a45de", + "name": "tests/integration/targets/iosxr_facts", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network", + "name": "tests/integration/targets/iosxr_facts/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/__init__.py", + "name": "tests/integration/targets/iosxr_facts/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr", + "name": "tests/integration/targets/iosxr_facts/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_lldp_global.py", + "name": "tests/integration/targets/iosxr_facts/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6c32855b7994966c3f0d9fe82b64d5da43c752733ad6d56ef317a9f589d484e", + "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_lacp_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2b12a50fc121b717616624ff7fc723da7e7b0763020c601f6e15efdaa882e14c", + "name": "tests/integration/targets/iosxr_facts/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_system.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "18ca4af2bfd36878d3dcc62621e3ac8867ed6bd633cb0eb67b9a8c6cd042e827", + "name": "tests/integration/targets/iosxr_facts/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_templates.py", + "name": "tests/integration/targets/iosxr_facts/tests/cli/not_hardware.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "06b203f1f68645ccb42a0209f60daefa26a2772027c6ec7d81ff0279ccdd2287", + "chksum_sha256": "d45c23f2fed05fea77e4d6081381f243f895035b72a52be4a28d46215dd9026a", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_prefix_lists.py", + "name": "tests/integration/targets/iosxr_facts/tests/cli/all_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac76602c2d3f50846008443db4ccfa0e6d860026c8a4fece9d1eb314826f6a27", + "chksum_sha256": "09ddaf160ad114c35a1a1abee7ec06230e2c0c1c20a7e465aa479d25ec892e3a", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_ospfv2.py", + "name": "tests/integration/targets/iosxr_facts/tests/cli/default_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b0b8f75d7702691fda578c450ab02ae3b7a82ed7618b118eff602993dbe27678", + "chksum_sha256": "1db28925de61b31d4d1494430b130beb85579fe7f3ac582b05ef26ced8161c28", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_address_family.py", + "name": "tests/integration/targets/iosxr_facts/tests/cli/invalid_subset.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a48bb138dd97608d6ed2fe493f87712a857546e88afde6d5a3e0e72e28ddd9b", + "chksum_sha256": "9dc93102aaeb6318fa47c746d0ef7e6eecfc39757b5e0af1e9503a309c6118db", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f4c979c923fc77ac99724a0e652ca77888ee74c2f8620fb1f87622b8d77a6aea", + "name": "tests/integration/targets/iosxr_facts/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_ospf_interfaces.py", + "name": "tests/integration/targets/iosxr_facts/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "029def7ced9274ddb6ffa947069e9b7f4cb67a481822387cf0ed13b79b5f3632", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_lldp_interfaces.py", + "name": "tests/integration/targets/iosxr_facts/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "51ec0015ee4e9ad9303753f8ea77c9e4de1f1bd1108e5d3f45d878282e62ef2b", + "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration/targets/iosxr_lacp_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_neighbor_address_family.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d79eaea2cf9e49a0f5459a044b8017451294cc841e1744632511511a2e7e2102", + "name": "tests/integration/targets/iosxr_lacp_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_ospfv3.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40ffd132d0493144e4355bedf9abfeed11ac6856f166454f4e34469eace23dd6", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_snmp_server.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2f4639f4ce6651e4726f86fd0c52a432ce6a7398139f13531d7cf7f003923c3b", + "name": "tests/integration/targets/iosxr_lacp_interfaces/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_ntp_global.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f3f86a923d260fd853c936a01615c9626f63fe702759023143e80d2e169a24b", + "chksum_sha256": "29a8acf3766df1e54abe6a3dadfc393571647722393b132444952162b30a60ae", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_command.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f331cdaacfd4dae2f1efadeb247d7e38c8266cf3887c2550e6132f82c4afd9ea", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_utils.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d83cdd234712c9b7e4335f30089919d5e22887f7868d6213f8247f64f8b44de", + "chksum_sha256": "2b84773b00c039d32e50e18779dfd48fc98e4f0012351d6d6c1ecbd740d25936", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_global.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "22382fff971a2ef07e1ab7cb5fd0be7be02b4ef61d4ae226edd9dc32a3d1b550", + "chksum_sha256": "417f4d3094f95606aac731b14ae567a97c7b703114b88423cb677e0f6b2cc06c", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_l3_interfaces.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87bcc3b439fe7a4d2166355b970e6bbd4ec1fd4dd11fecff65259938ed15fb4b", + "chksum_sha256": "9dad2238d7ee4b8fb78919028c1bb64ba29d4e2088f53ecf5fa99ea9c5e29c87", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_lacp.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3a62abd2facd0bdd05c83b5487b9e43bb14fb2b8a100202670f964b3cf928e6f", + "chksum_sha256": "d6ba2253349b074129effa793f31923b22ae2448ce58a9549023db855839460d", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_hostname.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "674a5e683e09243e122946f5964cee3109ae4d909e192aee76cd78523ca4e480", + "chksum_sha256": "14d91239138aa32bb7f451a89aefff422136e57427583623a172747eb5814453", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_logging_global.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc84941d8983e27592dd930181b352a71f143a67aa30e0db98642cd1ba575691", + "chksum_sha256": "81e585cfbf29f1293be9881382ce419c6a2b0cbf9c1f87be057a241de2f44f98", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_user.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4777b0df4a2e3ca72b179a9955d2d5ba8907f1b80e00f3be50699f3d8a90a61b", + "chksum_sha256": "be06b4f3cb25a95c6d1950c4919025c1cb15e114624d59b18c0eaa5a7d79b52f", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_ping.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b7870144513d4063568e7b3ae7b21b8e353b286252c43f7efcb3ff5f1b8e9fc", + "chksum_sha256": "ec8d829135a6074a8ad75ee76a2a1a4079e03325d92c0e830515cbf90f31eb6f", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_n540.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25af4a8b6f30f904cef024bfb673c553f73039ff3dc44dd31d4d5bdf5720e735", + "chksum_sha256": "a8d21a0b454b78c9643c6d1c47de95eafb44e9199b1a8bca7588c0d9c91cca02", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_acls.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f5f7deb3c6e2835f74cf3eaac1f8fca7893e84117071dba2f235b42fbf681c7", + "chksum_sha256": "6e7cf195c2dfadb34e7393d4c74acbbfcb568899d7461c2bb6b4fa5acbc48b70", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_banner.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08ca981cb107565a78d51790ad4d9fdccf1f744b6ce5098ce101da34b0294fad", + "chksum_sha256": "717d1fb8c96130db8d6288c45c7c8dc46222d03917bf77b322b871ffcafd3a99", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_static_routes.py", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "789b96b3f9a9a76acd2cf9e2eb4a2743203b8baf72ea8872b64f095189ffb659", + "chksum_sha256": "f5bdefcaae69fa3cffe08302fb9dc9f706c3fd00edd4d2c86d032983d66bedbf", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/show_lldp", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4135607fe98acfedbef4f2d3305b4ade7e5e833130f049f310b68f32ce451c66", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_config_config.cfg", + "name": "tests/integration/targets/iosxr_lacp_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6fe81e446733fef4e3643a80042ab4111b9b0c927599c4b5972ecea4c18b4ffd", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_l3_interface_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "50f889004120619f090c295fe5f40c5575c0a4feaed60a14d863d00bf25bd2a0", + "name": "tests/integration/targets/iosxr_lldp_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_ospfv3.cfg", + "name": "tests/integration/targets/iosxr_lldp_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_lldp_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a6d31304503f7cd58289c7ab493bab726a003a69dbcfff3177f82e051180ff4", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/show_version", + "name": "tests/integration/targets/iosxr_lldp_interfaces/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_lldp_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "089ab6658c475d1146f913b1cdee2671b46051958e2b7f562da626d327456726", + "chksum_sha256": "0dca88a635c4df7935a64b62dcc4e29afc8ea29e79c5a69790d9fa39248aa593", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/show_processes_cpu___include_CPU_utilization", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6eca4811fafb01f204de26b037fee16d63aca082ce05d57b9f0c52fb502ef66", + "chksum_sha256": "1fb4c8047c353cd10a83ff0a2f9eb2c3455e1b72e81165bfecb475a5969d11c1", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lldp_interfaces_config.cfg", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c4e458ac2250cfbfacd5b53e5937c792bdf09a36bf42c7d27cb5add93ffb693", + "chksum_sha256": "e2d359d45a561dcc99db2945a7e3de3c4e3564caaac19c643672331b7a2c26e0", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acl_interfaces_config.cfg", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a5870ad2392bc344f5d7c254ecf5f1b5d317527c2efa346a55a3a73fb0ccd10e", + "chksum_sha256": "095271b41184a0146f918498fb43a1d4808359cad386c08f3ff6ff8ae3991fc4", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lacp_config.cfg", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ca4b510769bcfc42967e42d1b560e18908724b345676fb68e76571dfb84e847", + "chksum_sha256": "bac4a7214f9a2a43940bb7ea473ad5c479dfed034cb1f092169751886339a4ab", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_static_routes_config.cfg", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e148c74b09c0b22e87e8e55b815a0250281aa8daabde38b951b425cfbec2442", + "chksum_sha256": "3c0a26973a1f425dcb788f4de6ffb431f0fb3cb439b285427e259545f81d6079", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/show_lldp_neighbors_detail", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4135607fe98acfedbef4f2d3305b4ade7e5e833130f049f310b68f32ce451c66", + "chksum_sha256": "09906ee86cc2c5b1a515dafa190e3576def507f53ed9563c471db011ab76eb54", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lldp_global_config.cfg", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc8ece13d91edafdb680a275bf4c794d642f584b24963f75e91d399d26e90dce", + "chksum_sha256": "0bdd704c64456dc5bd746f258448a6c7c132cd3b2f06849f59bc8454e1b93189", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lacp_interfaces_config.cfg", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04b1c2fbc56979e8df559dc3a499adaff452c0815be45fe4a0e2b1b74f740831", + "chksum_sha256": "78ab712357d68b164ba677cffc2bc61cf9184dbe7eb616461b039880544c9d4f", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/show_memory_summary", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0fedc43463c95b152254b43d741b62c704ffc82b2707b758d1294283384c4e0", + "chksum_sha256": "2c10d1cc4272407919910b0b6c62badf94ef67f853fa1ac99a581603cc9ed7da", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/__init__.py", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "4c33155ba2ec1dea7921b926e4baa656122f8bdf75ab4e39c85fba98e981d7f6", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/show_running-config", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9442b8aa3e29caa5725d8968da29fa173e998d7c664c92b3ddd66a7aea76a71e", + "chksum_sha256": "aa7e3e3c95400ac64035e994ec52bc2663674bb98562dd66e70cd1a18cab813b", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_config_src.cfg", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "57d42d2e8e8b7a4b6cae566115ee42fecea077b525cace10cefc3b7dbd85f033", + "chksum_sha256": "6e0d64d1e1033c62bbc4da61e6f2e49fb79ca27eba372a6c557a6fabc8b01548", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_interface_config.cfg", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_lldp_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cafb0268e9f22c966719d76a2b7267d966ef98748f68cf3594ea55a3efd03945", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/show_version_brief", + "name": "tests/integration/targets/iosxr_lldp_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e4eb1b26a35a3c5bcf1e45eab472c8d59ff0559cfbfe701cd60c17ee6d9d6957", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/cliconf", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/cliconf/iosxr", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/cliconf/iosxr/show_running-config_hostname", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "749f869982a235df56c1c7e404744c441340ff6da90dece0c8b83d63ff47e7af", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/cliconf/iosxr/show_version__utility_head_-n_20", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cc08220e9647a2a3d34640ffabc08fd34f9601e229ab7cdf5ce4224f62cc158b", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/show_version___utility_head_-n_20", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e4eb1b26a35a3c5bcf1e45eab472c8d59ff0559cfbfe701cd60c17ee6d9d6957", + "chksum_sha256": "f9a9d7ca96d490c22c02070c8c68ba92103e69f4a072341a141d204d7173fe9f", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_banner_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "373fefe369cd647022df09438152a869d3c407cb05c51b3bd8214b81471d76e9", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/show_ipv6_interface", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "151235002e58119649b79a98cbacb5ce155225e31aa0188dd8085ee0961feacf", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_interface_gathered.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "06b46488db2b8cecffa505d7a8d7f3c0566df2beadef2fb795f3963e26bb1504", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_ospfv2.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "27b9a4a53478778c5781170c052ba66bcc09dcb40aab0709d28018f6cd332126", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_system_config.cfg", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18ae20e11b3f557435b212a739a50c59c95e4162dc13989695e6c14ae35e58f7", + "chksum_sha256": "312204dc90b5c1572a58a7a44d7590f6da0274af0a9ac9102c9c1e762694d64f", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acl_replace_config.cfg", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "197b575ae7d14aeb340f84bcb05ca1e4c7f84786dec07881afb650cc75106c20", + "chksum_sha256": "018ace52485c2b1609f5d7d8893cfe0b99b5204eecee7eea3d3b634d614a1e1e", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/show_interfaces", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_vrf_base_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e37745f7a4d614d0aa5da44df8a0acaea5820a5900d65cabe9640ddcb7e6ccd1", + "chksum_sha256": "9d94b9491a045f06789eaaa96222a72a7dd8f65c48d45d88dba16fac049fd704", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acls_config.cfg", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7415a69cdd33bff4395ad90a4cf6a930082691564493b998844e499a5039d13d", + "chksum_sha256": "52cb77efeb2277f2766261efd23be1b385eb0a279a4858a160fbb23e6790f898", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_l2_interface_config.cfg", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c18f829582b9ed3a84bc5226dfd05be9c736dc0c949d61f719c71284e747e1d", + "chksum_sha256": "9c36f82fabc3726780c6dcef3a0fa8d4d7fa7d019fef1d97e076b8fe18a443fa", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_ospf_interfaces.cfg", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_base_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3e8a76362099f436fe64dbd9dfc6401c862dac9c7b36be4ec83b36d125be2b8", - "format": 1 - }, - { - "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "a6c17c3999a6aa6f3d39720a51223d01ceba114a4e704ed27bec76342cd0abe0", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr/show_running-config_hostname", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "749f869982a235df56c1c7e404744c441340ff6da90dece0c8b83d63ff47e7af", + "chksum_sha256": "bb4ab173f008550df0cc48f83ecb505db4299ee8a9f026dff12c5af63d14b7fb", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr/show_version__utility_head_-n_20", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca53ef4a0ab10529e7d5df9fd669fae547be148b08ee7075141212ab90a1e929", + "chksum_sha256": "f559ed5b722bfebecf0cb6a696f9bbcb6ec56cf63c25e47be07bf9478e556e4e", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/dir_7all", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5e2c218c5731bee3f874af0bc5d5694a426ceba650efc03795a5739235f0120", + "chksum_sha256": "faf8165e1aa4827820ee0e9a0ff2c418cf23c682592ada66b626266facf9d1b9", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_user_config.cfg", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e387d5d8b668b1f290872aab2a3e8f8de3d4bdcb99906b8bbf618b950f0c60e9", + "chksum_sha256": "c455861f770ac7341d3e29ba6804ffdd075bd6fac56f4e5f07b494eb12aa6cc7", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lag_interface_config.cfg", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_vrf_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25aaec36c88ca1c78bdae21f0a0e072929ce56e56f569967927ab6def72d972e", + "chksum_sha256": "19489912900216d55b30d715921bf8e1edad2d1945ce967383c9b10bf045aa1e", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_acl_interfaces.py", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ec7f7a7253a073da59b55053ac9d52714a9f6ddfe55966a4333730f9fe6a355", + "chksum_sha256": "70746bef62da91f4d74143ebbaee0b443f901bda32a4f1e5a841b32d4c6f6f66", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_netconf.py", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "209aa02e404cf255e643c487b9c44442ed9b5e17ac62c5526c0c02825c6694d7", + "chksum_sha256": "80bdc3eb58879b59242b45b0227e215f0c14772fb790850a5c4614c1d040852d", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_facts.py", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_route_policy.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b1949ff68f966a8319f8243b815ea48024ce7e72b3e98606155c205a40568280", + "chksum_sha256": "0357901519ac8ac68f6c7059838c4cec150ef91418cbe8f82efc4c0d43f6fa9c", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr.py", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "775a3f292dd11bbf06389c191e39f326f65655899f046cd2f9d0fc53c527b972", + "chksum_sha256": "cb254762f05493022cfab5268eb344f0aa9c5f62129bd422903006e890d1f01f", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/iosxr_module.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "44fe73a4355f43b735971cdf2927a17ca35a317d8d3dcf7eba3679e42f827bf7", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_interfaces.py", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "980a9645e0fb54365d3ba45c0965ee1c82884870a8cb239bbf38ac0910450a42", + "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_l2_interfaces.py", + "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fff7eae63c3d46e98264e6bdd9ab6c2009bd84bb53ff4a53575228f774a4036e", + "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac", "format": 1 }, { - "name": "tests/unit/modules/network/iosxr/test_iosxr_lag_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e64ba104e28f652f4300a8e7c43d4aec50ab8bb28f8f97d5bde22099f8f20b6b", + "name": "tests/integration/targets/iosxr_hostname", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/compat", + "name": "tests/integration/targets/iosxr_hostname/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/compat/unittest.py", + "name": "tests/integration/targets/iosxr_hostname/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/unit/compat/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration/targets/iosxr_hostname/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/compat/mock.py", + "name": "tests/integration/targets/iosxr_hostname/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4e0ca26e6e2982bc40db782db3a0d4950e8c5a749171c0da22c27c85acd23ea", + "chksum_sha256": "8fb0722d13cbb07c9e9d85b76efbdae857bfdd1801b6aa0501a52946e6b6d588", "format": 1 }, { - "name": "tests/integration", + "name": "tests/integration/targets/iosxr_hostname/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_hostname/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner", + "name": "tests/integration/targets/iosxr_hostname/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/tasks", + "name": "tests/integration/targets/iosxr_hostname/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_hostname/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491", + "chksum_sha256": "823462a54fe9b7f711ce0331124bd72c3c4029547fd7d1c2e5bd1da25582cebf", "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_hostname/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7", + "chksum_sha256": "b3905393cfeb5a880d6f501a9813b52d787c771504efb07291ea4bdf91a83457", "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/tasks/netconf.yaml", + "name": "tests/integration/targets/iosxr_hostname/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74e0fd06296ba78b354273f00e39a2cb9f77e8102eddc40deb284d83c52255ba", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_banner/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "1fb084918ff5f04f5da804437d0287f888c6b225be719b39e7599e4d2928890d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/meta/main.yaml", + "name": "tests/integration/targets/iosxr_hostname/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_banner/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "348ce984e68aabc275d61e8143b23c6cc59765f2510b073a4c611fa62254a4b7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_hostname/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_banner/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "a89c158ee6a5732379e2b446d1d6e307cb116b5a4f602e32781b5e11598f3c9a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_hostname/tests/common/_parsed.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1b0de89ec88a4c3c844244ea9b8a24ef5d12fe4ec4932c525b720742d77334fd", "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-login.yaml", + "name": "tests/integration/targets/iosxr_hostname/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "00656d9558735dc363fc4ba83a58620f10aa6ad82ab4554f00ed2655922f59bd", + "chksum_sha256": "0c727923bf03a87bd59efc3eb98d414cf99ea84ac3748d32412b7eee33996553", "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-no-login.yaml", + "name": "tests/integration/targets/iosxr_hostname/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25e88c9b68237bdf23639108d7085f04bedec5592b86fb12467e7e3ba449ca2a", + "chksum_sha256": "33bb48f812aef67e24ce8cffc06916f7f8adbb8977853170aeb32dd150bf334e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-motd.yaml", + "name": "tests/integration/targets/iosxr_hostname/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a63b5980f97093dfa1ff3c6f3730f2ca0eb3c011af4430267f16cccdc0234d72", + "chksum_sha256": "e2591c3d8f9408a6d1879a028da5491a9275c44601b28d5d1341818ecab434a0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/tests/netconf", + "name": "tests/integration/targets/iosxr_hostname/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/tests/netconf/basic-login.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d831f48454277a06c4809abc0d238b1963f16278853be6be3eee834b0bffd3ba", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_banner/tests/netconf/basic-no-login.yaml", + "name": "tests/integration/targets/iosxr_hostname/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "50f1c5622a99ec54a98a3b978dee91614909adcedf67378c13cd2f3cb09e48b7", + "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_banner/tests/netconf/basic-motd.yaml", + "name": "tests/integration/targets/iosxr_hostname/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52cb507d481aa76f0a7685583fa5c7828e6271804fe2a90b34fa7159c24eae54", + "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces", + "name": "tests/integration/targets/iosxr_snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tasks", + "name": "tests/integration/targets/iosxr_snmp_server/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/meta", + "name": "tests/integration/targets/iosxr_snmp_server/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/meta/main.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "0f9c668532272c0b616e70d3d77dae2fb25871e3d07b04cc8702b25f51ec4ab1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/defaults", + "name": "tests/integration/targets/iosxr_snmp_server/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests", + "name": "tests/integration/targets/iosxr_snmp_server/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44b35581001d7173e1b8f2fb5c3f8804692c59c87594ba3f4bdf1458cdd56256", + "chksum_sha256": "990985bc43befcb4befb0737e5dc22784856b95aa04a8139dee5020628aca31d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_overridden.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26eb03219bcc0caba6d5b3be37a6bce7fa846c1e5ea6d2df9a5fba581597d7af", + "chksum_sha256": "51190a6fdbc4b50898f72ccb49c0e3f7c8856ed9483e53bffbae15805d583c7c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_deleted.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1264641b82c36fe0d15026aa6bcf379dcde00c183ca8f1283a7e9db9880c50d", + "chksum_sha256": "81d07f1d66f078236899a5e835c4d53479004393bfb1ca80caccd1afa0cdea90", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4b561e6501b1861665d181d39f4882f6c99b610c359d7294443b5e37722edf6b", + "chksum_sha256": "4d26d4eb07781e55845119a7c3513bc94bd975804d6a5e2f86a63086bffaea4a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e989cbdc6bc0299a75483abb2bc9f771224d13dbdd084992fd71e6ef57f1a5a", + "chksum_sha256": "d365f215fa2285f64eaffc334997ac4ba381ba0fe72d1f0ddcfecac8b076eda0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6957f1a450e714240cdf34121eaf5099db25f1bda037680c8af357fef80839b", + "chksum_sha256": "a4e26c01ab8c4e0f46bbacc76fc290c380ef19ae68f2f3e48db74c3f3e0554f8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2390ab9c8c2958dd0623138f888fa1db1e40d20023bb803e5a1fdc9906be8504", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "ae3ae2d79689b84f4e7d6094ce2e78a4ff7e4ab351b50893aa2ffbb47377e75d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/fixtures/parsed.cfg", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7f495f2b2f098efc4830e55aecc165536ef8cacbf35fcefc030cfa3a6a5a345", + "chksum_sha256": "c84f687a0d23e760666157720b95281a7e02562f1304efbb9c904f542c7ef969", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3915314d2bb6a8c96a0f18c7cc4d1bdbb6a16e78a660baf7328ca5f6fc854a1", + "chksum_sha256": "92a61d453a67eba0f68f754f46ae9ef6b90567ad40e8555fd46868a595bef998", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d90b33bba17d4d2ae74d79879e9163f0c413e1d4f076d7817c3a856e456e41f", + "chksum_sha256": "d537c09198b49b391f157eba859faa21d25fe4e4db79228887b12586b2207ef7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c2426117bdd1320e641684a463c4b947c1864f76710eda7ed9a36c06c1b3615f", + "chksum_sha256": "a38d54a4fd46f4c94df79af4550ad013eb6cf28a11f2ddab930527a035c6349a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/vars", + "name": "tests/integration/targets/iosxr_snmp_server/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_interfaces/vars/main.yaml", + "name": "tests/integration/targets/iosxr_snmp_server/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "628f1746159ca78d2b44a74e2309d2db9b380b5a8582fb2c0f0b92c3ba38e95f", + "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_snmp_server/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tasks", + "name": "tests/integration/targets/iosxr_lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_ntp_global/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_ntp_global/meta", + "name": "tests/integration/targets/iosxr_lacp/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/meta/main.yml", + "name": "tests/integration/targets/iosxr_lacp/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/defaults", + "name": "tests/integration/targets/iosxr_lacp/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/defaults/main.yml", + "name": "tests/integration/targets/iosxr_lacp/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "28efea0049957f8eb23160dce61b09a38b89b1fa61bc53f4f53b7f809b4eebd1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests", + "name": "tests/integration/targets/iosxr_lacp/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common", + "name": "tests/integration/targets/iosxr_lacp/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_lacp/tests/cli/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3116e5b1f3807158456527c7d2ec5c4ba73c2f53d75a464c9aa0257257279ef1", + "chksum_sha256": "fe0b5773fcd48afa2ba50bdb1cc2318f5d4dc3d46362db64195210f5ff26acf2", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common/deleted.yaml", + "name": "tests/integration/targets/iosxr_lacp/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "12edb69044ee3a03f3bba8317b8d590ab8f7cb428e0b6047c6e86acbf91cfa23", + "chksum_sha256": "c9445f3494ae6fab46f8a866ba98cccfa586ddf8b3c467ca3e6da1a757d83e7b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common/gathered.yaml", + "name": "tests/integration/targets/iosxr_lacp/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8999671a348fba3821b25049396c8971fe8a24a577d5d704c8c220c81d0ecf8", + "chksum_sha256": "3f35e7101f1490cb9fb6467b196a0b527dd72ef2a8d72925ec6567770bd58832", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common/empty_config.yaml", + "name": "tests/integration/targets/iosxr_lacp/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "07b3031d563cd5f7a06f39a5e4edb6f5b3334d8dd70070337cec600a6355b08f", + "chksum_sha256": "ba2306dde118373ceb847e377f4d6017846446a5d4f20350f3dab7ef76ed6c9a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common/merged.yaml", + "name": "tests/integration/targets/iosxr_lacp/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd90f3a750d4f51a1d947cd1952156f4b8245d1d09d4741d57b882a9ee302c2f", + "chksum_sha256": "d208dc3d0e8a9a35951844e6a916db895790ccda6bd7bb550b824a7eb4477b30", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common/overridden.yaml", + "name": "tests/integration/targets/iosxr_lacp/tests/cli/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_lacp/tests/cli/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c551ac7c741dcae87dfa4237c9c2387202c54e86e04d9140b8d7684d3560fb2", + "chksum_sha256": "b053b09f9388c7f6208c51e8b9e53867bd6352bf37c9688f28b02ab348ed3767", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common/_parsed.cfg", + "name": "tests/integration/targets/iosxr_lacp/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5ecf37c4d4f8799590d36debba286353a94b76fc0f89929f5cef6cf762337fe3", + "chksum_sha256": "66d389919e87982a7de0c3a90adfb49bb46d953079385a160b96eade8ab816d0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_lacp/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ed2c59015cb8f315b1a7d5475e42fa855009b2e5d26f656eb6f80eaacf718da", + "chksum_sha256": "93f1a75fd2d40c2d5b43a04650b66fd0d98e638e951373de1fbe2f5e22b79ce8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common/replaced.yaml", + "name": "tests/integration/targets/iosxr_lacp/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa640d9b74a58c56f1bff39b0d710b0f9e072c59d1029e8028071ad927e83119", + "chksum_sha256": "b8a5a0ab330416618101c508230864f1c4d2956b5d3babe9e74ac3c295439a3c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common/parsed.yaml", + "name": "tests/integration/targets/iosxr_lacp/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37b4fdb1a797393df3d182478993235633244c539af30725013db77cec0d1178", + "chksum_sha256": "26c4083f5bd77b0b8a4a7866d3a93116bb2f0a0e9a3620beb2651b37cd2eabbb", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/tests/common/rendered.yaml", + "name": "tests/integration/targets/iosxr_lacp/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be949100104e75250b3f92b5f02d93e8a471631a4ef398d2c24d2030c1b3a57a", + "chksum_sha256": "1539a41e787502ec7781cbcb2c00157799a196ce6da851d0565b96d14db4059b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/vars", + "name": "tests/integration/targets/iosxr_lacp/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ntp_global/vars/main.yaml", + "name": "tests/integration/targets/iosxr_lacp/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "33b4175617133438627a3921128a558f7c3cfd5e70b930808c06634e4fe3cbc1", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_lacp/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tasks", + "name": "tests/integration/targets/iosxr_l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", + "name": "tests/integration/targets/iosxr_l2_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/meta", + "name": "tests/integration/targets/iosxr_l2_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/meta/main.yml", + "name": "tests/integration/targets/iosxr_l2_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c659daf4218da5a2de29b769dc1250d37a6a80151c93a58fb3958289f5d8d59f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/defaults", + "name": "tests/integration/targets/iosxr_l2_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/defaults/main.yml", + "name": "tests/integration/targets/iosxr_l2_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6b79a9c0fb64ffb5ea3b2499161f3d284af835a1e17ff12cbfe838a09a936573", + "chksum_sha256": "9eb5c038a48458b36702ea94d1bc8172511a8eadeec71fe922d406cfebf4b5c7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common/deleted.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "279dfdbc6e8e658f0034995198e414253f0a512c6590a311da073cae0a52d15b", + "chksum_sha256": "86dfa2d949109a946c52fca30228bdf700908e44f122a528c64d6952f5d45a78", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common/gathered.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8149279cc0a1da197893f2b231b99e89d35f72f7eca43c0ded62a1f7938af73e", + "chksum_sha256": "ca461ff84f99d15126252d878ef50b92ce916783f8cb6ff91f2e2342144dcd7a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common/empty_config.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b6b32698c946e6caf83b8d756358cf0fe146dcdf81efd2b020ce595eba38bd4", + "chksum_sha256": "133cc3a327728f918408d45c77742cd31e4cc17537871f0d02674a5a48c394c7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common/merged.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e2c26f79a8f6cc6611dd48d408df870cc43853b8d8dd9ebe0af83465119b0df", + "chksum_sha256": "a4d9508554b3caf42a189031a45bbe918f8d87ab46b49670f824f45e84f1f73b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common/overridden.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d72b330e428d01f36ce0ba454497558efb2aaa4a3d2f4423378d93febb7025a4", + "chksum_sha256": "26b4e7ee16aab6f1a3a11e5b8dcd55412e8afba623415469b2aa057b23126745", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common/_parsed.cfg", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e9111575d03ca3e8cae1744708bc4329dd05fdd40ab5468d722198a6728b1dac", + "chksum_sha256": "b908ec71d04a400c46745f5f6aa67edc06711a6fa409bb6ed2570d7b7bbc7f88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "909a21409e28a252b2c0d6fccf1e6c0e2cb51d710665aa7c0cafc11d6679a727", + "chksum_sha256": "50d4197872d8d2199638a7049cfcaac7c3d9332ccdc4b432d84ab9eac3fe0899", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common/replaced.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02dd8a9273d456e158f8810372ee5f70c1b4ea56d70cfa11eb6dab8f9023b558", + "chksum_sha256": "9b651c37d64cbc8d8ce70ebbf64f9edf9f32ec1b9986713f8e786bb8dd1a5b93", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common/parsed.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10bb238d21d24df6fe4e476d542492839c1943430ea17c6cf9275eb4790da423", + "chksum_sha256": "18a4c9c8fa0b4717435de1c5b0c06e1bcc37099d4e1e2f50cd52755b5382d90f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/tests/common/rendered.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "32b4a5eb23f7544ff53968c2f2f714963b86c198caa83facbb6e36be9cb85d49", + "chksum_sha256": "8735a17ccab3ecd1af096f3d1c722e7db3b0ae5c7e48667aba20f9ec6b155d08", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/vars", + "name": "tests/integration/targets/iosxr_l2_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging_global/vars/main.yaml", + "name": "tests/integration/targets/iosxr_l2_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a069b29e331858b268f0a2ab9ace19d5bf793703a8b5c452ac8724a6570506e", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, + "name": "tests/integration/targets/iosxr_l2_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "format": 1 + }, { - "name": "tests/integration/targets/iosxr_ospfv3/tasks", + "name": "tests/integration/targets/iosxr_bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_bgp_global/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_bgp_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "744a98c76b992e1adb641f9f1770a9d7aafe06e4c75ae8a26c889b6fd99b376f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/defaults", + "name": "tests/integration/targets/iosxr_bgp_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests", + "name": "tests/integration/targets/iosxr_bgp_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "46bf472822cc2a45ce47c1ac6c8059fc5f228be53f0ee692765832aa1541f811", + "chksum_sha256": "2ada9252d595d233bb3b7e2a01900965416d147291a2ac3b443c70c9478cad60", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/deleted.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b353f038fe3608efaa4fe240c2490e4d96479df9fac05c5e65b382b2b5eb45e5", + "chksum_sha256": "73d93464c7e118949c3a6da1e915242a227681ab6ba766d5de54953c3cd6dd9b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/deleted_af.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b74c20ce7b08e53ee2f6ad55e8964e7d763329b130c8a57f5962395f1daf2a13", + "chksum_sha256": "7c45590bfc752fc39a81b8b358968e75e75335e4c3d6449f6a8ca051999fd2ea", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "771f96cd83c9a893ed5ea4eb2d25b331fa2728f8399f0fb2327327a2eea69eb8", + "chksum_sha256": "05d664f2d11d59132b41ab8f93edcb49d06d8f827796db4c9dab60549b4166b3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/rtt.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe864b51e70814be13bf52e56f90108c6f6f874ddf23fc9c229019215bab349f", + "chksum_sha256": "0d3f42e30ecfd27dca2f459e67fcb29aa7eb221087dff2125a4b50e24de047c9", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/merged.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0432f28e01aa6fcf74a9f27e1d245b6e7368bdf7c4e6cada6911becc1a5d8cd6", + "chksum_sha256": "5dd7dce83c0f85059155d19b0844f40613a98e42f0718a0fa319c1bfafc0b775", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/overridden.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "296f132a73194b9b2d134f6cba1b69da8f2e1f3345c4cf5952c8fe686e1eac91", + "chksum_sha256": "69b28ec7e3b77375e263157ffdbc2e5c7dea56353f9a906f0efdab44aaba2efe", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97c41a9ab68d27a209106c1f47557a5659ca2e8914fdef8e29514b208c8c771b", + "chksum_sha256": "0fa5a58884c54913bb3233265309e71f17a41edebbb6e521712db35088bddcc8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "38ac896b32ffc759f2b4e498126f827b96d1cb0cec61a9c8e1669aee7d68af1c", + "chksum_sha256": "03ffdfe82c9b009133361192299521b9457798b577daa4aee23d17cdffc2d78e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_replaced_af.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "820c9d8378bc3893f82eef7b74466761336b9e7acf36c99a76ab549c03fefab0", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "959f73cb330969c6963963b3a9c6ced291c02803d8b43e0d280691e1abb94a88", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_ospfv3/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "6c983c5b8e7bdc4997dfda6709c7d4a8c719b507c82b73041b3159cca9d6a039", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/fixtures/parsed.cfg", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/replaced_af.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "717d5351bebea57a2f0ccd874a2517595c2dda6c4ca8cb3c6de7c0902aa14b75", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_ospfv3/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "1adc26fbed5ebfa1eebe6013b93d3341c85b9e55a579bb5615cbf02e5a650536", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv3/vars/main.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_populate_vrf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fa66fb8ce0cc80369445c497f68d5e087540f12ad98f96f181e99c7500e5f232", + "chksum_sha256": "73cebb0d68942b9cebc4449c12ecdbf9d07ad5ab0375875f6b2dd9a03bd87ca8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "63d9fa98fdd8596f997fa6c705bf0ac62ad1f9d958b656b0c4b29f5ee7c2e3d3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/purged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2cce29019f0726c03e53a2daa42ff31d962e2df7b0bcb6b6a75cb120950ff68c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_populate_af.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "chksum_sha256": "d225cb9e1c413befc498bed1759effe731146fb93a8275cc5f28a9fb6cd62733", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tests/common/deleted_af_with_vrf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cdac5ecec5537510649ea64ca19a23351ebc7e9783ff4fe4f220079ed2c37bf7", + "chksum_sha256": "a04a3326feb2ff3aa7d9895fba630bba0d39c7e0ac0335c378d6c9c726dea9a7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/defaults", + "name": "tests/integration/targets/iosxr_bgp_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_bgp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_bgp_global/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli", + "name": "tests/integration/targets/iosxr_cliconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/deleted_all.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3fe49d80821c922d19f9db8e41eb9a60b6328f43791322450bf5d78899332dcf", + "name": "tests/integration/targets/iosxr_cliconf/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_cliconf/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6950308b0007d4bd83a9207819818cafea411ea68e0e0d16cd0b142257082729", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e428186b1eddbc63e5395419d8183ba503bfb276767d1c1e7fff71da95af734d", + "name": "tests/integration/targets/iosxr_cliconf/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_cliconf/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "107424d86e345ce03603238560177493367356c6fa158092d8c272e20f8b3572", + "chksum_sha256": "9c35198fab18c93963cab948cace1ebf7409e6bfd720d8e3d2d39d40e9d20458", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ce73c16381b1f6d60eb2a28255e2c73d3e440383faf5b4c592be6a2a17ec4cf0", + "name": "tests/integration/targets/iosxr_cliconf/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/iosxr_cliconf/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed9f2b98d464bf8603d35a074fe2d50eb66d3a2c595967f48de1264a2038dcab", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/_populate.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "25049f0c45154ecc9748bca191fbeb5239511e4a87cc68964b1899d9731f178b", + "name": "tests/integration/targets/iosxr_cliconf/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "646caf77a4a5a75a19987a0316b75e38bcdf89ee4cf21a2e7e6a0f2ff925eca0", + "name": "tests/integration/targets/iosxr_cliconf/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/iosxr_cliconf/tests/common/commit_conf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7dbd305d647109e42dac7d09473eab83bb832b522169b0d9ae7ae0a6a8e33d0", + "chksum_sha256": "e046c0d2eca053f31eafa4cedf5e98bb17332b8266cb6c88f0c2370ab7237d7e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/fixtures", + "name": "tests/integration/targets/iosxr_cliconf/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/fixtures/parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "85013bce86eea3299281d203601b99b8f56cc72e1ffe45075f6147bb5b090742", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_cliconf/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "47e2e6914d5891922ec91d009954863a86a6ce47df64b1db65d886ff8a9c7d0c", + "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_cliconf/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e4615b224f5c3f3beb526a6112487ea2f90880deefa2eed6e7903c023dee300", + "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f86e8be0f7d1983eb2350200ecb588e258b5712eb5a6e027fbd540fb3664ebe9", + "name": "tests/integration/targets/iosxr_config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/vars", + "name": "tests/integration/targets/iosxr_config/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acl_interfaces/vars/main.yaml", + "name": "tests/integration/targets/iosxr_config/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9c186e5b37c704de87faa743ec5ba48edef1722215a550914539801cc5f67fb", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_cliconf", + "name": "tests/integration/targets/iosxr_config/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_cliconf/tasks", + "name": "tests/integration/targets/iosxr_config/templates/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_cliconf/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_cliconf/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_config/templates/defaults/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53", + "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_cliconf/meta", + "name": "tests/integration/targets/iosxr_config/templates/basic", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_cliconf/meta/main.yml", + "name": "tests/integration/targets/iosxr_config/templates/basic/route_policy_clean.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "baa2f889363d8827d04378ac81e1516d840d64a721e4cc8284c937390206904c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_cliconf/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_cliconf/defaults/main.yml", + "name": "tests/integration/targets/iosxr_config/templates/basic/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "fed860520ec0b19850744af6be1c77939335d4a09539bf563d0c15aa6afc84ef", "format": 1 }, { - "name": "tests/integration/targets/iosxr_cliconf/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_config/templates/basic/interface_config.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3209d667d131c751b8cb1954bceec81eccb663a5e257b81b7394a9edcb9e0d70", "format": 1 }, { - "name": "tests/integration/targets/iosxr_cliconf/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_config/templates/basic/route_policy.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "83c3226c2070afbe01cde658ec7852261ac925abed96766989888c70a2f8bc92", "format": 1 }, { - "name": "tests/integration/targets/iosxr_cliconf/tests/common/commit_conf.yaml", + "name": "tests/integration/targets/iosxr_config/templates/basic/init_prefix_set.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e046c0d2eca053f31eafa4cedf5e98bb17332b8266cb6c88f0c2370ab7237d7e", + "chksum_sha256": "92dec92ecf095d1c33c493f4769541caa745787d80e498d6ae81decc93351e0a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_cliconf/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_config/templates/basic/change_prefix_set.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "91a0239cde35ce8e75ad24c8f9c853014cd0c7a5554171ee3b0ad50cc8ed67f5", "format": 1 }, { - "name": "tests/integration/targets/iosxr_cliconf/vars/main.yaml", + "name": "tests/integration/targets/iosxr_config/templates/basic/configuration.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c35198fab18c93963cab948cace1ebf7409e6bfd720d8e3d2d39d40e9d20458", + "chksum_sha256": "1fd4692dc95cf561f544f8f680c9046add01c85c6fb83c17db2690cb854d3bb8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_config/templates/basic/route_policy_change.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "95c74f6778f25c6385437de97ec5ffbbef5414ed42115d8b7ee276fe5d7fdd64", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tasks", + "name": "tests/integration/targets/iosxr_config/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_config/fixtures/config_add_interface.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "chksum_sha256": "ab5bf303021e5250cd67b0f4ad25b8127b74dd2d8630266a382d9ab2aa4c248b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_config/fixtures/config_del_interface.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "087d7655b24ffcd3191a5cab8015486b1da1488345f6e7617b0523f575b0400c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/defaults", + "name": "tests/integration/targets/iosxr_config/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_config/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests", + "name": "tests/integration/targets/iosxr_config/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli", + "name": "tests/integration/targets/iosxr_config/tests/redirection", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_config/tests/redirection/shortname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "351ab25b2412eee119ffee510ebe0b70b40b13e8111e0c4b2b5c519bdda51634", + "chksum_sha256": "c82a2cf83917d7934e758a867235e53629945aa1739c3101bbf61adfb9f248cb", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "00f68885674a79797fd718487a3df7e70af4782785456212e76c50cf85495517", + "name": "tests/integration/targets/iosxr_config/tests/cli_config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli_config/cli_backup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f40f0a57eb589df2ee64a1628873874408bf7504b5620c6b275450116f81dae0", + "chksum_sha256": "6c6e65aa217139078a0e172b54fc00eb2cfe51f2079cb7d9b0a5d9c5d2a74ca6", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli_config/cli_basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b1cc12f4914b97b943e06edd3ffa0a27d298e50fdde3170dd1257a1c9fdf07c", + "chksum_sha256": "256bd79f69876e184c69f562b22d1954e91f78e0386e273f4f11c5cf74b1d350", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/rtt.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "98eb3a3642a23b70e1b74c890a478169edcb4a079cb75d158fceb89da2e9a16c", + "name": "tests/integration/targets/iosxr_config/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/merged.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel_after.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a43a99763a924f63fec89ac15da6a0e52887599d1f3c8c22df8e5b083fdf9f38", + "chksum_sha256": "75053a4dca4669bd74e8c0edca7056cd31c40751cba6379774c337e466203cd6", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/overridden.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/prefix_set_remark.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "293a473418d1ab4abe4b92f1ad395d0798f956c6e81b60b8a9c96ef6423702b9", + "chksum_sha256": "0fb66964d634451765de4922678ada90649e02acb0bc6f5b5ab6c723a506bc1d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/commit_confirmed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "faa07f9fa788bf1fe18e07fb1d06f797b05da7a822318916f969975dfaac5478", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "9653c9ff2afc35783f116961cb926bb5f1943c963d05125998cf71c2d18bc182", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/fixtures/parsed.cfg", + "name": "tests/integration/targets/iosxr_config/tests/cli/commit_label.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6124272ed18483b35ecc3e79e5dc7a97fb53f4cd02ad193d1d860f408711fd5b", + "chksum_sha256": "873e365af69c26af8ed84b963e8f670dfbf86dca68811b164b1465417160070a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_exact.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "35f8c72cfa440d55ad5148e38ef607e05bbb6cd1632a6ac7425d351ac301680b", + "chksum_sha256": "e18cbd1b58ce8368d11e0948fc75860f2b21e4092c74129d894fb7e4fa46dda1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/comment.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0cd46bf6eb4382f30d13e184852377422958a6f882a49dd694b3a82709265ac8", + "chksum_sha256": "d78c09db16606b84fe8cadf629fe73ef6d41f3eb81db7a19fc53bc00bc936de1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/src_invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2bc68f81719327ba9af3add49753b86806a773ae4d1dd82cc28b1d082056aa25", + "chksum_sha256": "ceaff4b3620df90e8208f020adfa3d1b12ca9bef955fd8e01ef5f0395b4fdcd1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_strict_mul_parents.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e641ad89ffb073b8597de019fae0ac2a48482a6a33ff9a3cadd97f364100c70", "format": 1 }, { - "name": "tests/integration/targets/iosxr_prefix_lists/vars/main.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/src_match_none.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "056300e86e33d8bd4c6a91441a5aebdb0f1c0aac51930895ad3862211ead4b78", + "chksum_sha256": "7d11c76ae5a12b13a67769e0b7b49d0817c69cff27bc564ea39869b8a2517840", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "81d687e492374044859a0efcfa6dc922fb526648b8631faf70b621ae6742489d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_config/tests/cli/route_policy.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "604f5b5f96027a1c3e5768650bdfd7687d1fed0a5045a3e5b9805dddd5fae6a7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/backup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "chksum_sha256": "219bedf133ffab88c2bcd3bf803296ac143b96a71b45aad351811d07898f7c6d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/replace_config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "520231e3fab8fd0eed892322eb5e630667f32730b89f1a06e01c22a72d33ff45", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_config/tests/cli/comment-too-long.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "441fd0dae9c75894224eb8056ba369437d96056005466872f0b850546eda0933", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/misplaced_sublevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "55ebc624d7356f89f6c2bb32d13aceff80e8df04d57c28f463023a7aca814ee3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_config/tests/cli/extcommunity_set_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cb9f1df2b57e8364e823fb60276e322bd994be2df12b42a7cfddb461bb3e0dc0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel_nonidempotent.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4b629cb3f6c037494f307266e968320063f5533907d7b2b73a2f4c0cb8b91508", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4377cdd354c797bde70b1ab79c25b8126309a735c3e52ada4dd3cf2c61db4c3", + "chksum_sha256": "98194ad2b27b0a9722de6305af5d2446201c488a21e52d33f31b82f51dcb9dbc", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_strict.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a06cf74352024ffccea204ef3822fe08618aba04915148c8736f6387331f3662", + "chksum_sha256": "33a343c4930c4bd86c2f660177d059bdf6c44e52b4224ecd7e8ade878687544a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel_before.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40b9f6860fef89f7797529730ca794a03fef91355da74053086820283a821df5", + "chksum_sha256": "19a5a9e3043bd0b74fd7e71956374e204626d4346262c0c4cd3d9c579bb89f87", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/src_basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52c1f9bebbf6821f0b098ff9cbcdb8a1b30b1044a88f3b89e8fb8e76ea9b37c8", + "chksum_sha256": "474793b496f46c63df13e87815973af49d18fbc707f1d8dcd47060dce4344005", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/replace_block.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b92b9c34db1ed38368a5daa18ab827267e694b837a278a42224c5652f0f3d876", + "chksum_sha256": "c25a28559f6b20688ba8f74a807251df375f9d3b938d100531569e723f908d1d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_block.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6627fdd69a02636b86a4d138377f7e54897986e3f16878ff6a55e573eeac3793", + "chksum_sha256": "45be4aed01d01d3a88065e21b231390a90c01575db70fe99bc373d253a483945", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b9a8c7d0bff4202802918716797b5c1a831da98ca2bebe674f77d3e13de6b1f6", + "name": "tests/integration/targets/iosxr_config/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_config/tasks/redirection.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96c0644d6833fa509126bfa843bb259b9c9963e2e53d5fee080bb3cdece99de7", + "chksum_sha256": "4dda061736323dd09fa0832d73a74f4dec4a7c4665357ad20c914f15778cf99f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_config/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ea507d63e8a9cff4eb0a1fc7dbb6a4bf4e85fe8bf3f0075dbbc6e3505648d69", + "chksum_sha256": "3ba11d0a6ecc4c096ca24c09fc0f707954d3dc64ac8964ea17901fe60887213a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_config/tasks/cli_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1cd77375707ee0397f1efbd07a4f7fdfcfbec26c86042f65c7f29f3cca9a9c3", + "chksum_sha256": "c2b1c324c2399a7589d2fd4a7ed9b201f8a8299424924277b67298903db1d3cd", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_config/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "50f480556a54480a5cff156bcb4a8fad88e60404f4ca0ffd94df379667fd7bac", + "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/fixtures", + "name": "tests/integration/targets/iosxr_acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/fixtures/parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d11bd78a2d74e8dc46a2880b54b3500e2f88cc4e3e6fd42a249138556e94964a", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_ospf_interfaces/vars", + "name": "tests/integration/targets/iosxr_acls/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospf_interfaces/vars/main.yaml", + "name": "tests/integration/targets/iosxr_acls/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "934f6f7a277e34f616d5459e1989f9e0faeaf4e0a61444289abfaf37ee120659", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server", + "name": "tests/integration/targets/iosxr_acls/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_snmp_server/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_acls/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", + "chksum_sha256": "a07cda33c597dd4e76d3b812b962e5718c936287134221c1fbe55ff3a3490d6e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53", + "name": "tests/integration/targets/iosxr_acls/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/meta", + "name": "tests/integration/targets/iosxr_acls/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/meta/main.yml", + "name": "tests/integration/targets/iosxr_acls/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "25ae2d218ceb84438e1135380d5e3f55dbede18338f5c4826bf253fbb1b91545", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_acls/tests/cli/_populate_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fad593c0a30c05a9399505505e33bb99d75913b2ca333fa0f5d198ecb52d3fc6", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/defaults/main.yml", + "name": "tests/integration/targets/iosxr_acls/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "8ba58ba01382b709d04ad2b8b0f82c2d53d7a71a6a1a3bbfbd2b68b09de23dd8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_acls/tests/cli/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a582c68cd840533e05aaf3367b334d02dd74684b0af6a23269ff0b208bf06f5c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common", + "name": "tests/integration/targets/iosxr_acls/tests/cli/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a3de6c6599cbd3a7950c303559545975838139e9c4b6899dc85727669925a168", + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_acls/tests/cli/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_acls/tests/cli/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c84f687a0d23e760666157720b95281a7e02562f1304efbb9c904f542c7ef969", + "chksum_sha256": "6edd326a3c4a5b18f2a041ef8e9313e870c9eff81940294307cc07a3ff90e5e5", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common/deleted.yaml", + "name": "tests/integration/targets/iosxr_acls/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae3ae2d79689b84f4e7d6094ce2e78a4ff7e4ab351b50893aa2ffbb47377e75d", + "chksum_sha256": "3f167ba03527e52c6b3236cf547eaad59e5c22cbb7378a1a90eb2a8ab736633e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common/gathered.yaml", + "name": "tests/integration/targets/iosxr_acls/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d26d4eb07781e55845119a7c3513bc94bd975804d6a5e2f86a63086bffaea4a", + "chksum_sha256": "60a105434aaf3d04dde592ece9cdf1017cb0b3172120288810d97715fe2fd431", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common/empty_config.yaml", + "name": "tests/integration/targets/iosxr_acls/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d365f215fa2285f64eaffc334997ac4ba381ba0fe72d1f0ddcfecac8b076eda0", + "chksum_sha256": "1e4d53cd354dc5e35745d702bd43dc67c57ed1548f94168f687b0cd380e30432", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common/merged.yaml", + "name": "tests/integration/targets/iosxr_acls/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d537c09198b49b391f157eba859faa21d25fe4e4db79228887b12586b2207ef7", + "chksum_sha256": "69c219c2446281fb3697154ddfb3a06e77f320193cd04d461a20b0362a4447e8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common/overridden.yaml", + "name": "tests/integration/targets/iosxr_acls/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "92a61d453a67eba0f68f754f46ae9ef6b90567ad40e8555fd46868a595bef998", + "chksum_sha256": "d324ad8894b55b2586831251fbedab24cb4924fb90a7bb9ebe42bf6e57437ff5", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_parsed.cfg", + "name": "tests/integration/targets/iosxr_acls/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4e26c01ab8c4e0f46bbacc76fc290c380ef19ae68f2f3e48db74c3f3e0554f8", + "chksum_sha256": "fed7af68aca997e00c7816b282d84fe5b3858ba27497fdfb1f3f87fd1ad7c268", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common/_populate_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "51190a6fdbc4b50898f72ccb49c0e3f7c8856ed9483e53bffbae15805d583c7c", + "name": "tests/integration/targets/iosxr_acls/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common/replaced.yaml", + "name": "tests/integration/targets/iosxr_acls/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a38d54a4fd46f4c94df79af4550ad013eb6cf28a11f2ddab930527a035c6349a", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common/parsed.yaml", + "name": "tests/integration/targets/iosxr_acls/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "990985bc43befcb4befb0737e5dc22784856b95aa04a8139dee5020628aca31d", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/tests/common/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "81d07f1d66f078236899a5e835c4d53479004393bfb1ca80caccd1afa0cdea90", + "name": "tests/integration/targets/iosxr_ospfv2", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/vars", + "name": "tests/integration/targets/iosxr_ospfv2/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_snmp_server/vars/main.yaml", + "name": "tests/integration/targets/iosxr_ospfv2/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0f9c668532272c0b616e70d3d77dae2fb25871e3d07b04cc8702b25f51ec4ab1", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts", + "name": "tests/integration/targets/iosxr_ospfv2/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/tasks", + "name": "tests/integration/targets/iosxr_ospfv2/vars/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "31050eb7af82aad96bdf748dc26f410fa56d0fc426e7a583ab9ea261e0a23000", + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_ospfv2/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_ospfv2/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "chksum_sha256": "7200105e66871ab7b8ae409eacde75f173708b19fbc46b5dfd512816beb5c0fd", "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7", + "name": "tests/integration/targets/iosxr_ospfv2/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/meta", + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/meta/main.yml", + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", + "chksum_sha256": "c081530d7ea0a30fdfefe7b92a48f9d7570b66ade21694b8faa1857d3624cfd4", "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/_populate_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "249c1fec66619c9576dd1c47f0b9abcd5377d408dc6f33b101639b8962161bc1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "b18aabdd28ded7ce5eaeb2fc8e20e3609e78091d172c9e4467e953cf15e3b2c6", "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "05982ef9644df8c28203ff858981fc5883a0c479fae9f391262eaf5dd2b976d4", "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "43bd5bb5c07bc5ce5ae41802cd97f60b7474505e994ad6e03d82b615f8bbc03f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/tests/cli/not_hardware.yaml", + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d45c23f2fed05fea77e4d6081381f243f895035b72a52be4a28d46215dd9026a", + "chksum_sha256": "bc3a8aadf532ef7cd6f55ca3fcc220ad1a1597d43b8927da151c3f8b6b3ab4f4", "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/tests/cli/default_facts.yaml", + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1db28925de61b31d4d1494430b130beb85579fe7f3ac582b05ef26ced8161c28", + "chksum_sha256": "58dd8f904e17dfd4fffd6a6e1e3a4d5387fa38bde6454ae2c5a53a34d058eca3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/tests/cli/invalid_subset.yaml", + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9dc93102aaeb6318fa47c746d0ef7e6eecfc39757b5e0af1e9503a309c6118db", + "chksum_sha256": "95564208ef074169b8b022b09f16f311333ff57c4c8dc16ea7c0a049441fdf7a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_facts/tests/cli/all_facts.yaml", + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "09ddaf160ad114c35a1a1abee7ec06230e2c0c1c20a7e465aa479d25ec892e3a", + "chksum_sha256": "fb1d0eb3798a289e286e8175801c5c1e4624e15cde7976d5afe06bc98f677658", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fc50952bf32ba9c19dc8ce51fd6a75f07328b80b00e3105f3bd746797d027501", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tasks", + "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "88ca6319ff4d07831545abca9e5c0cfde8baa1013cbbcf73dd697ffad6ce0b79", + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_ospfv2/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_ospfv2/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_ospfv2/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/meta", + "name": "tests/integration/targets/iosxr_prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/meta/main.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_prefix_lists/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/defaults", + "name": "tests/integration/targets/iosxr_prefix_lists/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "056300e86e33d8bd4c6a91441a5aebdb0f1c0aac51930895ad3862211ead4b78", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests", + "name": "tests/integration/targets/iosxr_prefix_lists/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "03ffdfe82c9b009133361192299521b9457798b577daa4aee23d17cdffc2d78e", + "chksum_sha256": "0cd46bf6eb4382f30d13e184852377422958a6f882a49dd694b3a82709265ac8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/deleted.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ff639e39ecc88528745c050f97fd0192efeec27230a6073001e29c5af17293a", + "chksum_sha256": "faa07f9fa788bf1fe18e07fb1d06f797b05da7a822318916f969975dfaac5478", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/gathered.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6eea25c602c2e11df4f7138d2d4836e224a971a6c3c971562d444b18724fe8a", + "chksum_sha256": "2bc68f81719327ba9af3add49753b86806a773ae4d1dd82cc28b1d082056aa25", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_config1.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0090f727c6e68f3abf6755ad0c74d65c0a406d5de0675985e5109432903f9680", + "chksum_sha256": "f40f0a57eb589df2ee64a1628873874408bf7504b5620c6b275450116f81dae0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/empty_config.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14c0028b5d36b2482930e55607a441ae5e913ebf74e07cd5c086bb72e2a15b2d", + "chksum_sha256": "0b1cc12f4914b97b943e06edd3ffa0a27d298e50fdde3170dd1257a1c9fdf07c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_base_vrf.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a90dce5c848e047ee6b15a9875807caf3834be025a1a84a912f385f650b8b083", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7ef8a2b601776d796e19b13b6a7d7f7e8c91da5c876488ce935e47976908dc4e", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/overridden.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b7c84c2fb381806cbfc487a06b97ec8dff7f6e3533c44a2876d1b934b644e7d", + "chksum_sha256": "6124272ed18483b35ecc3e79e5dc7a97fb53f4cd02ad193d1d860f408711fd5b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_parsed.cfg", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b3130bb3936b59d324966976cb9028b960cefbeb74b0a4f57ee73f8b51f80e63", + "chksum_sha256": "00f68885674a79797fd718487a3df7e70af4782785456212e76c50cf85495517", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0912064fd6e2456af64546781d84b7e1463836226ef076f85276e67b9804fed2", + "chksum_sha256": "351ab25b2412eee119ffee510ebe0b70b40b13e8111e0c4b2b5c519bdda51634", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_vrf.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8f4218bdca10a45c9080e2f6b03a0143e44e984ba634245ccd1bf8ba62dbbca3", + "chksum_sha256": "293a473418d1ab4abe4b92f1ad395d0798f956c6e81b60b8a9c96ef6423702b9", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/replaced.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d2d812affc5ccd626806375d3324a9354d0bce0db2eeca99dc2142cb80f6534d", + "chksum_sha256": "a43a99763a924f63fec89ac15da6a0e52887599d1f3c8c22df8e5b083fdf9f38", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/parsed.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6756cc71ee7f4b36a79a2a9adc5d58b3f7ba4752d4bc7d0532adf8b203d01952", + "chksum_sha256": "35f8c72cfa440d55ad5148e38ef607e05bbb6cd1632a6ac7425d351ac301680b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/rendered.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f0831e2ebf2b374d0528523f153d63aa05c51c9427cd1d978e6bb1b3541fb30e", + "chksum_sha256": "98eb3a3642a23b70e1b74c890a478169edcb4a079cb75d158fceb89da2e9a16c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/vars", + "name": "tests/integration/targets/iosxr_prefix_lists/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_address_family/vars/main.yaml", + "name": "tests/integration/targets/iosxr_prefix_lists/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0afc6b42287dd3380bccf43815067aa662d4e3ea573c31bf16d78fa37d6ee429", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_prefix_lists/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tasks", + "name": "tests/integration/targets/iosxr_bgp_templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", + "name": "tests/integration/targets/iosxr_bgp_templates/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/meta", + "name": "tests/integration/targets/iosxr_bgp_templates/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/meta/main.yml", + "name": "tests/integration/targets/iosxr_bgp_templates/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "74c848224ffad63d69ccdb5967ad262f67070521cc6e66d3e4a007f864e2971e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/defaults", + "name": "tests/integration/targets/iosxr_bgp_templates/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/defaults/main.yml", + "name": "tests/integration/targets/iosxr_bgp_templates/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests", + "name": "tests/integration/targets/iosxr_bgp_templates/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_replaced_af.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "03ffdfe82c9b009133361192299521b9457798b577daa4aee23d17cdffc2d78e", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0fa5a58884c54913bb3233265309e71f17a41edebbb6e521712db35088bddcc8", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0d3f42e30ecfd27dca2f459e67fcb29aa7eb221087dff2125a4b50e24de047c9", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/empty_config.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5dd7dce83c0f85059155d19b0844f40613a98e42f0718a0fa319c1bfafc0b775", + "chksum_sha256": "0c48041607d4f3f9751372d34ec71b765e96d62f3d2a162c324a5ef048958c4c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/replaced_af.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1adc26fbed5ebfa1eebe6013b93d3341c85b9e55a579bb5615cbf02e5a650536", + "chksum_sha256": "ff31325e71e86e7007d9b29d08c9f407956972156df495ac07024154d928513a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_populate_af.yml", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d225cb9e1c413befc498bed1759effe731146fb93a8275cc5f28a9fb6cd62733", + "chksum_sha256": "b943b447000b4e451ac3dc7544d79fe0691086f8eb2a4d34d1e248ad9934d378", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/deleted_af_with_vrf.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a04a3326feb2ff3aa7d9895fba630bba0d39c7e0ac0335c378d6c9c726dea9a7", + "chksum_sha256": "cfa2236ca0b46e39df7b3b571cee8c62dabba518ce4e518d0dafa7eb3a2600ec", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/merged.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c983c5b8e7bdc4997dfda6709c7d4a8c719b507c82b73041b3159cca9d6a039", + "chksum_sha256": "3dc246fb3ff4a02172d4d73bf3c4f014ea0093abfd61810dcc85900e37d693e4", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_parsed.cfg", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "69b28ec7e3b77375e263157ffdbc2e5c7dea56353f9a906f0efdab44aaba2efe", + "chksum_sha256": "90d0a8d5622c81922045271d739a7cb2dfcadfa85af7468cac5b06e8b365440a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73d93464c7e118949c3a6da1e915242a227681ab6ba766d5de54953c3cd6dd9b", + "chksum_sha256": "48d0d8085ccfdfbdf58b9b8ddb7159d979047292981053056aa4028091d6f8bf", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/_populate_vrf.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73cebb0d68942b9cebc4449c12ecdbf9d07ad5ab0375875f6b2dd9a03bd87ca8", + "chksum_sha256": "03ffdfe82c9b009133361192299521b9457798b577daa4aee23d17cdffc2d78e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/replaced.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "63d9fa98fdd8596f997fa6c705bf0ac62ad1f9d958b656b0c4b29f5ee7c2e3d3", + "chksum_sha256": "797b55ca951af676c97415a0b258709a60f737dc9710f351380a10c9eacc5566", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/parsed.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ada9252d595d233bb3b7e2a01900965416d147291a2ac3b443c70c9478cad60", + "chksum_sha256": "5bde50a48af939d0c8b43a2da46351d1acedb5dd33c69b5b2ded9f4a613f04b7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/purged.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2cce29019f0726c03e53a2daa42ff31d962e2df7b0bcb6b6a75cb120950ff68c", + "chksum_sha256": "6731146ad09a00a0ea8505b832cc08a897090e74ff69d2b5f37e3aec40689555", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "05d664f2d11d59132b41ab8f93edcb49d06d8f827796db4c9dab60549b4166b3", + "name": "tests/integration/targets/iosxr_bgp_templates/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/tests/common/deleted_af.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c45590bfc752fc39a81b8b358968e75e75335e4c3d6449f6a8ca051999fd2ea", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_bgp_global/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_global/vars/main.yaml", + "name": "tests/integration/targets/iosxr_bgp_templates/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "744a98c76b992e1adb641f9f1770a9d7aafe06e4c75ae8a26c889b6fd99b376f", + "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ping", + "name": "tests/integration/targets/prepare_iosxr_tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ping/tasks", + "name": "tests/integration/targets/prepare_iosxr_tests/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ping/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_ping/tasks/cli.yaml", + "name": "tests/integration/targets/prepare_iosxr_tests/templates/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ping/defaults", + "name": "tests/integration/targets/prepare_iosxr_tests/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ping/defaults/main.yaml", + "name": "tests/integration/targets/prepare_iosxr_tests/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_ping/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ping/tests/cli", + "name": "tests/integration/targets/prepare_iosxr_tests/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ping/tests/cli/ping.yaml", + "name": "tests/integration/targets/prepare_iosxr_tests/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c196cce06bc05f3315cddb3f355cb0b4d6417314c420e64d3af66765d697551", + "chksum_sha256": "31ae6f9228a0fabc3db6d87215aa04e1cb642f5b96cf95d40056dba6ddfcbae0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces", + "name": "tests/integration/targets/iosxr_bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tasks", + "name": "tests/integration/targets/iosxr_bgp_address_family/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_l3_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/meta", + "name": "tests/integration/targets/iosxr_bgp_address_family/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/meta/main.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "0afc6b42287dd3380bccf43815067aa662d4e3ea573c31bf16d78fa37d6ee429", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/defaults", + "name": "tests/integration/targets/iosxr_bgp_address_family/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9aae7589fd152283c827668756aa807df73d6b0e3b02a39329aa5adb982a34aa", + "chksum_sha256": "6756cc71ee7f4b36a79a2a9adc5d58b3f7ba4752d4bc7d0532adf8b203d01952", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c4d2b031234ceb533507d437a610a5d19f6dc3b4622650baf62a06d21c864e1", + "chksum_sha256": "0912064fd6e2456af64546781d84b7e1463836226ef076f85276e67b9804fed2", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc7ca7650fea2420e7d244a0042773bcb8b71f6102996f7317d971038011f69e", + "chksum_sha256": "f0831e2ebf2b374d0528523f153d63aa05c51c9427cd1d978e6bb1b3541fb30e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a24591a78ea4cd2fedffa114fa012bf8f93071c26adf6e8810415f2c4121b18c", + "chksum_sha256": "d6eea25c602c2e11df4f7138d2d4836e224a971a6c3c971562d444b18724fe8a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "13f8f39d5a62294c86bcb4d28e2d5ab0f307e32cfdd5b9790ba4d48b6f8b363d", + "chksum_sha256": "14c0028b5d36b2482930e55607a441ae5e913ebf74e07cd5c086bb72e2a15b2d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6a05e793c4dee9a71aa7360480ff679ff1ac5901b01b5b8b847f0ee8919daa53", + "chksum_sha256": "b3130bb3936b59d324966976cb9028b960cefbeb74b0a4f57ee73f8b51f80e63", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c6bcba044debf2f522bd4cc8acc2be21c0534b4429bf491b01c7c4c4d6ba1e4", + "chksum_sha256": "9ff639e39ecc88528745c050f97fd0192efeec27230a6073001e29c5af17293a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_config1.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cea9a33ea739964862b47059bb71915e721d9153f0ae11f448eb2aa0f3e63555", + "chksum_sha256": "0090f727c6e68f3abf6755ad0c74d65c0a406d5de0675985e5109432903f9680", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "03ffdfe82c9b009133361192299521b9457798b577daa4aee23d17cdffc2d78e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/fixtures/parsed.cfg", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b02fe37e4efac9a20e9480b4f9268dacac3fb2c1ed7b07b897606d06b353f53", + "chksum_sha256": "0b7c84c2fb381806cbfc487a06b97ec8dff7f6e3533c44a2876d1b934b644e7d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59dc8c2804a3b783878bb6af8d7c390e7ecd8c78e024aae5d329d253ae0439f0", + "chksum_sha256": "7ef8a2b601776d796e19b13b6a7d7f7e8c91da5c876488ce935e47976908dc4e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_base_vrf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2012e92a9c0896356f0e74af36986c6f11b2e88c3d3f33eddd25202b5eff5450", + "chksum_sha256": "a90dce5c848e047ee6b15a9875807caf3834be025a1a84a912f385f650b8b083", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/_populate_vrf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac4d19dd0c70447823eab99d6b2c5f1007985f20bd560c8275ac1ae2f8bef43b", + "chksum_sha256": "8f4218bdca10a45c9080e2f6b03a0143e44e984ba634245ccd1bf8ba62dbbca3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/vars", + "name": "tests/integration/targets/iosxr_bgp_address_family/tests/common/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d2d812affc5ccd626806375d3324a9354d0bce0db2eeca99dc2142cb80f6534d", + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_bgp_address_family/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l3_interfaces/vars/main.yaml", + "name": "tests/integration/targets/iosxr_bgp_address_family/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a7439fd1d36352ee12daaf2487b7e6c8c013a1f0fb366cf6e3900bfeb0580ec9", + "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_bgp_address_family/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tasks", + "name": "tests/integration/targets/iosxr_acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "name": "tests/integration/targets/iosxr_acl_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/defaults", + "name": "tests/integration/targets/iosxr_acl_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "c9c186e5b37c704de87faa743ec5ba48edef1722215a550914539801cc5f67fb", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "60a105434aaf3d04dde592ece9cdf1017cb0b3172120288810d97715fe2fd431", + "chksum_sha256": "25049f0c45154ecc9748bca191fbeb5239511e4a87cc68964b1899d9731f178b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/deleted.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3f167ba03527e52c6b3236cf547eaad59e5c22cbb7378a1a90eb2a8ab736633e", + "chksum_sha256": "3e4615b224f5c3f3beb526a6112487ea2f90880deefa2eed6e7903c023dee300", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/deleted_all.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a582c68cd840533e05aaf3367b334d02dd74684b0af6a23269ff0b208bf06f5c", + "chksum_sha256": "3fe49d80821c922d19f9db8e41eb9a60b6328f43791322450bf5d78899332dcf", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a3de6c6599cbd3a7950c303559545975838139e9c4b6899dc85727669925a168", + "chksum_sha256": "f86e8be0f7d1983eb2350200ecb588e258b5712eb5a6e027fbd540fb3664ebe9", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/rtt.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fed7af68aca997e00c7816b282d84fe5b3858ba27497fdfb1f3f87fd1ad7c268", + "chksum_sha256": "107424d86e345ce03603238560177493367356c6fa158092d8c272e20f8b3572", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/merged.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "69c219c2446281fb3697154ddfb3a06e77f320193cd04d461a20b0362a4447e8", + "chksum_sha256": "ce73c16381b1f6d60eb2a28255e2c73d3e440383faf5b4c592be6a2a17ec4cf0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/overridden.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e4d53cd354dc5e35745d702bd43dc67c57ed1548f94168f687b0cd380e30432", + "chksum_sha256": "85013bce86eea3299281d203601b99b8f56cc72e1ffe45075f6147bb5b090742", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fad593c0a30c05a9399505505e33bb99d75913b2ca333fa0f5d198ecb52d3fc6", + "chksum_sha256": "e428186b1eddbc63e5395419d8183ba503bfb276767d1c1e7fff71da95af734d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6950308b0007d4bd83a9207819818cafea411ea68e0e0d16cd0b142257082729", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/fixtures/parsed.cfg", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6edd326a3c4a5b18f2a041ef8e9313e870c9eff81940294307cc07a3ff90e5e5", + "chksum_sha256": "e7dbd305d647109e42dac7d09473eab83bb832b522169b0d9ae7ae0a6a8e33d0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d324ad8894b55b2586831251fbedab24cb4924fb90a7bb9ebe42bf6e57437ff5", + "chksum_sha256": "646caf77a4a5a75a19987a0316b75e38bcdf89ee4cf21a2e7e6a0f2ff925eca0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25ae2d218ceb84438e1135380d5e3f55dbede18338f5c4826bf253fbb1b91545", + "chksum_sha256": "47e2e6914d5891922ec91d009954863a86a6ce47df64b1db65d886ff8a9c7d0c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ba58ba01382b709d04ad2b8b0f82c2d53d7a71a6a1a3bbfbd2b68b09de23dd8", + "chksum_sha256": "ed9f2b98d464bf8603d35a074fe2d50eb66d3a2c595967f48de1264a2038dcab", "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/vars", + "name": "tests/integration/targets/iosxr_acl_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_acls/vars/main.yaml", + "name": "tests/integration/targets/iosxr_acl_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a07cda33c597dd4e76d3b812b962e5718c936287134221c1fbe55ff3a3490d6e", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_acl_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cdac5ecec5537510649ea64ca19a23351ebc7e9783ff4fe4f220079ed2c37bf7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tasks", + "name": "tests/integration/targets/iosxr_ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_system/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "226f3a6bf7002dddaa01371fffd0478b580563bdd21ca7212f2d768935f5be13", + "name": "tests/integration/targets/iosxr_ospfv3/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tasks/netconf.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ec33b881eaf97c9bfd901055dc833ab4f2e49f22f124da655fb04ada98dc14e", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/meta", + "name": "tests/integration/targets/iosxr_ospfv3/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/meta/main.yml", + "name": "tests/integration/targets/iosxr_ospfv3/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", + "chksum_sha256": "fa66fb8ce0cc80369445c497f68d5e087540f12ad98f96f181e99c7500e5f232", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/defaults", + "name": "tests/integration/targets/iosxr_ospfv3/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "717d5351bebea57a2f0ccd874a2517595c2dda6c4ca8cb3c6de7c0902aa14b75", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests", + "name": "tests/integration/targets/iosxr_ospfv3/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/cli", + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/cli/set_lookup_source.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "754a7df244f40b48ec9ff6d792154255135fd7b9be267890a273eff7ad9e9799", + "chksum_sha256": "820c9d8378bc3893f82eef7b74466761336b9e7acf36c99a76ab549c03fefab0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/cli/set_domain_name.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9076279454f7438bf2047b19f82ddffc2fe20c0e4d4e7ebfdd9e71d0b9ba408b", + "chksum_sha256": "97c41a9ab68d27a209106c1f47557a5659ca2e8914fdef8e29514b208c8c771b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/cli/set_name_servers.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "71122c961b8e1745598abef3fab16c200697475242a403da4a724d91a709ced8", + "chksum_sha256": "959f73cb330969c6963963b3a9c6ced291c02803d8b43e0d280691e1abb94a88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/cli/set_domain_list.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d754474af95b48e0e6357e87a0133cca7ad10883053223f12df8c5c049b8393", + "chksum_sha256": "b74c20ce7b08e53ee2f6ad55e8964e7d763329b130c8a57f5962395f1daf2a13", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/cli/set_hostname.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2897acaae31a983f24ec8d6f97a95190092a82f7af610ca8a18a3d7bc2805e75", + "chksum_sha256": "771f96cd83c9a893ed5ea4eb2d25b331fa2728f8399f0fb2327327a2eea69eb8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/netconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b353f038fe3608efaa4fe240c2490e4d96479df9fac05c5e65b382b2b5eb45e5", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/netconf/set_lookup_source.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d018618970e16e1784aaf8e1e1af0fe66be828e75ac88630726d2cb687f77e9c", + "chksum_sha256": "46bf472822cc2a45ce47c1ac6c8059fc5f228be53f0ee692765832aa1541f811", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/netconf/set_domain_name.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac4ac4212045c4d53698a46f935b4f7755174a0a59311ee6abfd47503af63425", + "chksum_sha256": "296f132a73194b9b2d134f6cba1b69da8f2e1f3345c4cf5952c8fe686e1eac91", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/netconf/set_name_servers.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5ef987744cf3dad479a759862ff62b6bf3149a5fb8e0933ff023a92405af3146", + "chksum_sha256": "0432f28e01aa6fcf74a9f27e1d245b6e7368bdf7c4e6cada6911becc1a5d8cd6", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/netconf/set_domain_list.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "72a77a732b1e7f734d27236d5339fe22dd7e4239f3bf8364df87140313fca83f", + "chksum_sha256": "38ac896b32ffc759f2b4e498126f827b96d1cb0cec61a9c8e1669aee7d68af1c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_system/tests/netconf/set_hostname.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f13d423556dcce1658d29446113c6e4da7fbe03defa9517c210b86100ddaba26", + "chksum_sha256": "fe864b51e70814be13bf52e56f90108c6f6f874ddf23fc9c229019215bab349f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp", + "name": "tests/integration/targets/iosxr_ospfv3/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_ospfv3/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "93f1a75fd2d40c2d5b43a04650b66fd0d98e638e951373de1fbe2f5e22b79ce8", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "66d389919e87982a7de0c3a90adfb49bb46d953079385a160b96eade8ab816d0", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ba2306dde118373ceb847e377f4d6017846446a5d4f20350f3dab7ef76ed6c9a", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d208dc3d0e8a9a35951844e6a916db895790ccda6bd7bb550b824a7eb4477b30", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/rtt.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1539a41e787502ec7781cbcb2c00157799a196ce6da851d0565b96d14db4059b", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/_populate.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fe0b5773fcd48afa2ba50bdb1cc2318f5d4dc3d46362db64195210f5ff26acf2", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b8a5a0ab330416618101c508230864f1c4d2956b5d3babe9e74ac3c295439a3c", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/fixtures/parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b053b09f9388c7f6208c51e8b9e53867bd6352bf37c9688f28b02ab348ed3767", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "26c4083f5bd77b0b8a4a7866d3a93116bb2f0a0e9a3620beb2651b37cd2eabbb", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c9445f3494ae6fab46f8a866ba98cccfa586ddf8b3c467ca3e6da1a757d83e7b", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/tests/cli/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3f35e7101f1490cb9fb6467b196a0b527dd72ef2a8d72925ec6567770bd58832", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp/vars/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "28efea0049957f8eb23160dce61b09a38b89b1fa61bc53f4f53b7f809b4eebd1", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_ospfv2", + "name": "tests/integration/targets/iosxr_system", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tasks", + "name": "tests/integration/targets/iosxr_system/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_ospfv2/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_system/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/defaults", + "name": "tests/integration/targets/iosxr_system/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_system/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests", + "name": "tests/integration/targets/iosxr_system/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli", + "name": "tests/integration/targets/iosxr_system/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_system/tests/cli/set_domain_name.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "58dd8f904e17dfd4fffd6a6e1e3a4d5387fa38bde6454ae2c5a53a34d058eca3", + "chksum_sha256": "9076279454f7438bf2047b19f82ddffc2fe20c0e4d4e7ebfdd9e71d0b9ba408b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/deleted.yaml", + "name": "tests/integration/targets/iosxr_system/tests/cli/set_hostname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bc3a8aadf532ef7cd6f55ca3fcc220ad1a1597d43b8927da151c3f8b6b3ab4f4", + "chksum_sha256": "2897acaae31a983f24ec8d6f97a95190092a82f7af610ca8a18a3d7bc2805e75", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_system/tests/cli/set_lookup_source.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05982ef9644df8c28203ff858981fc5883a0c479fae9f391262eaf5dd2b976d4", + "chksum_sha256": "754a7df244f40b48ec9ff6d792154255135fd7b9be267890a273eff7ad9e9799", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_system/tests/cli/set_domain_list.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43bd5bb5c07bc5ce5ae41802cd97f60b7474505e994ad6e03d82b615f8bbc03f", + "chksum_sha256": "2d754474af95b48e0e6357e87a0133cca7ad10883053223f12df8c5c049b8393", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/rtt.yaml", + "name": "tests/integration/targets/iosxr_system/tests/cli/set_name_servers.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "88ca6319ff4d07831545abca9e5c0cfde8baa1013cbbcf73dd697ffad6ce0b79", + "chksum_sha256": "71122c961b8e1745598abef3fab16c200697475242a403da4a724d91a709ced8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fb1d0eb3798a289e286e8175801c5c1e4624e15cde7976d5afe06bc98f677658", + "name": "tests/integration/targets/iosxr_system/tests/netconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/overridden.yaml", + "name": "tests/integration/targets/iosxr_system/tests/netconf/set_domain_name.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "95564208ef074169b8b022b09f16f311333ff57c4c8dc16ea7c0a049441fdf7a", + "chksum_sha256": "ac4ac4212045c4d53698a46f935b4f7755174a0a59311ee6abfd47503af63425", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_system/tests/netconf/set_hostname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "249c1fec66619c9576dd1c47f0b9abcd5377d408dc6f33b101639b8962161bc1", + "chksum_sha256": "f13d423556dcce1658d29446113c6e4da7fbe03defa9517c210b86100ddaba26", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_system/tests/netconf/set_lookup_source.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc50952bf32ba9c19dc8ce51fd6a75f07328b80b00e3105f3bd746797d027501", + "chksum_sha256": "d018618970e16e1784aaf8e1e1af0fe66be828e75ac88630726d2cb687f77e9c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_system/tests/netconf/set_domain_list.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c081530d7ea0a30fdfefe7b92a48f9d7570b66ade21694b8faa1857d3624cfd4", + "chksum_sha256": "72a77a732b1e7f734d27236d5339fe22dd7e4239f3bf8364df87140313fca83f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_system/tests/netconf/set_name_servers.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b18aabdd28ded7ce5eaeb2fc8e20e3609e78091d172c9e4467e953cf15e3b2c6", + "chksum_sha256": "5ef987744cf3dad479a759862ff62b6bf3149a5fb8e0933ff023a92405af3146", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/fixtures", + "name": "tests/integration/targets/iosxr_system/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/fixtures/parsed.cfg", + "name": "tests/integration/targets/iosxr_system/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7200105e66871ab7b8ae409eacde75f173708b19fbc46b5dfd512816beb5c0fd", + "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_system/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "226f3a6bf7002dddaa01371fffd0478b580563bdd21ca7212f2d768935f5be13", "format": 1 }, { - "name": "tests/integration/targets/iosxr_ospfv2/vars/main.yaml", + "name": "tests/integration/targets/iosxr_system/tasks/netconf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31050eb7af82aad96bdf748dc26f410fa56d0fc426e7a583ab9ea261e0a23000", + "chksum_sha256": "2ec33b881eaf97c9bfd901055dc833ab4f2e49f22f124da655fb04ada98dc14e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates", + "name": "tests/integration/targets/iosxr_l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tasks", + "name": "tests/integration/targets/iosxr_l3_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_bgp_templates/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/meta", + "name": "tests/integration/targets/iosxr_l3_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/meta/main.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a7439fd1d36352ee12daaf2487b7e6c8c013a1f0fb366cf6e3900bfeb0580ec9", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/defaults", + "name": "tests/integration/targets/iosxr_l3_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "03ffdfe82c9b009133361192299521b9457798b577daa4aee23d17cdffc2d78e", + "chksum_sha256": "2012e92a9c0896356f0e74af36986c6f11b2e88c3d3f33eddd25202b5eff5450", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/deleted.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "48d0d8085ccfdfbdf58b9b8ddb7159d979047292981053056aa4028091d6f8bf", + "chksum_sha256": "cea9a33ea739964862b47059bb71915e721d9153f0ae11f448eb2aa0f3e63555", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/gathered.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cfa2236ca0b46e39df7b3b571cee8c62dabba518ce4e518d0dafa7eb3a2600ec", + "chksum_sha256": "ac4d19dd0c70447823eab99d6b2c5f1007985f20bd560c8275ac1ae2f8bef43b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/empty_config.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3dc246fb3ff4a02172d4d73bf3c4f014ea0093abfd61810dcc85900e37d693e4", + "chksum_sha256": "dc7ca7650fea2420e7d244a0042773bcb8b71f6102996f7317d971038011f69e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/merged.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5bde50a48af939d0c8b43a2da46351d1acedb5dd33c69b5b2ded9f4a613f04b7", + "chksum_sha256": "a24591a78ea4cd2fedffa114fa012bf8f93071c26adf6e8810415f2c4121b18c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "797b55ca951af676c97415a0b258709a60f737dc9710f351380a10c9eacc5566", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/_parsed.cfg", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "90d0a8d5622c81922045271d739a7cb2dfcadfa85af7468cac5b06e8b365440a", + "chksum_sha256": "5b02fe37e4efac9a20e9480b4f9268dacac3fb2c1ed7b07b897606d06b353f53", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff31325e71e86e7007d9b29d08c9f407956972156df495ac07024154d928513a", + "chksum_sha256": "8c4d2b031234ceb533507d437a610a5d19f6dc3b4622650baf62a06d21c864e1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/replaced.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6731146ad09a00a0ea8505b832cc08a897090e74ff69d2b5f37e3aec40689555", + "chksum_sha256": "9aae7589fd152283c827668756aa807df73d6b0e3b02a39329aa5adb982a34aa", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/parsed.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c48041607d4f3f9751372d34ec71b765e96d62f3d2a162c324a5ef048958c4c", + "chksum_sha256": "9c6bcba044debf2f522bd4cc8acc2be21c0534b4429bf491b01c7c4c4d6ba1e4", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/tests/common/rendered.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b943b447000b4e451ac3dc7544d79fe0691086f8eb2a4d34d1e248ad9934d378", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_bgp_templates/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "6a05e793c4dee9a71aa7360480ff679ff1ac5901b01b5b8b847f0ee8919daa53", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_templates/vars/main.yml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74c848224ffad63d69ccdb5967ad262f67070521cc6e66d3e4a007f864e2971e", + "chksum_sha256": "59dc8c2804a3b783878bb6af8d7c390e7ecd8c78e024aae5d329d253ae0439f0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_l3_interfaces/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "13f8f39d5a62294c86bcb4d28e2d5ab0f307e32cfdd5b9790ba4d48b6f8b363d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging/tasks", + "name": "tests/integration/targets/iosxr_l3_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_logging/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "226f3a6bf7002dddaa01371fffd0478b580563bdd21ca7212f2d768935f5be13", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging/tasks/netconf.yaml", + "name": "tests/integration/targets/iosxr_l3_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fa9c4a9fe2092e91f2ea6b09ad81329cfee0b30084180265f361621d15caddfc", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging/meta", + "name": "tests/integration/targets/iosxr_ping", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging/meta/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_logging/defaults", + "name": "tests/integration/targets/iosxr_ping/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_ping/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging/tests", + "name": "tests/integration/targets/iosxr_ping/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging/tests/cli", + "name": "tests/integration/targets/iosxr_ping/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging/tests/cli/basic.yaml", + "name": "tests/integration/targets/iosxr_ping/tests/cli/ping.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ed1aa824bbd24c758b317e46cea14e2b97fb05ab28b8699aa8f790bee3b9334", + "chksum_sha256": "5c196cce06bc05f3315cddb3f355cb0b4d6417314c420e64d3af66765d697551", "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging/tests/netconf", + "name": "tests/integration/targets/iosxr_ping/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_logging/tests/netconf/basic.yaml", + "name": "tests/integration/targets/iosxr_ping/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9206e795c6094a95fd7200603ecda2c2320e0eb1420ecab9ae76c047d31a27f", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_static_routes", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_ping/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_static_routes/tasks", + "name": "tests/integration/targets/iosxr_netconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_static_routes/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "132a5c51daf268caea032e927c4d608384e0e212a9d2db31417238aa9e7f7d06", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8c378f7a2ccabe54f2708379bb4258b6687e55d75f71f23690a7bf19a89895f5", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/defaults", + "name": "tests/integration/targets/iosxr_netconf/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_static_routes/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_netconf/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli", + "name": "tests/integration/targets/iosxr_netconf/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "db869687ce8a3c6f01b918be52a77e107f74116a43fe8fc9bcae14d5def7994b", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "00937ba6bd39c8d9b9d57e9afafa09812ac1f9be681301623220ce59ad57de5d", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f241eedfb974aee95dacdb64a7a2bd4120059f7854460bda9d3e4acf0d806fab", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "83dc069647949b99a4cbf01a41fce4b29ef2eb0e420bf3f27b8b7e40de474542", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/rtt.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9a63bcc02761c785c2d76ea2af8ec715510cab7a13e2cb65223a0b2dc105f290", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9dd1cf36a11cfb51274f12498a802efb7767a084a8c55f431f777060da24c70e", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43f8d39f847501b94cbd8af0deb64f4e30353fc524822f2b2ed585fac61e0b63", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/delete_specific.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4f228479698428bdefd45f559f3bfe6413dc9f46f01c8ceb54a6474dbf16b5c9", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/_populate_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1735d21dcfcca3b2e613b10c51eb2a0ecaad2a6f6f44fc71baae6e3a8704c0ff", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2feedb5681526e889cbf30419b57f28143f328d184b986a53fcd106a3014b490", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f6db71c5ade8ac5f359f7bb484d517f21dd6c163ee24c64d281992184ee4c783", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_netconf/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "854e3935b164f2f04624c7fef6c59a8dca0808cd4d063a9da2f632f85f94dc3e", + "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", "format": 1 }, { - "name": "tests/integration/targets/iosxr_static_routes/fixtures", + "name": "tests/integration/targets/iosxr_netconf/tests", "ftype": "dir", "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_static_routes/fixtures/parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6e148c74b09c0b22e87e8e55b815a0250281aa8daabde38b951b425cfbec2442", + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_static_routes/vars", + "name": "tests/integration/targets/iosxr_netconf/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_static_routes/vars/main.yaml", + "name": "tests/integration/targets/iosxr_netconf/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d2335eeeaa4ace8094a5daa3fa60d634693f9b07c483babba9e3c6c265d77508", + "chksum_sha256": "e68ba6599b56873a91e4b0002751395d61ce254351af0256b215d553229d0984", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family", + "name": "tests/integration/targets/iosxr_netconf/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_netconf/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_netconf/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", + "chksum_sha256": "19f48e1c0e26a39016c6e5d4b89a0cb15fdaa31aa34a29e64f7e595e3c1fe967", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac", + "name": "tests/integration/targets/iosxr_banner", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/meta", + "name": "tests/integration/targets/iosxr_banner/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/meta/main.yaml", + "name": "tests/integration/targets/iosxr_banner/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/defaults", + "name": "tests/integration/targets/iosxr_banner/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_banner/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests", + "name": "tests/integration/targets/iosxr_banner/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common", + "name": "tests/integration/targets/iosxr_banner/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_route_policy.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0357901519ac8ac68f6c7059838c4cec150ef91418cbe8f82efc4c0d43f6fa9c", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-motd.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c455861f770ac7341d3e29ba6804ffdd075bd6fac56f4e5f07b494eb12aa6cc7", + "chksum_sha256": "a63b5980f97093dfa1ff3c6f3730f2ca0eb3c011af4430267f16cccdc0234d72", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_vrf_base_config.yaml", + "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-login.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d94b9491a045f06789eaaa96222a72a7dd8f65c48d45d88dba16fac049fd704", + "chksum_sha256": "00656d9558735dc363fc4ba83a58620f10aa6ad82ab4554f00ed2655922f59bd", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/deleted.yaml", + "name": "tests/integration/targets/iosxr_banner/tests/cli/basic-no-login.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "faf8165e1aa4827820ee0e9a0ff2c418cf23c682592ada66b626266facf9d1b9", + "chksum_sha256": "25e88c9b68237bdf23639108d7085f04bedec5592b86fb12467e7e3ba449ca2a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9c36f82fabc3726780c6dcef3a0fa8d4d7fa7d019fef1d97e076b8fe18a443fa", + "name": "tests/integration/targets/iosxr_banner/tests/netconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/empty_config.yaml", + "name": "tests/integration/targets/iosxr_banner/tests/netconf/basic-motd.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb4ab173f008550df0cc48f83ecb505db4299ee8a9f026dff12c5af63d14b7fb", + "chksum_sha256": "52cb507d481aa76f0a7685583fa5c7828e6271804fe2a90b34fa7159c24eae54", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_base_config.yaml", + "name": "tests/integration/targets/iosxr_banner/tests/netconf/basic-login.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a6c17c3999a6aa6f3d39720a51223d01ceba114a4e704ed27bec76342cd0abe0", + "chksum_sha256": "d831f48454277a06c4809abc0d238b1963f16278853be6be3eee834b0bffd3ba", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/merged.yaml", + "name": "tests/integration/targets/iosxr_banner/tests/netconf/basic-no-login.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80bdc3eb58879b59242b45b0227e215f0c14772fb790850a5c4614c1d040852d", + "chksum_sha256": "50f1c5622a99ec54a98a3b978dee91614909adcedf67378c13cd2f3cb09e48b7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "70746bef62da91f4d74143ebbaee0b443f901bda32a4f1e5a841b32d4c6f6f66", + "name": "tests/integration/targets/iosxr_banner/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_parsed.cfg", + "name": "tests/integration/targets/iosxr_banner/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f559ed5b722bfebecf0cb6a696f9bbcb6ec56cf63c25e47be07bf9478e556e4e", + "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_banner/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "018ace52485c2b1609f5d7d8893cfe0b99b5204eecee7eea3d3b634d614a1e1e", + "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/_populate_vrf_config.yaml", + "name": "tests/integration/targets/iosxr_banner/tasks/netconf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19489912900216d55b30d715921bf8e1edad2d1945ce967383c9b10bf045aa1e", + "chksum_sha256": "74e0fd06296ba78b354273f00e39a2cb9f77e8102eddc40deb284d83c52255ba", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cb254762f05493022cfab5268eb344f0aa9c5f62129bd422903006e890d1f01f", + "name": "tests/integration/targets/iosxr_command", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "312204dc90b5c1572a58a7a44d7590f6da0274af0a9ac9102c9c1e762694d64f", + "name": "tests/integration/targets/iosxr_command/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/tests/common/rendered.yaml", + "name": "tests/integration/targets/iosxr_command/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52cb77efeb2277f2766261efd23be1b385eb0a279a4858a160fbb23e6790f898", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/vars", + "name": "tests/integration/targets/iosxr_command/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_bgp_neighbor_address_family/vars/main.yml", + "name": "tests/integration/targets/iosxr_command/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f9a9d7ca96d490c22c02070c8c68ba92103e69f4a072341a141d204d7173fe9f", + "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests", + "name": "tests/integration/targets/iosxr_command/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests/tasks", + "name": "tests/integration/targets/iosxr_command/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests/tasks/main.yml", + "name": "tests/integration/targets/iosxr_command/tests/cli/invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31ae6f9228a0fabc3db6d87215aa04e1cb642f5b96cf95d40056dba6ddfcbae0", + "chksum_sha256": "985f58c4989f203f257c68725a9877e3ee3b5f4783af27429698e9a335d40605", "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_command/tests/cli/timeout.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "96843e537eee47517c5049885b84061a141b2eeba5680c11c5b66693d7be09b5", "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests/meta/main.yaml", + "name": "tests/integration/targets/iosxr_command/tests/cli/cli_command.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92", + "chksum_sha256": "36008ced825f92916c9c1a8063d7d3af07a89cc64d6692a28d825eb1c6a020be", "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_command/tests/cli/bad_operator.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9d53587f24caf85f74a90aa38d629e1821967b99c42a52603745a2536000bc64", "format": 1 }, { - "name": "tests/integration/targets/prepare_iosxr_tests/templates/config.j2", + "name": "tests/integration/targets/iosxr_command/tests/cli/output.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b", + "chksum_sha256": "53ebb6e7f4ab53c74c9baa8d4f0bb7b62453e6cdd0e974df88dc334d573aaf6f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_command/tests/cli/prompt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1c2d2d6c07d37bbd84190440034126fc5d74de4e55e824813974e059a9413ec2", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tasks", + "name": "tests/integration/targets/iosxr_command/tests/cli/contains.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7d9716e753ba5366a03ac74d4787a8cc31547382904b1316605503d481afb1b7", + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_command/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_command/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_command/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "2dbe0b4a48613e36db6dc24d1cc5587a9339d560c7be5fb830643a5e9a97f6db", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/meta", + "name": "tests/integration/targets/iosxr_lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/meta/main.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_lag_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/defaults", + "name": "tests/integration/targets/iosxr_lag_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "e2e959c351c31c2016e6bb08f5f6ebad88c3e8bf6525d6f67c5d64e998fa9d82", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "50d4197872d8d2199638a7049cfcaac7c3d9332ccdc4b432d84ab9eac3fe0899", + "chksum_sha256": "9b815ed33546d40ccc361d9255a0b79a50a034a48262a0e9d92fea684e83938c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b908ec71d04a400c46745f5f6aa67edc06711a6fa409bb6ed2570d7b7bbc7f88", + "chksum_sha256": "64195a6619101530f2cd471d76d6dbfea7ab3165c4f2763346f3c7ce3162077b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "133cc3a327728f918408d45c77742cd31e4cc17537871f0d02674a5a48c394c7", + "chksum_sha256": "9f9e3fec02b4ecb3c5316ec824369cfea049c05a0b2a95443a63d6afdac4d4bd", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4d9508554b3caf42a189031a45bbe918f8d87ab46b49670f824f45e84f1f73b", + "chksum_sha256": "4077106b1998d758480ba741ca583bcea9685e8d9df81838902a74f5da0b4e4f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18a4c9c8fa0b4717435de1c5b0c06e1bcc37099d4e1e2f50cd52755b5382d90f", + "chksum_sha256": "f847af0e5e79e0763bed170eb13e60c0cb994688d0b70f14d0ac7bd371ab1d1d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b651c37d64cbc8d8ce70ebbf64f9edf9f32ec1b9986713f8e786bb8dd1a5b93", + "chksum_sha256": "161c4405c145118f98f3efc7f81cd20f53fd4eca7c0604a2e06824676426191b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86dfa2d949109a946c52fca30228bdf700908e44f122a528c64d6952f5d45a78", + "chksum_sha256": "4662bfa7d0b5cf776e2fbaedb8b5302d292f0454cacdea054518fd1e337d9fef", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bd4e56a2a6fc4c69833fbdf6b198e6b2cc36e62ae656d53286ff5a1e22189951", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/fixtures/parsed.cfg", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26b4e7ee16aab6f1a3a11e5b8dcd55412e8afba623415469b2aa057b23126745", + "chksum_sha256": "05b0d34519c01bd8145069ef131b8c42b2d948fb308f4bd50c8d5cae88b6e285", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8735a17ccab3ecd1af096f3d1c722e7db3b0ae5c7e48667aba20f9ec6b155d08", + "chksum_sha256": "75580d3b17d3e54d3542f54410a63f647fd78e4e1167a42b01095baf6681164d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9eb5c038a48458b36702ea94d1bc8172511a8eadeec71fe922d406cfebf4b5c7", + "chksum_sha256": "0e74e052ae15e52a8d70aa1788ea86e4a2ca5287a18231c67c4fb8b65e3fc63f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca461ff84f99d15126252d878ef50b92ce916783f8cb6ff91f2e2342144dcd7a", + "chksum_sha256": "44b26adc92992ebff6de4aa4d43b0ccd72c5efb44b09416469866ca3eda28180", "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/vars", + "name": "tests/integration/targets/iosxr_lag_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_l2_interfaces/vars/main.yaml", + "name": "tests/integration/targets/iosxr_lag_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c659daf4218da5a2de29b769dc1250d37a6a80151c93a58fb3958289f5d8d59f", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_lag_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tasks", + "name": "tests/integration/targets/iosxr_lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "name": "tests/integration/targets/iosxr_lldp_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/defaults", + "name": "tests/integration/targets/iosxr_lldp_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "3a4ed71b399bcf1bbc0fd2978888ebf6d151bee360e2ab4d1c87fbe35198c936", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests", + "name": "tests/integration/targets/iosxr_lldp_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/_populate.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bd4e56a2a6fc4c69833fbdf6b198e6b2cc36e62ae656d53286ff5a1e22189951", + "chksum_sha256": "ad57db9e94ca2aadfd2f45b32c2e81e8e1704d7d5a195ce520512c16821edda5", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4662bfa7d0b5cf776e2fbaedb8b5302d292f0454cacdea054518fd1e337d9fef", + "chksum_sha256": "1fc1699dbbe7a8cbfdf21bf4f22fb223de156d8a7d23ca00d8f623a4bb3e7837", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4077106b1998d758480ba741ca583bcea9685e8d9df81838902a74f5da0b4e4f", + "chksum_sha256": "8f1df41b44d45fac6172c094147565b4e877bb60cfae594134a6b1c43bca0f3b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f847af0e5e79e0763bed170eb13e60c0cb994688d0b70f14d0ac7bd371ab1d1d", + "chksum_sha256": "eb7802fd324a06c4462213a656f1cf305b31210533f51e9d741eb2d2493d289c", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44b26adc92992ebff6de4aa4d43b0ccd72c5efb44b09416469866ca3eda28180", + "chksum_sha256": "c142d0fed11008b1a62e7486b30db686dba853439164655fafdef54909bc63bd", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75580d3b17d3e54d3542f54410a63f647fd78e4e1167a42b01095baf6681164d", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05b0d34519c01bd8145069ef131b8c42b2d948fb308f4bd50c8d5cae88b6e285", + "chksum_sha256": "cc8ece13d91edafdb680a275bf4c794d642f584b24963f75e91d399d26e90dce", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64195a6619101530f2cd471d76d6dbfea7ab3165c4f2763346f3c7ce3162077b", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e7f5a8b2f177d64272fc6a947921672ba402efae9f50df985f9b026c4ed26f59", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/fixtures/parsed.cfg", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "161c4405c145118f98f3efc7f81cd20f53fd4eca7c0604a2e06824676426191b", + "chksum_sha256": "95e5e93bdf0c29777aa2b210fd1cf1890625966262998e2661116ec817049717", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0e74e052ae15e52a8d70aa1788ea86e4a2ca5287a18231c67c4fb8b65e3fc63f", + "chksum_sha256": "e49f9c535fa7caa99d4f479101a39f837189d97b785fb02af518895f2c0fe9f1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b815ed33546d40ccc361d9255a0b79a50a034a48262a0e9d92fea684e83938c", + "chksum_sha256": "a9dcf714eef59cc87ef2c4f4f117074297213b19694e6a8cedbd50760f2b39b3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f9e3fec02b4ecb3c5316ec824369cfea049c05a0b2a95443a63d6afdac4d4bd", + "chksum_sha256": "c23d2dbb51d7164eab5fed3e834136b9c58d8912110cde108a85f0e20e091aac", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/vars", + "name": "tests/integration/targets/iosxr_lldp_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lag_interfaces/vars/main.yaml", + "name": "tests/integration/targets/iosxr_lldp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2e959c351c31c2016e6bb08f5f6ebad88c3e8bf6525d6f67c5d64e998fa9d82", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_command", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_lldp_global/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tasks", + "name": "tests/integration/targets/iosxr_ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "name": "tests/integration/targets/iosxr_ospf_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2dbe0b4a48613e36db6dc24d1cc5587a9339d560c7be5fb830643a5e9a97f6db", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/meta", + "name": "tests/integration/targets/iosxr_ospf_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/meta/main.yml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", + "chksum_sha256": "934f6f7a277e34f616d5459e1989f9e0faeaf4e0a61444289abfaf37ee120659", "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/defaults", + "name": "tests/integration/targets/iosxr_ospf_interfaces/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "d11bd78a2d74e8dc46a2880b54b3500e2f88cc4e3e6fd42a249138556e94964a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tests", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tests/cli", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tests/cli/prompt.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c2d2d6c07d37bbd84190440034126fc5d74de4e55e824813974e059a9413ec2", + "chksum_sha256": "c1cd77375707ee0397f1efbd07a4f7fdfcfbec26c86042f65c7f29f3cca9a9c3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tests/cli/invalid.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "985f58c4989f203f257c68725a9877e3ee3b5f4783af27429698e9a335d40605", + "chksum_sha256": "96c0644d6833fa509126bfa843bb259b9c9963e2e53d5fee080bb3cdece99de7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tests/cli/contains.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d9716e753ba5366a03ac74d4787a8cc31547382904b1316605503d481afb1b7", + "chksum_sha256": "50f480556a54480a5cff156bcb4a8fad88e60404f4ca0ffd94df379667fd7bac", "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tests/cli/bad_operator.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d53587f24caf85f74a90aa38d629e1821967b99c42a52603745a2536000bc64", + "chksum_sha256": "40b9f6860fef89f7797529730ca794a03fef91355da74053086820283a821df5", "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tests/cli/output.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53ebb6e7f4ab53c74c9baa8d4f0bb7b62453e6cdd0e974df88dc334d573aaf6f", + "chksum_sha256": "52c1f9bebbf6821f0b098ff9cbcdb8a1b30b1044a88f3b89e8fb8e76ea9b37c8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tests/cli/timeout.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96843e537eee47517c5049885b84061a141b2eeba5680c11c5b66693d7be09b5", + "chksum_sha256": "a06cf74352024ffccea204ef3822fe08618aba04915148c8736f6387331f3662", "format": 1 }, { - "name": "tests/integration/targets/iosxr_command/tests/cli/cli_command.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "36008ced825f92916c9c1a8063d7d3af07a89cc64d6692a28d825eb1c6a020be", + "chksum_sha256": "b4377cdd354c797bde70b1ab79c25b8126309a735c3e52ada4dd3cf2c61db4c3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_netconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b9a8c7d0bff4202802918716797b5c1a831da98ca2bebe674f77d3e13de6b1f6", "format": 1 }, { - "name": "tests/integration/targets/iosxr_netconf/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6627fdd69a02636b86a4d138377f7e54897986e3f16878ff6a55e573eeac3793", "format": 1 }, { - "name": "tests/integration/targets/iosxr_netconf/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "chksum_sha256": "4ea507d63e8a9cff4eb0a1fc7dbb6a4bf4e85fe8bf3f0075dbbc6e3505648d69", "format": 1 }, { - "name": "tests/integration/targets/iosxr_netconf/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19f48e1c0e26a39016c6e5d4b89a0cb15fdaa31aa34a29e64f7e595e3c1fe967", + "chksum_sha256": "b92b9c34db1ed38368a5daa18ab827267e694b837a278a42224c5652f0f3d876", "format": 1 }, { - "name": "tests/integration/targets/iosxr_netconf/meta", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_netconf/meta/main.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_netconf/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_netconf/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_ospf_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/iosxr_netconf/tests", + "name": "tests/integration/targets/iosxr_static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_netconf/tests/cli", + "name": "tests/integration/targets/iosxr_static_routes/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_netconf/tests/cli/basic.yaml", + "name": "tests/integration/targets/iosxr_static_routes/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e68ba6599b56873a91e4b0002751395d61ce254351af0256b215d553229d0984", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lldp_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tasks", + "name": "tests/integration/targets/iosxr_static_routes/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lldp_global/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_static_routes/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "d2335eeeaa4ace8094a5daa3fa60d634693f9b07c483babba9e3c6c265d77508", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/defaults", + "name": "tests/integration/targets/iosxr_static_routes/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_static_routes/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "6e148c74b09c0b22e87e8e55b815a0250281aa8daabde38b951b425cfbec2442", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests", + "name": "tests/integration/targets/iosxr_static_routes/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "95e5e93bdf0c29777aa2b210fd1cf1890625966262998e2661116ec817049717", + "chksum_sha256": "f6db71c5ade8ac5f359f7bb484d517f21dd6c163ee24c64d281992184ee4c783", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/deleted.yaml", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7f5a8b2f177d64272fc6a947921672ba402efae9f50df985f9b026c4ed26f59", + "chksum_sha256": "1735d21dcfcca3b2e613b10c51eb2a0ecaad2a6f6f44fc71baae6e3a8704c0ff", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb7802fd324a06c4462213a656f1cf305b31210533f51e9d741eb2d2493d289c", + "chksum_sha256": "854e3935b164f2f04624c7fef6c59a8dca0808cd4d063a9da2f632f85f94dc3e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c142d0fed11008b1a62e7486b30db686dba853439164655fafdef54909bc63bd", + "chksum_sha256": "f241eedfb974aee95dacdb64a7a2bd4120059f7854460bda9d3e4acf0d806fab", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/rtt.yaml", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c23d2dbb51d7164eab5fed3e834136b9c58d8912110cde108a85f0e20e091aac", + "chksum_sha256": "83dc069647949b99a4cbf01a41fce4b29ef2eb0e420bf3f27b8b7e40de474542", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/_populate.yaml", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ad57db9e94ca2aadfd2f45b32c2e81e8e1704d7d5a195ce520512c16821edda5", + "chksum_sha256": "00937ba6bd39c8d9b9d57e9afafa09812ac1f9be681301623220ce59ad57de5d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/merged.yaml", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e49f9c535fa7caa99d4f479101a39f837189d97b785fb02af518895f2c0fe9f1", + "chksum_sha256": "db869687ce8a3c6f01b918be52a77e107f74116a43fe8fc9bcae14d5def7994b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "43f8d39f847501b94cbd8af0deb64f4e30353fc524822f2b2ed585fac61e0b63", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/fixtures/parsed.cfg", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc8ece13d91edafdb680a275bf4c794d642f584b24963f75e91d399d26e90dce", + "chksum_sha256": "9dd1cf36a11cfb51274f12498a802efb7767a084a8c55f431f777060da24c70e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/delete_specific.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a9dcf714eef59cc87ef2c4f4f117074297213b19694e6a8cedbd50760f2b39b3", + "chksum_sha256": "4f228479698428bdefd45f559f3bfe6413dc9f46f01c8ceb54a6474dbf16b5c9", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1fc1699dbbe7a8cbfdf21bf4f22fb223de156d8a7d23ca00d8f623a4bb3e7837", + "chksum_sha256": "2feedb5681526e889cbf30419b57f28143f328d184b986a53fcd106a3014b490", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_static_routes/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8f1df41b44d45fac6172c094147565b4e877bb60cfae594134a6b1c43bca0f3b", + "chksum_sha256": "9a63bcc02761c785c2d76ea2af8ec715510cab7a13e2cb65223a0b2dc105f290", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/vars", + "name": "tests/integration/targets/iosxr_static_routes/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_global/vars/main.yaml", + "name": "tests/integration/targets/iosxr_static_routes/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3a4ed71b399bcf1bbc0fd2978888ebf6d151bee360e2ab4d1c87fbe35198c936", + "chksum_sha256": "132a5c51daf268caea032e927c4d608384e0e212a9d2db31417238aa9e7f7d06", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces", + "name": "tests/integration/targets/iosxr_static_routes/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8c378f7a2ccabe54f2708379bb4258b6687e55d75f71f23690a7bf19a89895f5", + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tasks", + "name": "tests/integration/targets/iosxr_logging_global/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_logging_global/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_logging_global/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_logging_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "4a069b29e331858b268f0a2ab9ace19d5bf793703a8b5c452ac8724a6570506e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/defaults", + "name": "tests/integration/targets/iosxr_logging_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_logging_global/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests", + "name": "tests/integration/targets/iosxr_logging_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli", + "name": "tests/integration/targets/iosxr_logging_global/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "78ab712357d68b164ba677cffc2bc61cf9184dbe7eb616461b039880544c9d4f", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/iosxr_logging_global/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0bdd704c64456dc5bd746f258448a6c7c132cd3b2f06849f59bc8454e1b93189", + "chksum_sha256": "10bb238d21d24df6fe4e476d542492839c1943430ea17c6cf9275eb4790da423", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_logging_global/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bac4a7214f9a2a43940bb7ea473ad5c479dfed034cb1f092169751886339a4ab", + "chksum_sha256": "909a21409e28a252b2c0d6fccf1e6c0e2cb51d710665aa7c0cafc11d6679a727", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_logging_global/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c0a26973a1f425dcb788f4de6ffb431f0fb3cb439b285427e259545f81d6079", + "chksum_sha256": "32b4a5eb23f7544ff53968c2f2f714963b86c198caa83facbb6e36be9cb85d49", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/iosxr_logging_global/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e0d64d1e1033c62bbc4da61e6f2e49fb79ca27eba372a6c557a6fabc8b01548", + "chksum_sha256": "8149279cc0a1da197893f2b231b99e89d35f72f7eca43c0ded62a1f7938af73e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/_populate.yaml", + "name": "tests/integration/targets/iosxr_logging_global/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1fb4c8047c353cd10a83ff0a2f9eb2c3455e1b72e81165bfecb475a5969d11c1", + "chksum_sha256": "2b6b32698c946e6caf83b8d756358cf0fe146dcdf81efd2b020ce595eba38bd4", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/iosxr_logging_global/tests/common/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c33155ba2ec1dea7921b926e4baa656122f8bdf75ab4e39c85fba98e981d7f6", + "chksum_sha256": "e9111575d03ca3e8cae1744708bc4329dd05fdd40ab5468d722198a6728b1dac", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/iosxr_logging_global/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c10d1cc4272407919910b0b6c62badf94ef67f853fa1ac99a581603cc9ed7da", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "279dfdbc6e8e658f0034995198e414253f0a512c6590a311da073cae0a52d15b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/fixtures/parsed.cfg", + "name": "tests/integration/targets/iosxr_logging_global/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "09906ee86cc2c5b1a515dafa190e3576def507f53ed9563c471db011ab76eb54", + "chksum_sha256": "6b79a9c0fb64ffb5ea3b2499161f3d284af835a1e17ff12cbfe838a09a936573", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_logging_global/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa7e3e3c95400ac64035e994ec52bc2663674bb98562dd66e70cd1a18cab813b", + "chksum_sha256": "d72b330e428d01f36ce0ba454497558efb2aaa4a3d2f4423378d93febb7025a4", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_logging_global/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2d359d45a561dcc99db2945a7e3de3c4e3564caaac19c643672331b7a2c26e0", + "chksum_sha256": "8e2c26f79a8f6cc6611dd48d408df870cc43853b8d8dd9ebe0af83465119b0df", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_logging_global/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "095271b41184a0146f918498fb43a1d4808359cad386c08f3ff6ff8ae3991fc4", + "chksum_sha256": "02dd8a9273d456e158f8810372ee5f70c1b4ea56d70cfa11eb6dab8f9023b558", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/vars", + "name": "tests/integration/targets/iosxr_logging_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lldp_interfaces/vars/main.yaml", + "name": "tests/integration/targets/iosxr_logging_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0dca88a635c4df7935a64b62dcc4e29afc8ea29e79c5a69790d9fa39248aa593", + "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke", + "name": "tests/integration/targets/iosxr_logging_global/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "73e48db0c23a63565816ea0d938e972a0a9daee404ea69b57fc39f403f1288ac", + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_user", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/tasks", + "name": "tests/integration/targets/iosxr_user/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_user/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "40afb148ddcbe35a254f1ce45c8ba687b3b892aab717f66681c6be8bde22e308", + "name": "tests/integration/targets/iosxr_user/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/tasks/netconf.yaml", + "name": "tests/integration/targets/iosxr_user/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ad5dae3d18e72e98b8a55fdd73f3b01d51db09ebb761501da3b84d54a36a945", + "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/meta", + "name": "tests/integration/targets/iosxr_user/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/meta/main.yaml", + "name": "tests/integration/targets/iosxr_user/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_user/tests/common/_auth.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", + "chksum_sha256": "00191a8605978a3eb0394bd610914da6e741774b1c863542f02e33e0c1684187", "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/defaults", + "name": "tests/integration/targets/iosxr_user/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_user/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "c0e5876713521246628445bdb96a184c1e60d03021606d7a36756530776b349e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/tests", + "name": "tests/integration/targets/iosxr_user/tests/netconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/tests/cli", + "name": "tests/integration/targets/iosxr_user/tests/netconf/basic.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9d98246d4804b3d836796e4bba10fe7ebf0fa0ecd3c991fb0e1273feba169520", + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_user/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/tests/cli/common_config.yaml", + "name": "tests/integration/targets/iosxr_user/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1090b517c30bb3086c8e82909cafae786ef234aa5e49db4073cd7ed94a1339be", + "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491", "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/tests/cli/caching.yaml", + "name": "tests/integration/targets/iosxr_user/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1dba81f68c64f197ee9bf87378ce1306b01740319f063a555bc3ed23ede1a01", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_smoke/tests/netconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "70521f927ee1761e08f277a254437be92c536918337892bcf0c5c0368957d99a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_smoke/tests/netconf/common_netconf.yaml", + "name": "tests/integration/targets/iosxr_user/tasks/netconf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "101eb3edf7114ed0a02320acc9b5a3d91add238079336f8e6a020bead66924d0", + "chksum_sha256": "6650a55f6db383c6dea0285df827b038a5080894e176da4ff5ba05a71d8f007d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces", + "name": "tests/integration/targets/iosxr_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tasks", + "name": "tests/integration/targets/iosxr_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_interfaces/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "628f1746159ca78d2b44a74e2309d2db9b380b5a8582fb2c0f0b92c3ba38e95f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/defaults", + "name": "tests/integration/targets/iosxr_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests", + "name": "tests/integration/targets/iosxr_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec8d829135a6074a8ad75ee76a2a1a4079e03325d92c0e830515cbf90f31eb6f", + "chksum_sha256": "9d90b33bba17d4d2ae74d79879e9163f0c413e1d4f076d7817c3a856e456e41f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be06b4f3cb25a95c6d1950c4919025c1cb15e114624d59b18c0eaa5a7d79b52f", + "chksum_sha256": "2390ab9c8c2958dd0623138f888fa1db1e40d20023bb803e5a1fdc9906be8504", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6ba2253349b074129effa793f31923b22ae2448ce58a9549023db855839460d", + "chksum_sha256": "c2426117bdd1320e641684a463c4b947c1864f76710eda7ed9a36c06c1b3615f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14d91239138aa32bb7f451a89aefff422136e57427583623a172747eb5814453", + "chksum_sha256": "4b561e6501b1861665d181d39f4882f6c99b610c359d7294443b5e37722edf6b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f5bdefcaae69fa3cffe08302fb9dc9f706c3fd00edd4d2c86d032983d66bedbf", + "chksum_sha256": "9e989cbdc6bc0299a75483abb2bc9f771224d13dbdd084992fd71e6ef57f1a5a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/_populate.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2b84773b00c039d32e50e18779dfd48fc98e4f0012351d6d6c1ecbd740d25936", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e7cf195c2dfadb34e7393d4c74acbbfcb568899d7461c2bb6b4fa5acbc48b70", + "chksum_sha256": "e7f495f2b2f098efc4830e55aecc165536ef8cacbf35fcefc030cfa3a6a5a345", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8d21a0b454b78c9643c6d1c47de95eafb44e9199b1a8bca7588c0d9c91cca02", - "format": 1 - }, - { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "44b35581001d7173e1b8f2fb5c3f8804692c59c87594ba3f4bdf1458cdd56256", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/fixtures/parsed.cfg", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81e585cfbf29f1293be9881382ce419c6a2b0cbf9c1f87be057a241de2f44f98", + "chksum_sha256": "f6957f1a450e714240cdf34121eaf5099db25f1bda037680c8af357fef80839b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "717d1fb8c96130db8d6288c45c7c8dc46222d03917bf77b322b871ffcafd3a99", + "chksum_sha256": "26eb03219bcc0caba6d5b3be37a6bce7fa846c1e5ea6d2df9a5fba581597d7af", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "417f4d3094f95606aac731b14ae567a97c7b703114b88423cb677e0f6b2cc06c", + "chksum_sha256": "d3915314d2bb6a8c96a0f18c7cc4d1bdbb6a16e78a660baf7328ca5f6fc854a1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/iosxr_interfaces/tests/cli/_deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9dad2238d7ee4b8fb78919028c1bb64ba29d4e2088f53ecf5fa99ea9c5e29c87", + "chksum_sha256": "d1264641b82c36fe0d15026aa6bcf379dcde00c183ca8f1283a7e9db9880c50d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/vars", + "name": "tests/integration/targets/iosxr_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_lacp_interfaces/vars/main.yaml", + "name": "tests/integration/targets/iosxr_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29a8acf3766df1e54abe6a3dadfc393571647722393b132444952162b30a60ae", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config", + "name": "tests/integration/targets/iosxr_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_smoke", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tasks", + "name": "tests/integration/targets/iosxr_smoke/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tasks/main.yaml", + "name": "tests/integration/targets/iosxr_smoke/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ba11d0a6ecc4c096ca24c09fc0f707954d3dc64ac8964ea17901fe60887213a", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tasks/cli.yaml", + "name": "tests/integration/targets/iosxr_smoke/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_smoke/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aeaea690f4a27b4af77c33a24968cdc89de2ca73e590d9ec1db4b80842750bb7", + "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tasks/cli_config.yaml", + "name": "tests/integration/targets/iosxr_smoke/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_smoke/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/iosxr_smoke/tests/cli/common_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c2b1c324c2399a7589d2fd4a7ed9b201f8a8299424924277b67298903db1d3cd", + "chksum_sha256": "1090b517c30bb3086c8e82909cafae786ef234aa5e49db4073cd7ed94a1339be", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tasks/redirection.yaml", + "name": "tests/integration/targets/iosxr_smoke/tests/cli/caching.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4dda061736323dd09fa0832d73a74f4dec4a7c4665357ad20c914f15778cf99f", + "chksum_sha256": "e1dba81f68c64f197ee9bf87378ce1306b01740319f063a555bc3ed23ede1a01", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/meta", + "name": "tests/integration/targets/iosxr_smoke/tests/netconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/meta/main.yml", + "name": "tests/integration/targets/iosxr_smoke/tests/netconf/common_netconf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", + "chksum_sha256": "9a5d023cd3bf0c576500f9f1e668d87d626b8d7c36d45771b7f02837bcfcbbc4", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/defaults", + "name": "tests/integration/targets/iosxr_smoke/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/defaults/main.yaml", + "name": "tests/integration/targets/iosxr_smoke/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/iosxr_smoke/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "40afb148ddcbe35a254f1ce45c8ba687b3b892aab717f66681c6be8bde22e308", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli", + "name": "tests/integration/targets/iosxr_smoke/tasks/netconf.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4ad5dae3d18e72e98b8a55fdd73f3b01d51db09ebb761501da3b84d54a36a945", + "format": 1 + }, + { + "name": "tests/sanity", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel_before.yaml", + "name": "tests/sanity/ignore-2.15.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19a5a9e3043bd0b74fd7e71956374e204626d4346262c0c4cd3d9c579bb89f87", + "chksum_sha256": "b7a7260f01ad97d899400efb85c91ed3a63d922bc40a0dfda0d99a9f7f55b995", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel_after.yaml", + "name": "tests/sanity/ignore-2.14.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75053a4dca4669bd74e8c0edca7056cd31c40751cba6379774c337e466203cd6", + "chksum_sha256": "b7a7260f01ad97d899400efb85c91ed3a63d922bc40a0dfda0d99a9f7f55b995", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_strict.yaml", + "name": "tests/sanity/ignore-2.18.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "33a343c4930c4bd86c2f660177d059bdf6c44e52b4224ecd7e8ade878687544a", + "chksum_sha256": "a8ce632758a8bb8372e36359bbc44782b2b964f48b353e18ad5a9fd3cc91a67f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/extcommunity_set_config.yaml", + "name": "tests/sanity/ignore-2.17.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb9f1df2b57e8364e823fb60276e322bd994be2df12b42a7cfddb461bb3e0dc0", + "chksum_sha256": "a8ce632758a8bb8372e36359bbc44782b2b964f48b353e18ad5a9fd3cc91a67f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/commit_label.yaml", + "name": "tests/sanity/ignore-2.16.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "873e365af69c26af8ed84b963e8f670dfbf86dca68811b164b1465417160070a", + "chksum_sha256": "a8ce632758a8bb8372e36359bbc44782b2b964f48b353e18ad5a9fd3cc91a67f", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/commit_confirmed.yaml", + "name": "tests/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9653c9ff2afc35783f116961cb926bb5f1943c963d05125998cf71c2d18bc182", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/src_match_none.yaml", + "name": "tests/config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21a37a276566385dcce522dd5b49dbcc7615ee5ef44b197b753875c469efa34a", + "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_block.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "45be4aed01d01d3a88065e21b231390a90c01575db70fe99bc373d253a483945", + "name": "tests/unit", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel_nonidempotent.yaml", + "name": "tests/unit/mock", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/mock/loader.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4b629cb3f6c037494f307266e968320063f5533907d7b2b73a2f4c0cb8b91508", + "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/toplevel.yaml", + "name": "tests/unit/mock/yaml_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "98194ad2b27b0a9722de6305af5d2446201c488a21e52d33f31b82f51dcb9dbc", + "chksum_sha256": "134eef238c83a9611799871b743e49e9bfbcd8bdddf2cc6a7bf69fd1000345b3", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_strict_mul_parents.yaml", + "name": "tests/unit/mock/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e641ad89ffb073b8597de019fae0ac2a48482a6a33ff9a3cadd97f364100c70", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/comment.yaml", + "name": "tests/unit/mock/vault_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1880bcdadc904a2cb1d98478fc780763371648a392c6e383eb2102d26bff1ba1", + "chksum_sha256": "55bd0e924dcc22d050612c944bff0ef745e51faac9260dce9b9b2018c4c8a661", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/prefix_set_remark.yaml", + "name": "tests/unit/mock/procenv.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0fb66964d634451765de4922678ada90649e02acb0bc6f5b5ab6c723a506bc1d", + "chksum_sha256": "8355a91c013778f8b70896222e8223d67b743fd8ba2bf541f4ea4d7d460b01ef", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/replace_block.yaml", + "name": "tests/unit/mock/path.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "864b44dbf232d2e1d731ad33a2fb89523b94a21ebba2b8fa9cf1d87f53d4a4d3", + "chksum_sha256": "110552d5ab0ffabe2bc6b6c57e9f389be3920da2e0f37ea5b628795d1b426bfd", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel_exact.yaml", + "name": "tests/unit/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/modules/conftest.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e18cbd1b58ce8368d11e0948fc75860f2b21e4092c74129d894fb7e4fa46dda1", + "chksum_sha256": "e0ae70fa7c2a5e56d7f02a47c3602398cff60c8eb021772ac59a76df2a234048", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/comment-too-long.yaml", + "name": "tests/unit/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3620ac43ca5135f0c0a49e2aeba5ab73a4c2704554d27c87ee4284f87f784bfc", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/src_basic.yaml", + "name": "tests/unit/modules/network", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/modules/network/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5cd6945ede088394c6599ee3b5f2aeddc0c3ed856db44fd8864a626576b79c38", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/route_policy.yaml", + "name": "tests/unit/modules/network/iosxr", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/modules/network/iosxr/test_iosxr_snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "604f5b5f96027a1c3e5768650bdfd7687d1fed0a5045a3e5b9805dddd5fae6a7", + "chksum_sha256": "85bff5db9dde7093986838c4c2d7772f2efc2b64ffcd04b6757f2986d63c16ca", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/backup.yaml", + "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_neighbor_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e89b8bf2ae0c1dd3d859a77494f6f89abfccbfb1e6be30c2d5d17d3296b0cb8b", + "chksum_sha256": "a20f0580ae955a5fc59f6a8d7bf0c85eb26a62b2145b1e6c398944ba46badd90", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/src_invalid.yaml", + "name": "tests/unit/modules/network/iosxr/test_iosxr_netconf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ceaff4b3620df90e8208f020adfa3d1b12ca9bef955fd8e01ef5f0395b4fdcd1", + "chksum_sha256": "9bb0d664660d05259b1bdbb4f443cae4233eed8bcbdd0f694024b367a195e892", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/misplaced_sublevel.yaml", + "name": "tests/unit/modules/network/iosxr/iosxr_module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55ebc624d7356f89f6c2bb32d13aceff80e8df04d57c28f463023a7aca814ee3", + "chksum_sha256": "44fe73a4355f43b735971cdf2927a17ca35a317d8d3dcf7eba3679e42f827bf7", + "format": 1 + }, + { + "name": "tests/unit/modules/network/iosxr/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/replace_config.yml", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_system_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "520231e3fab8fd0eed892322eb5e630667f32730b89f1a06e01c22a72d33ff45", + "chksum_sha256": "18ae20e11b3f557435b212a739a50c59c95e4162dc13989695e6c14ae35e58f7", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli/sublevel.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/show_memory_summary", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81d687e492374044859a0efcfa6dc922fb526648b8631faf70b621ae6742489d", + "chksum_sha256": "c0fedc43463c95b152254b43d741b62c704ffc82b2707b758d1294283384c4e0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/redirection", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_l3_interface_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "50f889004120619f090c295fe5f40c5575c0a4feaed60a14d863d00bf25bd2a0", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/redirection/shortname.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/show_lldp", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c82a2cf83917d7934e758a867235e53629945aa1739c3101bbf61adfb9f248cb", + "chksum_sha256": "4135607fe98acfedbef4f2d3305b4ade7e5e833130f049f310b68f32ce451c66", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli_config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_ospfv3.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8a6d31304503f7cd58289c7ab493bab726a003a69dbcfff3177f82e051180ff4", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli_config/cli_backup.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acl_interfaces_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c6e65aa217139078a0e172b54fc00eb2cfe51f2079cb7d9b0a5d9c5d2a74ca6", + "chksum_sha256": "a5870ad2392bc344f5d7c254ecf5f1b5d317527c2efa346a55a3a73fb0ccd10e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/tests/cli_config/cli_basic.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/dir_7all", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "256bd79f69876e184c69f562b22d1954e91f78e0386e273f4f11c5cf74b1d350", + "chksum_sha256": "c5e2c218c5731bee3f874af0bc5d5694a426ceba650efc03795a5739235f0120", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_l2_interface_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1c18f829582b9ed3a84bc5226dfd05be9c736dc0c949d61f719c71284e747e1d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/fixtures/config_add_interface.txt", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_config_src.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab5bf303021e5250cd67b0f4ad25b8127b74dd2d8630266a382d9ab2aa4c248b", + "chksum_sha256": "57d42d2e8e8b7a4b6cae566115ee42fecea077b525cace10cefc3b7dbd85f033", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/fixtures/config_del_interface.txt", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_config_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "087d7655b24ffcd3191a5cab8015486b1da1488345f6e7617b0523f575b0400c", + "chksum_sha256": "6fe81e446733fef4e3643a80042ab4111b9b0c927599c4b5972ecea4c18b4ffd", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates", + "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates/basic", + "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates/basic/init_prefix_set.j2", + "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr/show_version__utility_head_-n_20", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "92dec92ecf095d1c33c493f4769541caa745787d80e498d6ae81decc93351e0a", + "chksum_sha256": "ca53ef4a0ab10529e7d5df9fd669fae547be148b08ee7075141212ab90a1e929", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates/basic/configuration.j2", + "name": "tests/unit/modules/network/iosxr/fixtures/cliconf_ncs540/iosxr/show_running-config_hostname", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1fd4692dc95cf561f544f8f680c9046add01c85c6fb83c17db2690cb854d3bb8", + "chksum_sha256": "749f869982a235df56c1c7e404744c441340ff6da90dece0c8b83d63ff47e7af", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates/basic/route_policy_change.j2", + "name": "tests/unit/modules/network/iosxr/fixtures/show_cdp_neighbors_detail", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "95c74f6778f25c6385437de97ec5ffbbef5414ed42115d8b7ee276fe5d7fdd64", + "chksum_sha256": "bbc4b792c6b18344cac105ae9b0d6916d5f170dd4b0413de0faecc9a845c46e9", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates/basic/route_policy_clean.j2", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_ospf_interfaces.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "baa2f889363d8827d04378ac81e1516d840d64a721e4cc8284c937390206904c", + "chksum_sha256": "c3e8a76362099f436fe64dbd9dfc6401c862dac9c7b36be4ec83b36d125be2b8", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates/basic/interface_config.j2", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_ospfv2.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3209d667d131c751b8cb1954bceec81eccb663a5e257b81b7394a9edcb9e0d70", + "chksum_sha256": "27b9a4a53478778c5781170c052ba66bcc09dcb40aab0709d28018f6cd332126", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates/basic/config.j2", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_static_routes_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fed860520ec0b19850744af6be1c77939335d4a09539bf563d0c15aa6afc84ef", + "chksum_sha256": "6e148c74b09c0b22e87e8e55b815a0250281aa8daabde38b951b425cfbec2442", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates/basic/route_policy.j2", + "name": "tests/unit/modules/network/iosxr/fixtures/show_running-config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83c3226c2070afbe01cde658ec7852261ac925abed96766989888c70a2f8bc92", + "chksum_sha256": "9442b8aa3e29caa5725d8968da29fa173e998d7c664c92b3ddd66a7aea76a71e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates/basic/change_prefix_set.j2", + "name": "tests/unit/modules/network/iosxr/fixtures/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91a0239cde35ce8e75ad24c8f9c853014cd0c7a5554171ee3b0ad50cc8ed67f5", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/fixtures/show_interfaces", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e37745f7a4d614d0aa5da44df8a0acaea5820a5900d65cabe9640ddcb7e6ccd1", "format": 1 }, { - "name": "tests/integration/targets/iosxr_config/templates/defaults/config.j2", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_banner_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0", + "chksum_sha256": "373fefe369cd647022df09438152a869d3c407cb05c51b3bd8214b81471d76e9", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname", + "name": "tests/unit/modules/network/iosxr/fixtures/cliconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tasks", + "name": "tests/unit/modules/network/iosxr/fixtures/cliconf/iosxr", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tasks/main.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/cliconf/iosxr/show_version__utility_head_-n_20", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "afc73a39f8a8861930e2a6a542ccd07426663ec0584b218987ef2b456d8c00d7", + "chksum_sha256": "cc08220e9647a2a3d34640ffabc08fd34f9601e229ab7cdf5ce4224f62cc158b", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tasks/cli.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/cliconf/iosxr/show_running-config_hostname", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53", + "chksum_sha256": "749f869982a235df56c1c7e404744c441340ff6da90dece0c8b83d63ff47e7af", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/fixtures/show_ipv6_interface", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "151235002e58119649b79a98cbacb5ce155225e31aa0188dd8085ee0961feacf", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/meta/main.yml", + "name": "tests/unit/modules/network/iosxr/fixtures/show_version_brief", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e4eb1b26a35a3c5bcf1e45eab472c8d59ff0559cfbfe701cd60c17ee6d9d6957", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/fixtures/show_version", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "089ab6658c475d1146f913b1cdee2671b46051958e2b7f562da626d327456726", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/defaults/main.yml", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_interface_gathered.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "06b46488db2b8cecffa505d7a8d7f3c0566df2beadef2fb795f3963e26bb1504", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/fixtures/show_version___utility_head_-n_20", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e4eb1b26a35a3c5bcf1e45eab472c8d59ff0559cfbfe701cd60c17ee6d9d6957", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acls_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7415a69cdd33bff4395ad90a4cf6a930082691564493b998844e499a5039d13d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tests/common/_remove_config.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_acl_replace_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "33bb48f812aef67e24ce8cffc06916f7f8adbb8977853170aeb32dd150bf334e", + "chksum_sha256": "197b575ae7d14aeb340f84bcb05ca1e4c7f84786dec07881afb650cc75106c20", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tests/common/deleted.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lacp_interfaces_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c727923bf03a87bd59efc3eb98d414cf99ea84ac3748d32412b7eee33996553", + "chksum_sha256": "04b1c2fbc56979e8df559dc3a499adaff452c0815be45fe4a0e2b1b74f740831", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tests/common/gathered.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_interface_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "348ce984e68aabc275d61e8143b23c6cc59765f2510b073a4c611fa62254a4b7", + "chksum_sha256": "cafb0268e9f22c966719d76a2b7267d966ef98748f68cf3594ea55a3efd03945", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tests/common/empty_config.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lag_interface_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a89c158ee6a5732379e2b446d1d6e307cb116b5a4f602e32781b5e11598f3c9a", + "chksum_sha256": "25aaec36c88ca1c78bdae21f0a0e072929ce56e56f569967927ab6def72d972e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tests/common/merged.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lacp_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2591c3d8f9408a6d1879a028da5491a9275c44601b28d5d1341818ecab434a0", + "chksum_sha256": "1ca4b510769bcfc42967e42d1b560e18908724b345676fb68e76571dfb84e847", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tests/common/_parsed.cfg", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lldp_interfaces_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b0de89ec88a4c3c844244ea9b8a24ef5d12fe4ec4932c525b720742d77334fd", + "chksum_sha256": "1c4e458ac2250cfbfacd5b53e5937c792bdf09a36bf42c7d27cb5add93ffb693", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tests/common/_populate_config.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_user_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b3905393cfeb5a880d6f501a9813b52d787c771504efb07291ea4bdf91a83457", + "chksum_sha256": "e387d5d8b668b1f290872aab2a3e8f8de3d4bdcb99906b8bbf618b950f0c60e9", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tests/common/parsed.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/show_cdp", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "823462a54fe9b7f711ce0331124bd72c3c4029547fd7d1c2e5bd1da25582cebf", + "chksum_sha256": "56578d8143a06834835f0c9cd4901a573514adf51a4dc5cbd2db1e02afcddecc", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/tests/common/rendered.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/show_processes_cpu___include_CPU_utilization", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1fb084918ff5f04f5da804437d0287f888c6b225be719b39e7599e4d2928890d", + "chksum_sha256": "c6eca4811fafb01f204de26b037fee16d63aca082ce05d57b9f0c52fb502ef66", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/fixtures/iosxr_lldp_global_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cc8ece13d91edafdb680a275bf4c794d642f584b24963f75e91d399d26e90dce", "format": 1 }, { - "name": "tests/integration/targets/iosxr_hostname/vars/main.yaml", + "name": "tests/unit/modules/network/iosxr/fixtures/show_lldp_neighbors_detail", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8fb0722d13cbb07c9e9d85b76efbdae857bfdd1801b6aa0501a52946e6b6d588", + "chksum_sha256": "4135607fe98acfedbef4f2d3305b4ade7e5e833130f049f310b68f32ce451c66", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/test_iosxr_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "72a840bc71e4264bd1a81b5bf3fc850b33c72e2420d5b26c6f6f2cfdaa165ba9", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/test_iosxr_ospf_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e4159ca266e4725a08075ed053970e7717d718d59ab1629983de5735b62ca572", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/tasks/main.yaml", + "name": "tests/unit/modules/network/iosxr/test_iosxr_prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "303b9dff6309fcb32b8eb1e05d36298973519248849c1ddb442a6ce54e4ae491", + "chksum_sha256": "201a085820e80e365853eeea7e5ae7132161640c42d5fdc2ec89ea753c012956", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/tasks/cli.yaml", + "name": "tests/unit/modules/network/iosxr/test_iosxr_ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70521f927ee1761e08f277a254437be92c536918337892bcf0c5c0368957d99a", + "chksum_sha256": "fb9665da189a72020612074ebc184341d968bbb7bdaf1a4414694bcac34c1f40", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/tasks/netconf.yaml", + "name": "tests/unit/modules/network/iosxr/test_iosxr_n540.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6650a55f6db383c6dea0285df827b038a5080894e176da4ff5ba05a71d8f007d", + "chksum_sha256": "0b919ddfe1c043e96a522c559cd58e30b83e0f57482e7c5cfe678667d52b3581", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/test_iosxr_utils.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9aa4570454de5df5c836f3753f9575b9c603179c3f5ef19a462c839d7127b828", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/meta/main.yaml", + "name": "tests/unit/modules/network/iosxr/test_hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55144d29457d670189e343c566fbc6b465b90dbd9f2028efbb12d7fcc9f07b06", + "chksum_sha256": "b404fb2dd81ef767eca09da0717a897bedce394093c59c560243ec214b8baede", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/defaults/main.yaml", + "name": "tests/unit/modules/network/iosxr/test_iosxr_config.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9df1284eb7eaca076e95f4179209490ebe211e2854674581e324ac1a68beadb7", + "format": 1 + }, + { + "name": "tests/unit/modules/network/iosxr/test_iosxr_ntp_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c39b59d0219d7b96f78476b4625257ca7fb4d89273d8f542f399a0fd2fefb202", + "format": 1 + }, + { + "name": "tests/unit/modules/network/iosxr/test_iosxr_lag_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e698d9b46a555dd444d0cdc3a9cde31f4e6255cb3d759731d35ee2e74fe1c020", + "format": 1 + }, + { + "name": "tests/unit/modules/network/iosxr/test_iosxr_l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "0a9e70c90e5013c4ae5f95db8385aa9792fc6d96e162e0c099d65567044f42ad", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/test_iosxr_l3_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7d4dc15bbd36b2fd13614fe0f17a7c1a78b28b96e94ea23a6500ee19d5ba6ba6", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_templates.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "51bd0785d9cb6469acd19065c39fb967bbaee9d75f85084252250554a8b2bc83", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/tests/cli/basic.yaml", + "name": "tests/unit/modules/network/iosxr/test_iosxr_ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0e5876713521246628445bdb96a184c1e60d03021606d7a36756530776b349e", + "chksum_sha256": "11e41d28a210b25f2aea3efd0a0bdbcf015c4cecd0a586340f992227e82030b9", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/test_iosxr_acl_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ce14623a4c3e37f8c14004433cebbecc403d06c15ae5f64892f6a9a33631e74d", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/tests/common/_auth.yaml", + "name": "tests/unit/modules/network/iosxr/test_iosxr_lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "00191a8605978a3eb0394bd610914da6e741774b1c863542f02e33e0c1684187", + "chksum_sha256": "2f0d30736ba724eee2381c4ce5ae75ff01281d35aff2bacae346da46da882d9e", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/tests/netconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/test_iosxr.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e53a9b97ed71efe4d13d2cf2cdc93150e445de631cbfe0a4f4c64cefeff8afda", "format": 1 }, { - "name": "tests/integration/targets/iosxr_user/tests/netconf/basic.yaml", + "name": "tests/unit/modules/network/iosxr/test_iosxr_static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d98246d4804b3d836796e4bba10fe7ebf0fa0ecd3c991fb0e1273feba169520", + "chksum_sha256": "29e8d1a1ebd78e1948636089a5718df28352c184bc0e8a57027722f233af6360", "format": 1 }, { - "name": "tests/integration/target-prefixes.network", + "name": "tests/unit/modules/network/iosxr/test_iosxr_ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d577d6580d29511474adecf53c2c66b66aced6b624c4f6c3781138d69870707a", + "chksum_sha256": "8bd300600cc88de9c552cf0acae09599bfd57d8e9d51d8cdf05d4f16de2401f0", "format": 1 }, { - "name": "tests/.gitignore", + "name": "tests/unit/modules/network/iosxr/test_iosxr_system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", + "chksum_sha256": "7a7d249b267878c22d1e203c143f0257eda70400430a66a411bb311fcbed2af3", "format": 1 }, { - "name": "docs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/iosxr/test_iosxr_lldp_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8a8fd8d3f0f5a65e3c9e14f9907552807790a2533152908c54838f35c95f6c3b", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_lldp_interfaces_module.rst", + "name": "tests/unit/modules/network/iosxr/test_iosxr_lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ac0f31d37234a72b543f93f7ac0a450f3dc4ae546bfa977161f2f15d2551f56", + "chksum_sha256": "5c18cc9367c3191297149b09fd742c033fc40ac7aca25a703afbb6015f1537bb", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_lacp_interfaces_module.rst", + "name": "tests/unit/modules/network/iosxr/test_iosxr_banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b647afa59f64aeee6894c9088b7308974fc414e7e23e658026873a24b8a9249", + "chksum_sha256": "c22af0082f2d6cb3a525a6ca1d7562b9e0bd8ed37fc928f240739c6626b40d75", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_system_module.rst", + "name": "tests/unit/modules/network/iosxr/test_iosxr_lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e984064df11389a31575a893fca5484dc0a7c5a46f2d633d92bfdd6a7363cf2", + "chksum_sha256": "c90118c8b1d123933864ae2181ad608629acc06fc31d849ce8f199d968bb9131", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_bgp_neighbor_address_family_module.rst", + "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d4402f555478741555de21a719d386b18a93465ab53f9301eb225f6a0d9f3e4", + "chksum_sha256": "c2a8af31151fc6ec159c192680357aab10f7c2234dbdef373e2e8230c11efbf7", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_hostname_module.rst", + "name": "tests/unit/modules/network/iosxr/test_iosxr_acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e7b8fab433bbc77ff1728579757a6fa910da23694cc9df130ce78b4a1047efa", + "chksum_sha256": "b4b0aff697838d6cd8552f95ceca804d51560600a65df2e22026614b83362cff", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_netconf_module.rst", + "name": "tests/unit/modules/network/iosxr/test_iosxr_logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c0d51a2477850b2fe3dacdf3a7a86e3a66d83491ee38884d3227bb0981eaf02", + "chksum_sha256": "0e403d68e915e02a54ddbc2c6d90065fcd5d9fd2af866677b2342c6144fa0416", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_ntp_global_module.rst", + "name": "tests/unit/modules/network/iosxr/test_iosxr_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21803ea95dc8bd9481c16547a13548692719410c79f470f354489ea69b05488b", + "chksum_sha256": "0e21f0d4d325acf2084bdc7580e19d64276ed471790a682ed01302b95a761955", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_facts_module.rst", + "name": "tests/unit/modules/network/iosxr/test_iosxr_facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31f06265ded0f87434512141f0963fad1518d2e4df40e2e8b30d9f40cb2d75e3", + "chksum_sha256": "4caa9e85526ba68c371adff54e6eb2d89f6471724fb923e5e2d63d2b6bc93e81", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_bgp_global_module.rst", + "name": "tests/unit/modules/network/iosxr/test_iosxr_bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52486dc2a51c8e9a5760ce0654d1693b6cc8ec80b5104a007947ec95fb8fac9a", + "chksum_sha256": "8b04aafaccea128b0597ca289d0ce7a622614781c33d779cca796b87735d6c23", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_netconf.rst", + "name": "tests/unit/modules/network/iosxr/test_iosxr_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c190697f6cc86e85c2b5466ee2dfdf6e9d7eaa1ab5c6c2147fbd4fd0938b26a", + "chksum_sha256": "54918ff415a77cc2092955e95f0e7ccd02b5a29709ac6f7f9520c09530290e5f", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_bgp_templates_module.rst", + "name": "tests/unit/modules/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5ca7c2b348e99ac02421edb09380bf101963bb79fda9e32e073669e25735bbf6", + "chksum_sha256": "414c272e9a403bb6009460ec9502c5acfaa9c80b2159c742f6cb2e225938be3e", "format": 1 }, { - "name": "docs/__init__.py", + "name": "tests/unit/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_ospfv2_module.rst", + "name": "tests/unit/requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "16da0dca6fbf081710785720a1330ebc2479d82d5df650d9712db2a522e49588", + "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_cliconf.rst", + "name": "tests/.gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf973787bc7e3ac2a44b4e471927a7e6b2186420238ee9f27cbef8dae306866a", + "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_acls_module.rst", + "name": "codecov.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d4afc88d6043512adaffacbf40c44076ee62380e5422f43f4a0a2802aef4b604", + "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_logging_module.rst", + "name": "tox-ansible.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4a9a387516f3d29f7ef2d355413e6c9c0ea1ef8588fdfbd2d17aaa7285df542", + "chksum_sha256": "08d5fd8d860231d520993f5378cfbb0e2c45a7820d106fa98b70432b0dd176ad", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_snmp_server_module.rst", + "name": ".gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc4ff48b6712e8a8a3ad4aa28f231af4f1eb7d18d142f3a7a547ae8b061ef2ca", + "chksum_sha256": "445eae124a1f5bb47770dec970cb756d2b736e0e009182ea2175dd3f0d7b7317", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_static_routes_module.rst", + "name": "LICENSE", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "17abfc815e8cac2fa27575cdfb234bcdcff2a44567e59c381428cd3dfccb3fad", + "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_config_module.rst", + "name": ".flake8", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f36139e13012d02ddabb4b106ff5433ef077ca470939452787493bd525a18743", + "chksum_sha256": "f357bc604a44fe8a5912ec2b9067b734a88d1026da98d5993905d7b34ab44357", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_l3_interfaces_module.rst", + "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6001a54a3c3a4d44389bd470e1e82bc968dde9d7922793b93f4ec89456f4c24a", + "chksum_sha256": "473b4e2b68fa9cfa86e77c8eba3aa95a5f714b50b73fe14b811134fc738eb1b8", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_interfaces_module.rst", + "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70ef6ab2e8fd9ab59c0c45b853f816813fec388c87ff35629154fabfd54f40a3", + "chksum_sha256": "45e66d4e5704d00efce212a99c21642d4eda970004696b8093a828bb497209a9", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_prefix_lists_module.rst", + "name": "docs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "docs/cisco.iosxr.iosxr_facts_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba764ceaf2356282fe17c4cf7df068ae3339d07df3d81c91fbc23fe5ad7951cb", + "chksum_sha256": "e748f7bc1f61cce1d02d6b8b3e4e86a124292bbdfa2d45211448bed244c42864", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_lag_interfaces_module.rst", + "name": "docs/cisco.iosxr.iosxr_netconf_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b6f3e0597d0625fb21bd166f2c1b409bd4d90872d920162c8d643df5d60ef92", + "chksum_sha256": "1c0d51a2477850b2fe3dacdf3a7a86e3a66d83491ee38884d3227bb0981eaf02", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_banner_module.rst", + "name": "docs/cisco.iosxr.iosxr_prefix_lists_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18e15247958616f04c733b6838245151c89899fed09a3f4b0146c1ddbd83a9bd", + "chksum_sha256": "ba764ceaf2356282fe17c4cf7df068ae3339d07df3d81c91fbc23fe5ad7951cb", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_l2_interfaces_module.rst", + "name": "docs/cisco.iosxr.iosxr_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8e3f37f93dec6ab14536eeb00486c9836f73c76769ec1099ebd79c20b69f847", + "chksum_sha256": "70ef6ab2e8fd9ab59c0c45b853f816813fec388c87ff35629154fabfd54f40a3", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_command_module.rst", + "name": "docs/cisco.iosxr.iosxr_lacp_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef6d1d76c704c41ff290d36be0bb1bbd2bdd68d92e32678b0bbc57883a78749e", + "chksum_sha256": "afc49ad783441204b9377be2ac4c983368b19289652ab0d867325d685fc9077b", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_lldp_global_module.rst", + "name": "docs/cisco.iosxr.iosxr_netconf.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff7037fcf3fd8987c0e71216600f3949e1b11184082913afff8b72ac12bbc47a", + "chksum_sha256": "0c190697f6cc86e85c2b5466ee2dfdf6e9d7eaa1ab5c6c2147fbd4fd0938b26a", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_acl_interfaces_module.rst", + "name": "docs/cisco.iosxr.iosxr_ospf_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7f7abe113adc1764008bc79eebf7ac78076880bcc0ebee420afb3b8321b3e2a", + "chksum_sha256": "e7c12b32cef21b93bc8f868383bb30fdf93d9d5cf766ec60b49eb07f7f57abe1", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_ping_module.rst", + "name": "docs/cisco.iosxr.iosxr_cliconf.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a3a86ad5aed7136b5e903410f4fbff2ebf126d6aed75957418e47f7ffb2cb604", + "chksum_sha256": "bf973787bc7e3ac2a44b4e471927a7e6b2186420238ee9f27cbef8dae306866a", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_user_module.rst", + "name": "docs/cisco.iosxr.iosxr_lldp_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "911e6a05d509cfc18aed89a68d87f72bb7de50beae350ea2d0f237703868ea8f", + "chksum_sha256": "6ac0f31d37234a72b543f93f7ac0a450f3dc4ae546bfa977161f2f15d2551f56", "format": 1 }, { @@ -8898,10 +8765,10 @@ "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_ospf_interfaces_module.rst", + "name": "docs/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7c12b32cef21b93bc8f868383bb30fdf93d9d5cf766ec60b49eb07f7f57abe1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { @@ -8912,171 +8779,171 @@ "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_lacp_module.rst", + "name": "docs/cisco.iosxr.iosxr_acl_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "afc49ad783441204b9377be2ac4c983368b19289652ab0d867325d685fc9077b", + "chksum_sha256": "f7f7abe113adc1764008bc79eebf7ac78076880bcc0ebee420afb3b8321b3e2a", "format": 1 }, { - "name": "docs/cisco.iosxr.iosxr_ospfv3_module.rst", + "name": "docs/cisco.iosxr.iosxr_user_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "753bba432a6306fc9ae8c89d9718e3e0c58d054d5968408509c4a37fb881e5ae", + "chksum_sha256": "911e6a05d509cfc18aed89a68d87f72bb7de50beae350ea2d0f237703868ea8f", "format": 1 }, { - "name": ".isort.cfg", + "name": "docs/cisco.iosxr.iosxr_bgp_neighbor_address_family_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5328af170b936cfea2a47b7155e4647a89662e559bc2664cfb93dbab968aaea4", + "chksum_sha256": "3d4402f555478741555de21a719d386b18a93465ab53f9301eb225f6a0d9f3e4", "format": 1 }, { - "name": "pyproject.toml", + "name": "docs/cisco.iosxr.iosxr_ntp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc", + "chksum_sha256": "21803ea95dc8bd9481c16547a13548692719410c79f470f354489ea69b05488b", "format": 1 }, { - "name": "bindep.txt", + "name": "docs/cisco.iosxr.iosxr_l3_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8083c02374503e9616216aa195dcdeb6aaac7725e7640896d650699cedda309b", + "chksum_sha256": "6001a54a3c3a4d44389bd470e1e82bc968dde9d7922793b93f4ec89456f4c24a", "format": 1 }, { - "name": "changelogs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.iosxr.iosxr_banner_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "18e15247958616f04c733b6838245151c89899fed09a3f4b0146c1ddbd83a9bd", "format": 1 }, { - "name": "changelogs/fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.iosxr.iosxr_command_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ef6d1d76c704c41ff290d36be0bb1bbd2bdd68d92e32678b0bbc57883a78749e", "format": 1 }, { - "name": "changelogs/fragments/.keep", + "name": "docs/cisco.iosxr.iosxr_static_routes_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "17abfc815e8cac2fa27575cdfb234bcdcff2a44567e59c381428cd3dfccb3fad", "format": 1 }, { - "name": "changelogs/config.yaml", + "name": "docs/cisco.iosxr.iosxr_l2_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e9313ae1bb365e94e03fc01e2c0bd2df437019a987f388ae98e8ec669d498984", + "chksum_sha256": "e8e3f37f93dec6ab14536eeb00486c9836f73c76769ec1099ebd79c20b69f847", "format": 1 }, { - "name": "changelogs/changelog.yaml", + "name": "docs/cisco.iosxr.iosxr_ping_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "795742b55284cd4cefb6a93d05c7c8e0f5abca0b69b5534a0d4c759c6c205d86", + "chksum_sha256": "a3a86ad5aed7136b5e903410f4fbff2ebf126d6aed75957418e47f7ffb2cb604", "format": 1 }, { - "name": "tox.ini", + "name": "docs/cisco.iosxr.iosxr_bgp_templates_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "beb3313789623e5570d0871f6115ba563a0d92ea75e8e89cbd9f79045b4fe279", + "chksum_sha256": "644270907997388095cdb1b35c1864863928522ded5aae20493210e6ecf1637e", "format": 1 }, { - "name": "CHANGELOG.rst", + "name": "docs/cisco.iosxr.iosxr_snmp_server_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ad5482a0acf65d41f9a8301da8a300b656513dd7a88e472b54e5c70c402b4b32", + "chksum_sha256": "fc4ff48b6712e8a8a3ad4aa28f231af4f1eb7d18d142f3a7a547ae8b061ef2ca", "format": 1 }, { - "name": ".gitignore", + "name": "docs/cisco.iosxr.iosxr_lag_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "445eae124a1f5bb47770dec970cb756d2b736e0e009182ea2175dd3f0d7b7317", + "chksum_sha256": "1b6f3e0597d0625fb21bd166f2c1b409bd4d90872d920162c8d643df5d60ef92", "format": 1 }, { - "name": ".pre-commit-config.yaml", + "name": "docs/cisco.iosxr.iosxr_lacp_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80ef9ec70ebb46afce8478d35821ab901c609c1b588a7ed569f9c16864925dd5", + "chksum_sha256": "0b647afa59f64aeee6894c9088b7308974fc414e7e23e658026873a24b8a9249", "format": 1 }, { - "name": ".prettierignore", + "name": "docs/cisco.iosxr.iosxr_lldp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6fd3c3897f57e5447aa2809cf63ff611cbe624192bcc5e0f849cbb699a39eff8", + "chksum_sha256": "ff7037fcf3fd8987c0e71216600f3949e1b11184082913afff8b72ac12bbc47a", "format": 1 }, { - "name": ".github", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.iosxr.iosxr_config_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f36139e13012d02ddabb4b106ff5433ef077ca470939452787493bd525a18743", "format": 1 }, { - "name": ".github/dependabot.yml", + "name": "docs/cisco.iosxr.iosxr_system_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461", + "chksum_sha256": "2e984064df11389a31575a893fca5484dc0a7c5a46f2d633d92bfdd6a7363cf2", "format": 1 }, { - "name": ".github/workflows", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.iosxr.iosxr_ospfv2_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "16da0dca6fbf081710785720a1330ebc2479d82d5df650d9712db2a522e49588", "format": 1 }, { - "name": ".github/workflows/codecoverage.yml", + "name": "docs/cisco.iosxr.iosxr_hostname_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a56c8aba05b81d2e1d6575b37963f40df663387030de5eaac6f5c9dfd7af54f1", + "chksum_sha256": "5e7b8fab433bbc77ff1728579757a6fa910da23694cc9df130ce78b4a1047efa", "format": 1 }, { - "name": ".github/workflows/ack.yml", + "name": "docs/cisco.iosxr.iosxr_acls_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24c6fbafaa69e3e3ee696f2cefa5120794b62cef7e870553dddce8b8af0a127c", + "chksum_sha256": "d4afc88d6043512adaffacbf40c44076ee62380e5422f43f4a0a2802aef4b604", "format": 1 }, { - "name": ".github/workflows/release.yml", + "name": "docs/cisco.iosxr.iosxr_ospfv3_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1", + "chksum_sha256": "753bba432a6306fc9ae8c89d9718e3e0c58d054d5968408509c4a37fb881e5ae", "format": 1 }, { - "name": ".github/workflows/push.yml", + "name": "docs/cisco.iosxr.iosxr_bgp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b93de6df12229238cd1602c455495a2aea451d19587dc5e5577494952ca0259e", + "chksum_sha256": "52486dc2a51c8e9a5760ce0654d1693b6cc8ec80b5104a007947ec95fb8fac9a", "format": 1 }, { - "name": ".github/workflows/tests.yml", + "name": "bindep.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ee42432cfaad14365f08d6fc523b659b7a525adae305e7fe1a09f1f2b812853b", + "chksum_sha256": "8083c02374503e9616216aa195dcdeb6aaac7725e7640896d650699cedda309b", "format": 1 }, { - "name": ".github/release-drafter.yml", + "name": "platform_guide.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", + "chksum_sha256": "eccb3723be471b48b077a4d0846ab3ab73b495381c790002dd4b912aa1dc7cb7", "format": 1 } ], diff --git a/ansible_collections/cisco/iosxr/MANIFEST.json b/ansible_collections/cisco/iosxr/MANIFEST.json index 26ee696ab..9b9ad05bd 100644 --- a/ansible_collections/cisco/iosxr/MANIFEST.json +++ b/ansible_collections/cisco/iosxr/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "cisco", "name": "iosxr", - "version": "6.1.1", + "version": "9.0.0", "authors": [ "Ansible Network Community (ansible-network)" ], @@ -17,7 +17,7 @@ "license": [], "license_file": "LICENSE", "dependencies": { - "ansible.netcommon": ">=2.5.1" + "ansible.netcommon": ">=6.1.0" }, "repository": "https://github.com/ansible-collections/cisco.iosxr", "documentation": null, @@ -28,7 +28,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6842c6d4bd7595b6479ad71eacc2c175ee732d5cde0b2186886403a61789c05", + "chksum_sha256": "95a6a70ea5566f1972993cf3c06c9ab39d00d22b5433ab9d88e02cfecf9a52cf", "format": 1 }, "format": 1 diff --git a/ansible_collections/cisco/iosxr/README.md b/ansible_collections/cisco/iosxr/README.md index e17005579..d3e158bba 100644 --- a/ansible_collections/cisco/iosxr/README.md +++ b/ansible_collections/cisco/iosxr/README.md @@ -5,12 +5,12 @@ The Ansible Cisco IOSXR collection includes a variety of Ansible content to help automate the management of Cisco IOSXR network appliances. -This collection has been tested against Cisco IOSXR version 7.0.2. +This collection has been tested against Cisco IOS-XR version 7.0.2 ## Ansible version compatibility -This collection has been tested against following Ansible versions: **>=2.9.10**. +This collection has been tested against following Ansible versions: **>=2.14.0**. For collections that support Ansible 2.9, please ensure you update your `network_os` to use the fully qualified collection name (for example, `cisco.ios.ios`). @@ -20,7 +20,8 @@ PEP440 is the schema used to describe the versions of Ansible. ### Supported connections -The Cisco IOSXR collection supports ``network_cli`` and ``netconf`` connections. + +The Cisco IOS-XR collection supports ``network_cli`` and ``netconf`` connections. A detailed platform guide can be found [here](https://github.com/ansible-collections/cisco.iosxr/blob/main/platform_guide.rst). ## Included content @@ -56,7 +57,6 @@ Name | Description [cisco.iosxr.iosxr_lag_interfaces](https://github.com/ansible-collections/cisco.iosxr/blob/main/docs/cisco.iosxr.iosxr_lag_interfaces_module.rst)|Resource module to configure LAG interfaces. [cisco.iosxr.iosxr_lldp_global](https://github.com/ansible-collections/cisco.iosxr/blob/main/docs/cisco.iosxr.iosxr_lldp_global_module.rst)|Resource module to configure LLDP. [cisco.iosxr.iosxr_lldp_interfaces](https://github.com/ansible-collections/cisco.iosxr/blob/main/docs/cisco.iosxr.iosxr_lldp_interfaces_module.rst)|Resource module to configure LLDP interfaces. -[cisco.iosxr.iosxr_logging](https://github.com/ansible-collections/cisco.iosxr/blob/main/docs/cisco.iosxr.iosxr_logging_module.rst)|(deprecated, removed after 2023-08-01) Configuration management of system logging services on network devices [cisco.iosxr.iosxr_logging_global](https://github.com/ansible-collections/cisco.iosxr/blob/main/docs/cisco.iosxr.iosxr_logging_global_module.rst)|Resource module to configure logging. [cisco.iosxr.iosxr_netconf](https://github.com/ansible-collections/cisco.iosxr/blob/main/docs/cisco.iosxr.iosxr_netconf_module.rst)|Configures NetConf sub-system service on Cisco IOS-XR devices [cisco.iosxr.iosxr_ntp_global](https://github.com/ansible-collections/cisco.iosxr/blob/main/docs/cisco.iosxr.iosxr_ntp_global_module.rst)|Resource module to configure NTP. @@ -76,7 +76,7 @@ Click the ``Content`` button to see the list of content included in this collect ## Installing this collection -You can install the Cisco IOSXR collection with the Ansible Galaxy CLI: +You can install the Cisco IOS-XR collection with the Ansible Galaxy CLI: ansible-galaxy collection install cisco.iosxr diff --git a/ansible_collections/cisco/iosxr/changelogs/changelog.yaml b/ansible_collections/cisco/iosxr/changelogs/changelog.yaml index 6f1007dbb..15db67c54 100644 --- a/ansible_collections/cisco/iosxr/changelogs/changelog.yaml +++ b/ansible_collections/cisco/iosxr/changelogs/changelog.yaml @@ -2,74 +2,61 @@ ancestor: null releases: 1.0.0: modules: - - description: ACL interfaces resource module + - description: Resource module to configure ACL interfaces. name: iosxr_acl_interfaces namespace: "" - - description: ACLs resource module + - description: Resource module to configure ACLs. name: iosxr_acls namespace: "" - - description: Manage multiline banners on Cisco IOS XR devices + - description: Module to configure multiline banners. name: iosxr_banner namespace: "" - - description: Configure global BGP protocol settings on Cisco IOS-XR - name: iosxr_bgp - namespace: "" - - description: Run commands on remote devices running Cisco IOS XR + - description: Module to run commands on remote devices. name: iosxr_command namespace: "" - - description: Manage Cisco IOS XR configuration sections + - description: Module to manage configuration sections. name: iosxr_config namespace: "" - - description: Get facts about iosxr devices. + - description: Module to collect facts from remote devices. name: iosxr_facts namespace: "" - - description: - (deprecated, removed after 2022-06-01) Manage Interface on Cisco - IOS XR network devices - name: iosxr_interface - namespace: "" - - description: Interfaces resource module + - description: Resource module to configure interfaces. name: iosxr_interfaces namespace: "" - - description: L2 interfaces resource module + - description: Resource Module to configure L2 interfaces. name: iosxr_l2_interfaces namespace: "" - - description: L3 interfaces resource module + - description: Resource module to configure L3 interfaces. name: iosxr_l3_interfaces namespace: "" - - description: LACP resource module + - description: Resource module to configure LACP. name: iosxr_lacp namespace: "" - - description: LACP interfaces resource module + - description: Resource module to configure LACP interfaces. name: iosxr_lacp_interfaces namespace: "" - - description: LAG interfaces resource module + - description: Resource module to configure LAG interfaces. name: iosxr_lag_interfaces namespace: "" - - description: LLDP resource module + - description: Resource module to configure LLDP. name: iosxr_lldp_global namespace: "" - - description: LLDP interfaces resource module + - description: Resource module to configure LLDP interfaces. name: iosxr_lldp_interfaces namespace: "" - - description: - Configuration management of system logging services on network - devices - name: iosxr_logging - namespace: "" - description: Configures NetConf sub-system service on Cisco IOS-XR devices name: iosxr_netconf namespace: "" - - description: OSPFv2 resource module + - description: Resource module to configure OSPFv2. name: iosxr_ospfv2 namespace: "" - - description: Static routes resource module + - description: Resource module to configure static routes. name: iosxr_static_routes namespace: "" - - description: Manage the system attributes on Cisco IOS XR devices + - description: Module to manage the system attributes. name: iosxr_system namespace: "" - - description: Manage the aggregate of local users on Cisco IOS XR device + - description: Module to manage the aggregates of local users. name: iosxr_user namespace: "" plugins: @@ -135,7 +122,7 @@ releases: - 54_iosxr_ospfv3_module_added.yaml - provide_fuctionality_to_utilize_remarks.yaml modules: - - description: ospfv3 resource module + - description: Resource module to configure OSPFv3. name: iosxr_ospfv3 namespace: "" release_date: "2020-10-01" @@ -154,7 +141,7 @@ releases: - galaxy-version.yaml - ospf_interfaces_resource_module_added.yaml modules: - - description: OSPF Interfaces Resource Module. + - description: Resource module to configure OSPF interfaces. name: iosxr_ospf_interfaces namespace: "" release_date: "2020-11-26" @@ -201,13 +188,13 @@ releases: - single_user_mode.yaml - unittest-fix-for-resource-module-base.yaml modules: - - description: Manages BGP Address Family resource module. + - description: Resource module to configure BGP Address family. name: iosxr_bgp_address_family namespace: "" - - description: Manages BGP global resource module. + - description: Resource module to configure BGP. name: iosxr_bgp_global namespace: "" - - description: Manages BGP neighbor address family resource module. + - description: Resource module to configure BGP Neighbor Address family. name: iosxr_bgp_neighbor_address_family namespace: "" release_date: "2021-02-24" @@ -288,7 +275,7 @@ releases: - update_bgp_nbr_af_route_policy.yaml - update_readme_freenode_to_libera.yml modules: - - description: Prefix-Lists resource module. + - description: Resource module to configure prefix lists. name: iosxr_prefix_lists namespace: "" release_date: "2021-06-22" @@ -306,7 +293,7 @@ releases: - 162-fix-prefix-list-facts.yaml - add-iosxr-logging-global-module.yaml modules: - - description: Manages logging attributes of Cisco IOSXR network devices + - description: Resource module to configure logging. name: iosxr_logging_global namespace: "" release_date: "2021-07-26" @@ -349,7 +336,7 @@ releases: - fix_sanity.yml - iosxr_snmp_server.yaml modules: - - description: Manages snmp-server resource module + - description: Resource module to configure snmp server. name: iosxr_snmp_server namespace: "" release_date: "2021-12-07" @@ -361,7 +348,7 @@ releases: - add_hostname_rm.yaml - add_redirects_hostname.yaml modules: - - description: Manages hostname resource module + - description: Resource module to configure hostname. name: iosxr_hostname namespace: "" release_date: "2022-01-31" @@ -688,3 +675,60 @@ releases: - fix_python_version.yaml - revert_pylibssh_depn.yaml release_date: "2023-11-27" + 7.0.0: + changes: + major_changes: + - Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions + are EoL now. + release_summary: + Starting from this release, the minimum `ansible-core` version + this collection requires is `2.14.0`. The last known version compatible with + ansible-core<2.14 is `v6.1.1`. + fragments: + - trivial_lint.yaml + - update_ansible_version.yaml + release_date: "2023-11-30" + 7.1.0: + changes: + minor_changes: + - iosxr_facts - Add cdp neighbors in ansible_net_neighbors dictionary (https://github.com/ansible-collections/cisco.iosxr/pull/457). + fragments: + - fix_add_cdp_neighbors.yaml + - fix_iosxr_config.yaml + release_date: "2024-01-08" + 7.2.0: + changes: + bugfixes: + - Fix 'afi' value in bgp_templates RM to valid values. + minor_changes: + - Add missing options in afi and safi in address-family of bgp_templates RM. + fragments: + - bugfix_bgp_templates.yaml + - fix_bgp_template.yaml + - fix_nightly.yaml + release_date: "2024-03-01" + 8.0.0: + changes: + major_changes: + - This release removes previously deprecated module and attributes from this + collection. Please refer to the **Removed Features** section for details. + removed_features: + - Remove deprecated iosxr_logging module which is replaced with iosxr_logging_global + resource module. + fragments: + - remove_deprecated.yaml + - trivial_tests_updates.yaml + release_date: "2024-03-27" + 9.0.0: + changes: + major_changes: + - Update the netcommon base version to support cli_restore plugin. + minor_changes: + - Add support for cli_restore functionality. + - Please refer the PR to know more about core changes (https://github.com/ansible-collections/ansible.netcommon/pull/618). + - cli_restore module is part of netcommon. + fragments: + - add_2.18.yaml + - add_cli_restore_supprt.yaml + - remove_tests.yaml + release_date: "2024-04-12" diff --git a/ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_bgp_templates_module.rst b/ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_bgp_templates_module.rst index ed91c05d2..72440deaa 100644 --- a/ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_bgp_templates_module.rst +++ b/ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_bgp_templates_module.rst @@ -225,6 +225,10 @@ Parameters
      Choices:
    • ipv4
    • ipv6
    • +
    • vpnv4
    • +
    • vpnv6
    • +
    • link-state
    • +
    • l2vpn
    @@ -1419,6 +1423,10 @@ Parameters
  • unicast
  • labeled-unicast
  • sr-policy
  • +
  • link-state
  • +
  • evpn
  • +
  • mspw
  • +
  • vpls-vpws
  • diff --git a/ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_facts_module.rst b/ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_facts_module.rst index 07ad7bd41..827a769bf 100644 --- a/ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_facts_module.rst +++ b/ansible_collections/cisco/iosxr/docs/cisco.iosxr.iosxr_facts_module.rst @@ -381,7 +381,7 @@ Common return values are documented `here when interfaces is configured -
    The list of LLDP neighbors from the remote device
    +
    The list of LLDP and CDP neighbors from the remote device. If both, CDP and LLDP neighbor data is present on one port, CDP is preferred.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterChoices/DefaultsComments
    -
    - aggregate - -
    - list - / elements=dictionary -
    -
    - -
    List of syslog logging configuration definitions.
    -
    -
    - dest - -
    - string -
    -
    -
      Choices: -
    • host
    • -
    • console
    • -
    • monitor
    • -
    • buffered
    • -
    • file
    • -
    -
    -
    Destination for system logging (syslog) messages.
    -
    -
    - facility - -
    - string -
    -
    - -
    To configure the type of syslog facility in which system logging (syslog) messages are sent to syslog servers Optional config for dest = host
    -
    -
    - hostnameprefix - -
    - string -
    -
    - -
    To append a hostname prefix to system logging (syslog) messages logged to syslog servers. Optional config for dest = host
    -
    -
    - level - -
    - string -
    -
    -
      Choices: -
    • emergencies
    • -
    • alerts
    • -
    • critical
    • -
    • errors
    • -
    • warning
    • -
    • notifications
    • -
    • informational
    • -
    • debugging
    • -
    -
    -
    Specifies the severity level for the logging.
    -

    aliases: severity
    -
    -
    - name - -
    - string -
    -
    - -
    When dest = file name indicates file-name
    -
    When dest = host name indicates the host-name or ip-address of syslog server.
    -
    -
    - path - -
    - string -
    -
    - -
    Set file path.
    -
    -
    - size - -
    - integer -
    -
    - -
    Size of buffer when dest = buffered. The acceptable value is in the range 307200 to 125000000 bytes. Default 307200
    -
    Size of file when dest = file. The acceptable value is in the range 1 to 2097152KB. Default 2 GB
    -
    -
    - state - -
    - string -
    -
    -
      Choices: -
    • present
    • -
    • absent
    • -
    -
    -
    Existential state of the logging configuration on the node.
    -
    -
    - vrf - -
    - string -
    -
    - -
    vrf name when syslog server is configured, dest = host
    -
    -
    - dest - -
    - string -
    -
    -
      Choices: -
    • host
    • -
    • console
    • -
    • monitor
    • -
    • buffered
    • -
    • file
    • -
    -
    -
    Destination for system logging (syslog) messages.
    -
    -
    - facility - -
    - string -
    -
    - Default:
    "local7"
    -
    -
    To configure the type of syslog facility in which system logging (syslog) messages are sent to syslog servers Optional config for dest = host
    -
    -
    - hostnameprefix - -
    - string -
    -
    - -
    To append a hostname prefix to system logging (syslog) messages logged to syslog servers. Optional config for dest = host
    -
    -
    - level - -
    - string -
    -
    -
      Choices: -
    • emergencies
    • -
    • alerts
    • -
    • critical
    • -
    • errors
    • -
    • warning
    • -
    • notifications
    • -
    • informational
    • -
    • debugging ←
    • -
    -
    -
    Specifies the severity level for the logging.
    -

    aliases: severity
    -
    -
    - name - -
    - string -
    -
    - -
    When dest = file name indicates file-name
    -
    When dest = host name indicates the host-name or ip-address of syslog server.
    -
    -
    - path - -
    - string -
    -
    - -
    Set file path.
    -
    -
    - size - -
    - integer -
    -
    - -
    Size of buffer when dest = buffered. The acceptable value is in the range 307200 to 125000000 bytes. Default 307200
    -
    Size of file when dest = file. The acceptable value is in the range 1 to 2097152KB. Default 2 GB
    -
    -
    - state - -
    - string -
    -
    -
      Choices: -
    • present ←
    • -
    • absent
    • -
    -
    -
    Existential state of the logging configuration on the node.
    -
    -
    - vrf - -
    - string -
    -
    - Default:
    "default"
    -
    -
    vrf name when syslog server is configured, dest = host
    -
    -
    - - -Notes ------ - -.. note:: - - This module works with connection ``network_cli`` and ``netconf``. See `the IOS-XR Platform Options <../network/user_guide/platform_iosxr.html>`_. - - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide ` - - For more information on using Ansible to manage Cisco devices see the `Cisco integration page `_. - - - -Examples --------- - -.. code-block:: yaml - - - name: configure logging for syslog server host - cisco.iosxr.iosxr_logging: - dest: host - name: 10.10.10.1 - level: critical - state: present - - - name: add hostnameprefix configuration - cisco.iosxr.iosxr_logging: - hostnameprefix: host1 - state: absent - - - name: add facility configuration - cisco.iosxr.iosxr_logging: - facility: local1 - state: present - - - name: configure console logging level - cisco.iosxr.iosxr_logging: - dest: console - level: debugging - state: present - - - name: configure monitor logging level - cisco.iosxr.iosxr_logging: - dest: monitor - level: errors - state: present - - - name: configure syslog to a file - cisco.iosxr.iosxr_logging: - dest: file - name: file_name - size: 2048 - level: errors - state: present - - - name: configure buffered logging with size - cisco.iosxr.iosxr_logging: - dest: buffered - size: 5100000 - - - name: Configure logging using aggregate - cisco.iosxr.iosxr_logging: - aggregate: - - {dest: console, level: warning} - - {dest: buffered, size: 4800000} - - {dest: file, name: file3, size: 2048} - - {dest: host, name: host3, level: critical} - - - name: Delete logging using aggregate - cisco.iosxr.iosxr_logging: - aggregate: - - {dest: console, level: warning} - - {dest: buffered, size: 4800000} - - {dest: file, name: file3, size: 2048} - - {dest: host, name: host3, level: critical} - state: absent - - - -Return Values -------------- -Common return values are documented `here `_, the following are the fields unique to this module: - -.. raw:: html - - - - - - - - - - - - - - - - - -
    KeyReturnedDescription
    -
    - commands - -
    - list -
    -
    always (empty list when no commands to send) -
    The list of configuration mode commands to send to the device
    -
    -
    Sample:
    -
    ['logging 10.10.10.1 vrf default severity debugging', 'logging facility local7', 'logging hostnameprefix host1', 'logging console critical', 'logging buffered 2097153', 'logging buffered warnings', 'logging monitor errors', 'logging file log_file maxfilesize 1024 severity info']
    -
    -
    - xml - -
    - list -
    -
    always (empty list when no xml rpc to send) -
    NetConf rpc xml sent to device with transport netconf
    -
    -
    Sample:
    -
    ['<config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0"> <syslog xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-infra-syslog-cfg"> <files> <file xc:operation="delete"> <file-name>file1</file-name> <file-log-attributes> <max-file-size>2097152</max-file-size> <severity>2</severity> </file-log-attributes> </file> </files> </syslog> </config>']
    -
    -

    - - -Status ------- - - -- This module will be removed in a release after 2023-08-01. *[deprecated]* -- For more information see `DEPRECATED`_. - - -Authors -~~~~~~~ - -- Trishna Guha (@trishnaguha) -- Kedar Kekan (@kedarX) diff --git a/ansible_collections/cisco/iosxr/meta/runtime.yml b/ansible_collections/cisco/iosxr/meta/runtime.yml index d2e135969..5bf8ab65f 100644 --- a/ansible_collections/cisco/iosxr/meta/runtime.yml +++ b/ansible_collections/cisco/iosxr/meta/runtime.yml @@ -1,5 +1,5 @@ --- -requires_ansible: ">=2.9.10" +requires_ansible: ">=2.14.0" plugin_routing: modules: acl_interfaces: @@ -30,15 +30,6 @@ plugin_routing: redirect: cisco.iosxr.iosxr_lldp_global lldp_interfaces: redirect: cisco.iosxr.iosxr_lldp_interfaces - logging: - redirect: cisco.iosxr.iosxr_logging - deprecation: - removal_date: "2023-08-01" - warning_text: See the plugin documentation for more details - iosxr_logging: - deprecation: - removal_date: "2023-08-01" - warning_text: See the plugin documentation for more details logging_global: redirect: cisco.iosxr.iosxr_logging_global netconf: diff --git a/ansible_collections/cisco/iosxr/platform_guide.rst b/ansible_collections/cisco/iosxr/platform_guide.rst new file mode 100644 index 000000000..f1e8996ca --- /dev/null +++ b/ansible_collections/cisco/iosxr/platform_guide.rst @@ -0,0 +1,142 @@ +.. _iosxr_platform_options: + +*************************************** +IOS-XR Platform Options +*************************************** + +The `Cisco IOS-XR collection `_ supports multiple connections. This page offers details on how each connection works in Ansible and how to use it. + +.. contents:: + :local: + +Connections available +================================================================================ + +.. table:: + :class: documentation-table + + ==================== ========================================== ============================================================================================================ + .. CLI NETCONF + only for modules ``iosxr_banner``, ``iosxr_interface``, ``iosxr_logging``, ``iosxr_system``, ``iosxr_user`` + ==================== ========================================== ============================================================================================================ + Protocol SSH XML over SSH + + Credentials uses SSH keys / SSH-agent if present uses SSH keys / SSH-agent if present + accepts ``-u myuser -k`` if using password accepts ``-u myuser -k`` if using password + + Indirect Access by a bastion (jump host) by a bastion (jump host) + + Connection Settings ``ansible_connection:`` ``ansible_connection:`` + ``ansible.netcommon.network_cli`` ``ansible.netcommon.netconf`` + + Enable Mode not supported not supported + (Privilege Escalation) + + Returned Data Format Refer to individual module documentation Refer to individual module documentation + ==================== ========================================== ============================================================================================================ + + +The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` or ``ansible_connection: ansible.netcommon.netconf`` instead. + +Using CLI in Ansible +==================== + +Example CLI inventory ``[iosxr:vars]`` +---------------------------------------- + +.. code-block:: yaml + + [iosxr:vars] + ansible_connection=ansible.netcommon.network_cli + ansible_network_os=cisco.iosxr.iosxr + ansible_user=myuser + ansible_password=!vault... + ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q bastion01"' + +- If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. +- If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. +- If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords through environment variables. + +Example CLI task +---------------- + +.. code-block:: yaml + + - name: Retrieve IOS-XR version + cisco.iosxr.iosxr_command: + commands: show version + when: ansible_network_os == 'cisco.iosxr.iosxr' + +Using NETCONF in Ansible +========================== + +Enabling NETCONF +--------------- + +Before you can use NETCONF to connect to a switch, you must: + + - install the ``ncclient`` python package on your control node(s) with ``pip install ncclient`` + - enable NETCONF on the Cisco IOS-XR device(s) + +To enable NETCONF on a new switch with Ansible, use the ``cisco.iosxr.iosxr_netconf`` module through the CLI connection. Set up your platform-level variables just like in the CLI example above, then run a playbook task like this: + +.. code-block:: yaml + + - name: Enable NETCONF + connection: ansible.netcommon.network_cli + cisco.iosxr.iosxr_netconf: + when: ansible_network_os == 'cisco.iosxr.iosxr' + +Once NETCONF is enabled, change your variables to use the NETCONF connection. + +Example NETCONF inventory ``[iosxr:vars]`` +------------------------------------------ + +.. code-block:: yaml + + [iosxr:vars] + ansible_connection=ansible.netcommon.netconf + ansible_network_os=cisco.iosxr.iosxr + ansible_user=myuser + ansible_password=!vault | + ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q bastion01"' + + +Example NETCONF task +----------------------- + +.. code-block:: yaml + + - name: Configure hostname and domain-name + cisco.iosxr.iosxr_system: + hostname: iosxr01 + domain_name: test.example.com + domain_search: + - ansible.com + - redhat.com + - cisco.com + + +Warning +-------- +Never store passwords in plain text. We recommend using SSH keys to authenticate SSH connections. Ansible supports ssh-agent to manage your SSH keys. If you must use passwords to authenticate SSH connections, we recommend encrypting them with Ansible Vault. + +Cisco IOS-XR platform support matrix +=================================== + +The following platforms and software versions have been certified by Cisco to work with this version of Ansible. + +.. table:: Platform / Software Minimum Requirements + :align: center + + =================== ====================== + Supported Platforms Minimum IOS-XR Version + =================== ====================== + Cisco IOS-XR 7.0.2 and later + =================== ====================== + + +Notes +----- + +`Setting Timeout Option `_ diff --git a/ansible_collections/cisco/iosxr/plugins/cliconf/iosxr.py b/ansible_collections/cisco/iosxr/plugins/cliconf/iosxr.py index 6b569ae2a..8a4e8a850 100644 --- a/ansible_collections/cisco/iosxr/plugins/cliconf/iosxr.py +++ b/ansible_collections/cisco/iosxr/plugins/cliconf/iosxr.py @@ -358,6 +358,15 @@ class Cliconf(CliconfBase): resp["response"] = results return resp + def restore(self, filename=None, path=""): + if not filename: + raise ValueError("'file_name' value is required for restore") + self.configure() + cmd = f"load {path}{filename}" + resp = self.send_command(cmd) + self.commit() + return resp + def get_diff( self, candidate=None, @@ -452,7 +461,9 @@ class Cliconf(CliconfBase): if self.get_option("commit_confirmed"): cmd_obj["command"] = "commit replace confirmed" if self.get_option("commit_confirmed_timeout"): - cmd_obj["command"] += " {0}".format(self.get_option("commit_confirmed_timeout")) + cmd_obj["command"] += " {0}".format( + self.get_option("commit_confirmed_timeout"), + ) cmd_obj[ "prompt" @@ -462,11 +473,17 @@ class Cliconf(CliconfBase): elif self.get_option("commit_confirmed"): cmd_obj["command"] = "commit confirmed" if self.get_option("commit_confirmed_timeout"): - cmd_obj["command"] += " {0}".format(self.get_option("commit_confirmed_timeout")) + cmd_obj["command"] += " {0}".format( + self.get_option("commit_confirmed_timeout"), + ) if self.get_option("commit_label"): - cmd_obj["command"] += " label {0}".format(self.get_option("commit_label")) + cmd_obj["command"] += " label {0}".format( + self.get_option("commit_label"), + ) if self.get_option("commit_comment"): - cmd_obj["command"] += " comment {0}".format(self.get_option("commit_comment")) + cmd_obj["command"] += " comment {0}".format( + self.get_option("commit_comment"), + ) else: label = label or self.get_option("commit_label") @@ -498,7 +515,9 @@ class Cliconf(CliconfBase): output = cmd.pop("output", None) if output: - raise ValueError("'output' value %s is not supported for run_commands" % output) + raise ValueError( + "'output' value %s is not supported for run_commands" % output, + ) try: out = self.send_command(**cmd) diff --git a/ansible_collections/cisco/iosxr/plugins/module_utils/network/iosxr/argspec/bgp_templates/bgp_templates.py b/ansible_collections/cisco/iosxr/plugins/module_utils/network/iosxr/argspec/bgp_templates/bgp_templates.py index 793f26282..51a70c5fd 100644 --- a/ansible_collections/cisco/iosxr/plugins/module_utils/network/iosxr/argspec/bgp_templates/bgp_templates.py +++ b/ansible_collections/cisco/iosxr/plugins/module_utils/network/iosxr/argspec/bgp_templates/bgp_templates.py @@ -48,7 +48,14 @@ class Bgp_templatesArgs(object): # pylint: disable=R0903 "options": { "afi": { "type": "str", - "choices": ["ipv4", "ipv6"], + "choices": [ + "ipv4", + "ipv6", + "vpnv4", + "vpnv6", + "link-state", + "l2vpn", + ], }, "safi": { "type": "str", @@ -62,6 +69,10 @@ class Bgp_templatesArgs(object): # pylint: disable=R0903 "unicast", "labeled-unicast", "sr-policy", + "link-state", + "evpn", + "mspw", + "vpls-vpws", ], }, "signalling": { diff --git a/ansible_collections/cisco/iosxr/plugins/module_utils/network/iosxr/facts/legacy/base.py b/ansible_collections/cisco/iosxr/plugins/module_utils/network/iosxr/facts/legacy/base.py index cc657f42a..2baf42c9f 100644 --- a/ansible_collections/cisco/iosxr/plugins/module_utils/network/iosxr/facts/legacy/base.py +++ b/ansible_collections/cisco/iosxr/plugins/module_utils/network/iosxr/facts/legacy/base.py @@ -123,6 +123,8 @@ class Interfaces(FactsBase): "show ipv6 interface", "show lldp", "show lldp neighbors detail", + "show cdp", + "show cdp neighbors detail", ] def populate(self): @@ -142,6 +144,10 @@ class Interfaces(FactsBase): neighbors = self.responses[3] self.facts["neighbors"] = self.parse_neighbors(neighbors) + if "CDP is not enabled" not in self.responses[4]: + neighbors = self.responses[5] + self.facts["neighbors"] = self.parse_cdp_neighbors(neighbors) + def populate_interfaces(self, interfaces): facts = dict() for key, value in iteritems(interfaces): @@ -200,6 +206,25 @@ class Interfaces(FactsBase): facts[intf].append(fact) return facts + def parse_cdp_neighbors(self, neighbors): + facts = dict() + for entry in neighbors.split("-------------------------"): + if entry == "": + continue + intf_port = self.parse_cdp_intf_port(entry) + if intf_port is None: + return facts + intf, port = intf_port + if intf not in facts: + facts[intf] = list() + fact = dict() + fact["host"] = self.parse_cdp_host(entry) + fact["platform"] = self.parse_cdp_platform(entry) + fact["port"] = port + fact["ip"] = self.parse_cdp_ip(entry) + facts[intf].append(fact) + return facts + def parse_interfaces(self, data): parsed = dict() key = "" @@ -281,3 +306,23 @@ class Interfaces(FactsBase): match = re.search(r"Port id: (.+)$", data, re.M) if match: return match.group(1) + + def parse_cdp_intf_port(self, data): + match = re.search(r"^Interface: (.+), Port ID \(outgoing port\): (.+)$", data, re.M) + if match: + return match.group(1), match.group(2) + + def parse_cdp_host(self, data): + match = re.search(r"^Device ID: (.+)$", data, re.M) + if match: + return match.group(1) + + def parse_cdp_platform(self, data): + match = re.search(r"^Platform: (.+),", data, re.M) + if match: + return match.group(1) + + def parse_cdp_ip(self, data): + match = re.search(r"^ IP address: (.+)$", data, re.M) + if match: + return match.group(1) diff --git a/ansible_collections/cisco/iosxr/plugins/modules/iosxr_bgp_templates.py b/ansible_collections/cisco/iosxr/plugins/modules/iosxr_bgp_templates.py index 5db2cb2ad..b57ac4f9f 100644 --- a/ansible_collections/cisco/iosxr/plugins/modules/iosxr_bgp_templates.py +++ b/ansible_collections/cisco/iosxr/plugins/modules/iosxr_bgp_templates.py @@ -46,11 +46,12 @@ options: afi: description: address family. type: str - choices: [ 'ipv4', 'ipv6' ] + choices: [ 'ipv4', 'ipv6', 'vpnv4', 'vpnv6', 'link-state', 'l2vpn'] safi: description: Address Family modifier type: str - choices: [ 'flowspec', 'mdt', 'multicast', 'mvpn', 'rt-filter', 'tunnel', 'unicast', 'labeled-unicast' , 'sr-policy'] + choices: [ 'flowspec', 'mdt', 'multicast', 'mvpn', 'rt-filter', 'tunnel', + 'unicast', 'labeled-unicast' , 'sr-policy', 'link-state', 'evpn', 'mspw', 'vpls-vpws'] signalling: type: dict description: Signalling protocols to disable, BGP or LDP diff --git a/ansible_collections/cisco/iosxr/plugins/modules/iosxr_facts.py b/ansible_collections/cisco/iosxr/plugins/modules/iosxr_facts.py index c406a18b7..a85328ab2 100644 --- a/ansible_collections/cisco/iosxr/plugins/modules/iosxr_facts.py +++ b/ansible_collections/cisco/iosxr/plugins/modules/iosxr_facts.py @@ -172,7 +172,8 @@ ansible_net_interfaces: returned: when interfaces is configured type: dict ansible_net_neighbors: - description: The list of LLDP neighbors from the remote device + description: The list of LLDP and CDP neighbors from the remote device. If both, + CDP and LLDP neighbor data is present on one port, CDP is preferred. returned: when interfaces is configured type: dict diff --git a/ansible_collections/cisco/iosxr/plugins/modules/iosxr_logging.py b/ansible_collections/cisco/iosxr/plugins/modules/iosxr_logging.py deleted file mode 100644 index abca845df..000000000 --- a/ansible_collections/cisco/iosxr/plugins/modules/iosxr_logging.py +++ /dev/null @@ -1,1270 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# (c) 2017, Ansible by Red Hat, inc -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - - -DOCUMENTATION = """ -module: iosxr_logging -author: -- Trishna Guha (@trishnaguha) -- Kedar Kekan (@kedarX) -short_description: (deprecated, removed after 2023-08-01) Configuration management of system logging services on network - devices -description: -- This module provides declarative management configuration of system logging (syslog) - on Cisco IOS XR devices. -version_added: 1.0.0 -deprecated: - alternative: iosxr_logging_global - why: Updated module released with more functionality. - removed_at_date: '2023-08-01' -requirements: -- ncclient >= 0.5.3 when using netconf -- lxml >= 4.1.1 when using netconf -notes: -- This module works with connection C(network_cli) and C(netconf). See L(the IOS-XR - Platform Options,../network/user_guide/platform_iosxr.html). -options: - dest: - description: - - Destination for system logging (syslog) messages. - choices: - - host - - console - - monitor - - buffered - - file - type: str - name: - description: - - When C(dest) = I(file) name indicates file-name - - When C(dest) = I(host) name indicates the host-name or ip-address of syslog - server. - type: str - vrf: - description: - - vrf name when syslog server is configured, C(dest) = C(host) - type: str - default: default - size: - description: - - Size of buffer when C(dest) = C(buffered). The acceptable value is in the range - I(307200 to 125000000 bytes). Default 307200 - - Size of file when C(dest) = C(file). The acceptable value is in the range I(1 - to 2097152)KB. Default 2 GB - type: int - facility: - description: - - To configure the type of syslog facility in which system logging (syslog) messages - are sent to syslog servers Optional config for C(dest) = C(host) - default: local7 - type: str - hostnameprefix: - description: - - To append a hostname prefix to system logging (syslog) messages logged to syslog - servers. Optional config for C(dest) = C(host) - type: str - level: - description: - - Specifies the severity level for the logging. - type: str - default: debugging - aliases: - - severity - choices: ["emergencies", "alerts", "critical", "errors", "warning", "notifications", "informational", "debugging"] - path: - description: - Set file path. - type: str - aggregate: - description: List of syslog logging configuration definitions. - type: list - elements: dict - suboptions: - dest: - description: - - Destination for system logging (syslog) messages. - choices: - - host - - console - - monitor - - buffered - - file - type: str - name: - description: - - When C(dest) = I(file) name indicates file-name - - When C(dest) = I(host) name indicates the host-name or ip-address of syslog - server. - type: str - path: - description: - Set file path. - type: str - vrf: - description: - - vrf name when syslog server is configured, C(dest) = C(host) - type: str - size: - description: - - Size of buffer when C(dest) = C(buffered). The acceptable value is in the range - I(307200 to 125000000 bytes). Default 307200 - - Size of file when C(dest) = C(file). The acceptable value is in the range I(1 - to 2097152)KB. Default 2 GB - type: int - facility: - description: - - To configure the type of syslog facility in which system logging (syslog) messages - are sent to syslog servers Optional config for C(dest) = C(host) - type: str - hostnameprefix: - description: - - To append a hostname prefix to system logging (syslog) messages logged to syslog - servers. Optional config for C(dest) = C(host) - type: str - level: - description: - - Specifies the severity level for the logging. - type: str - aliases: - - severity - choices: ["emergencies", "alerts", "critical", "errors", "warning", "notifications", "informational", "debugging"] - state: - description: - - Existential state of the logging configuration on the node. - choices: - - present - - absent - type: str - state: - description: - - Existential state of the logging configuration on the node. - default: present - choices: - - present - - absent - type: str -extends_documentation_fragment: -- cisco.iosxr.iosxr -""" - -EXAMPLES = """ -- name: configure logging for syslog server host - cisco.iosxr.iosxr_logging: - dest: host - name: 10.10.10.1 - level: critical - state: present - -- name: add hostnameprefix configuration - cisco.iosxr.iosxr_logging: - hostnameprefix: host1 - state: absent - -- name: add facility configuration - cisco.iosxr.iosxr_logging: - facility: local1 - state: present - -- name: configure console logging level - cisco.iosxr.iosxr_logging: - dest: console - level: debugging - state: present - -- name: configure monitor logging level - cisco.iosxr.iosxr_logging: - dest: monitor - level: errors - state: present - -- name: configure syslog to a file - cisco.iosxr.iosxr_logging: - dest: file - name: file_name - size: 2048 - level: errors - state: present - -- name: configure buffered logging with size - cisco.iosxr.iosxr_logging: - dest: buffered - size: 5100000 - -- name: Configure logging using aggregate - cisco.iosxr.iosxr_logging: - aggregate: - - {dest: console, level: warning} - - {dest: buffered, size: 4800000} - - {dest: file, name: file3, size: 2048} - - {dest: host, name: host3, level: critical} - -- name: Delete logging using aggregate - cisco.iosxr.iosxr_logging: - aggregate: - - {dest: console, level: warning} - - {dest: buffered, size: 4800000} - - {dest: file, name: file3, size: 2048} - - {dest: host, name: host3, level: critical} - state: absent -""" - -RETURN = """ -commands: - description: The list of configuration mode commands to send to the device - returned: always (empty list when no commands to send) - type: list - sample: - - logging 10.10.10.1 vrf default severity debugging - - logging facility local7 - - logging hostnameprefix host1 - - logging console critical - - logging buffered 2097153 - - logging buffered warnings - - logging monitor errors - - logging file log_file maxfilesize 1024 severity info -xml: - description: NetConf rpc xml sent to device with transport C(netconf) - returned: always (empty list when no xml rpc to send) - type: list - sample: - - ' - - - - file1 - - 2097152 - 2 - - - - - ' -""" - -import collections -import re - -from copy import deepcopy - -from ansible.module_utils._text import to_text -from ansible.module_utils.basic import AnsibleModule -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import ( - remove_default_spec, -) - -from ansible_collections.cisco.iosxr.plugins.module_utils.network.iosxr.iosxr import ( - build_xml, - etree_find, - etree_findall, - get_capabilities, - get_config, - get_os_version, - is_cliconf, - is_netconf, - load_config, -) -from ansible_collections.cisco.iosxr.plugins.module_utils.network.iosxr.utils.utils import Version - - -severity_level = { - "emergency": "0", - "alert": "1", - "critical": "2", - "error": "3", - "warning": "4", - "notice": "5", - "info": "6", - "debug": "7", - "disable": "15", -} - -severity_transpose = { - "emergencies": "emergency", - "alerts": "alert", - "critical": "critical", - "errors": "error", - "warning": "warning", - "notifications": "notice", - "informational": "info", - "debugging": "debug", -} - - -class ConfigBase(object): - def __init__(self, module): - self._flag = None - self._module = module - self._result = {"changed": False, "warnings": []} - self._want = list() - self._have = list() - - def validate_size(self, value, type=None): - if value: - if type == "buffer": - if value and not int(307200) <= value <= int(125000000): - self._module.fail_json( - msg="buffer size must be between 307200 and 125000000", - ) - elif type == "file": - if value and not int(1) <= value <= int(2097152): - self._module.fail_json( - msg="file size must be between 1 and 2097152", - ) - return value - - def map_params_to_obj(self, required_if=None): - aggregate = self._module.params.get("aggregate") - if aggregate: - for item in aggregate: - for key in item: - if item.get(key) is None: - item[key] = self._module.params[key] - - d = item.copy() - - if d["dest"] not in ("host", "file"): - d["name"] = None - - if d["dest"] == "buffered": - if d["size"] is not None: - d["size"] = str( - self.validate_size(d["size"], "buffer"), - ) - else: - d["size"] = str(307200) - elif d["dest"] == "file": - if d["size"] is not None: - d["size"] = str(self.validate_size(d["size"], "file")) - else: - d["size"] = str(2097152) - else: - d["size"] = None - - if self._flag == "NC": - d["level"] = severity_transpose[d["level"]] - - self._want.append(d) - - else: - params = self._module.params - if params["dest"] not in ("host", "file"): - params["name"] = None - - if params["dest"] == "buffered": - if params["size"] is not None: - params["size"] = str( - self.validate_size(params["size"], "buffer"), - ) - else: - params["size"] = str(307200) - elif params["dest"] == "file": - if params["size"] is not None: - params["size"] = str( - self.validate_size(params["size"], "file"), - ) - else: - params["size"] = str(2097152) - else: - params["size"] = None - - if self._flag == "NC": - params["level"] = severity_transpose[params["level"]] - - self._want.append( - { - "dest": params["dest"], - "name": params["name"], - "vrf": params["vrf"], - "size": params["size"], - "path": params["path"], - "facility": params["facility"], - "level": params["level"], - "hostnameprefix": params["hostnameprefix"], - "state": params["state"], - }, - ) - - -class CliConfiguration(ConfigBase): - def __init__(self, module): - super(CliConfiguration, self).__init__(module) - self._file_list = set() - self._host_list = set() - - def map_obj_to_commands(self, os_version): - commands = list() - for want_item in self._want: - dest = want_item["dest"] - name = want_item["name"] - size = want_item["size"] - path = want_item["path"] - facility = want_item["facility"] - level = want_item["level"] - vrf = want_item["vrf"] - hostnameprefix = want_item["hostnameprefix"] - state = want_item["state"] - del want_item["state"] - - have_size = None - have_console_level = None - have_monitor_level = None - have_prefix = None - have_facility = None - - for item in self._have: - if item["dest"] == "buffered": - have_size = item["size"] - if item["dest"] == "console": - have_console_level = item["level"] - if item["dest"] == "monitor": - have_monitor_level = item["level"] - if item["dest"] is None and item["hostnameprefix"] is not None: - have_prefix = item["hostnameprefix"] - if ( - item["dest"] is None - and item["hostnameprefix"] is None - and item["facility"] is not None - ): - have_facility = item["facility"] - - if state == "absent": - if dest == "host" and name in self._host_list: - commands.append("no logging {0} vrf {1}".format(name, vrf)) - elif dest == "file" and name in self._file_list: - commands.append("no logging file {0}".format(name)) - elif dest == "console" and have_console_level is not None: - commands.append("no logging {0}".format(dest)) - elif dest == "monitor" and have_monitor_level: - commands.append("no logging {0}".format(dest)) - elif dest == "buffered" and have_size: - commands.append("no logging {0}".format(dest)) - - if dest is None and hostnameprefix is not None and have_prefix == hostnameprefix: - commands.append( - "no logging hostnameprefix {0}".format(hostnameprefix), - ) - if dest is None and facility is not None and have_facility == facility: - commands.append("no logging facility {0}".format(facility)) - - if state == "present": - if dest == "host" and name not in self._host_list: - if level == "errors" or level == "informational": - level = severity_transpose[level] - commands.append( - "logging {0} vrf {1} severity {2}".format( - name, - vrf, - level, - ), - ) - elif dest == "file" and name not in self._file_list: - if level == "errors" or level == "informational": - level = severity_transpose[level] - if os_version and Version(os_version) > Version("7.0"): - commands.append( - "logging file {0} path {1} maxfilesize {2} severity {3}".format( - name, - path, - size, - level, - ), - ) - else: - commands.append( - "logging file {0} maxfilesize {1} severity {2}".format( - name, - size, - level, - ), - ) - elif dest == "buffered" and ( - have_size is None or (have_size is not None and size != have_size) - ): - commands.append("logging buffered {0}".format(size)) - elif dest == "console" and ( - have_console_level is None - or (have_console_level is not None and have_console_level != level) - ): - commands.append("logging console {0}".format(level)) - elif dest == "monitor" and ( - have_monitor_level is None - or (have_monitor_level is not None and have_monitor_level != level) - ): - commands.append("logging monitor {0}".format(level)) - - if ( - dest is None - and hostnameprefix is not None - and ( - have_prefix is None - or (have_prefix is not None and hostnameprefix != have_prefix) - ) - ): - commands.append( - "logging hostnameprefix {0}".format(hostnameprefix), - ) - if dest is None and hostnameprefix is None and facility != have_facility: - commands.append("logging facility {0}".format(facility)) - - self._result["commands"] = commands - if commands: - commit = not self._module.check_mode - diff = load_config(self._module, commands, commit=commit) - if diff: - self._result["diff"] = dict(prepared=diff) - self._result["changed"] = True - - def parse_facility(self, line): - match = re.search(r"logging facility (\S+)", line, re.M) - facility = None - if match: - facility = match.group(1) - - return facility - - def parse_size(self, line, dest): - size = None - - if dest == "buffered": - match = re.search(r"logging buffered (\S+)", line, re.M) - if match: - try: - int_size = int(match.group(1)) - except ValueError: - int_size = None - - if int_size is not None: - if isinstance(int_size, int): - size = str(match.group(1)) - if dest == "file": - match = re.search( - r"logging file (\S+) (path\s\S+\s)?maxfilesize (\S+)", - line, - re.M, - ) - if match: - try: - if "path" in line: - int_size = int(match.group(2)) - else: - int_size = int(match.group(1)) - except ValueError: - int_size = None - - if int_size is not None: - if isinstance(int_size, int): - size = str(int_size) - - return size - - def parse_path(self, line, dest): - path = None - - if dest == "file": - match = re.search(r"logging file (\S+) (path\s\S+\s)", line, re.M) - if match: - try: - path = to_text( - match.group(2), - errors="surrogate_or_strict", - ) - except ValueError: - path = None - - return path - - def parse_hostnameprefix(self, line): - prefix = None - match = re.search(r"logging hostnameprefix (\S+)", line, re.M) - if match: - prefix = match.group(1) - return prefix - - def parse_name(self, line, dest): - name = None - if dest == "file": - match = re.search(r"logging file (\S+)", line, re.M) - if match: - name = match.group(1) - elif dest == "host": - match = re.search(r"logging (\S+)", line, re.M) - if match: - name = match.group(1) - - return name - - def parse_level(self, line, dest): - level_group = ( - "emergencies", - "alerts", - "critical", - "errors", - "warning", - "notifications", - "informational", - "debugging", - ) - - level = None - match = re.search(r"logging {0} (\S+)".format(dest), line, re.M) - if match: - if match.group(1) in level_group: - level = match.group(1) - - return level - - def parse_dest(self, line, group): - dest_group = ("console", "monitor", "buffered", "file") - dest = None - if group in dest_group: - dest = group - elif "vrf" in line: - dest = "host" - - return dest - - def parse_vrf(self, line, dest): - vrf = None - if dest == "host": - match = re.search(r"logging (\S+) vrf (\S+)", line, re.M) - if match: - vrf = match.group(2) - return vrf - - def map_config_to_obj(self): - data = get_config(self._module, config_filter="logging") - lines = data.split("\n") - - for line in lines: - match = re.search(r"logging (\S+)", line, re.M) - if match: - dest = self.parse_dest(line, match.group(1)) - name = self.parse_name(line, dest) - if dest == "host" and name is not None: - self._host_list.add(name) - if dest == "file" and name is not None: - self._file_list.add(name) - - self._have.append( - { - "dest": dest, - "name": name, - "size": self.parse_size(line, dest), - "path": self.parse_path(line, dest), - "facility": self.parse_facility(line), - "level": self.parse_level(line, dest), - "vrf": self.parse_vrf(line, dest), - "hostnameprefix": self.parse_hostnameprefix(line), - }, - ) - - def run(self, os_version): - self.map_params_to_obj() - self.map_config_to_obj() - self.map_obj_to_commands(os_version) - - return self._result - - -class NCConfiguration(ConfigBase): - def __init__(self, module): - super(NCConfiguration, self).__init__(module) - self._flag = "NC" - self._log_file_meta = collections.OrderedDict() - self._log_host_meta = collections.OrderedDict() - self._log_console_meta = collections.OrderedDict() - self._log_monitor_meta = collections.OrderedDict() - self._log_buffered_meta = collections.OrderedDict() - self._log_facility_meta = collections.OrderedDict() - self._log_prefix_meta = collections.OrderedDict() - - def map_obj_to_xml_rpc(self, os_version): - file_attribute_path = "file-log-attributes" - if os_version and Version(os_version) > Version("7.0.0"): - file_attribute_path = "file-specification" - self._log_file_meta.update( - [ - ( - "files", - { - "xpath": "syslog/files", - "tag": True, - "operation": "edit", - }, - ), - ( - "file", - { - "xpath": "syslog/files/file", - "tag": True, - "operation": "edit", - "attrib": "operation", - }, - ), - ( - "a:name", - { - "xpath": "syslog/files/file/file-name", - "operation": "edit", - }, - ), - ( - "file-attrib", - { - "xpath": "syslog/files/file/" + file_attribute_path, - "tag": True, - "operation": "edit", - }, - ), - ( - "a:size", - { - "xpath": "syslog/files/file/" + file_attribute_path + "/max-file-size", - "operation": "edit", - }, - ), - ( - "a:level", - { - "xpath": "syslog/files/file/" + file_attribute_path + "/severity", - "operation": "edit", - }, - ), - ( - "a:path", - { - "xpath": "syslog/files/file/" + file_attribute_path + "/path", - "operation": "edit", - }, - ), - ], - ) - else: - self._log_file_meta.update( - [ - ( - "files", - { - "xpath": "syslog/files", - "tag": True, - "operation": "edit", - }, - ), - ( - "file", - { - "xpath": "syslog/files/file", - "tag": True, - "operation": "edit", - "attrib": "operation", - }, - ), - ( - "a:name", - { - "xpath": "syslog/files/file/file-name", - "operation": "edit", - }, - ), - ( - "file-attrib", - { - "xpath": "syslog/files/file/" + file_attribute_path, - "tag": True, - "operation": "edit", - }, - ), - ( - "a:size", - { - "xpath": "syslog/files/file/" + file_attribute_path + "/max-file-size", - "operation": "edit", - }, - ), - ( - "a:level", - { - "xpath": "syslog/files/file/" + file_attribute_path + "/severity", - "operation": "edit", - }, - ), - ], - ) - self._log_host_meta.update( - [ - ( - "host-server", - { - "xpath": "syslog/host-server", - "tag": True, - "operation": "edit", - }, - ), - ( - "vrfs", - { - "xpath": "syslog/host-server/vrfs", - "tag": True, - "operation": "edit", - }, - ), - ( - "vrf", - { - "xpath": "syslog/host-server/vrfs/vrf", - "tag": True, - "operation": "edit", - }, - ), - ( - "a:vrf", - { - "xpath": "syslog/host-server/vrfs/vrf/vrf-name", - "operation": "edit", - }, - ), - ( - "ipv4s", - { - "xpath": "syslog/host-server/vrfs/vrf/ipv4s", - "tag": True, - "operation": "edit", - }, - ), - ( - "ipv4", - { - "xpath": "syslog/host-server/vrfs/vrf/ipv4s/ipv4", - "tag": True, - "operation": "edit", - "attrib": "operation", - }, - ), - ( - "a:name", - { - "xpath": "syslog/host-server/vrfs/vrf/ipv4s/ipv4/address", - "operation": "edit", - }, - ), - ( - "ipv4-sev", - { - "xpath": "syslog/host-server/vrfs/vrf/ipv4s/ipv4/ipv4-severity-port", - "tag": True, - "operation": "edit", - }, - ), - ( - "a:level", - { - "xpath": "syslog/host-server/vrfs/vrf/ipv4s/ipv4/ipv4-severity-port/severity", - "operation": "edit", - }, - ), - ], - ) - self._log_console_meta.update( - [ - ( - "a:enable-console", - { - "xpath": "syslog/enable-console-logging", - "operation": "edit", - "attrib": "operation", - }, - ), - ( - "console", - { - "xpath": "syslog/console-logging", - "tag": True, - "operation": "edit", - "attrib": "operation", - }, - ), - ( - "a:console-level", - { - "xpath": "syslog/console-logging/logging-level", - "operation": "edit", - }, - ), - ], - ) - self._log_monitor_meta.update( - [ - ( - "monitor", - { - "xpath": "syslog/monitor-logging", - "tag": True, - "operation": "edit", - "attrib": "operation", - }, - ), - ( - "a:monitor-level", - { - "xpath": "syslog/monitor-logging/logging-level", - "operation": "edit", - }, - ), - ], - ) - self._log_buffered_meta.update( - [ - ( - "buffered", - { - "xpath": "syslog/buffered-logging", - "tag": True, - "operation": "edit", - "attrib": "operation", - }, - ), - ( - "a:size", - { - "xpath": "syslog/buffered-logging/buffer-size", - "operation": "edit", - }, - ), - ( - "a:level", - { - "xpath": "syslog/buffered-logging/logging-level", - "operation": "edit", - }, - ), - ], - ) - self._log_facility_meta.update( - [ - ( - "facility", - { - "xpath": "syslog/logging-facilities", - "tag": True, - "operation": "edit", - "attrib": "operation", - }, - ), - ( - "a:facility", - { - "xpath": "syslog/logging-facilities/facility-level", - "operation": "edit", - }, - ), - ], - ) - self._log_prefix_meta.update( - [ - ( - "a:hostnameprefix", - { - "xpath": "syslog/host-name-prefix", - "operation": "edit", - "attrib": "operation", - }, - ), - ], - ) - - state = self._module.params["state"] - - _get_filter = build_xml("syslog", opcode="filter") - running = get_config( - self._module, - source="running", - config_filter=_get_filter, - ) - - file_ele = etree_findall(running, "file") - file_list = list() - if len(file_ele): - for file in file_ele: - file_name = etree_find(file, "file-name") - file_list.append( - file_name.text if file_name is not None else None, - ) - vrf_ele = etree_findall(running, "vrf") - host_list = list() - for vrf in vrf_ele: - host_ele = etree_findall(vrf, "ipv4") - for host in host_ele: - host_name = etree_find(host, "address") - host_list.append( - host_name.text if host_name is not None else None, - ) - - console_ele = etree_find(running, "console-logging") - console_level = ( - etree_find(console_ele, "logging-level") if console_ele is not None else None - ) - have_console = console_level.text if console_level is not None else None - - monitor_ele = etree_find(running, "monitor-logging") - monitor_level = ( - etree_find(monitor_ele, "logging-level") if monitor_ele is not None else None - ) - have_monitor = monitor_level.text if monitor_level is not None else None - - buffered_ele = etree_find(running, "buffered-logging") - buffered_size = ( - etree_find(buffered_ele, "buffer-size") if buffered_ele is not None else None - ) - have_buffered = buffered_size.text if buffered_size is not None else None - - facility_ele = etree_find(running, "logging-facilities") - facility_level = ( - etree_find(facility_ele, "facility-level") if facility_ele is not None else None - ) - have_facility = facility_level.text if facility_level is not None else None - - prefix_ele = etree_find(running, "host-name-prefix") - have_prefix = prefix_ele.text if prefix_ele is not None else None - - file_params = list() - host_params = list() - console_params = dict() - monitor_params = dict() - buffered_params = dict() - facility_params = dict() - prefix_params = dict() - - opcode = None - if state == "absent": - opcode = "delete" - for item in self._want: - if item["dest"] == "file" and item["name"] in file_list: - item["level"] = severity_level[item["level"]] - file_params.append(item) - elif item["dest"] == "host" and item["name"] in host_list: - item["level"] = severity_level[item["level"]] - host_params.append(item) - elif item["dest"] == "console" and have_console: - console_params.update({"console-level": item["level"]}) - elif item["dest"] == "monitor" and have_monitor: - monitor_params.update({"monitor-level": item["level"]}) - elif item["dest"] == "buffered" and have_buffered: - buffered_params["size"] = str(item["size"]) if item["size"] else None - buffered_params["level"] = item["level"] if item["level"] else None - elif ( - item["dest"] is None - and item["hostnameprefix"] is None - and item["facility"] is not None - and have_facility - ): - facility_params.update({"facility": item["facility"]}) - elif item["dest"] is None and item["hostnameprefix"] is not None and have_prefix: - prefix_params.update( - {"hostnameprefix": item["hostnameprefix"]}, - ) - elif state == "present": - opcode = "merge" - for item in self._want: - if item["dest"] == "file": - item["level"] = severity_level[item["level"]] - file_params.append(item) - elif item["dest"] == "host": - item["level"] = severity_level[item["level"]] - host_params.append(item) - elif item["dest"] == "console": - console_params.update({"console-level": item["level"]}) - elif item["dest"] == "monitor": - monitor_params.update({"monitor-level": item["level"]}) - elif item["dest"] == "buffered": - buffered_params["size"] = str(item["size"]) if item["size"] else None - buffered_params["level"] = item["level"] if item["level"] else None - elif ( - item["dest"] is None - and item["hostnameprefix"] is None - and item["facility"] is not None - ): - facility_params.update({"facility": item["facility"]}) - elif item["dest"] is None and item["hostnameprefix"] is not None: - prefix_params.update( - {"hostnameprefix": item["hostnameprefix"]}, - ) - - self._result["xml"] = [] - _edit_filter_list = list() - if opcode: - if len(file_params): - _edit_filter_list.append( - build_xml( - "syslog", - xmap=self._log_file_meta, - params=file_params, - opcode=opcode, - ), - ) - if len(host_params): - _edit_filter_list.append( - build_xml( - "syslog", - xmap=self._log_host_meta, - params=host_params, - opcode=opcode, - ), - ) - if len(console_params): - _edit_filter_list.append( - build_xml( - "syslog", - xmap=self._log_console_meta, - params=console_params, - opcode=opcode, - ), - ) - if len(monitor_params): - _edit_filter_list.append( - build_xml( - "syslog", - xmap=self._log_monitor_meta, - params=monitor_params, - opcode=opcode, - ), - ) - if len(buffered_params): - _edit_filter_list.append( - build_xml( - "syslog", - xmap=self._log_buffered_meta, - params=buffered_params, - opcode=opcode, - ), - ) - if len(facility_params): - _edit_filter_list.append( - build_xml( - "syslog", - xmap=self._log_facility_meta, - params=facility_params, - opcode=opcode, - ), - ) - if len(prefix_params): - _edit_filter_list.append( - build_xml( - "syslog", - xmap=self._log_prefix_meta, - params=prefix_params, - opcode=opcode, - ), - ) - - diff = None - if len(_edit_filter_list): - commit = not self._module.check_mode - diff = load_config( - self._module, - _edit_filter_list, - commit=commit, - running=running, - nc_get_filter=_get_filter, - ) - if diff: - if self._module._diff: - self._result["diff"] = dict(prepared=diff) - - self._result["xml"] = _edit_filter_list - self._result["changed"] = True - - def run(self, os_version): - self.map_params_to_obj() - self.map_obj_to_xml_rpc(os_version) - - return self._result - - -def main(): - """main entry point for module execution""" - element_spec = dict( - dest=dict( - type="str", - choices=["host", "console", "monitor", "buffered", "file"], - ), - name=dict(type="str"), - size=dict(type="int"), - path=dict(type="str"), - vrf=dict(type="str", default="default"), - facility=dict(type="str", default="local7"), - hostnameprefix=dict(type="str"), - level=dict( - type="str", - default="debugging", - aliases=["severity"], - choices=[ - "emergencies", - "alerts", - "critical", - "errors", - "warning", - "notifications", - "informational", - "debugging", - ], - ), - state=dict(default="present", choices=["present", "absent"]), - ) - - aggregate_spec = deepcopy(element_spec) - - # remove default in aggregate spec, to handle common arguments - remove_default_spec(aggregate_spec) - - mutually_exclusive = [("dest", "facility", "hostnameprefix")] - - required_if = [ - ("dest", "host", ["name"]), - ("dest", "file", ["name"]), - ("dest", "buffered", ["size"]), - ("dest", "console", ["level"]), - ("dest", "monitor", ["level"]), - ] - - argument_spec = dict( - aggregate=dict( - type="list", - elements="dict", - options=aggregate_spec, - mutually_exclusive=mutually_exclusive, - required_if=required_if, - ), - ) - - argument_spec.update(element_spec) - - module = AnsibleModule( - argument_spec=argument_spec, - mutually_exclusive=mutually_exclusive, - required_if=required_if, - supports_check_mode=True, - ) - config_object = None - if is_cliconf(module): - config_object = CliConfiguration(module) - os_version = get_os_version(module) - elif is_netconf(module): - config_object = NCConfiguration(module) - os_version = get_capabilities(module).get("device_info").get("network_os_version") - - if config_object: - result = config_object.run(os_version) - module.exit_json(**result) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/cisco/iosxr/requirements.txt b/ansible_collections/cisco/iosxr/requirements.txt index 2fb85f407..ece31d550 100644 --- a/ansible_collections/cisco/iosxr/requirements.txt +++ b/ansible_collections/cisco/iosxr/requirements.txt @@ -1,6 +1,5 @@ ncclient paramiko -ipaddress grpcio protobuf ansible-pylibssh diff --git a/ansible_collections/cisco/iosxr/test-requirements.txt b/ansible_collections/cisco/iosxr/test-requirements.txt index 2f1724f01..b8dae64f8 100644 --- a/ansible_collections/cisco/iosxr/test-requirements.txt +++ b/ansible_collections/cisco/iosxr/test-requirements.txt @@ -1,11 +1,12 @@ -black==22.3.0 ; python_version > '3.5' +black==23.3.0 flake8 mock pexpect -pytest-xdist yamllint coverage==4.5.4 google-api-python-client grpcio protobuf -git+https://github.com/ansible-community/pytest-ansible-units.git +pytest-ansible +pytest-xdist +pytest-cov diff --git a/ansible_collections/cisco/iosxr/tests/config.yml b/ansible_collections/cisco/iosxr/tests/config.yml index 41f529264..c26ea5966 100644 --- a/ansible_collections/cisco/iosxr/tests/config.yml +++ b/ansible_collections/cisco/iosxr/tests/config.yml @@ -1,3 +1,3 @@ --- modules: - python_requires: ">=3.6" + python_requires: ">=3.9" diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/backup.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/backup.yaml index f33fedff6..26ecf9931 100644 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/backup.yaml +++ b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/backup.yaml @@ -19,7 +19,7 @@ - ansible.builtin.assert: that: - result.changed == true - - result.updates is not defined + - result.updates is defined - name: Delete configurable backup file path ansible.builtin.file: diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/comment-too-long.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/comment-too-long.yaml index cbb59f6e8..b361b6c32 100644 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/comment-too-long.yaml +++ b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/comment-too-long.yaml @@ -20,7 +20,6 @@ - ansible.builtin.assert: that: - result.changed == false - - result.updates is not defined - "'comment argument cannot be more than 60 characters' in result.msg" - ansible.builtin.debug: msg="END cli/comment-too-long.yaml on connection={{ ansible_connection }}" diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/comment.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/comment.yaml index dcbbe78a8..7b8ba6dec 100644 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/comment.yaml +++ b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/comment.yaml @@ -20,7 +20,7 @@ - ansible.builtin.assert: that: - result.changed == true - - result.updates is not defined + - result.updates is defined - name: Check device with configuration register: result @@ -31,7 +31,6 @@ - ansible.builtin.assert: that: - result.changed == false - - result.updates is not defined - name: Assert accurately report configuration failure during pseudo-atomic operation register: result diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/replace_block.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/replace_block.yaml index b5dce6496..e3977bb74 100644 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/replace_block.yaml +++ b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/replace_block.yaml @@ -31,3 +31,9 @@ that: - result2.changed == true - result1.commands == result2.commands + +- name: Cleanup + cisco.iosxr.iosxr_config: + commands: + - no interface GigabitEthernet 0/0/0/5 + ignore_errors: true diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/src_basic.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/src_basic.yaml index dd79ebe07..e4a7e9393 100644 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/src_basic.yaml +++ b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/src_basic.yaml @@ -18,7 +18,7 @@ - ansible.builtin.assert: that: - result.changed == true - - result.updates is not defined + - result.updates is defined - name: Check device with configuration register: result @@ -28,6 +28,5 @@ - ansible.builtin.assert: that: - result.changed == false - - result.updates is not defined - ansible.builtin.debug: msg="END cli/src_basic.yaml on connection={{ ansible_connection }}" diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/src_match_none.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/src_match_none.yaml index 7794ab371..3e804679c 100644 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/src_match_none.yaml +++ b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_config/tests/cli/src_match_none.yaml @@ -19,7 +19,7 @@ - ansible.builtin.assert: that: - result.changed == true - - result.updates is not defined + - result.updates is defined - name: Check device with configuration register: result @@ -29,6 +29,5 @@ - ansible.builtin.assert: that: - result.changed == false - - result.updates is not defined - ansible.builtin.debug: msg="END cli/src_match_none.yaml on connection={{ ansible_connection }}" diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/defaults/main.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/defaults/main.yaml deleted file mode 100644 index 9ef5ba516..000000000 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/defaults/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -testcase: "*" -test_items: [] diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/meta/main.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/meta/main.yaml deleted file mode 100644 index be631e5d8..000000000 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/meta/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -dependencies: - - prepare_iosxr_tests diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/cli.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/cli.yaml deleted file mode 100644 index 88e4708f8..000000000 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/cli.yaml +++ /dev/null @@ -1,24 +0,0 @@ ---- -- name: Collect all CLI test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - delegate_to: localhost - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test case (connection=ansible.netcommon.network_cli) - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - vars: - ansible_connection: ansible.netcommon.network_cli - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - tags: - - network_cli - -- name: Reset connection - ansible.builtin.meta: reset_connection diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/main.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/main.yaml deleted file mode 100644 index 419a6cde6..000000000 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/main.yaml +++ /dev/null @@ -1,6 +0,0 @@ ---- -- name: Include the CLI tasks - ansible.builtin.include_tasks: cli.yaml - -- name: Include the netconf tasks - ansible.builtin.include_tasks: netconf.yaml diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/netconf.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/netconf.yaml deleted file mode 100644 index 26f9ab49a..000000000 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tasks/netconf.yaml +++ /dev/null @@ -1,24 +0,0 @@ ---- -- name: Collect all CLI test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/netconf" - patterns: "{{ testcase }}.yaml" - register: test_cases - delegate_to: localhost - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test case (connection=ansible.netcommon.netconf) - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - vars: - ansible_connection: ansible.netcommon.netconf - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - tags: - - netconf - -- name: Reset connection - ansible.builtin.meta: reset_connection diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/cli/basic.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/cli/basic.yaml deleted file mode 100644 index 02280f4a0..000000000 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/cli/basic.yaml +++ /dev/null @@ -1,140 +0,0 @@ ---- -- name: Remove host logging - cisco.iosxr.iosxr_logging: - dest: host - name: 172.16.0.1 - state: absent - -- name: Remove console logging - register: result - cisco.iosxr.iosxr_logging: - dest: console - state: absent - -- name: Remove buffered logging - register: result - cisco.iosxr.iosxr_logging: - dest: buffered - size: 2097155 - state: absent - -- name: Set up syslog host logging - register: result - cisco.iosxr.iosxr_logging: &id001 - dest: host - name: 172.16.0.1 - level: errors - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging 172.16.0.1 vrf default severity error" in result.commands' - -- name: Set up syslog host logging (idempotent) - register: result - cisco.iosxr.iosxr_logging: *id001 -- ansible.builtin.assert: &id003 - that: - - result.changed == false - -- name: Delete/disable syslog host logging - register: result - cisco.iosxr.iosxr_logging: &id002 - dest: host - name: 172.16.0.1 - state: absent - -- ansible.builtin.assert: - that: - - result.changed == true - - '"no logging 172.16.0.1 vrf default" in result.commands' - -- name: Delete/disable syslog host logging (idempotent) - register: result - cisco.iosxr.iosxr_logging: *id002 -- ansible.builtin.assert: *id003 -- name: Add console logging with level warning - register: result - cisco.iosxr.iosxr_logging: &id004 - dest: console - level: warning - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging console warning" in result.commands' - -- name: Console logging with level warning (idempotent) - register: result - cisco.iosxr.iosxr_logging: *id004 -- ansible.builtin.assert: *id003 -- name: Remove console logging with level warning - register: result - cisco.iosxr.iosxr_logging: - dest: console - level: warning - state: absent - -- ansible.builtin.assert: &id006 - that: - - result.changed == true - -- name: Configure buffered logging size - register: result - cisco.iosxr.iosxr_logging: &id005 - dest: buffered - size: 4800000 - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging buffered 4800000" in result.commands' - -- name: Configure buffered logging size (idempotence) - register: result - cisco.iosxr.iosxr_logging: *id005 -- ansible.builtin.assert: *id003 -- name: Remove buffered logging size - register: result - cisco.iosxr.iosxr_logging: - dest: buffered - size: 4800000 - state: absent - -- ansible.builtin.assert: *id006 -- name: Change logging parameters using aggregate - register: result - cisco.iosxr.iosxr_logging: - aggregate: - - dest: console - level: notifications - - - dest: buffered - size: 4700000 - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging buffered 4700000" in result.commands' - - '"logging console notifications" in result.commands' - -- name: Remove logging parameters using aggregate - register: result - cisco.iosxr.iosxr_logging: - aggregate: - - dest: console - level: notifications - - - dest: buffered - size: 4700000 - state: absent - -- ansible.builtin.assert: - that: - - result.changed == true - - '"no logging console" in result.commands' - - '"no logging buffered" in result.commands' diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/netconf/basic.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/netconf/basic.yaml deleted file mode 100644 index 2bd05e511..000000000 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_logging/tests/netconf/basic.yaml +++ /dev/null @@ -1,208 +0,0 @@ ---- -- name: Remove host logging - cisco.iosxr.iosxr_logging: - dest: host - name: 172.16.0.1 - state: absent - -- name: Remove console logging - register: result - cisco.iosxr.iosxr_logging: - dest: console - level: warning - state: absent - -- name: Remove buffered logging - register: result - cisco.iosxr.iosxr_logging: - dest: buffered - size: 2097155 - state: absent - -- name: Set up syslog host logging - register: result - cisco.iosxr.iosxr_logging: &id001 - dest: host - name: 172.16.0.1 - level: errors - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"172.16.0.1" in result.xml[0]' - -- name: Set up syslog host logging (idempotent) - register: result - cisco.iosxr.iosxr_logging: *id001 -- ansible.builtin.assert: &id003 - that: - - result.changed == false - -- name: Delete/disable syslog host logging - register: result - cisco.iosxr.iosxr_logging: &id002 - dest: host - name: 172.16.0.1 - state: absent - -- ansible.builtin.assert: - that: - - result.changed == true - - '"172.16.0.1" in result.xml[0]' - - '"delete" in result.xml[0]' - -- name: Delete/disable syslog host logging (idempotent) - register: result - cisco.iosxr.iosxr_logging: *id002 -- ansible.builtin.assert: *id003 -- name: Add console logging with level warning - register: result - cisco.iosxr.iosxr_logging: &id004 - dest: console - level: warning - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"console" in result.xml[0]' - - '"warning" in result.xml[0]' - -- name: Console logging with level warning (idempotent) - register: result - cisco.iosxr.iosxr_logging: *id004 -- ansible.builtin.assert: *id003 -- name: Remove console logging with level warning - register: result - cisco.iosxr.iosxr_logging: - dest: console - level: warning - state: absent - -- ansible.builtin.assert: &id006 - that: - - result.changed == true - -- name: Configure buffered logging size - register: result - cisco.iosxr.iosxr_logging: &id005 - dest: buffered - size: 4800000 - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"buffered" in result.xml[0]' - - '"4800000" in result.xml[0]' - -- name: Configure buffered logging size (idempotence) - register: result - cisco.iosxr.iosxr_logging: *id005 -- ansible.builtin.assert: *id003 -- name: Remove buffered logging size - register: result - cisco.iosxr.iosxr_logging: - dest: buffered - size: 4800000 - state: absent - -- ansible.builtin.assert: *id006 -- name: Change logging parameters using aggregate - register: result - cisco.iosxr.iosxr_logging: - aggregate: - - dest: console - level: notifications - - - dest: buffered - size: 4700000 - - - dest: monitor - level: alerts - - - dest: host - name: 10.10.10.1 - level: errors - - - dest: host - name: 10.10.10.2 - - - dest: file - name: file1 - size: 2048 - level: critical - path: /file1 - - - dest: file - name: file2 - size: 2048 - path: /file2 - - - facility: local3 - - - hostnameprefix: host3 - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"file1" in result.xml[0]' - - '"file2" in result.xml[0]' - - '"10.10.10.1" in result.xml[1]' - - '"10.10.10.2" in result.xml[1]' - - '"notice" in result.xml[2]' - - '"alert" in result.xml[3]' - - '"4700000" in result.xml[4]' - - '"debug" in result.xml[4]' - - '"local3" in result.xml[5]' - - '"host3" in result.xml[6]' - -- name: Remove logging parameters using aggregate - register: result - cisco.iosxr.iosxr_logging: - aggregate: - - dest: console - level: notifications - - - dest: buffered - size: 4700000 - - - dest: monitor - level: alerts - - - dest: host - name: 10.10.10.1 - level: errors - - - dest: host - name: 10.10.10.2 - - - dest: file - name: file1 - size: 2048 - level: critical - - - dest: file - name: file2 - size: 2048 - - - facility: local3 - - - hostnameprefix: host3 - state: absent - -- ansible.builtin.assert: - that: - - result.changed == true - - '"file1" in result.xml[0]' - - '"file2" in result.xml[0]' - - '"10.10.10.1" in result.xml[1]' - - '"10.10.10.2" in result.xml[1]' - - '"notice" in result.xml[2]' - - '"alert" in result.xml[3]' - - '"4700000" in result.xml[4]' - - '"debug" in result.xml[4]' - - '"local3" in result.xml[5]' - - '"host3" in result.xml[6]' diff --git a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_smoke/tests/netconf/common_netconf.yaml b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_smoke/tests/netconf/common_netconf.yaml index 2ab0957ae..5f08fd677 100644 --- a/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_smoke/tests/netconf/common_netconf.yaml +++ b/ansible_collections/cisco/iosxr/tests/integration/targets/iosxr_smoke/tests/netconf/common_netconf.yaml @@ -23,24 +23,4 @@ - "'this is my login banner' in result.xml" - "'that has a multiline' in result.xml" -# hit etree_findall() -- name: Remove host logging - cisco.iosxr.iosxr_logging: - dest: host - name: 172.16.0.1 - state: absent - -- name: Set up syslog host logging - cisco.iosxr.iosxr_logging: - dest: host - name: 172.16.0.1 - level: errors - state: present - register: result - -- ansible.builtin.assert: - that: - - "result.changed == true" - - '"172.16.0.1" in result.xml[0]' - - ansible.builtin.debug: msg="END iosxr netconf/common_netconf.yaml on connection={{ ansible_connection }}" diff --git a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.10.txt b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.10.txt deleted file mode 100644 index c2f1a6018..000000000 --- a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.10.txt +++ /dev/null @@ -1,28 +0,0 @@ -plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local -plugins/module_utils/network/iosxr/config/acl_interfaces/acl_interfaces.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv2/ospfv2.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/acl_interfaces/acl_interfaces.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv2/ospfv2.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/iosxr/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/iosxr/config/logging_global/logging_global.py import-2.6!skip -plugins/modules/iosxr_acl_interfaces.py import-2.6!skip -plugins/modules/iosxr_ospf_interfaces.py import-2.6!skip -plugins/modules/iosxr_ospfv2.py import-2.6!skip -plugins/modules/iosxr_ospfv3.py import-2.6!skip -plugins/modules/iosxr_bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/iosxr_bgp_address_family.py import-2.6!skip -plugins/modules/iosxr_bgp_global.py import-2.6!skip -plugins/modules/iosxr_prefix_lists.py import-2.6!skip -plugins/modules/iosxr_logging_global.py import-2.6!skip diff --git a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.11.txt b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.11.txt deleted file mode 100644 index b492817fc..000000000 --- a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.11.txt +++ /dev/null @@ -1,31 +0,0 @@ -plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local -plugins/module_utils/network/iosxr/config/acl_interfaces/acl_interfaces.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv2/ospfv2.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/acl_interfaces/acl_interfaces.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv2/ospfv2.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/iosxr/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/iosxr/config/logging_global/logging_global.py import-2.6!skip -plugins/modules/iosxr_acl_interfaces.py import-2.6!skip -plugins/modules/iosxr_ospf_interfaces.py import-2.6!skip -plugins/modules/iosxr_ospfv2.py import-2.6!skip -plugins/modules/iosxr_ospfv3.py import-2.6!skip -plugins/modules/iosxr_bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/iosxr_bgp_address_family.py import-2.6!skip -plugins/modules/iosxr_bgp_global.py import-2.6!skip -plugins/modules/iosxr_prefix_lists.py import-2.6!skip -plugins/modules/iosxr_logging_global.py import-2.6!skip -plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.7!skip -plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.8!skip -plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.9!skip diff --git a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.12.txt b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.12.txt deleted file mode 100644 index 14952a817..000000000 --- a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.12.txt +++ /dev/null @@ -1,31 +0,0 @@ -plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local -plugins/module_utils/network/iosxr/config/acl_interfaces/acl_interfaces.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv2/ospfv2.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/acl_interfaces/acl_interfaces.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv2/ospfv2.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/iosxr/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/iosxr/config/logging_global/logging_global.py import-2.6!skip -plugins/modules/iosxr_acl_interfaces.py import-2.6!skip -plugins/modules/iosxr_ospf_interfaces.py import-2.6!skip -plugins/modules/iosxr_ospfv2.py import-2.6!skip -plugins/modules/iosxr_ospfv3.py import-2.6!skip -plugins/modules/iosxr_bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/iosxr_bgp_address_family.py import-2.6!skip -plugins/modules/iosxr_bgp_global.py import-2.6!skip -plugins/modules/iosxr_prefix_lists.py import-2.6!skip -plugins/modules/iosxr_logging_global.py import-2.6!skip -plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.8!skip -plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.9!skip -plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.10!skip diff --git a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.13.txt b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.13.txt deleted file mode 100644 index 5d99b9b08..000000000 --- a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.13.txt +++ /dev/null @@ -1,4 +0,0 @@ -plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local -plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.8!skip -plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.9!skip -plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.10!skip diff --git a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.14.txt b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.14.txt index 63b93ff5a..1e8023a57 100644 --- a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.14.txt +++ b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.14.txt @@ -1,4 +1,4 @@ -plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local +plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.9!skip plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.10!skip plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.11!skip diff --git a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.15.txt b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.15.txt index 63b93ff5a..1e8023a57 100644 --- a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.15.txt +++ b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.15.txt @@ -1,4 +1,4 @@ -plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local +plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.9!skip plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.10!skip plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.11!skip diff --git a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.16.txt b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.16.txt index 450f3eab7..6d49e3dcb 100644 --- a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.16.txt +++ b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.16.txt @@ -1,4 +1,4 @@ -plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local +plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.10!skip plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.11!skip plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.12!skip diff --git a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.17.txt b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.17.txt index 450f3eab7..6d49e3dcb 100644 --- a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.17.txt +++ b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.17.txt @@ -1,4 +1,4 @@ -plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local +plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.10!skip plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.11!skip plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.12!skip diff --git a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.18.txt b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.18.txt new file mode 100644 index 000000000..6d49e3dcb --- /dev/null +++ b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.18.txt @@ -0,0 +1,4 @@ +plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` +plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.10!skip +plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.11!skip +plugins/sub_plugins/grpc/pb/ems_grpc_pb2.py import-3.12!skip diff --git a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.9.txt b/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.9.txt deleted file mode 100644 index aab3e8dfc..000000000 --- a/ansible_collections/cisco/iosxr/tests/sanity/ignore-2.9.txt +++ /dev/null @@ -1,30 +0,0 @@ -plugins/action/iosxr.py action-plugin-docs # base class for deprecated network platform modules using `connection: local -plugins/modules/iosxr_logging.py validate-modules:deprecation-mismatch # 2.9 expects METADATA -plugins/modules/iosxr_logging.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict -plugins/module_utils/network/iosxr/config/acl_interfaces/acl_interfaces.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv2/ospfv2.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/iosxr/config/acl_interfaces/acl_interfaces.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv2/ospfv2.py import-2.6!skip -plugins/module_utils/network/iosxr/config/ospfv3/ospfv3.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py import-2.6!skip -plugins/module_utils/network/iosxr/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/iosxr/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/iosxr/config/logging_global/logging_global.py import-2.6!skip -plugins/modules/iosxr_acl_interfaces.py import-2.6!skip -plugins/modules/iosxr_ospf_interfaces.py import-2.6!skip -plugins/modules/iosxr_ospfv2.py import-2.6!skip -plugins/modules/iosxr_ospfv3.py import-2.6!skip -plugins/modules/iosxr_bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/iosxr_bgp_address_family.py import-2.6!skip -plugins/modules/iosxr_bgp_global.py import-2.6!skip -plugins/modules/iosxr_prefix_lists.py import-2.6!skip -plugins/modules/iosxr_logging_global.py import-2.6!skip diff --git a/ansible_collections/cisco/iosxr/tests/unit/compat/__init__.py b/ansible_collections/cisco/iosxr/tests/unit/compat/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/cisco/iosxr/tests/unit/compat/mock.py b/ansible_collections/cisco/iosxr/tests/unit/compat/mock.py deleted file mode 100644 index e4ce72b34..000000000 --- a/ansible_collections/cisco/iosxr/tests/unit/compat/mock.py +++ /dev/null @@ -1,129 +0,0 @@ -# (c) 2014, Toshio Kuratomi -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -""" -Compat module for Python3.x's unittest.mock module -""" -import sys - -import _io - - -# Python 2.7 - -# Note: Could use the pypi mock library on python3.x as well as python2.x. It -# is the same as the python3 stdlib mock library - -try: - # Allow wildcard import because we really do want to import all of mock's - # symbols into this compat shim - # pylint: disable=wildcard-import,unused-wildcard-import - from unittest.mock import * -except ImportError: - # Python 2 - # pylint: disable=wildcard-import,unused-wildcard-import - try: - from mock import * - except ImportError: - print("You need the mock library installed on python2.x to run tests") - - -# Prior to 3.4.4, mock_open cannot handle binary read_data -if sys.version_info >= (3,) and sys.version_info < (3, 4, 4): - file_spec = None - - def _iterate_read_data(read_data): - # Helper for mock_open: - # Retrieve lines from read_data via a generator so that separate calls to - # readline, read, and readlines are properly interleaved - sep = b"\n" if isinstance(read_data, bytes) else "\n" - data_as_list = [l + sep for l in read_data.split(sep)] - - if data_as_list[-1] == sep: - # If the last line ended in a newline, the list comprehension will have an - # extra entry that's just a newline. Remove this. - data_as_list = data_as_list[:-1] - else: - # If there wasn't an extra newline by itself, then the file being - # emulated doesn't have a newline to end the last line remove the - # newline that our naive format() added - data_as_list[-1] = data_as_list[-1][:-1] - - for line in data_as_list: - yield line - - def mock_open(mock=None, read_data=""): - """ - A helper function to create a mock to replace the use of `open`. It works - for `open` called directly or used as a context manager. - - The `mock` argument is the mock object to configure. If `None` (the - default) then a `MagicMock` will be created for you, with the API limited - to methods or attributes available on standard file handles. - - `read_data` is a string for the `read` methoddline`, and `readlines` of the - file handle to return. This is an empty string by default. - """ - - def _readlines_side_effect(*args, **kwargs): - if handle.readlines.return_value is not None: - return handle.readlines.return_value - return list(_data) - - def _read_side_effect(*args, **kwargs): - if handle.read.return_value is not None: - return handle.read.return_value - return type(read_data)().join(_data) - - def _readline_side_effect(): - if handle.readline.return_value is not None: - while True: - yield handle.readline.return_value - for line in _data: - yield line - - global file_spec - if file_spec is None: - file_spec = list( - set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO))), - ) - - if mock is None: - mock = MagicMock(name="open", spec=open) - - handle = MagicMock(spec=file_spec) - handle.__enter__.return_value = handle - - _data = _iterate_read_data(read_data) - - handle.write.return_value = None - handle.read.return_value = None - handle.readline.return_value = None - handle.readlines.return_value = None - - handle.read.side_effect = _read_side_effect - handle.readline.side_effect = _readline_side_effect() - handle.readlines.side_effect = _readlines_side_effect - - mock.return_value = handle - return mock diff --git a/ansible_collections/cisco/iosxr/tests/unit/compat/unittest.py b/ansible_collections/cisco/iosxr/tests/unit/compat/unittest.py deleted file mode 100644 index df4266ec9..000000000 --- a/ansible_collections/cisco/iosxr/tests/unit/compat/unittest.py +++ /dev/null @@ -1,41 +0,0 @@ -# (c) 2014, Toshio Kuratomi -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -""" -Compat module for Python2.7's unittest module -""" - -import sys - - -# Allow wildcard import because we really do want to import all of -# unittests's symbols into this compat shim -# pylint: disable=wildcard-import,unused-wildcard-import -if sys.version_info < (2, 7): - try: - # Need unittest2 on python2.6 - from unittest2 import * - except ImportError: - print("You need unittest2 installed on python2.6.x to run tests") -else: - from unittest import * diff --git a/ansible_collections/cisco/iosxr/tests/unit/mock/path.py b/ansible_collections/cisco/iosxr/tests/unit/mock/path.py index 0c87896da..7d287a5fb 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/mock/path.py +++ b/ansible_collections/cisco/iosxr/tests/unit/mock/path.py @@ -2,9 +2,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible.utils.path import unfrackpath +from unittest.mock import MagicMock -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import MagicMock +from ansible.utils.path import unfrackpath mock_unfrackpath_noop = MagicMock( diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp new file mode 100644 index 000000000..cd5d89cee --- /dev/null +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp @@ -0,0 +1,4 @@ +Global CDP information: + Sending CDP packets every 60 seconds + Sending a holdtime value of 30 seconds + Sending CDPv2 advertisements is not enabled diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp_neighbors_detail b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp_neighbors_detail new file mode 100644 index 000000000..f1ab85923 --- /dev/null +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/fixtures/show_cdp_neighbors_detail @@ -0,0 +1,16 @@ +------------------------- +Device ID: device2.cisco.com +Entry address(es): + IP address: 171.68.162.134 +Platform: cisco 4500, Capabilities: Router +Interface: Ethernet0/1, Port ID (outgoing port): Ethernet0 +Holdtime : 156 sec + +Version : +Cisco Internetwork Operating System Software +IOS (tm) 4500 Software (C4500-J-M), Version 11.1(10.4), MAINTENANCE INTERIM SOFTWARE +Copyright (c) 1986-1997 by Cisco Systems, Inc. +Compiled Mon 07-Apr-97 19:51 by dschwart + + +Total cdp entries displayed : 1 diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_hostname.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_hostname.py index 7c676530b..9eda36615 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_hostname.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_hostname.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.iosxr.plugins.modules import iosxr_hostname -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr.py index af2fd3a5c..32eb85797 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr.py @@ -22,15 +22,15 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from os import path +from unittest import TestCase from ansible.module_utils._text import to_bytes, to_text from mock import MagicMock from ansible_collections.cisco.iosxr.plugins.cliconf import iosxr -from ansible_collections.cisco.iosxr.tests.unit.compat import unittest -class TestPluginCLIConfIOSXR(unittest.TestCase): +class TestPluginCLIConfIOSXR(TestCase): """Test class for IOSXR CLI Conf Methods""" def setUp(self): diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_acl_interfaces.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_acl_interfaces.py index 8500c0733..0c29c6c13 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_acl_interfaces.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_acl_interfaces.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_acl_interfaces -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_acls.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_acls.py index 181b239d8..d301bda7b 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_acls.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_acls.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_acls -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_banner.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_banner.py index 5dcbada13..32085d51e 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_banner.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_banner.py @@ -38,9 +38,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.iosxr.plugins.modules import iosxr_banner -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_address_family.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_address_family.py index 57770b59d..ce8d12c95 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_address_family.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_address_family.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.iosxr.plugins.modules import iosxr_bgp_address_family -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_global.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_global.py index 901b5b4d8..6527fb48d 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_global.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_global.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.iosxr.plugins.modules import iosxr_bgp_global -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_neighbor_address_family.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_neighbor_address_family.py index d6fd0610d..6714adee8 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_neighbor_address_family.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_neighbor_address_family.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.iosxr.plugins.modules import iosxr_bgp_neighbor_address_family -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_templates.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_templates.py index 4efc04503..58cec9977 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_templates.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_bgp_templates.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.iosxr.plugins.modules import iosxr_bgp_templates -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule @@ -239,6 +239,22 @@ class TestIosxrBgptemplatesModule(TestIosxrModule): safi="unicast", advertise=dict(local_labeled_route=dict(set=True)), ), + dict( + afi="vpnv4", + safi="unicast", + ), + dict( + afi="vpnv6", + safi="unicast", + ), + dict( + afi="link-state", + safi="link-state", + ), + dict( + afi="l2vpn", + safi="evpn", + ), ], ), dict( @@ -324,6 +340,10 @@ class TestIosxrBgptemplatesModule(TestIosxrModule): "bfd fast-detect strict-mode", "internal-vpn-client", "precedence critical", + "address-family vpnv4 unicast", + "address-family vpnv6 unicast", + "address-family link-state link-state", + "address-family l2vpn evpn", "address-family ipv4 unicast", "advertise local-labeled-route", "neighbor-group test1", @@ -1128,6 +1148,14 @@ class TestIosxrBgptemplatesModule(TestIosxrModule): precedence critical advertisement-interval 10 internal-vpn-client + address-family vpnv4 unicast + ! + address-family vpnv6 unicast + ! + address-family link-state link-state + ! + address-family l2vpn evpn + ! address-family ipv4 unicast advertise local-labeled-route ! @@ -1199,6 +1227,10 @@ class TestIosxrBgptemplatesModule(TestIosxrModule): "advertisement_interval": 10, "internal_vpn_client": True, "address_family": [ + {"afi": "vpnv4", "safi": "unicast"}, + {"afi": "vpnv6", "safi": "unicast"}, + {"afi": "link-state", "safi": "link-state"}, + {"afi": "l2vpn", "safi": "evpn"}, { "afi": "ipv4", "safi": "unicast", diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_command.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_command.py index cd691d6c4..b3787e600 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_command.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_command.py @@ -21,8 +21,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_command -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_config.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_config.py index 9ac6866af..dffd4b4c9 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_config.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_config.py @@ -21,10 +21,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import MagicMock, patch from ansible_collections.cisco.iosxr.plugins.cliconf.iosxr import Cliconf from ansible_collections.cisco.iosxr.plugins.modules import iosxr_config -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import MagicMock, patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_facts.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_facts.py index da7d597ae..6c0e02e0f 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_facts.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_facts.py @@ -23,8 +23,9 @@ __metaclass__ = type import json +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_facts -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture @@ -131,3 +132,19 @@ class TestIosxrFacts(TestIosxrModule): ansible_facts["ansible_net_cpu_utilization"], cpu_utilization_data, ) + + def test_iosxr_facts_neighbors(self): + set_module_args(dict(gather_subset="interfaces")) + result = self.execute_module() + ansible_facts = result["ansible_facts"]["ansible_net_neighbors"] + expected_neighbors = { + "Ethernet0/1": [ + { + "host": "device2.cisco.com", + "platform": "cisco 4500", + "port": "Ethernet0", + "ip": "171.68.162.134", + }, + ], + } + self.assertCountEqual(ansible_facts.keys(), expected_neighbors.keys()) diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_interfaces.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_interfaces.py index bff925c60..15a8de4e5 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_interfaces.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_interfaces.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_interfaces -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_l2_interfaces.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_l2_interfaces.py index f28561777..9bef80c39 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_l2_interfaces.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_l2_interfaces.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_l2_interfaces -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_l3_interfaces.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_l3_interfaces.py index 071b16b8f..14b5a1e51 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_l3_interfaces.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_l3_interfaces.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_l3_interfaces -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lacp.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lacp.py index 23c4b8cd9..09e7fa8ec 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lacp.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lacp.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_lacp -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lacp_interfaces.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lacp_interfaces.py index 55358a061..d6bb57c40 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lacp_interfaces.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lacp_interfaces.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_lacp_interfaces -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lag_interfaces.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lag_interfaces.py index b0d68fc62..032539115 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lag_interfaces.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lag_interfaces.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_lag_interfaces -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lldp_global.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lldp_global.py index 4830058df..d2b74103b 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lldp_global.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lldp_global.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_lldp_global -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lldp_interfaces.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lldp_interfaces.py index 78b6d79f0..889eb8e57 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lldp_interfaces.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_lldp_interfaces.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_lldp_interfaces -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_logging_global.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_logging_global.py index bffee2b17..205740f19 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_logging_global.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_logging_global.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.iosxr.plugins.modules import iosxr_logging_global -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_n540.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_n540.py index d2820cfa1..e7ec26877 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_n540.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_n540.py @@ -22,15 +22,15 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from os import path +from unittest import TestCase from ansible.module_utils._text import to_bytes, to_text from mock import MagicMock from ansible_collections.cisco.iosxr.plugins.cliconf import iosxr -from ansible_collections.cisco.iosxr.tests.unit.compat import unittest -class TestPluginCLIConfIOSXR(unittest.TestCase): +class TestPluginCLIConfIOSXR(TestCase): """Test class for IOSXR CLI Conf Methods""" def setUp(self): diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_netconf.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_netconf.py index 727752948..db1f03449 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_netconf.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_netconf.py @@ -21,8 +21,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_netconf -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ntp_global.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ntp_global.py index 702e2a007..e9e0e66fd 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ntp_global.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ntp_global.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.iosxr.plugins.modules import iosxr_ntp_global -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospf_interfaces.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospf_interfaces.py index 5b967be00..f5030c703 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospf_interfaces.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospf_interfaces.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_ospf_interfaces -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospfv2.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospfv2.py index b51727dbd..3d4e26298 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospfv2.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospfv2.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_ospfv2 -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospfv3.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospfv3.py index 23c9d071b..447323e7f 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospfv3.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ospfv3.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_ospfv3 -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ping.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ping.py index d0ceda0fb..87ffc4f13 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ping.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_ping.py @@ -9,9 +9,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.iosxr.plugins.modules import iosxr_ping -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule @@ -135,7 +135,7 @@ class TestIosxrPingModule(TestIosxrModule): } self.assertEqual(result, mock_res) - def test_iosxr_ping_state_absent_pass(self): + def test_iosxr_ping_state_absent_pass_1(self): self.execute_show_command.return_value = dedent( """\ Type escape sequence to abort. diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_prefix_lists.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_prefix_lists.py index 6dca5d920..9c2f895ac 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_prefix_lists.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_prefix_lists.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.iosxr.plugins.modules import iosxr_prefix_lists -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_snmp_server.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_snmp_server.py index 148625190..eaad485d8 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_snmp_server.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_snmp_server.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.iosxr.plugins.modules import iosxr_snmp_server -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_static_routes.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_static_routes.py index a185b0c4f..4cce2eb6e 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_static_routes.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_static_routes.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_static_routes -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_system.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_system.py index 253725979..973f07066 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_system.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_system.py @@ -21,8 +21,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_system -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_user.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_user.py index 0d783d4cd..0ab53a529 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_user.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_user.py @@ -21,8 +21,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.iosxr.plugins.modules import iosxr_user -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch from ansible_collections.cisco.iosxr.tests.unit.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_utils.py b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_utils.py index 7707adf41..c63e57030 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_utils.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/network/iosxr/test_iosxr_utils.py @@ -7,11 +7,13 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type + +from unittest import TestCase + from ansible_collections.cisco.iosxr.plugins.module_utils.network.iosxr.utils.utils import Version -from ansible_collections.cisco.iosxr.tests.unit.compat import unittest -class TestIosxrUtils(unittest.TestCase): +class TestIosxrUtils(TestCase): def setUp(self): pass diff --git a/ansible_collections/cisco/iosxr/tests/unit/modules/utils.py b/ansible_collections/cisco/iosxr/tests/unit/modules/utils.py index d63a86922..87be9cf8e 100644 --- a/ansible_collections/cisco/iosxr/tests/unit/modules/utils.py +++ b/ansible_collections/cisco/iosxr/tests/unit/modules/utils.py @@ -4,12 +4,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import json +from unittest import TestCase +from unittest.mock import patch + from ansible.module_utils import basic from ansible.module_utils._text import to_bytes -from ansible_collections.cisco.iosxr.tests.unit.compat import unittest -from ansible_collections.cisco.iosxr.tests.unit.compat.mock import patch - def set_module_args(args): if "_ansible_remote_tmp" not in args: @@ -40,7 +40,7 @@ def fail_json(*args, **kwargs): raise AnsibleFailJson(kwargs) -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self): self.mock_module = patch.multiple( basic.AnsibleModule, diff --git a/ansible_collections/cisco/iosxr/tox-ansible.ini b/ansible_collections/cisco/iosxr/tox-ansible.ini new file mode 100644 index 000000000..b49a359f9 --- /dev/null +++ b/ansible_collections/cisco/iosxr/tox-ansible.ini @@ -0,0 +1,3 @@ +[ansible] + +skip = "" diff --git a/ansible_collections/cisco/iosxr/tox.ini b/ansible_collections/cisco/iosxr/tox.ini deleted file mode 100644 index 6ada631cb..000000000 --- a/ansible_collections/cisco/iosxr/tox.ini +++ /dev/null @@ -1,31 +0,0 @@ -[tox] -minversion = 1.4.2 -envlist = linters -skipsdist = True - -[testenv] -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -[testenv:black] -install_command = pip install {opts} {packages} -commands = - black -v {toxinidir} - -[testenv:linters] -install_command = pip install {opts} {packages} -commands = - black -v --diff --check {toxinidir} - flake8 {posargs} - -[testenv:venv] -commands = {posargs} - -[flake8] -# E123, E125 skipped as they are invalid PEP-8. - -show-source = True -ignore = E123,E125,E203,E402,E501,E741,F401,F811,F841,W503 -max-line-length = 160 -builtins = _ -exclude = .git,.tox,tests/unit/compat/ diff --git a/ansible_collections/cisco/ise/.DS_Store b/ansible_collections/cisco/ise/.DS_Store new file mode 100644 index 000000000..f79cfc1f5 Binary files /dev/null and b/ansible_collections/cisco/ise/.DS_Store differ diff --git a/ansible_collections/cisco/ise/.github/workflows/sanity_tests.yml b/ansible_collections/cisco/ise/.github/workflows/sanity_tests.yml index dd455afad..a98328054 100644 --- a/ansible_collections/cisco/ise/.github/workflows/sanity_tests.yml +++ b/ansible_collections/cisco/ise/.github/workflows/sanity_tests.yml @@ -14,8 +14,9 @@ jobs: strategy: matrix: ansible: - - stable-2.14 - stable-2.15 + - stable-2.16 + - stable-2.17 - devel runs-on: ubuntu-20.04 steps: diff --git a/ansible_collections/cisco/ise/.vscode/launch.json b/ansible_collections/cisco/ise/.vscode/launch.json new file mode 100644 index 000000000..306f58eb3 --- /dev/null +++ b/ansible_collections/cisco/ise/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Current File", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "justMyCode": true + } + ] +} \ No newline at end of file diff --git a/ansible_collections/cisco/ise/.vscode/settings.json b/ansible_collections/cisco/ise/.vscode/settings.json new file mode 100644 index 000000000..4f6146612 --- /dev/null +++ b/ansible_collections/cisco/ise/.vscode/settings.json @@ -0,0 +1,24 @@ +{ + "esbonio.sphinx.confDir": "", + "ansible.python.interpreterPath": "/usr/local/bin/python3.10", + "workbench.colorCustomizations": { + "activityBar.activeBackground": "#65c89b", + "activityBar.background": "#65c89b", + "activityBar.foreground": "#15202b", + "activityBar.inactiveForeground": "#15202b99", + "activityBarBadge.background": "#945bc4", + "activityBarBadge.foreground": "#e7e7e7", + "commandCenter.border": "#15202b99", + "sash.hoverBorder": "#65c89b", + "statusBar.background": "#42b883", + "statusBar.foreground": "#15202b", + "statusBarItem.hoverBackground": "#359268", + "statusBarItem.remoteBackground": "#42b883", + "statusBarItem.remoteForeground": "#15202b", + "titleBar.activeBackground": "#42b883", + "titleBar.activeForeground": "#15202b", + "titleBar.inactiveBackground": "#42b88399", + "titleBar.inactiveForeground": "#15202b99" + }, + "peacock.remoteColor": "#42b883" +} \ No newline at end of file diff --git a/ansible_collections/cisco/ise/FILES.json b/ansible_collections/cisco/ise/FILES.json index 68d896522..72c9d6a53 100644 --- a/ansible_collections/cisco/ise/FILES.json +++ b/ansible_collections/cisco/ise/FILES.json @@ -7,6 +7,13 @@ "chksum_sha256": null, "format": 1 }, + { + "name": ".DS_Store", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "437cf9da8611bcc8837aef2444e9e00fc44f8f071f750224be185a74168f2e5f", + "format": 1 + }, { "name": "LICENSE", "ftype": "file", @@ -18,7 +25,7 @@ "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5a620581f1eb701a6e7bce54457bc44c196732cc5b8d82ae728c285e8d51264", + "chksum_sha256": "b600386bb9438017eed5b1eec6a8cfc7ea2879afef9adb1013e15ebf581deb12", "format": 1 }, { @@ -28,6 +35,13 @@ "chksum_sha256": null, "format": 1 }, + { + "name": "plugins/.DS_Store", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "389b6b15b162e5db97c1c6d4ddc0f1161590c016eb06e49734d10373aabc3c56", + "format": 1 + }, { "name": "plugins/doc_fragments", "ftype": "dir", @@ -67,889 +81,1057 @@ "name": "plugins/action/device_administration_local_exception_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25b5da09d0ea52097cbb4f353dfb78b1120527e4c1eab6a749097f9607cc52ab", + "chksum_sha256": "a4ba9cdacad6befa4e7f2b181a1d324c1fd998dfac9f8f216ea3a2ff764bca26", "format": 1 }, { "name": "plugins/action/device_administration_dictionary_attributes_authentication_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fce24fbf7df39e961b11241a54e93c64204d0e734b2b7cdc5ac6f21d7fc29dd8", + "chksum_sha256": "6a85ce7f52141a38752b4b48bc6fe706ce39529622fe4b5ec4331a6987bb0876", "format": 1 }, { "name": "plugins/action/licensing_tier_state_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "efe8167ebc7915126cbe60f37d7bd49a188d3e86a6a3563f41022468ce412cee", + "chksum_sha256": "5d8b70394ca660dcebaa66bbdd82f0daded331ded0d8135ee044350ca1c4d50f", "format": 1 }, { "name": "plugins/action/trusted_certificate_export_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1914c7faa9abb01416c2951f49e15502d66d1fc192b1db3239b0cf34edecb2ef", + "chksum_sha256": "e70e1786f6bcb1a2ca6170d0285c05758c39c90916a617bed244bfa26e701b61", "format": 1 }, { - "name": "plugins/action/test_connector.py", + "name": "plugins/action/network_device_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f16380be3ff68f3e263a612f4a051c045e84dda1eeb5f635d5317b26ec9b8c7e", + "chksum_sha256": "36bf61970a68e7d79fa06fecf2583de7b7eec6728b16850cd08940162259e6e5", "format": 1 }, { - "name": "plugins/action/network_device_group_info.py", + "name": "plugins/action/px_grid_direct_sync_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b1a4ae7b73a246e2c6d970ab18cf35223fce247589dc9b278f6c444b433ca34c", + "chksum_sha256": "29cf00d1089c4a78e9f858078053c138520d01c0e98fae4689bd50df38eab40d", "format": 1 }, { "name": "plugins/action/sxp_connections.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eaac021792b3ac8b1b94fbf874fb2e4ce4a518ca6365c37cc639d647ce6f09b7", + "chksum_sha256": "f05f1fc25c14e1a3ddf9db853d16ef4f2652b8f5c17a955d13c171e9e4fb9ba9", "format": 1 }, { "name": "plugins/action/guest_ssid.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a5e918558117a5da2af0bd8d3917a54fb376068d98f5a2f28e8a853666077d05", + "chksum_sha256": "4c611ad0ea29d90a81812554160fd6f5c50a126335483706084269f1ecd675d3", "format": 1 }, { "name": "plugins/action/proxy_connection_settings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "07e682acd78773d77c24af74347e1c73df6cd0697b74d2e9c71c22ce8b2da385", + "chksum_sha256": "415615360f329c5f406496e49084e50624204e414010a789a9aac5bda5a28edf", "format": 1 }, { "name": "plugins/action/node_services_profiler_probe_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7be342544dfbae8faf4f698ecd0038b92d8570831cff0667502502894d496bc9", + "chksum_sha256": "c950b782e6d6cfd4bcf5c9ef9c1de1024cd789ad221c62981eb7de6a837f3c07", "format": 1 }, { "name": "plugins/action/network_access_dictionary_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff9271ecc8c45dbadfa9658c499608e1e7398d82bee75d7484533ff7bf765e9e", + "chksum_sha256": "0a1d2d449ba06fd0b49068ddbf3a9c3905025e6cac26cdaa5b6bf4f913fc2ce0", "format": 1 }, { "name": "plugins/action/network_access_policy_set.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2108f17089a82191a3f545588c4fd7bc81d575824bed8d033f75ea760c19c7ac", + "chksum_sha256": "9d12c30b13e428d10c06289d6bad5359f405636d529b09886f052726fa0b3eed", "format": 1 }, { "name": "plugins/action/repository_files_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "721c8d823402e1857e78e90df19b0f6a9a43c43c325b00fc99a3ce664b44143a", + "chksum_sha256": "c0d3261207a5c5a94b63c94aa614f311c15d34740a112d515c1650cf9a1c01c5", "format": 1 }, { "name": "plugins/action/repository_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "09c065fc28692f5340f915b18b0e7431d5cbfa9cd01b2e1c64888c32f520faf5", + "chksum_sha256": "4c18857c59a72a310664cfb0be574846a76005d47bd71b1c678f25cb67e142fd", "format": 1 }, { "name": "plugins/action/rest_id_store_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ebac6dccebccaf3b64050b6e1b8ac794f8fb37a4f8901c72e953275168c47fa", + "chksum_sha256": "ac4e3e69ac971fd5a5dbe940ade928d0324911bec1faf29ff001d3740c8480f0", "format": 1 }, { - "name": "plugins/action/dictionary_references_info.py", + "name": "plugins/action/anc_policy_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a03f8b3e5467296dee3f555d61ebed7b93c74a7e7e527b40fa52a42d90164819", + "chksum_sha256": "19f41a929abdcd34687f76ed11f00949706aee935f6c57ca4f4c7a773372ca12", "format": 1 }, { - "name": "plugins/action/anc_policy_info.py", + "name": "plugins/action/tasks_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a8f2de5f6d90c48814dabe242a5d498fd5c0084a848c57ba2a6b2509decd8c6", + "chksum_sha256": "8d13632289066a4e0a0c4810e9c37473e5b4c3cb13be56cc9ff07e50902882c0", "format": 1 }, { - "name": "plugins/action/tasks_info.py", + "name": "plugins/action/configuration.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d0521f7d5e3a5203aaaa628422e7933838a410b6b1ee9179f0dc3f605186a2c", + "chksum_sha256": "b03ca6301a30a01bd8a649762cb29a962aaa3da4df90a0e2d151da5f9cf3ca2c", "format": 1 }, { - "name": "plugins/action/configuration.py", + "name": "plugins/action/trustsec_sg_vn_mapping_bulk_delete.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "28c31c878ee196752d7c003c4c69720b4dd5251739ca70de97cc0001547dfdad", + "chksum_sha256": "b63c63bd64d89a8babfd3699a2fe5c05d0d902f15aadad59f75074401652a618", "format": 1 }, { "name": "plugins/action/device_administration_authorization_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93a8218bd6642a7a08242a341e5934dd6e6c025ff84d0eb10289adeede6ec2de", + "chksum_sha256": "b2de3e41d31c52fe68f1202cb2bfd557120cfc27ad7fb238c7bf2700f2cb2c0a", "format": 1 }, { "name": "plugins/action/guest_user_email.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5030c3871becf22e728dc276e501620c04127417cfd8de9137a5d61cf2c0a461", + "chksum_sha256": "35ebe17629dc4c15af5be81b2d385a76447dfaeeb3aa5023cbb15deefffa7cc5", "format": 1 }, { "name": "plugins/action/node_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e2b504a05ceac5488d9c6c76334f7462f0e9e6bfefb9e9e163a4ea834256f94", + "chksum_sha256": "2d16019fb10178b806f52fd1f912b5637cbb69e03c7ae511aa313ffbfae34d4e", "format": 1 }, { "name": "plugins/action/mnt_authentication_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83a9b888282c1de0e79ed9c61a8e3f87a76ef7a17f6de89f0b670cbeb5d61e07", + "chksum_sha256": "b891a17b88c0da08c35a393f3edbf3cb2eb7155d0beb98a1b951d5d15eea4107", "format": 1 }, { "name": "plugins/action/pxgrid_healths_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49627a9fbf52a238801d10d814d98dd9d581cb3e59cf40a4bd0d2d09d29524f1", + "chksum_sha256": "6e01bc11d8fbaee1757b5792912463e8671250caf56693320728b54e68744d06", "format": 1 }, { "name": "plugins/action/hotspot_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "01d064f8b2a5ad4530662a0660618fbfaa360d33f7e9c9b6cc9f3f148d0e707c", + "chksum_sha256": "22ca652e0a6eb62c593e536e4794ad5adafc7894c8bdc1cfc8de0a40814dfcb1", "format": 1 }, { "name": "plugins/action/authorization_profile_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af00fbb10e16cf2826d39538c2a434d4da1168192ab516ed32d70e425447ea1d", + "chksum_sha256": "30f03d5d4672f2ea1930c3f6c8c5bb34eaaa664cc7c96f51118e658f18b72b73", + "format": 1 + }, + { + "name": "plugins/action/reservation.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "48a30fa2dc9213e5b044d5c7fafd727de6696636a770cbf883e7f5e0a37b6275", "format": 1 }, { "name": "plugins/action/hotpatch_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f5815fa047d4f5c5030e9f6fd22271d4c906a0aa93c882102d51c841fb8c2ad8", + "chksum_sha256": "aaf766118a77bbab4d05e85f13374a0c214c48750a64a90c6508b194f9346359", + "format": 1 + }, + { + "name": "plugins/action/trustsec_sg_vn_mapping_bulk_update.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5910d1083cde4e24cddba783606e273f1cfc5a8e5a24617422526d9dbc4b3cf1", "format": 1 }, { "name": "plugins/action/node_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1e3ab5405a5ac12557b4d7c3c52689b9f5ff2562fb47deab64c6c14ed3bc963", + "chksum_sha256": "3951289a17c428330df70c3c4f770b784dd4a5aa28fad32a3571dc49b5b5c03a", "format": 1 }, { "name": "plugins/action/personas_export_certs.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b73decde11488e39b11d2d7605b69a91d8987967b41b900a42dea24d85e02e0f", + "chksum_sha256": "18e69825d50e3a9b2376151d9962144cc67c308ab3e4907aa39a441206477d3f", "format": 1 }, { "name": "plugins/action/network_access_dictionary_attributes_authentication_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4224839be0e82ecf2a24067ca29bbb614b1808fcfd192fb2eb455469aad30b82", + "chksum_sha256": "0ac7f731ad3bad49217bad9d738c45b742dd8c04cb72e3319861c3f5e224ae09", "format": 1 }, { "name": "plugins/action/aci_bindings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c69c9fa563713ae0196edb0ab26909b9f8c71b39c0a2980bf3f99fe1fb0f8455", + "chksum_sha256": "fbc5ff3668cab815fb35936ffb16f4b5999487c0d4215acde4e1e3e6a1061ae2", "format": 1 }, { "name": "plugins/action/network_access_policy_set_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55faa4563f57c55897c27380a0798c232274d59243b261436eb710d2d2bd4c5c", + "chksum_sha256": "7a307c6922a7a679a31fd953dbf14d2fb54ab89c8d6220dd5e1de49eb9da3b72", "format": 1 }, { "name": "plugins/action/subscriber_imsi_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91ef4ff7daa43a4895cc80a845d0c66f2ccaa9e1b57d833e651e4a6557374f8f", + "chksum_sha256": "ec6dc7ba756214ca444fa61b09b8e31702f7e6f376743b17982a32b813f6bda3", "format": 1 }, { "name": "plugins/action/id_store_sequence_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7d047ef40d9fb2da4c9a2f27d797e59b6d8a52a113bd11e16967e490ea1ce16", + "chksum_sha256": "147d1e11a94a6e30b66063c3fe05b02f8f561ff5b32f11c85c4b6d1e4578ef2f", "format": 1 }, { "name": "plugins/action/device_administration_policy_set_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "afffe8d167c5a86cb35b87ceca420d6bbf6e1f48fd4d016068b442dcc0b5fee1", + "chksum_sha256": "0aeeecbaa19ad0e822573333b9f02b30ad10068fbeb5facdc2dd9c835f6fbc8e", "format": 1 }, { "name": "plugins/action/sxp_local_bindings_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "48574b6a1762eadd7eed6cd9ec83f6d373bfb2dd5c4a6433cab399bb0c2f66ba", + "chksum_sha256": "51b555624c34ae0135ded07ac479a3be687a3a86d9ad0f2d7aa54667d33b9186", "format": 1 }, { "name": "plugins/action/ise_root_ca_regenerate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7e8d218cb0dee5730fdf28a5ed44e180b65794c9f13a16f0de328fb2b952f28e", + "chksum_sha256": "a8af7ecb3f43e653a59bb9a8e74ab0fe2d268bf28bf63339645fc108843e931e", "format": 1 }, { "name": "plugins/action/mnt_sessions_by_session_id_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f82df0e267c51914a535393b2550d4fd98d345070aae567899a8941e3262bd2f", + "chksum_sha256": "e4bf061e1839498549a2c013189b905767b10a9d58871ac35999a89e77e39026", "format": 1 }, { "name": "plugins/action/network_access_service_name_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "911ef6ffb6250d40249d3f87ff5be07d46349d0ea634514b88d8e20f0c9cc0e6", + "chksum_sha256": "284ac01392a34dadd263cc169314dc60d51b23b6d70bcd26bd1d08072a8b1f56", "format": 1 }, { "name": "plugins/action/configuration_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec026ed478f51cedfce03de9d8ed59e78f59d414f74061f0d324ae128f93a082", + "chksum_sha256": "a4426989ff59c9dead8dcee8fa0627bfcac52c8c8d2c524f4899ede418fdf92f", + "format": 1 + }, + { + "name": "plugins/action/custom_attributes.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "183d163bde8841a9e33dfdca4e4ae0bc9540819dbd7249c293b1dcf4fd84376d", "format": 1 }, { "name": "plugins/action/guest_user_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3106158cb218b1b5120b5efaff83f99a7bfd01560fadf51c52edf29b7ff0a17f", + "chksum_sha256": "c2bb34516ca07c993cbeba1b2e887826018e5f0cc2763b1e593624193454a5ee", "format": 1 }, { "name": "plugins/action/aci_settings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "906352b851ba4a6319c4ee40299376b7cae96a730d53f4887544a182db1845f1", + "chksum_sha256": "89fef53b8f2019a2a4af26f074b473c6169e23ba1804ec5b66f6f0f51066b175", "format": 1 }, { "name": "plugins/action/bind_signed_certificate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd1230b7fb053ebc156c10c5f01424a24c5ad23a50b704fd488790827e923fa3", + "chksum_sha256": "21790152fe2313e3d74019a4d1592eaf5dae440d1777882153747ce2c706467b", "format": 1 }, { "name": "plugins/action/endpoint_register.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b89858a9744fc7bf7b17549c05928da46c9b5e6fbff70be3c95e90095b246ffe", + "chksum_sha256": "cfda17738b96fb5210c004eea32ee9b97138abd512c72421bd468c6563a49f74", "format": 1 }, { "name": "plugins/action/px_grid_node_delete.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f2f5ad212cbaa6145289d836b0cf4c9c550ae2945526a744785deb32b0ed3bde", + "chksum_sha256": "2cd5eece8549d0bf1428c8ae8d6ed948f5a03cfcb9e2e97c58eb9a7edd028486", + "format": 1 + }, + { + "name": "plugins/action/px_grid_direct_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "95184c8ff3fc07b2661eb4296d355b4552a939023b6b915f4016bc8fec02b8d6", "format": 1 }, { "name": "plugins/action/device_administration_network_conditions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52aa8a8a8b067fc670a3255d6abd7121313e05af4a5bc3ca9781461faa861261", + "chksum_sha256": "1236ed9d78da3ccd1844a81c83b1b04637fbc63c7297fdd644496e7137fdcdec", "format": 1 }, { "name": "plugins/action/node_primary_to_standalone.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43bbca7b7f51510a95fef2d707cbeee0f752c9697b7cb5e2d8f977c0d776b9c8", + "chksum_sha256": "a4a49eecf67384d49785445a7bea3b359b1855125d27ad01eb6ee72778792a35", "format": 1 }, { "name": "plugins/action/active_directory_leave_domain_with_all_nodes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ebd5bd36ce8f89952b10bfc992eace59fdd6a821141d1b119bd24da98827a242", + "chksum_sha256": "78b3c44fe04ce977b1f0339545c9a363964220be85d809d9817ec2e81b2a0169", "format": 1 }, { "name": "plugins/action/trusted_certificate_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8aa467083afc591c8f70fbaa783c6952ac17256d9a0b94bb07c7b81c55716cba", + "chksum_sha256": "a66a26e20d00aad8c66afe6cdb0173313db3c1741b6ec57a64d1d971ca5fc056", "format": 1 }, { "name": "plugins/action/licensing_connection_type_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb9b4d3ee8eddfa9509fa548f932e147b598aabc1c2c5d6243032786ff73ee1e", + "chksum_sha256": "59e9752ea1aeb93e5b34f77a952e2ad85ff0a45d708a0eac599196927e5f95b2", "format": 1 }, { "name": "plugins/action/mnt_account_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55d7613d3bf2fcc696d292f47dad21361dbe8d255ab7757bc395abaae4fcacba", + "chksum_sha256": "b8cb07afb64bd3941ab053d5c5e1fc2eb116554692786ab3864f8367fbb3778e", + "format": 1 + }, + { + "name": "plugins/action/trustsec_sg_vn_mapping_bulk_create.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "74ff79ba7961ac4536852979f3fe570189c3cb33b70a408306581b6efce8e691", "format": 1 }, { "name": "plugins/action/node_deployment_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "58c048cec4d4f1f244137605d60a27c494aa193d3f13781a9fbddfda20a5db99", + "chksum_sha256": "6ee7a4e0b16503e6e2962e4a296fb8477bbec34a54ee01cde92f876784140597", "format": 1 }, { "name": "plugins/action/subscriber_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "16469a8610935851ae04741fd71adc955a98359756b03e0084d0d3f5e285fb0a", + "chksum_sha256": "bab5542d237a2a0b7e2525f7574fbdab0e4bfe2e3554fb22b912a86bec5bd4f6", "format": 1 }, { "name": "plugins/action/pxgrid_failures_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7962c2045e6210f5febb237640f7f01547a953fb11e6442a0291d5061239349", + "chksum_sha256": "75b17986f17d8fac536b37d6277fc63220384a8c95cab02ba16fc75ad4a6b9f9", "format": 1 }, { "name": "plugins/action/network_access_global_exception_rules_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52fb7c5f93a202647ac8b09439393e99a0442b4be074194ef2aa8d422df7a72e", + "chksum_sha256": "a681a7ab605be6b1367942e77fc045e636a273ad9d4733d4934f33e2779368a8", "format": 1 }, { "name": "plugins/action/device_administration_conditions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3278a1f4e11231dc4df15b6de5b54a1141008bf04802d9ddf965dd516fa0afd3", + "chksum_sha256": "a5783fa88fb75ff61997dc275f3bdd3add89df7300b472bb3e791bb41444443d", "format": 1 }, { "name": "plugins/action/pxgrid_security_group_acls_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f55ae36b728fddbb4152b495bb496725fd8f1e56aed353dfddca5d89b9dfac9e", + "chksum_sha256": "9ac05feba25e8e7689d07751923e569c1a80ec9431dee9cdfa28fdf8f92305cc", "format": 1 }, { "name": "plugins/action/guest_user_deny.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9341c445e56691abbee98190f112a79c938ced37ebb4c8ad5c9bc788d6c69f5f", + "chksum_sha256": "ad287a6bef105a2ef5d31316b31a90aa6f58e20b323e9ee1297534bede1e9d63", "format": 1 }, { "name": "plugins/action/admin_user_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf0d4570a1871a36dee60c90c9d152dc6012693df6efe8d367ead00ddd90e48d", + "chksum_sha256": "9b3dc97aad0a58b7c3159316507ea4221b98ae8262d4cf7814cb6ca972927a31", "format": 1 }, { "name": "plugins/action/endpoint_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "492e636e3f10e6a60399d5a9e714410bca46f9c13f7df1ed3870d4d7fdae44ff", + "chksum_sha256": "ebce91118e808fdced33e40054540822887d03235972b0facbae4d9ba384dc73", "format": 1 }, { "name": "plugins/action/threat_vulnerabilities_clear.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8235d926add067ecf8b6cab89fbace6e127bd4a1b01dd7c29700c06484abad06", + "chksum_sha256": "72dcd4b20d5fa4f2bf5bbe4cf986e192bd03997112c12cbe43776b85c549ac2b", "format": 1 }, { "name": "plugins/action/identity_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3fa884e91832b84541847850e92ff6760b3576fa53a432b331e4dcecb278ea86", + "chksum_sha256": "4a1faa49e121840e580095d18a2b0d8a5ff30265472229a7bedbf59c6ef0e8c5", + "format": 1 + }, + { + "name": "plugins/action/duo_mfa_testconnection.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f65d2bdb2ccf8f2ce89d50dd4ed1ec2cbb2ae13e82a373b0ead91d0aebae50a2", "format": 1 }, { "name": "plugins/action/network_access_dictionary_attribute_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d327a3b52d0235995e69c72af2c0deb12d46a116c8d89dc33bb2caa8e2298184", + "chksum_sha256": "2d4a57d5126356219e8ca1f0e413ecf361bd77f8b3dd4fe474b9fb84f4427706", "format": 1 }, { "name": "plugins/action/sxp_vpns_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2d57a86fdca49908d160a8da4a8a69e6b4173680111034b2772890880fab56c", + "chksum_sha256": "71263fe3b550fb446c6a80c3fec61f674dda8e4368a2f7aadd5a0c7d4fdff9d6", "format": 1 }, { "name": "plugins/action/network_access_conditions.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bdb109d68e3d2699c5991c4c8a090d81175010616ece761a5740e421be73ea13", + "chksum_sha256": "12264cfc5e755dbb71c9d896f910c1225cff5aa676ff2103ca8d63893e818b2e", + "format": 1 + }, + { + "name": "plugins/action/user_equipment_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eb4d0e25e806cc5e2c066b438326b65a7205c4105f87890752cb21e709df630a", "format": 1 }, { "name": "plugins/action/certificate_profile.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3740f776ae855110e2af32d04e91fff3709dfb8daa10e894dc5e28f75aad333c", + "chksum_sha256": "1d841388b7ef6be82f7c3fbbdab61d9bdd3b53dded4edc3cee25705b35c24975", "format": 1 }, { "name": "plugins/action/pxgrid_settings_auto_approve.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c8809c6072c47aed001af0490373c4c1cb665959ce6e0196b0e9aaee6e53990", + "chksum_sha256": "5027e7c607587d0959f40e813505bed43c62690a0099de22ca4c150d4fcf9f31", "format": 1 }, { "name": "plugins/action/guest_location_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6c34b166c24c0a9d24b0e638fb4f6987a8f774b15be50627cf106128cf74915", + "chksum_sha256": "7722fbce450a9c04c5fba37031864480939ea498656d374a34fdb6708012a0bb", "format": 1 }, { "name": "plugins/action/native_supplicant_profile_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8ffc1fa4ba22956fcd6dc57b7fbfb8019515e2c19c7f0a8fdd64880333ddfda", + "chksum_sha256": "3dc014c1b44792244514097d83626d31a6e293a4b50c4e8bcad5f0b5eb5f4fd8", "format": 1 }, { "name": "plugins/action/device_administration_dictionary_attributes_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ae4e89b4dcbf281fe5d377f6817fd1afca83e40bf6494a0caf2210fcf3ad6d2", + "chksum_sha256": "f1aa9759ad6c0e1b9a2c631ce922e67f519374188492c8d12e3031a8907af9e4", "format": 1 }, { "name": "plugins/action/network_access_conditions_for_authentication_rule_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd6fe7a8624953d683789be2ada4391c73d325c305530210e9161c4b8438e6fe", + "chksum_sha256": "f319ce7d8b51713456505b2c43ba909adb9b9544fec9e85df4878d067e3b5496", + "format": 1 + }, + { + "name": "plugins/action/ipsec_bulk.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "40121e3fb31fa04ca837123a8fb86cdfe1f59e6d220e845a2bd689448018aafe", "format": 1 }, { "name": "plugins/action/mnt_version_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8af439cf0c6a976e3b1cda03b2db9ce0c22c43925bbcad1133c9cfc15073aba", + "chksum_sha256": "e5c02e43a649432488b9dccd4d37298c8de5e5e97d9e12cbb3178eb2ab9de06a", "format": 1 }, { "name": "plugins/action/sponsor_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "891973ebfd794e3f4841c2f3ad38d5b4e2aef0e1d48fa2f1e1f76e8180f08eef", + "chksum_sha256": "a83bdf93b5ba5bf1903b3d0e5a874486349e1bd31a7c01200895bc0c555cb0b2", "format": 1 }, { "name": "plugins/action/device_administration_local_exception_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2dbdf71eddcf95352dc2964af1fd12c4557f7b40d43d639ab4608882d6050a9b", + "chksum_sha256": "0b1c39e2553b049af64e5e01240448d348a156fa28be692add0b15021944294c", "format": 1 }, { "name": "plugins/action/system_certificate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc4b608a73575c36fdaa8f1c7beedcc9dd121f1165e999acf4082e8b93e7dc18", + "chksum_sha256": "49941e9f3d87069c75b7bbcfd85ea647e23a2d00193aa2802f6bf2b2c38186b2", "format": 1 }, { "name": "plugins/action/pxgrid_bindings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3093776a619d92a1d7dc5a43eed1862b576a52255a20da943b28d9555dfafbb", + "chksum_sha256": "ab5dbdefe42bb4ac5f7e9c516625db2ccbf19c62871264153f0679960f9b4ecc", + "format": 1 + }, + { + "name": "plugins/action/ipsec_delete.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "af1cad8030c51882043f2f7c252f7ca74e18a36935cd8096a8bd337ea78826f9", "format": 1 }, { "name": "plugins/action/tacacs_profile.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "513312a04d04fce8c9b5bba32561b70a3762eaa488df80163f4596fccd5ea9a9", + "chksum_sha256": "85b7a3f145ff2a89b7b51096df4f293b471cb4be1c325bb442118c3b65a88014", + "format": 1 + }, + { + "name": "plugins/action/trustsec_nbar_app_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8c1531dcb4e4609977610bda033f05e8f60af0962f296017b1b4fd727e0239d5", "format": 1 }, { "name": "plugins/action/tacacs_server_sequence.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d0fada35eb399f88fbbce525a5db969e10e8c19f1057b6c0d9f80b2e82903b59", + "chksum_sha256": "6a7e15499bddb79cf8126bd7a3b2de5b625ff7e735dc369ead610a438a571e25", "format": 1 }, { "name": "plugins/action/network_access_global_exception_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "33690d3b6b97fd8bea631e080ed394827ebac5007ee7a4f0c57eaac4cb8b4310", + "chksum_sha256": "2cdb6222f63d019bc208af8bfe6508d8f95896222416c5185312f2afd83e5090", "format": 1 }, { "name": "plugins/action/mnt_session_profiler_count_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff290aa82f395e53dc32d479a40219dbda575545cc63312d40c6e6eab980e7b8", + "chksum_sha256": "658a8d44a3b93cfafb947c6b87dc49fca8b983f77bce894f97807338492e6fb7", + "format": 1 + }, + { + "name": "plugins/action/duo_mfa_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "71fb29724cc90453134274a7c21952318a26d119c89a12024fda69125c88a8fe", "format": 1 }, { "name": "plugins/action/external_radius_server_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "953cd1cdfa03ca919d8a730334e638c9337704107f9e3c0eaa1c689f27686dec", + "chksum_sha256": "e59a35fa1e1192a892c43fea891cf36de10c40cddc8cb995d3b691165e8ff204", + "format": 1 + }, + { + "name": "plugins/action/custom_attributes_rename.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f498342b060a57849d0f5e9475d5ae1402b75b1e5328ffaedecc4de9cac718b7", "format": 1 }, { "name": "plugins/action/session_service_node_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d0a5f020030946d7d60025b6e5e7629866019fdeaa14c62dfe8f8c92ed075438", + "chksum_sha256": "5145d72eb8d35c45d572b4d0a0c1415d45aafdc423da35ea556591991476562f", "format": 1 }, { "name": "plugins/action/network_access_global_exception_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2ad4f96a0e00267a93cf134a1e1606bc3446c245ca04ba650a83525b20e2820", + "chksum_sha256": "2655515cfb1e80d5a99909bbba5632a30afd58cf534a9080be5d29e60cf8b4c8", + "format": 1 + }, + { + "name": "plugins/action/user_equipment_subscriber_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "49d7d5506aff2c129b6d57bef5aceeb8ac786895f9f95bed95672c0e00e820b5", "format": 1 }, { "name": "plugins/action/sxp_local_bindings_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "50d9d9adcaad9725c9ed0c80f9faeca32b0cce45ca365255bae21d599af60685", + "chksum_sha256": "72e50a3738b5b7e9444483f6995c53589f9cc0e6b5f7eb866afd1d2f1a7acc28", "format": 1 }, { "name": "plugins/action/pxgrid_performances_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bd6e479403908fea8682b2ca17f98708fcda4fdce7d70380e9e5ed4e1f3c8416", + "chksum_sha256": "7f8b2f4a2f1ce2d4493a54c02c3a01c3d09ac0914455954c18297e616c86d350", "format": 1 }, { "name": "plugins/action/csr_generate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f3e097ef6b174ace0776ea2d2829c0cf9a0b318942e42d54d51d096b72ffc6d", + "chksum_sha256": "3613c6b5d139b8371db30e91cae630c8990fdfece6fb4101f61c65dae83b4f2c", + "format": 1 + }, + { + "name": "plugins/action/duo_identitysync_sync_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a913aeefaaa32c10c51568e902cc0bd08b720572c387a88e702c63aa0ea098c5", "format": 1 }, { "name": "plugins/action/dataconnect_settings_password.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "767abf8104ce3772b9657a8a4be56f87c97dc33355572e59587f828d29c01770", + "chksum_sha256": "459e452436d6f386d4f19d614518ee7adc11bee010020e70941ceb4c4936a821", "format": 1 }, { "name": "plugins/action/pan_ha_update.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ee7ca29e528c5de211e91462f0a9f019f3cc06e61cdcf3fd6691b481b9562d3", + "chksum_sha256": "4f1c3981d89fd64dd8170304609b97c39972ba6804175cad43a7dc03cc42448e", "format": 1 }, { "name": "plugins/action/mnt_session_by_username_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5015521c73fb5adc5bc8039744a55f37eef160209b828adec9b002f3d9a0211b", + "chksum_sha256": "e6e29aef1ca8807fde2c480bdeadf9f40429f4e67e0edc55bafd94ebe5310405", + "format": 1 + }, + { + "name": "plugins/action/duo_identity_sync_status.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "02b9bb18dd136f7fcff904d8c848b00eceb48f0df86dc8376d2df6680d938199", + "format": 1 + }, + { + "name": "plugins/action/duo_identity_sync.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "416ab59ccec77137d046bac48fd17ac40062bc252160d998792468f73f4aab9a", + "format": 1 + }, + { + "name": "plugins/action/ipsec_enable_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1163b19b6a1d420764586e5e99295210cb396b1b1ab578b5b84f6e8856453d77", "format": 1 }, { "name": "plugins/action/network_access_time_date_conditions.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd6181558a6ab7b5e026b3ec098cedea9ba109d00ecf61e8b400c3d147698963", + "chksum_sha256": "41644a2deeae783330076fc9ba34989e4d6426c214e6e8fc8915c8834b9c2431", "format": 1 }, { "name": "plugins/action/device_administration_time_date_conditions.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7adf3188769d12e91f1a0c0832d8acfe994fad2f6196a081507adcb52221ae7", + "chksum_sha256": "7d16ee38cba9332789edb2dd14f5b7522a1a97287cc8ddaab55ce906a6868510", "format": 1 }, { "name": "plugins/action/byod_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59e40e852f601c9b982254a41f3f0b739bb39a009f4544617537f0404c939a18", + "chksum_sha256": "b0c0c073fe84d690b8ece4b07c8cf6923e3a4af912e4e934d6f91db7419e931d", "format": 1 }, { "name": "plugins/action/node_services_interfaces_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be2f02885115277c3851b16a7a67bb149f7d16656c9cfb19daab5a7850a3b9f3", + "chksum_sha256": "d236d7ed4f580dd1763d4e6e46ef52cc83a1c04034c0d07c8adb50ceb665b6d2", "format": 1 }, { "name": "plugins/action/pxgrid_endpoints_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24897493a3bc5736d92adf6e19c0f4ddf9f533344e062e5a65aad03153f324bf", + "chksum_sha256": "505de7df53fc9bbabbe6138537daafe41f22f3392a1b315c89d8a8d935aabb4a", "format": 1 }, { "name": "plugins/action/portal_theme_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "919ddea9316dd1b4e7fab48a8473ec866e0fa23f02583b559554162f810a0c51", + "chksum_sha256": "9b3e2354dddb639abd160bcad0bf8c31c4fc080779a0252210a7c83cd0c5d7b8", "format": 1 }, { "name": "plugins/action/guest_user_approve.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a93dabf221402a365bd997f349a7da7133427e667f8ce8ca901b4918d9be2e5d", + "chksum_sha256": "b9e5cf77f37351e460f87af41f7bb14b8bf433e6ebc550841945ad7243e9116d", "format": 1 }, { "name": "plugins/action/pxgrid_session_for_recovery_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1bf34ecf38817436326271284760afed434a45c003e5e9aafe9577b2bbece62", + "chksum_sha256": "32b0172ee1547a0499eb32bf340b30f90b6acd28afcdf7d5b02a08c6bad0e95e", "format": 1 }, { "name": "plugins/action/licensing_registration_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "328de7bf06b1bd5a47ebc97cd0979790e588c1c0d41522ba8249a9bb9eb06d13", + "chksum_sha256": "9824913ac61f9f2260d4fd918728bcc18991360390e415b418eaf6cc583b03a7", + "format": 1 + }, + { + "name": "plugins/action/stop_replication_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "19a1187bc04148eef2488ac63c7818f9a58454aea783d791a9076b787e349bbd", + "format": 1 + }, + { + "name": "plugins/action/trustsec_sg_vn_mapping_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6b8626cbb36ac1f667d42db48eda1c331c1ad1afa03c9c3613cb4857a041a85e", "format": 1 }, { "name": "plugins/action/tacacs_server_sequence_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "008f9abdadca0fb0e8bbb1109a6f070042b8329d4005b54f64c22057107953f8", + "chksum_sha256": "0e315f3c362a23c22ee91a415598d057d950aef3c37e138172c558a9e7611bb2", "format": 1 }, { "name": "plugins/action/sg_mapping_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b23dc598542aea533c99eacce9a84756cafaf372c951daac5c82ef8450adae9c", + "chksum_sha256": "42f75e1dc8001f6c9feb6bf8853c9ef08c7a832589cea213205b0a8b10976885", "format": 1 }, { "name": "plugins/action/dataconnect_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54c74d4796a53e5dcf6ddee6510b309ce8e2037f91eb6aa2929c394de2192ee4", + "chksum_sha256": "135ad8464c5485784b121ba38ec27b21f206a7fa22deb745c7ab8342eaaa93ad", "format": 1 }, { "name": "plugins/action/system_certificate_import.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fbd926c55f5d8c54ae2ecf10741b5c9fef2fb8290d549cdb6c0ed85de6715410", + "chksum_sha256": "c1c146c93ab6812c946b046f29938b1e4e80631f1516be20dc0b1b1c9e321b21", "format": 1 }, { "name": "plugins/action/mnt_failure_reasons_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6f50536e256d0f4e8bb52ef61754c0dd9d1540f864743ffa60e781e2648b3b22", + "chksum_sha256": "87738b6b641b717d01af9fcd88edbb573118baf7488fc5969d6e343088de437a", "format": 1 }, { "name": "plugins/action/transport_gateway_settings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c294b21def715ca2ae632ce6fa0b543c8023d292031ac3c1c2f762f21b8a6795", + "chksum_sha256": "bb095e45a24a1356c82390710bd0ca16c1000723d22c385c6ef99b2adb81b8b7", "format": 1 }, { "name": "plugins/action/network_access_network_condition_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1645fc6a8c79d2ad5e105db65ffe4ecb9fcd51d01d7e0f46a80ade0da0ac0ec7", + "chksum_sha256": "fd6579a75bb2c494578796730af6582a66de23bf3202589f20759678d8fdfecb", "format": 1 }, { "name": "plugins/action/device_administration_authentication_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c93ef8fc9e50d073a8c5c6f47f6eae589b6e32462f27d950cdbf16928f953005", + "chksum_sha256": "d901cd1dd85ce95dee607e0b2937527596b63128b74ac88f35047f4ea540abeb", + "format": 1 + }, + { + "name": "plugins/action/user_equipment.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "658f7de30108028f421ad1d3d1d868d510d715b1f93c40c5276dc0a67a8a4ff7", + "format": 1 + }, + { + "name": "plugins/action/trustsec_sg_vn_mapping.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b5c35fedc2499b31c3a9ff40ecf551b5676d1b7ef3ea9847f3422c6d244ef47c", "format": 1 }, { "name": "plugins/action/backup_schedule_config_update.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "12aeba065f115bb76b595e14eddc280626a0a01e72ba4e2e36967da33ab7fbf7", + "chksum_sha256": "118f468450a435540ab33419e5752b26fe12685abc32a0a607a7f725e252dfa2", "format": 1 }, { "name": "plugins/action/network_access_authentication_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e7b8a6fa1ea028935242cd364d7f34397e63d5ad1eadacfd98bdfc4af61bc84", + "chksum_sha256": "942eae4a9089efdb004e53f7960eaebfb83e6605ad5453929047e16a55774bdd", "format": 1 }, { "name": "plugins/action/anc_endpoint_apply.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81bec6614af12f67e56d58d807857ee1b4889a38321a247fed7fc93f70e88b1b", + "chksum_sha256": "ede7c08b13c27370a3c17d827cb973efcc73b17ccb19c02f25242f274de91a3a", "format": 1 }, { "name": "plugins/action/endpoint_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f3977aa95a7424a7b43f346c90e2af3205df338391b9ce12b454077d5a43497", + "chksum_sha256": "5f47ff9b112ec0d673aa6bd6743ecd5922cb62d3d4538b66ba225e1221fbcd2f", "format": 1 }, { "name": "plugins/action/guest_type_email.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "236988cebd9fc7912726d597a884cd6e2c120a27c56e4845aefcdc0a4b3014c2", + "chksum_sha256": "5d736aeeb528b30bee803631be62f935d392059ba44e415a3319424922640de8", + "format": 1 + }, + { + "name": "plugins/action/duo_identity_sync_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "deaad4ac1d69a799c51965e2814c37bfba38d2bcbcff4c4cd254c2498163a08d", "format": 1 }, { "name": "plugins/action/rest_id_store.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3da2434a0c5bfe546c46cd039174d8377690efe131403da72df075285d98a2d9", + "chksum_sha256": "4937cca746d107f00c11f03bc119d4db14139708abf41eeeee4b7dd2dff73b2a", "format": 1 }, { "name": "plugins/action/licensing_registration_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9fde6f7ea5be674349cfdeb4ee6c002c71ffa777ccf50ebe26e881368a270dd5", + "chksum_sha256": "b71bcf6c47a5ecb972417588410624f790569185490a4f036bc7f4f283175e6b", "format": 1 }, { "name": "plugins/action/my_device_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "486f298e42a584033cd03593b32b24f27ad192e8963156c7c09198056517d9d9", + "chksum_sha256": "b2be21207cf94dcb81b9e102f45ca0ca0545bdfb5cc36a3d33ed204ff81be663", "format": 1 }, { "name": "plugins/action/network_access_authorization_rules_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6afbc0c55506af063a3a29ef7b2ab07640811656d02cbb77d843469e5a7a7b5d", + "chksum_sha256": "bdebaa94f2fb6578d5ddfaf7b2cce124c595fc570d9ac41d48db1f3ddae16d79", "format": 1 }, { "name": "plugins/action/pxgrid_egress_matrices_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c328babbe6b06d9bc574418235371cf56518d824e2bae38c57e9c9189ac125e", + "chksum_sha256": "69583b01cf001f1335d1fa1a242fc0d55784f8596e89aa60c39ef2706ef0e032", "format": 1 }, { "name": "plugins/action/active_directory_join_domain.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc11558964b4f2c0eb0e4a09d7667ea21234e1163aab3cac0f9e458ecfafe2b7", + "chksum_sha256": "6ce0a8e1af758625958be9555d26d60fd33a9480cb57c20461f055220a1cc041", "format": 1 }, { "name": "plugins/action/device_administration_conditions_for_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "62451a4dfff28303d406124c1682823258db90ce1f427ebccf019f6fb54a0d99", + "chksum_sha256": "07db1ee2d4c25e9efb9447de80c725bbe4587368ecf8c443d7ac90fc6e09dbe3", "format": 1 }, { "name": "plugins/action/mnt_session_reauthentication_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f921ac8a4958de2f80bcc09f2094fadc3ebfcafa264d6b72a8e5954667cd66ca", + "chksum_sha256": "a63a695162d8e6367a1384cf42c0c9f626102476095de501d21651b00496a67e", "format": 1 }, { "name": "plugins/action/support_bundle.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61aa1b6e7e2edb49ac7d1366c2cad08e9c6515c83d97366074b4aa398722881f", + "chksum_sha256": "a668e1d019e1ec843bb34b4b8d083027e55a3c09193ba94b426421233472655f", "format": 1 }, { "name": "plugins/action/device_administration_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54e51a7b9bd46c33ebc3d3c77ed0fa037fb354ef5c9c54df0811b34c1c16c760", + "chksum_sha256": "e0fc78f346a8d56b06dcd74e3795d04138bf691feb82c7e374f3298c71927af3", "format": 1 }, { "name": "plugins/action/subscriber.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "029e75c9c59feedc8a1dbb5bf26e453f5728b2100bc92587708ac63a40e57bbb", + "chksum_sha256": "f628bbd70db236c45167acb19e71e6e192eb3b9755de08d4eb4606f27464d420", "format": 1 }, { "name": "plugins/action/pxgrid_endpoints_by_os_type_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f5eb537d596fac3fb45f1934b4bfb46c05499216fac5f119315f479f4ed005c6", + "chksum_sha256": "4758580f7e5a64644b0ec991c711e94a1b3acbcfdbac4b65d800abfde6a14a2b", "format": 1 }, { "name": "plugins/action/egress_matrix_cell_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d07149ede80bcb613244811e3809d73c9ef5f3bfb7e5d77124195702aecc4881", + "chksum_sha256": "47f885327398492e8b59e0514efe822baf4e1399cf095c2261a76046b73b9850", + "format": 1 + }, + { + "name": "plugins/action/upgrade_stage_start_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "62b0a8930f7335d69a2761021b31346b6d14f7d18d90fbb938ba21a806b2f1a4", "format": 1 }, { "name": "plugins/action/node_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c18e0f918c1234a162ee6cffe9b6ddbd559f07fa1fbe8f3cb278270be66847f6", + "chksum_sha256": "03d5838168f4341e94a074c90d541fb76457eb17a1605a19b00315120f980520", + "format": 1 + }, + { + "name": "plugins/action/trustsec_vn_vlan_mapping_bulk_update.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c9a3313e12028defd1d8037421747a28a5f7f33b2583d278508a8067102362be", "format": 1 }, { "name": "plugins/action/licensing_smart_state_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85b7566a0d12c964623facff701541483b4e555feba429f9252c836b0f5f0dfc", + "chksum_sha256": "87852fb6d40c288685e5dda1f9cdb3a897e5aa139240e92e5c6b9509739f69bf", "format": 1 }, { "name": "plugins/action/sxp_connections_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef75c7b7cb3547f7bb3b4026b7cb0f91b69378bf75c480a7eb9f102134051e56", + "chksum_sha256": "0f4e8cd24b1806fb1339c8c02df52d846221437ed971c38d11f5b0147408e171", "format": 1 }, { @@ -963,1771 +1145,2051 @@ "name": "plugins/action/guest_user_sms.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5d01f13a01ae7498cc7f4b6fa838e502368322cec7683b0feb3238ef6cccb2e", + "chksum_sha256": "a9a04070720a5b532975c194c6aab7cd2ee6f85f59b2c7e875e7360858b59cee", "format": 1 }, { "name": "plugins/action/pxgrid_user_groups_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c12083f264581005534005b21c392dbdde0172c9e395bec849ee63dc3721550", + "chksum_sha256": "7de87e9be438b0b67ab5dbb346b62906961ebce69a228643e11e49a47cfebb2d", "format": 1 }, { "name": "plugins/action/pxgrid_profiles_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e30fb1331d33b09bbba2cdd041effabeb47ccf5071acd403a840676e9dc101ab", + "chksum_sha256": "8778b5c586a6b3740fe909c48909cd8d4469bade161061caa8d709df4ac2ec7f", + "format": 1 + }, + { + "name": "plugins/action/trustsec_vn_vlan_mapping_bulk_delete.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1968ba582863c958f17469a832661d0ddef0ac77d4f038c57936faab5978c0b8", "format": 1 }, { "name": "plugins/action/licensing_eval_license_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "137f8a9a10d2e8b99ca9fdc8259fd84d2028b90b10e6e2d8bb6b352b8124bac6", + "chksum_sha256": "1ed3dc405c9ee87e1a79815e9faa973007726f6f8137cb491c90f97b2481a6ce", "format": 1 }, { "name": "plugins/action/guest_user_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "77ca503988a06be7b97fec0316a8e146441a7b54ee1cddbf636f226e3b7cecb0", + "chksum_sha256": "4080f239c92775b9f7a009570df764ccc654ab2647bb0f03f48fa96ba85b89da", + "format": 1 + }, + { + "name": "plugins/action/endpoints_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c1eb7a0b67a086b26de08a772cbaa8996a022bf26002c36868ce7170d97cf736", "format": 1 }, { "name": "plugins/action/node_services_sxp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ced864beb7f33934d3f24afddff8bb59133f4b5d1ee451bd7b3808e7beee2f4d", + "chksum_sha256": "9c4d84e6debad53a1715cbe9296ee4da2651f302969dab83459d2cd96ae21b59", "format": 1 }, { "name": "plugins/action/sg_mapping_group_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96763934d6763639d6eda043dea775fa0cd20fa014806a651377a1b0a7c3febb", + "chksum_sha256": "aad7d35674765a27a9e7c6d428486ebb7067ebcbe48aa0ff807c3a5116cad3f4", + "format": 1 + }, + { + "name": "plugins/action/upgrade_proceed.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7bfc89066dd3553e09de1cebdea398ea7c127db8c065a809261e8f1e90100b53", "format": 1 }, { "name": "plugins/action/network_access_conditions_for_authorization_rule_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b800eded78302c6a06bc05e2a809c6f12100019368d5afa88c57a399e1bbe4a0", + "chksum_sha256": "4dd486cd8cd95f07f3cbbdb29fc88f2a67a6ac104da660b300203aff773f428c", "format": 1 }, { "name": "plugins/action/network_access_identity_stores_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "377bb02c2049a6041aa3799a19ac58e1cb78af59596b2f3b9655a3599ab766e5", + "chksum_sha256": "74943440409ab2b0405a7bdee42d58576528d3b52761c8853608ac04f9f2178f", "format": 1 }, { "name": "plugins/action/pxgrid_account_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0473093397a4c16cfec4c63349dfee71b640b24e850a146e67d5060d292c20e1", + "chksum_sha256": "abb8b038fe8fa42ea0c3249f77435535619da31321cb9fb6cad2c5652a94d3cc", "format": 1 }, { "name": "plugins/action/pxgrid_access_secret.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec11c17ea9a18f7d4cc7ad14e0e9c610ffe1f65da35b2b749b1cc42858664014", + "chksum_sha256": "cc82a60bd082d23542db0a261c6f7d29f23c6729bb3997c833eb1564b8ca49b7", "format": 1 }, { "name": "plugins/action/personas_check_standalone.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7ac40aebabdc8ad0861b2fd777eb42d02d46f86d2bcc6c11555c430c638a3c5", + "chksum_sha256": "648402929285735fe1c76f366bca26b040f7f7652d641061a00ecd594e873d96", "format": 1 }, { "name": "plugins/action/device_administration_authentication_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4dfaeb4ab84310cd5b4bb002ec4238247262fed038d4c4b5b8dcec53182f9eae", + "chksum_sha256": "addfddb289ae1e8540c8afb30c3c23c9aaf3f2141317dbcf6c89c20e609470a1", "format": 1 }, { "name": "plugins/action/active_directory_is_user_member_of_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ad5b9aac210f4f2a63a336bcdceb77d9dadfa369096e1afb982ad18f7688d181", + "chksum_sha256": "67d55446e1ab6e467bb0b2349052a000be1108d393aeb72d93d3121bf6e2b366", "format": 1 }, { "name": "plugins/action/sms_provider_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6604538f4e954ee42b51cba53bbdee8292f7dcce1287ec95ebc34dc55c65714", + "chksum_sha256": "986e95384a1b500e8d851553593d14c22eab2ca4b14c6c5030bef8b4544fe868", "format": 1 }, { "name": "plugins/action/sxp_local_bindings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3a1c1c6a03b8a85a8d2a03c825e97a85093bc023f222e122223db3572881734", + "chksum_sha256": "55e8a07292ca09f5cbdf33c724b3c88aa6ce4d043480c18a902c982b657a05b3", "format": 1 }, { "name": "plugins/action/aci_test_connectivity.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "65be27b52efa48cbdcce9102991394c06e1bb96416262228084045c0e9550f4f", + "chksum_sha256": "21f4106f8e580fc5b28c7816ae4a235e569c488b821a20ac6be2e4d1eed76214", + "format": 1 + }, + { + "name": "plugins/action/upgrade_proceed_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "009296d074e18f962aed9f6c1164568ac482cea93be39371130d0573bddaa4b7", "format": 1 }, { "name": "plugins/action/device_administration_identity_stores_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db6b95a00401320d47f853d7d6f736a98dca9d63a408dbe062bff492d0b67932", + "chksum_sha256": "58ce0eb794a10e5f269ce6a028cdd6aac9c761ad2d27fe2b01ca6fa55f13ff35", "format": 1 }, { "name": "plugins/action/id_store_sequence.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "51f0a679ed4baa143507d3fecd75156800061106d552b21e2480fb317d479cb1", + "chksum_sha256": "208d2fefe6f32cd3a44217bc8995f19083704feb6c699ca445beb153df3a3e57", "format": 1 }, { "name": "plugins/action/sg_acl_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4189580510d2efe03ed31822f9e374c8da18cae6dd556f8d928865e89a8cd346", + "chksum_sha256": "1e798dd9aabe1cfa55bac7e2aade7937d6bf0afa134a40268fd60a45d9329d55", "format": 1 }, { "name": "plugins/action/pxgrid_egress_policies_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "06aed10db4eea3997a4cbc3bb144d19ef3791ca06997268518037a75367421f0", + "chksum_sha256": "3191020f82ce67ad277c7b6b52afaa33b91c0ec045e289255af332b569546ac0", "format": 1 }, { "name": "plugins/action/anc_endpoint_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97bc52a139f913d6aa117f719bd2d4bcbe6e7ad2b18ced3a2394c7712a6cd2eb", + "chksum_sha256": "7cbcf540883eacb0c870644890bc93f27ee8a3daba74b295a028052d6fb8c6d3", "format": 1 }, { "name": "plugins/action/guest_user_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e658c24410a6a0b9c412f69da7491047caadf7c5ac7c89bdff162fb6699adc54", + "chksum_sha256": "fdd828f6a53af0da89e2163738635ba621e2f0f85d1933c1c95e1b24c851fa9e", + "format": 1 + }, + { + "name": "plugins/action/trustsec_vn_vlan_mapping.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ec0c4de4fc33b86f10c9064dc67772b0253e43e590551675e490d6e8cae7f240", + "format": 1 + }, + { + "name": "plugins/action/trustsec_vn_vlan_mapping_bulk_create.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5a0708ee8060548538a92445cf68155918fe0dbfbb8692378a1647732b10ba30", "format": 1 }, { "name": "plugins/action/sponsor_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6f12ca65af1120e9637bb107e9a075a55b915e11b352f9faf682b47ec22b43c", + "chksum_sha256": "7f71b8ce19994b57822f6f1cc96c29cabd9c1b4a4ab84d494c5b900321305477", "format": 1 }, { "name": "plugins/action/system_certificate_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a86f6e4c18d57b01d705f6e93dca4b640e30d9255589e4f53cbf629328a09f9f", + "chksum_sha256": "6b94bce023f557413eb8c5bf4c2ace8313ef8b30de1fa9cada49f66c6f4375f4", "format": 1 }, { "name": "plugins/action/network_access_dictionary_attributes_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bc87569f66316141c43c549a768e4cb64b5235197b297d9407acadff604ec7a4", + "chksum_sha256": "36b77071d7941ab0cdad7d30aef544fb09ed8346e15f239e6bc2e5505330bc8b", "format": 1 }, { "name": "plugins/action/px_grid_node_approve.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4691ab3f8b78cc6f03511232876dabce7890a98b144dbee8c405b6081cc76785", + "chksum_sha256": "43fabd816b62ef1cc8861ab0c6f2833ac8b9c14592378311f754706633192a67", "format": 1 }, { "name": "plugins/action/device_administration_global_exception_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "71f7f337b4f2e125fcadcb5edb8ba618a8e121ccf35abd7e8813cda903073205", + "chksum_sha256": "a02b6de4b11bc5d003a7dfaa40c610eb349afed1df4df8b4ffebc5e4cfa58100", "format": 1 }, { "name": "plugins/action/sg_acl_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f115fdf62481647f4eeceed207e437fae9327c42c72051f4a564d00b3e8d64e9", + "chksum_sha256": "fe71751cb69e064ef6ce445f69cc1c51a6cabae5218072a8ae3e9b8019ed5466", "format": 1 }, { "name": "plugins/action/hotpatch_install.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "841a5f1484910ab249e2d67a0327931bf83d40cb27aadc4e7883fb6d1b558eaf", + "chksum_sha256": "d5c60e4b9971e65f517f0f178b6e219b4b7fe3832fb01363db4cb77f51fdda74", "format": 1 }, { "name": "plugins/action/active_directory_user_groups_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "32f96d8ffe0cfdc346f6b21416fd17cceef2e826934e20630f7d6ad97725f15d", + "chksum_sha256": "aaaad9669db6a42a656fe15e87006b8db335a1e930bbe3505cdec10bd73beff4", "format": 1 }, { "name": "plugins/action/pxgrid_node_delete.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f2f5ad212cbaa6145289d836b0cf4c9c550ae2945526a744785deb32b0ed3bde", + "chksum_sha256": "2cd5eece8549d0bf1428c8ae8d6ed948f5a03cfcb9e2e97c58eb9a7edd028486", "format": 1 }, { "name": "plugins/action/personas_register_node.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08ebf1dcb40cadfe6b938a7622443bca291a46a5b3bbc7e2c8be1566dc63a0e7", + "chksum_sha256": "f0d104340c2f26f68794410613ed9877477a3ee5b366ebfe77f21d9aaa46e2e4", + "format": 1 + }, + { + "name": "plugins/action/trustsec_vn.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "aa32b01dac813559b6365d95aad350196f466e3a737bd503a7958149b49573cc", "format": 1 }, { "name": "plugins/action/backup_last_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2cf3b261fce8a2feee6636bae3d3a9d4a5ddede52754001aaad55de0a161f526", + "chksum_sha256": "e79188112d82ca5e120670d6f77b89e9c337d42a065f1e7fbf867f5d035dfab7", "format": 1 }, { "name": "plugins/action/deployment_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea06557d917f1d5b20eaccf8430bf164fb025f785049042854205811539d3d2e", + "chksum_sha256": "51be649203f8669decac7aabb114468d09abbd5088382b6e6d57652b89e25d02", "format": 1 }, { "name": "plugins/action/sponsor_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d2dc4f5e84b3b4e897fc70bde7ccfca13055191a39d8f66c00fcdff5da6b91ea", + "chksum_sha256": "a4b8be4ec35e3fee83eee4814b8c90bef11752d2a9abbe0fb34710eb9fe17225", + "format": 1 + }, + { + "name": "plugins/action/duo_identity_sync_cancel_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "517b8d935b6c7dd3e6188b5d99fbd7817dcba4ca427ed7666d6647564a9bd4b2", "format": 1 }, { "name": "plugins/action/csr_delete.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "07c019bced417d3dbb0a491d5f21a23b69a41a0078c672e871e51a72eb24d0eb", + "chksum_sha256": "af84064d676e0a13624c5c5a2214fe4e2c5e6fce5c1fb009c01b4bad295ddb58", "format": 1 }, { "name": "plugins/action/personas_promote_primary.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "281be6dd4a9d2ef171ad7451f32e782b6a9682588244a5fd9c870ad15d3f2b80", + "chksum_sha256": "e1bcee6c4e5e6820e27e11f848380138fcb6ae23ef81c5d43175d999b822015a", + "format": 1 + }, + { + "name": "plugins/action/ipsec.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1019bb6c2b251598f0bf735f586a435723664dcf7cb3929f26d8d4a2754b5c86", "format": 1 }, { "name": "plugins/action/pxgrid_session_by_ip_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b6fd8d5212751802f62b7bc385be8c971ebeec299919368184382b2cce8e6b5", + "chksum_sha256": "7badadf5fbf2c85d5c4faf43bf0798f515b67616ae6f8e9068ac328b2730ef41", "format": 1 }, { "name": "plugins/action/node_replication_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b14f04fc660905c91d132e4893292394f10c04c8cf9aaa8bcc1af06ef9db4c55", + "chksum_sha256": "24038dd7603a167ad22cbf14e4da6bfcbdcd8611619026ddbc590d2eac1d06b1", "format": 1 }, { "name": "plugins/action/egress_matrix_cell_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97e517bc059ba29cb31b96a35970bd2ebc79e2df113118f05f80e75086c86d9e", + "chksum_sha256": "1ef155efe5fd75c40688536a8407ee2929371a119e3be48848e7e494025dd0b5", "format": 1 }, { "name": "plugins/action/guest_smtp_notification_settings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3aaafebb630ff8b6039da968413e8e3a218965d30740a62e25ad14db9d6a6063", + "chksum_sha256": "8bb41eecf7408831483247d4a62d9ba3fcb9447026c19eb09efb5197d2966c91", "format": 1 }, { "name": "plugins/action/node_standalone_to_primary.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "883c2bea469a9a8ee73608d94aa033e31e154704347caac07130b04b9483dd7d", + "chksum_sha256": "97fae9ea0d32b489cd92f1e22a0802c0611b9d47133d4e09b00b5ab755cb23bb", "format": 1 }, { "name": "plugins/action/endpoint_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f2b2e8da191845dfd03ac61e1bb249c8db96a51661fa58c9b7ad5da71a2b4df1", + "chksum_sha256": "7888102dc8f7c6c625efd7844154e63814549b4f24f6c644a25370c229006b2a", "format": 1 }, { "name": "plugins/action/sg_mapping_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4fe01960c8bd83eb0f06c81dd5f447374fc61ad4cd6d48a721575d0693c5adb0", + "chksum_sha256": "0b40e296d6bde384cda1fb2796c8f48dfb277d16371dd0e321bc19d4426f536a", "format": 1 }, { "name": "plugins/action/egress_matrix_cell_set_all_status.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "882027e49f14f3731ddd1ee4368fe1bf8d43185c018f7b4029c14526d13f6504", + "chksum_sha256": "833be63abcd92dd09b697dd05473d58099b9d7a29dae5d05061ecfccc4144596", "format": 1 }, { "name": "plugins/action/pxgrid_node_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "527031a4bb8825baafb40a2316c6f5667e2938d46c98fcda310666822b8b59f5", + "chksum_sha256": "7caa0ca7d19c6f6afdbd71b271b9c0a03b3fd963df482e6b8b90fc421cd40c45", "format": 1 }, { "name": "plugins/action/sg_to_vn_to_vlan_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "707e4e97807c6ad12c5025c3ec05fd1380f68a8439cf147b37e8556790ea05ab", + "chksum_sha256": "c5bcabcf3f1ee6e7afde1f1b1df57cb9ede100962e90d715e2530926b4fba28c", "format": 1 }, { "name": "plugins/action/trusted_certificate_import.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c24c7c5d3c6e64ae2fa866b2dba44c919b3122296032b4a08bcab99f34cbc15e", + "chksum_sha256": "3a527f6dc0dc792b35d5cee2bf9d10be14d4c9567ae5a425e1d5f437bd852161", "format": 1 }, { "name": "plugins/action/network_access_network_condition.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "906dda5e785d909b4a00a8d1691be6d4e60e132dd89f14a8a2502d62777c2f6a", + "chksum_sha256": "1ec607570f8179d31c5a87e7478d1904c1538a3a7654de26fd6783826c01ed00", "format": 1 }, { "name": "plugins/action/device_administration_authorization_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e83b48036a3a794e48993214700fb9ec5946ead5e127b523a403d13cffa8093d", + "chksum_sha256": "ffa716aec1ff60059d5e75e9ee891a402ca6cf59199e5690e56a77a0048b162b", "format": 1 }, { "name": "plugins/action/backup_schedule_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9771efa4438fc058f6ca3026e7565e4e3ebb7b35ca83d0e8186f4c9fdf40e8c9", + "chksum_sha256": "d1a66c9e1ed6a3fc65e1e63b94a90405ebc621b2d69b5a303c65943cb31bbacd", "format": 1 }, { "name": "plugins/action/pxgrid_session_by_mac_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8586b78a6585d526d3d660592c98f6f4c53201c047a040396dd07f0f4bf49860", + "chksum_sha256": "a4438204bf65d872dde9cbfc4fb671f44e827be4b0bedd6c296c258777bce17a", "format": 1 }, { "name": "plugins/action/network_access_local_exception_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21c2f6057be6e3e1da5195f37d7fc15898ad043baf50893163c58d406c2bf617", + "chksum_sha256": "b9d3f568b45babc52c2aac233e7a3f6acf5647252932aa0dbf179058452836cb", "format": 1 }, { "name": "plugins/action/sg_mapping_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0428b5b353f7c58c7d41f8051ff0bc836cf9888be9034084c3be2e61d4b37115", + "chksum_sha256": "35490e5f76dd72b112b0e4bdaeb95bfee8d93b2c7ec80764d0aad0f962e93276", "format": 1 }, { "name": "plugins/action/network_access_security_groups_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6d5e12d17071818146bacbab7acd3ef3cb5172c949ebbeb36e1553d826ec60f6", + "chksum_sha256": "f04850aa85790a2ae4131164f81cc60548f62af9ea958a2996ebcbd6a37f41c1", "format": 1 }, { "name": "plugins/action/device_administration_global_exception_rules_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0add95d4a29e2e7dbee7367adfd57a3832962261ef5941b59c239938942eced0", + "chksum_sha256": "0784b8498f68672218c1bef5214bebea3949e1311469c3d6d8747fa799f1354a", "format": 1 }, { "name": "plugins/action/device_administration_network_conditions.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7be2ed7ba81700afed9ebd90249dec20fb76324623b6fa695a619e8c92283995", + "chksum_sha256": "74870b8df8fc343cdb26687e04d0947a1dafecefef185715a587119f2cebf513", "format": 1 }, { "name": "plugins/action/network_access_dictionary.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "221b6b7ea9290a11dd2725fb9bb9812e83b676ded45fe30a7d02d084d108f0a2", + "chksum_sha256": "266672eebdb36359f80fa15229b428186947188814572996414b090dc601202f", "format": 1 }, { "name": "plugins/action/sponsored_guest_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6777bb2489b7264db145ebca7e71faea0bbb38c89fc8f7b932849a9923e2e1fb", + "chksum_sha256": "082b7102bfa4d0e0155f39bb04e5731947630cc76b6098bf09dacca392c2ee0b", "format": 1 }, { "name": "plugins/action/node_group_node_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ba71e78e750e8d7a418da1d02aa6ebab1db9b8e59d4b7eba3e8c4c96ad6ea98", + "chksum_sha256": "7151f2931deb33b8d6853969402c7c8a7ebf6dd4091d83593d02f9a4bd918b62", "format": 1 }, { "name": "plugins/action/sg_mapping_group_deploy_all.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "540642fb0b7ba1f346b6fad72b7b59560d74bb6eb30a277956937539544f19c5", + "chksum_sha256": "846060e545a0ca748c0595471f6be952cba61fda60feec8f95c16ba587527ec2", "format": 1 }, { "name": "plugins/action/mnt_session_disconnect_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc6285c85c08a28fe20a13e5dedb554f1348a4b7ab8ba757b69731b5e8e38c6c", + "chksum_sha256": "ea98b6dbf3f3062f067566d18532afb77a584551e8a10b857916f36cfb154a04", + "format": 1 + }, + { + "name": "plugins/action/px_grid_direct_test_connector.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fdef71a2b4f2dd3e2be341c047a0290781981e5d8968e6f9c81bec1cfd059314", "format": 1 }, { "name": "plugins/action/mnt_session_by_mac_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9aeb743e09eed3a6581247a9b833173d98496657ec4c94d940581b26ced16073", + "chksum_sha256": "7aee5b2a5f243d908fa461fcbb9af1779fd5e84b3dc309962b62bf64ffd2a1f3", "format": 1 }, { "name": "plugins/action/aci_settings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86a3e778c6ec172ca6c168a8ed2ccf82b52e799d0f8f70362497e1ebb91a46d7", + "chksum_sha256": "be0f9765feb99857f77b3040ee4948c53244fcd34d8eac37995c6169af6323e0", "format": 1 }, { "name": "plugins/action/network_access_dictionary_attribute.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "27b81df2fae2aa6b55748d830277a32448407f876ae775bb5990a4024d00c0f2", + "chksum_sha256": "cfee13f4c9c74ad7d03735660b146957fbfa8bc7c1f834d8256653289c80166c", "format": 1 }, { "name": "plugins/action/node_sync.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cfc559303f3c3fb60705520b7addf8d7d3e071b495d0061bb363ec1b52cb499c", + "chksum_sha256": "ad9091f497a7025793779008c8fd5ad9d07349dfe7aa70f54b2bd242631bdb08", "format": 1 }, { "name": "plugins/action/endpoint_get_rejected_endpoints_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "256e6b53e158da430e1431d91d1246325841ee051f8031ab5400da13918d0895", + "chksum_sha256": "edf3988f5dbdd14c543534432161170a8d679686e0c147b3597741ec89e3d15e", "format": 1 }, { "name": "plugins/action/anc_endpoint_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91e3840214cdf1060d68ff1b8d1fa7161ad9cf069fdb8e2db66a7c6ece0724d0", + "chksum_sha256": "f622fe386ac75330949a9b906d59a33900615385290e0634702242057ecee730", "format": 1 }, { "name": "plugins/action/licensing_feature_to_tier_mapping_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "572c20cf0d0344c229782242746ce74395c1a7da4605d64710a2e5a6b67f621f", + "chksum_sha256": "54b1d130d09dec22e36bbfdb16eab725c8a6cfd370ddf5045d715874974b5e00", "format": 1 }, { "name": "plugins/action/mnt_session_by_nas_ip_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93c3de9ea05824196621a61171799460b5421c9665804b510ca57ca18a40848a", + "chksum_sha256": "889bef482098ac03c5862c560debd02df2b0f70e9dab2d55cace1d79cc68affb", "format": 1 }, { "name": "plugins/action/node_promotion.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c63bf3f57c7b454f0e5402b10242bf9d43c97bc3037acc17d453af951588399", + "chksum_sha256": "78eb8e20158d00a5943bbcab095270188e92692bfacb20f7ffe5502cc03208aa", "format": 1 }, { "name": "plugins/action/tacacs_command_sets.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "72af3001ae07c29fcd5047dacab10b951adec4671ed8f7c05a66a3bd2f5357fc", + "chksum_sha256": "f45ca03694a51b313cbf650815e93ecdf10eea0ac34974f531e4f6444b036838", "format": 1 }, { "name": "plugins/action/pxgrid_service_register.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4022f3eb7ba4072470203b32335368029258b9212232a7c1b6475a20162d6513", + "chksum_sha256": "e374edeeb197fe9cc271ef4b254adcd02eab120f27bcebe781cc9018b4157b28", "format": 1 }, { "name": "plugins/action/guest_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2923717e24bb2a7ce68f57b9ec4ca27fe7970828ebd1f574198ac360c5ac9a60", + "chksum_sha256": "be161be43110b9582f94d566c81b956057a98c61300328bed2778e694bd1c865", "format": 1 }, { "name": "plugins/action/network_device_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e76bb2bdd57a5eecfe5e474893ed9779cc75701730ebc535c7a5dcefff64a7c", + "chksum_sha256": "4ab1234be64034288363f3c759c4477a16b64d45739f392b46934b583749036e", "format": 1 }, { "name": "plugins/action/tacacs_external_servers.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29a052208e91750d6af08c02ec9e99adf443b67483594476ca8f6dfce7bed187", + "chksum_sha256": "5e489be45ed467ed3b154f147d7be91f6fcf52a4fd41ec54d7eb5a65a766dd83", "format": 1 }, { "name": "plugins/action/proxy_connection_settings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f7cbf945362417e0c925734beee7fb9eac9b95dd769bb12b259542c9e45032a", + "chksum_sha256": "2413821585156bbed02be9d53ebca97d12341ab455712d9373264d49d885de20", "format": 1 }, { "name": "plugins/action/pan_ha.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f53de4b2401c1419684a71ac3260e3ee4c281a36440241b282dfb92c25db9d4e", + "chksum_sha256": "a9f8f280286ef85d7d12ca7fd61a9051ecaa9da11f4854b8fff0860b6177d699", "format": 1 }, { "name": "plugins/action/system_certificate_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a38c7b7300b2d94976e6f08981a35a176ebd6d88720f50f68957f2d02b28470", + "chksum_sha256": "789eb23fcd2058b31bd565e0a5b8768c00f7ff7fcbf1034c4a0be4a67aa6e5dd", "format": 1 }, { "name": "plugins/action/telemetry_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a279a32f12c8c0b3cbd275117680db81d9a840da39d04ab4007c7392a27d2a45", + "chksum_sha256": "c2768a2651548fa283b2c69a6f4600eba030ab2c85f4b937775e1168cefeb441", + "format": 1 + }, + { + "name": "plugins/action/endpoints_device_type_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1911ba757a9a82f4c09239d50ea88ac29e8df970743541a10f501e2b4d2148da", "format": 1 }, { "name": "plugins/action/sg_mapping_deploy_all.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2968da05a6c25bfd6412f3f8f68b8f60b41339c778d2442c07d79c302363d84", + "chksum_sha256": "3f53602bbe6f3642937824a7883f1a546f2c8cfbf26e5c0f3f688e18dac8c72a", "format": 1 }, { "name": "plugins/action/endpoint.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "671c3a0bc9391b9e07fa36e0246643c6274cac6c46ff5ffdc5947ffbcff717dd", + "chksum_sha256": "7efd23867a5ec8cf7a923c4c591f940e92460dd2d6a1ead06ce7afb4c95d18a9", "format": 1 }, { "name": "plugins/action/egress_matrix_cell_clear_all.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff35387092b1c28f8aabc8a7aad21fc03c17b1132675f52b440d35547bc22457", + "chksum_sha256": "550692b395681cab66c388ce1878439b022b80d12ade34027af767e52911face", "format": 1 }, { "name": "plugins/action/endpoint_deregister.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb168d3628a38dadd7c34752450a11343d1e2488c6a2fa4963a4fefd3d8ce770", + "chksum_sha256": "894f7d877ecbda2cf62aa444c94b86ec1317449e6c587749509d553dfa883fe2", + "format": 1 + }, + { + "name": "plugins/action/trustsec_vn_bulk_create.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "964b4fca7e52904a55f72a3ac0b9fc22814a202a1518e83dce36c81157289530", "format": 1 }, { "name": "plugins/action/node_group_node_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "32bdea5ee6789f79786936dd973f6bceca43122272e6ba246d46b8b8ec96125e", + "chksum_sha256": "c73a6b5ef975c5bfcd9393577d8b2add6f35d6d90d8ee56f344125cae1073388", "format": 1 }, { "name": "plugins/action/system_config_version_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "751f59d10e5184e464e07f5482133544d0494e43f1dc37b3f2ab5586d11826f3", + "chksum_sha256": "709dc39b62342d8155e54dc44638fa7e48e6fec53abed656d8d7bfdb03438bec", "format": 1 }, { "name": "plugins/action/downloadable_acl.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21e9ee7a41080aba2a719ee7df891e3bdecdbf1e9cf0b96466d8084fd3e4e2a7", + "chksum_sha256": "4f2a68d7c0045088838b04a870c3d2736e24f0776563c4f323cbbafea32b66a8", + "format": 1 + }, + { + "name": "plugins/action/ipsec_certificates_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b4d525786a9343640ed0dfbadbe8e4613d0a3c156fe1af1e62b4edfaef060b08", "format": 1 }, { "name": "plugins/action/csr_generate_intermediate_ca.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d2834b5da282b6c627a5b0a5e5569bb5902f087009ebe36d19326ca3e29105e3", + "chksum_sha256": "ce41c338f8df2978fb147f1ccb272ecdde30a4b01ec5ca54d348c6801add21c5", "format": 1 }, { "name": "plugins/action/guest_ssid_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d02b89280bbe686a2d1995edc826e76816c9b676e94ec089d19d45964ef03cef", + "chksum_sha256": "430a8adb9ae77525f652c8b7a5aeb4a7767b9b4398afd504ff82cb7ebe010195", "format": 1 }, { "name": "plugins/action/anc_endpoint_clear.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21e22bdc140a04d5b6b3b56a424cf1f78dadebf29ecb02a1d3d01f967d97492e", + "chksum_sha256": "d653c2067ef9c629d072f61f3975ee297085129aa3757372cb56356f68fac537", "format": 1 }, { "name": "plugins/action/sxp_connections_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "50af0f8cc0f2f368de1a8f9fa6ef95c28a8b442ca469407e3945ecea41350dd6", + "chksum_sha256": "8d89546d1230b19b5f365bc0eb6f1a66949c78c90302efc777625c9f7e1a8e2e", "format": 1 }, { "name": "plugins/action/filter_policy_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "054512d1e2c3116378ec6d55ceaa16ad3d8305cb73e3e98c799892fd2f16efae", + "chksum_sha256": "1e5e48119c665d1a1879d01d224ef99d0337c38dffc4495b427159b6c2eb57af", "format": 1 }, { "name": "plugins/action/px_grid_node_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "527031a4bb8825baafb40a2316c6f5667e2938d46c98fcda310666822b8b59f5", + "chksum_sha256": "7caa0ca7d19c6f6afdbd71b271b9c0a03b3fd963df482e6b8b90fc421cd40c45", + "format": 1 + }, + { + "name": "plugins/action/endpoints_task.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e4661a2121077cf3631520a1d4ca44a9b3ebb60e4b95c52acbed9dc897994edc", + "format": 1 + }, + { + "name": "plugins/action/ipsec_delete_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1163b19b6a1d420764586e5e99295210cb396b1b1ab578b5b84f6e8856453d77", "format": 1 }, { "name": "plugins/action/internal_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c181385b8c11a611dce9e0cd1f3cb26fa6955bc74da4ee2f2fb902367cc24be", + "chksum_sha256": "602efb33dba4f1c2596c3b132dd2c6bc375a03632a608ea4b18e6cd31030416d", "format": 1 }, { "name": "plugins/action/licensing_tier_state_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9759fcd1edcc8f97d7e6987243849d95242925574316649c8551437420946298", + "chksum_sha256": "c7b9c080ca42840e4daac6e218b45a6c0adaf5368ba7e6d06fa0d80a5bd94714", "format": 1 }, { "name": "plugins/action/anc_policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff8a7ad7ac28d1fb1aead5e2d2334a621b24ed1183443c6030acd49f815a564c", + "chksum_sha256": "c94e7b4441b4efb10c0b78f1af87a4ed41ce0c37be08b72e5bea2883fb5690d2", "format": 1 }, { "name": "plugins/action/device_administration_global_exception_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6654d9a39f8295e29229129b85ba927cbf0bd1331f3f6b027579526bab6e110", + "chksum_sha256": "806ff118c4b21e0009ed7c10dc686ade2b47e7963dad25b95828d1b6c344bd58", "format": 1 }, { "name": "plugins/action/sgt_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d84f6adb500c00b89adbd2801048de7e584bb5cc5ad03d551940a5982d0e79b4", + "chksum_sha256": "bea452d87bc9955d77db8a477ef9d49ef8dff048c9547f5883a6e49a3388255e", "format": 1 }, { "name": "plugins/action/certificate_profile_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "821c9bd702a2972a8e5f6f232a86042488a7d94a8ea51d2425bec20ee4dbd2f4", + "chksum_sha256": "07eface0af9e271e3398fe3b4e03e9e631dc5b3a2ed02805d43946610bad8297", "format": 1 }, { "name": "plugins/action/sg_acl_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b87b20c459bc5ea2fa0e632b451b46381fe9e82a4156d15a699c3a28023b2c9", + "chksum_sha256": "50ddc0816d674f4b599a0106a11bfb53bd2b4e3b7fdca2f885e3573a2febb78b", "format": 1 }, { "name": "plugins/action/patch_rollback.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae64d351be77d3212111a4f3f602f9b24b347a92ce1409b4e38ed828abd44f4e", + "chksum_sha256": "aeb3bf41778083e58ac00ef86acc222ae4e0d76bffcdc878224ea74eb1f5a89b", "format": 1 }, { "name": "plugins/action/anc_policy_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21aaf26f23973dfd268ab68189ce989b777310190a2ff92f1d1fadcd24270a21", + "chksum_sha256": "76daeaeb31e04df63e02160143877b2d1922a3cb1827df7fbb75ecd7c640463e", "format": 1 }, { "name": "plugins/action/dataconnect_settings_password_expiry.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a322b5dda55d9f723529862f74efc35aa7a949f84a301827f3e6da8ffe6c441", + "chksum_sha256": "278ea5e39acd56d384d4f57c540150cdd937280267cbcdd0414722010b5aedf7", "format": 1 }, { "name": "plugins/action/pxgrid_node_approve.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4691ab3f8b78cc6f03511232876dabce7890a98b144dbee8c405b6081cc76785", + "chksum_sha256": "43fabd816b62ef1cc8861ab0c6f2833ac8b9c14592378311f754706633192a67", "format": 1 }, { "name": "plugins/action/network_access_dictionary_attributes_authorization_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2dd190928a558250c182e570a30b0d9e5f30d966e1737be5a79c04862a4b91f8", - "format": 1 - }, - { - "name": "plugins/action/connector_config_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a890d6dd2cebcc4802fa8043011b320f5fb58f79116f8899e53377455ae3f6dd", + "chksum_sha256": "a50a61d57521c3253ccd8895e436c2aaae536e44ca2bd3f043b8682cf82fb99e", "format": 1 }, { "name": "plugins/action/guest_user_reset_password.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d104e9e6d6f48bba5ccfd5b4172736ceda636eda41a28c52412236614fbf274", + "chksum_sha256": "537ad74274de6009b67a12290c45bec4aa9920ca5b1a44deeb74f52a627b774f", "format": 1 }, { "name": "plugins/action/network_access_authorization_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b753a48d43e272266d432df6dbb4135b319511983af7feecde4d26ad4fd6abd1", + "chksum_sha256": "51e764939b39b932312960bd486bdc1fe3ea7cb9fd12b46f497b55950c636202", "format": 1 }, { "name": "plugins/action/mnt_session_active_count_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05e60cf3485bf22b50bf7ff003b58ed1d5029e103287a9498265df643c298b40", + "chksum_sha256": "06a963894b3c51880561f5c61a6bd18c0a12a59991983b48480a07e6bd14c67c", "format": 1 }, { "name": "plugins/action/sxp_vpns_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c0267c3dba096b081506b16b6169fac96bae866cfde6dfa8cd2f8d775c53d9f", + "chksum_sha256": "34d2ac51e134c1e562105d4fc4f06bf40a682a92ae851a070049cbcea0e389a4", "format": 1 }, { "name": "plugins/action/portal_global_setting.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7bee1b19fb5fe94b699bdd6fe951e9fb66bbf2a9e3ecf8c467f0740d9e4730b", + "chksum_sha256": "9825c7059170cfb427744853f67a893423ff6f6db3e5aa3135968de97fd093a3", "format": 1 }, { "name": "plugins/action/device_administration_conditions_for_authorization_rule_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b22f410bb20522ea16f730c28c481fe1bf218535c50655fb380c0656e124825", + "chksum_sha256": "42ede25941eb7a1c9a6ddf1a267819aac9c454df7641bdd72012ee96e00301eb", "format": 1 }, { "name": "plugins/action/portal_theme.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d68476c4ba5d63a95d6472fc54548c9d3326c09468ffcbcfc163220b173ccca1", + "chksum_sha256": "bc80c46bbd75258fec812c640d022cdcb46a815646f23a379e3b8604535ed601", + "format": 1 + }, + { + "name": "plugins/action/px_grid_direct.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "98b60e62976a9a7154b515755d7c3b9fbb0127ab82beefb3e6537f5cad83c463", + "format": 1 + }, + { + "name": "plugins/action/user_equipment_imei_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2777ca990b9b46da909804886f437ea5e9963d9569b574589aa3c7bac65c6244", "format": 1 }, { "name": "plugins/action/portal_global_setting_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1bfd37b6bb21d5d1c7c45609ca20e4380f60f4de3985451eedd7538d23cd5f6", + "chksum_sha256": "d1bf3c23a275872f4e8a21eb0c0db09a10828d475627efd5cb7cd0c250cd8af0", + "format": 1 + }, + { + "name": "plugins/action/active_directories_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "514e4a086a24ce494ff0d6291d2b0d93a7707f9cfc207c870afd1237b9861635", "format": 1 }, { "name": "plugins/action/sg_mapping_group_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e559f9c3337c3845905d165090036017232f1aab0ca73cbf9eedf318da510398", + "chksum_sha256": "80f4a3fe81cfad2309e77a8434720d484fcf73632126f51a37cc1ca16e61948e", + "format": 1 + }, + { + "name": "plugins/action/reservation_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b0d317aa8aa137b99610bc2a78824279a2fd1a481e074c8629593c74a48f118f", "format": 1 }, { "name": "plugins/action/backup_restore.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a39ae2b623ee17e9336371e6f4d1dbe7eaf7fd8730cf3b61ac6d83d0e3f9b6be", + "chksum_sha256": "ba15db99b560845e4a5b0dcb2e91883122c557c7f0d868efbab0c0448ca1bdf8", "format": 1 }, { "name": "plugins/action/node_group_node_delete.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f30f0abdd62daecd6b86f8d292791a0c8edb8ec427fff4755c59d0707e080ad0", + "chksum_sha256": "39027d526dbd6b7c3e23569a85a99bc25fbeb4af089841f0090d8801b829421d", + "format": 1 + }, + { + "name": "plugins/action/ipsec_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6d63f53115df4056e1eeaa62d643059251f5c7274487a9db18bc048c2431e0c7", "format": 1 }, { "name": "plugins/action/sg_mapping_group_deploy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "546b230ceb411bb41d6119ae5bf51d58afa6106b811e83da5eab4f902597aa71", + "chksum_sha256": "9d499dde89f727e9f1f58f154b0130049c7216d25f8c7ea534509dbf9b319537", "format": 1 }, { "name": "plugins/action/allowed_protocols.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a7a9158fe7c3b7a5b5c1028027fa4c26882b70f30ffd725d1b4672d36a771fdf", + "chksum_sha256": "1f7c9a0f92c0872f45a2c9d62337c9123a3179d6b5dc85c6e9b6616e8870e703", + "format": 1 + }, + { + "name": "plugins/action/user_equipment_bulk.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a222897ce4480ea1524352b051ce880437aced4c2ef2e68f82d0074f24f85806", "format": 1 }, { "name": "plugins/action/active_directory_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f61a27ba961612508ebcca8b2a99927add160bbe4386cdbc12e0e608fab931a3", + "chksum_sha256": "5db35926afd823b74b7a6784b2e122af9b375cd5986d146312d594d180bdb139", "format": 1 }, { "name": "plugins/action/sg_mapping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87cbd2f9b280e45aaddf60f3ef3c17b60bf798e1b38ea41a994b47f64eab6641", + "chksum_sha256": "a653c64b91b6605e780c7cd90265436a2e1de98e07d6d27f173b594417941c4e", "format": 1 }, { "name": "plugins/action/sxp_local_bindings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "072eb2459d3b13d639932c14e8b4c3e76c5d7afd0c14234e49835e20b6d74b16", + "chksum_sha256": "5de1697093ef70b92ebe4345082daf4cce9e729b7c863376dfa8bf8f2a88284a", "format": 1 }, { "name": "plugins/action/support_bundle_download.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8113418b64673e1b41e6fa422b52519f1f4a9bdfad2e69ce8a4ff8ccb1ddbe7", + "chksum_sha256": "5503a8464d7e0c2b5189c4f9999dfcb2c516507f1fba7b08de43f739db398740", "format": 1 }, { "name": "plugins/action/self_registered_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "633a835de729b9549beba77626cba2626e282b03a32fe5c9bc489beaa1238ea3", + "chksum_sha256": "577549b576b5ee1b29d917da1afd3071deb3f8d1dc050b428f1c50d4f6d06511", "format": 1 }, { "name": "plugins/action/node_secondary_to_primary.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7e68dae78a3ed0b0729f98ba9ac28d25facdd22189962304638a31e954f89bfc", + "chksum_sha256": "6e1d3771686fa6c6d16825c1a5773967a0b4d28ea31afb53965d927ed1cafd77", "format": 1 }, { "name": "plugins/action/guest_type_sms.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78684d500e2e7dbdb5a847e548440fe4707d08b0a7ad5eab405fc256446e6e6c", + "chksum_sha256": "2a6de376f160d4b7884f81420c29e566205781bd4175650a7f6a761c72301585", + "format": 1 + }, + { + "name": "plugins/action/trustsec_nbar_app.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "269133229dd7d8eb014cc1daa6049a2dc694fb22d1833668ea8a93b457e39eca", "format": 1 }, { "name": "plugins/action/sgt_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff4e929ee3823a8656d26da72aeb39ad3eb5e3da4b9711121f3fb424fcfccd71", + "chksum_sha256": "0121137909e2ecb29d997bd8489e62444945804fe1f600c6f79e781a9bfb78ee", "format": 1 }, { "name": "plugins/action/mnt_session_by_ip_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "58835ca34c38a99ebe71f3b7351943e3ddff1e7e9974eb106212313da53b924e", + "chksum_sha256": "fb6a0516a4e111e28e476cbbbd6ad38b78ac399d4a9ef946f0a7f868b4cd4f30", "format": 1 }, { "name": "plugins/action/sg_mapping_deploy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a7849a5738f1ac2d8117ef6c310effe5f586ab4f9324683dc822de68f41cecd4", + "chksum_sha256": "d26a60f8dbd28b01dbac12fc94ec750d9525fd1b41516866c487f1c4a405011b", "format": 1 }, { "name": "plugins/action/csr_export_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ec37edd025598d026c5cd3d2e2338ec9efe1841b785ffa6484e46a4bfcc5ff5", + "chksum_sha256": "7ccea174b779a921268440c18a9453bb87812229322898c28289c9046383221c", "format": 1 }, { "name": "plugins/action/trusted_certificate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ad48fb7af2367a6ed35be4068bc4745ca44f4457e071a58db3637a433e3aa5bd", + "chksum_sha256": "ee268b82d3b351743e87efb1ac8885b986d6a0bec8d6eabcab93752012580ad9", + "format": 1 + }, + { + "name": "plugins/action/trustsec_vn_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "469bee3d839ab0e408a012013f61474e6e8305ce0686ab2c044456196f926677", "format": 1 }, { "name": "plugins/action/filter_policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c47d833c364e1f85e82f6cbdd1eb224350ddd17aca726d1e74e3a0dc28c6472", + "chksum_sha256": "050fa28012b596bc080c03e074bc5264702dfec5df2c16697ffca5a749d8a1d3", "format": 1 }, { "name": "plugins/action/network_access_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64c7ba1b6c46e8478c28177acc74b8a15119b7aafedf1469786da4dfb0a232ee", + "chksum_sha256": "2cf115e6a03d463fd2067415cd16f359496ca08ee803aa341ed9815cfc0def1b", "format": 1 }, { "name": "plugins/action/pxgrid_endpoint_by_mac_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b40455d74c7fdcd0bc0c86a267492dcfb17c2b12df56ed244f920168f8ca76a", + "chksum_sha256": "69015ec2d680654a60b0d96b00a9a4277ac6c6cc8f121f7a7b0d630fffbb67df", "format": 1 }, { "name": "plugins/action/radius_server_sequence.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f1ea00865e326337aa3dcfd92128faac6beeea8f6dc3d67b207e7309004766e0", + "chksum_sha256": "f8931a770a595431ebdf87e0a29eedf2b25f973d1381ea311c98131a65c06029", "format": 1 }, { "name": "plugins/action/device_administration_time_date_conditions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c24bab194baaaba0d3e8bfc418a422475a4628589ecb23657639c8d2884cc13a", + "chksum_sha256": "c1faabfb1b984df09c3feeb6f5de7170fe074dcd351dd317f3376c5c8639bd5d", "format": 1 }, { "name": "plugins/action/node_services_profiler_probe_config_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "887d5d13c67c46f7d0593b30b66aa063eacd00b0aa6899f1256fd99f458db042", + "chksum_sha256": "49da73184864587f945544681053eae5e37ab3aac5abd0fdc52e0af1e4c1b7c2", "format": 1 }, { "name": "plugins/action/pxgrid_sessions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "98acf5afc3de26c005d72cfa34f099499d1142b51b19aff35cef4bc9f14985d3", + "chksum_sha256": "0b593b397ce3fbe8c478e95b87c0016c9d50637de65fb8ab3a8e27d5cab3cc01", "format": 1 }, { "name": "plugins/action/allowed_protocols_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b11ff534bc6fe1b7d05cfc5f258885bb858dd05e76abc74e7b6070f96b7808b", + "chksum_sha256": "1f2a7d266d1bdc039cd2a02fcdf7c9441bb0b71f597aa4012af91527250b9ea1", "format": 1 }, { "name": "plugins/action/sg_acl.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4928fdbcd889d86bc06c8c88f8b157dfe8038ad1044039c2bc081e85a45135ab", + "chksum_sha256": "45c457905cae8fcb2aef85b1435795cdd319ab1a0f15b4710c9378951e309bfb", "format": 1 }, { "name": "plugins/action/network_access_time_date_conditions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3027998e448a69499ded02fec99e06035c3f91aab8ac975d8327b193d88955c", + "chksum_sha256": "964e2b059bb92997f60087715448e895f56f864a6a38857ddd87fe0a6afb55f1", + "format": 1 + }, + { + "name": "plugins/action/upgrade_stage_cancel.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c1f5dde4c4308bee81bf7f29231852f9ed0f142c5d1822c637e7551bbf0c8415", "format": 1 }, { "name": "plugins/action/mnt_session_posture_count_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "34dfef43f5642efb4307817510545348784c3dbd9cb550223fdfec47d64124b8", + "chksum_sha256": "7f394165e72575dffa834bcf41ff1e829a97c6bca3c99720a8dd516597267d93", "format": 1 }, { "name": "plugins/action/sg_to_vn_to_vlan_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "38f2bb2a355983e02fba174f8340cfa517a9a192e21fc24b5e75fba0cabdda85", + "chksum_sha256": "1d84060842c3ed88aaffff315e1f582c889a3623bcff14edd0cf3cfeffffcc5a", "format": 1 }, { "name": "plugins/action/profiler_profile_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "062dbe83e1a0abab15e08257b2affb95f951a6891f7abfeec671cbf8f9094728", + "chksum_sha256": "8f6ea7667ed4cf8a9498171e8c833c92092017da692c89fc6c020f13defdba5d", "format": 1 }, { "name": "plugins/action/node_services_sxp_interfaces_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54a6238ab84a19570645c636b12f43b2a5c52c9e89ff1517c943bfb7bd778b5d", + "chksum_sha256": "bf12eb0f200807860b85d6267a3a841a59b118fcba0379ff463654b09737d565", + "format": 1 + }, + { + "name": "plugins/action/duo_mfa.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9751d23bef64384a5ffef49ebbcc8f59735752e5b86c1c3ea6a9a195fb70c8b6", "format": 1 }, { "name": "plugins/action/active_directory.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fb557aeb8c753d18ea93b8dd7cc8b365ca48552268071ab72e5e981ca4aacd0e", + "chksum_sha256": "984aca4b5024caca0947045b33764d54cd713d4cf50c76feb08d9072e1816e3c", "format": 1 }, { "name": "plugins/action/identity_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "12011106fa6d5a23c88c21261ce6d8efbef82ef7c15cd229324ab46e41a35e32", + "chksum_sha256": "c45ed6168e2f08c8391224960fe029c5bfc7c5bc6b3e425fc4694da658565135", "format": 1 }, { "name": "plugins/action/mnt_session_auth_list_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c19fd4eac090031ece6b443641a43a2b26f99ba93e59ba8edb1017813ffe7c14", + "chksum_sha256": "d1477d2b361bccbd81fd40381f74d12a0b04fe11fea29f09ef28d96260c6ce91", "format": 1 }, { "name": "plugins/action/subscriber_bulk.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "16fdf4fcf23dca3250a9b0a973f321fe69e632771f090d7cae9712c681a93160", + "chksum_sha256": "885010d17ff94ea79069a691613b2cced9d88f10cb0199ae72891170831306c7", "format": 1 }, { "name": "plugins/action/patch_install.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91b63e82314d36684ebeaecc578dd96600c5fe4d9001f5eeb3223adee009bac3", + "chksum_sha256": "37c708e779f9aa82319b2d08e33b359e879569ded30683889ea8bda160953833", "format": 1 }, { "name": "plugins/action/network_device_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e63101cc9853cd30514eb6f877f4fe736c6a6a926d644094dcedb8c420a5dc39", + "chksum_sha256": "a3bd695dabd12a4e214093f2c617d3f302a321bfda228eb3956386fae7f960df", + "format": 1 + }, + { + "name": "plugins/action/trustsec_vn_bulk_delete.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "20b1b179eff8ff40da8d34b8c24809a8897b76c216dc84c25bf5d9857613cf79", "format": 1 }, { "name": "plugins/action/network_access_authentication_rules_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6b2fde7af450d3f009b508f441d0e357c76d24ead12a31773121e41ca7368eb1", + "chksum_sha256": "b39e85d3dcbb34835eb2b2eef82acaa05db49148a66cc1d2085a251e3c2d5c45", "format": 1 }, { "name": "plugins/action/device_administration_authorization_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a156be3fde0a268aec6f60763232bb8ac816c4712584ab8619912f6da4c00d73", + "chksum_sha256": "e5fba8b1250307f6114feee6aa0be9b881cd2dff0b51275f46533068abb16e8e", + "format": 1 + }, + { + "name": "plugins/action/ad_groups_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fbb618d71e7c59e00f8acdaac175e946efd1e1b0e394eb84110bc983fbc775f4", "format": 1 }, { "name": "plugins/action/tacacs_command_sets_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c85e27ee547b3a92b0450301003d41b2b59ed940fafadaae1a9456f5559a6923", + "chksum_sha256": "b4b42aefc616c9678421fc46f947b22890ad6c3de0ff6b613ad36e7a2112de02", + "format": 1 + }, + { + "name": "plugins/action/trustsec_vn_bulk_update.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "576e54a6bb6e226f99ae16c65e36953666f665be5cc7f9825e0980b6f5eb319e", "format": 1 }, { "name": "plugins/action/support_bundle_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cfd3f314aacf21d4ef405c92a9773551c8a1c74b88adf46538fdf4f98e9511e0", + "chksum_sha256": "4e5034869a91a28c6bb5d282f870c36fd45fb7cc5501b7534d34fd7e81a10d49", "format": 1 }, { "name": "plugins/action/active_directory_leave_domain.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c7045820ae4f6a7985e8aa2ce1aee79374c6f7f36ed18bfc2f934df62322312", + "chksum_sha256": "960262f97cceefd1ce1030d40eef7850609dccfad8f3dfa694a77e2c419a59ab", "format": 1 }, { "name": "plugins/action/endpoint_certificate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "febe819b4abd344db593fcf09f9c15a62c06420ef5d15664927503c33161b0e7", + "chksum_sha256": "52dc5ca6068a257c36e7893bb26648e26e9034e39bdb9962fe0fe7532c33c289", "format": 1 }, { "name": "plugins/action/guest_user_change_sponsor_password.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "757a527f8181bafdbd82c0da7c874b8d769e84a4541bb7010a38a342b2591695", + "chksum_sha256": "b51ba3e5d34a860234a5012683413fb2780e101380f95bbde1246ea054102603", "format": 1 }, { "name": "plugins/action/network_access_authentication_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "281a0c1c38210f1b4b71e44ff2235450e06163cd6cb655a5b079292900c8671a", + "chksum_sha256": "5c486e61d27a086dc2d9db0eb56a16e06099bf937d352b7657f5874dc2a4f530", "format": 1 }, { "name": "plugins/action/downloadable_acl_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1e291a2d67c7aa327951138eac047905ab6e5e07df653183c8052cd437fc3b9", + "chksum_sha256": "467223adfdbf05090f4ce025b904b49fd9e537274f1b9c555c4e38bc1adda7aa", "format": 1 }, { "name": "plugins/action/device_administration_conditions_for_authentication_rule_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d9aa455d384060edaf2cbae03693b897e8ff97e4113be736d7f1808f159ad9ff", + "chksum_sha256": "27275587a58182d03fc310b75a4c01ec933a41efcde9fb484a786d91771ce1de", + "format": 1 + }, + { + "name": "plugins/action/endpoints_bulk.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e5d59bd4b0b368b8b8cb5bc0828592ad53d67054b7cf6c071d50158a5ba4cfc8", "format": 1 }, { "name": "plugins/action/pxgrid_account_activate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "65ae45eaa149c4946847a513c0b7f4f67d2a8a036322fdab3be9212b81e33ccf", + "chksum_sha256": "bf3991285f7f75f2f3cbd83b38bb37ecde65e854d6ce073ca425f4149cbd94b5", "format": 1 }, { "name": "plugins/action/sg_to_vn_to_vlan.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0cec12000173656b0201ed9d43935eb61c1017d9769fa3493dda7efbca50581c", + "chksum_sha256": "80dc896f40242b4c2c8cd66c190ca24bef7f5d93ee1c306581242aa139602752", "format": 1 }, { "name": "plugins/action/network_device_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8fd994e555b2a36c107507034698623bb97aa36fad12c645f816075f0bf796fd", + "chksum_sha256": "7f30655cd79dbce30475fa61dc5a88f1f83220e51bd2461ca26d712a0e5d4332", "format": 1 }, { "name": "plugins/action/device_administration_authentication_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cbd7f0075e61bd3f3a6307bc43e830817346ee27e117efe1c1324ef257f2fcfb", + "chksum_sha256": "b381c218a6d65ad66b7aec11ed9b6297349d894f7ef411a43fc79bada93e37b7", "format": 1 }, { "name": "plugins/action/csr_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14c4b1cbc840d29da160ffb039f4669945666a877c935c5eae5aeaa6ae5d2b34", + "chksum_sha256": "46b474f4ad82f649477b5b2df436f63c1d5d8d30d07a369a936344517255ec20", "format": 1 }, { "name": "plugins/action/authorization_profile.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "964959f5b0c69feaa5c4858dd6db4f9b5af88486223cd900496d7edb9a950133", + "chksum_sha256": "c83c8522ab442cfc98dd6013f9ad597ce675ae787e822e39bdda6b8630890803", "format": 1 }, { "name": "plugins/action/sgt.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "33f77a80a42fb603193a221817e610094a0205e7ee195b206b18b690d802d5e4", + "chksum_sha256": "697e8601eaf7e347541e4f9d9aa6f732c19f9618913d3f6caac974cfd69f9f3e", "format": 1 }, { "name": "plugins/action/patch_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96dfa7ffe58c42ab0a2b40a0c54e6e40f6b2cee9e805e105a2c4cb77a673df4b", + "chksum_sha256": "e9fb32aeb0262b364037d82ee8e7a5c1c996ed80ad8c1155cfde0853109e5822", "format": 1 }, { "name": "plugins/action/device_administration_service_names_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce7358df18078fb78a72a53e4abaeed8e442f3b8b7dba1620a085a7ada3909de", + "chksum_sha256": "75a639cf6775404020f719087621208fb93eb1b384f47bb4ee75a924380f88b1", "format": 1 }, { "name": "plugins/action/mnt_session_delete_all.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "071493359cef91feed68fbc1825e1c2d6abdfd730974fd8826ddb39b77ecfe6b", + "chksum_sha256": "b658164f2011ff475268c50fee0f9149f63c1f140fafd4911f3df753d914b201", "format": 1 }, { "name": "plugins/action/px_grid_settings_auto_approve.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c8809c6072c47aed001af0490373c4c1cb665959ce6e0196b0e9aaee6e53990", - "format": 1 - }, - { - "name": "plugins/action/connector_config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "64b85d5d97fe9b46c1c0a76c0de783665ff809ca6f878daca6fcabe25cb60038", + "chksum_sha256": "5027e7c607587d0959f40e813505bed43c62690a0099de22ca4c150d4fcf9f31", "format": 1 }, { "name": "plugins/action/endpoint_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5526a8abbdb4d7580b7d5f945f127caf7734f6aa88118c06fa3727fd47320920", + "chksum_sha256": "cb0f5d2da744152eaf5fc963cd866328cd8f8779a599d11ee292edf1747695c4", "format": 1 }, { "name": "plugins/action/network_access_authorization_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb6f488bd1b5a36cdd2969afd03c99e9c75fe6b212609c4da88a028d3026001b", + "chksum_sha256": "bfcd93c493dc2256cf5f7ce1b780e7e1b2a14d005e2f6929d41f1945d6d727c9", "format": 1 }, { "name": "plugins/action/mnt_athentication_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea8108a1d3011e45ad733579747c00162395de42f687cc880c97f66f08d643d8", + "chksum_sha256": "5770ca9a34b42b9003461a9ccc9d0317e086df19b141cc73c54e37ab926a6232", "format": 1 }, { "name": "plugins/action/dataconnect_settings_status.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af13187b10320c878946b8b6d35dfa2e75d90a99b1c1bd3b58e711b13aa0e303", + "chksum_sha256": "1f53d7db17bd4b1df612cc3b906febd757b139558f1054fc03e4d4088656f7cb", "format": 1 }, { "name": "plugins/action/device_administration_conditions.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "63b7a36946e865ba2f780cd0b480f365ebf84f28b06aed8ac49e17023c2cccb1", + "chksum_sha256": "3de543a2f68d02ce08216e5fac0bf1a7d5ce352092cf9d1bfefae63ce73eef0d", "format": 1 }, { "name": "plugins/action/sxp_vpns.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6f1b2e35d7182d03a7a39eb1eab233034f44e713e0c7ffeb4ca5727aec1e063", + "chksum_sha256": "e0ae9103093448215f2675164cf494e39fb326e65dda587588772b53305826af", + "format": 1 + }, + { + "name": "plugins/action/endpoints_bulk_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c1eb7a0b67a086b26de08a772cbaa8996a022bf26002c36868ce7170d97cf736", "format": 1 }, { "name": "plugins/action/device_administration_local_exception_rules_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fc076224b36225f5432b8ba9daf3ea294882d21be11caf4eb27867874f07e59", + "chksum_sha256": "03f3b65c465255a3ed7db3d97d14c7377d5c45388d670a0c3342d13556869ff9", "format": 1 }, { "name": "plugins/action/resource_version_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e218612c3319d2ffdb9d375c10226e52dc8664240b589561f44acce7df7608e7", + "chksum_sha256": "32b3c3591cd08fe47b3aa755f06f35e1400719183c7d66f5b22727913b63d333", "format": 1 }, { "name": "plugins/action/renew_certificate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "935a15ac39e8bef1001f3186a8c9525ec4fe844d07c84f4ae7ed2971ad1ea63f", + "chksum_sha256": "4c1607c08c321859b9576f78627cf9d82c15ce45e1a90c4bf632aa5599cb5a8b", "format": 1 }, { "name": "plugins/action/endpoint_release_rejected_endpoint.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04a91e46eda870ef2f313c504f4efd72da9157c62f72da31af7232a5068941a8", + "chksum_sha256": "f3bccffaf0dd45e779699bca987b7c7c64bfb4981cbd9807f8a83453f63bc907", "format": 1 }, { "name": "plugins/action/guest_user_reinstate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "27232d155fc2d7fb7b012a391247b814db3ffd9d2e04db83f97e5e553215e593", + "chksum_sha256": "a15d4e2473c71abfed35a2c0eb6acf16e170c2d30cd385405dbe398cbf13b7d9", "format": 1 }, { "name": "plugins/action/egress_matrix_cell_clone.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "591c90ba039f9490f037e0a865a7ae3651c2f41cc1b7fea238cc4714bbb0c924", + "chksum_sha256": "3f37c7a6309179124115ce90eaddea6a3e750718ccc9e4d7d734c70db06a136a", "format": 1 }, { "name": "plugins/action/my_device_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25dec8b3b31d9718286d48f4f709be4f2288423e411a336f9b871bc892f3986c", + "chksum_sha256": "b4947129e764851ea0a50176918f3ec5cad6d94e7cbf6ef70686d921c9a34853", "format": 1 }, { "name": "plugins/action/network_access_conditions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af9c68f336218b8a82aab7d8928ea3f876243b91283dc813e7f3ba5860391ad7", + "chksum_sha256": "0910c62b5a7d7cbe11a2d72ddc21ff4543ae89c36c5709b2afb313ec7ea8b50c", "format": 1 }, { "name": "plugins/action/pan_ha_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9799c82a85dba29a2efbbe4e8b42a294836cd85d24d00ebd26b119844e8d6576", + "chksum_sha256": "5682196666d56d420bf8dbc09447669eb535adf638c2965992f716fefcc3f61d", "format": 1 }, { "name": "plugins/action/pxgrid_user_group_by_username_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e86b097e3d6b9074465081280d5d4e3a348d93ebbbc675f49a3012537c15d9df", + "chksum_sha256": "df51b205ef9eb18cb8726e0de327e28fbeb70bd6f485b5f1384e4c2b9b6ff51e", "format": 1 }, { "name": "plugins/action/node_deployment.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f335ec09d999759a89965e9403b8173099c4b41f9e5741cd83c1d6a4f0b41cc", + "chksum_sha256": "09a6cb6d4f3663f5c0268a6623cfd76cb14e8fb7c59763a1292854fe26739b73", + "format": 1 + }, + { + "name": "plugins/action/custom_attributes_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1938cefcb1cc467e5ebe54a6cb6511c08ba9d276b65ecba4a7b505ead603c492", "format": 1 }, { "name": "plugins/action/certificate_template_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bca920eeac07e75945bd5c0bb75d5cb0d48f01d5cb761961f64ee6aa108cdac3", + "chksum_sha256": "ac27e544495dfea32112c4d34ad5cc1fcf09a15325208fe7bbb07cb742cc435c", "format": 1 }, { "name": "plugins/action/tacacs_profile_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a679a8a87db2412e19dc4a87bef77fbc1c5023ad11ead30e690034d62d1b9a85", + "chksum_sha256": "b8351cca94d4346311f66b2e3890f21f819a5b41069fbfc806b74e248dfb8428", "format": 1 }, { "name": "plugins/action/sg_mapping_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "096375f223734bc6c09f72e40371fd7bf86936540173c480ffd41f535843748d", + "chksum_sha256": "c6a9604354792f9e633fd8f40857b35e6ace3a0202a14a118417154bb5035b5e", "format": 1 }, { "name": "plugins/action/sxp_connections_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "681cc9405ba4ac68a5ac88cbcc7c4bfc34b46c364a2ba63b098d1722e31e9aec", + "chksum_sha256": "8c84cc51ab547f90435c1a8de55e0db4a9a1c99ce9378171f13768ef973d6a6d", "format": 1 }, { "name": "plugins/action/pxgrid_service_unregister.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b182fe1338bc509579a5acb41cfc9fa58ee8e3744b3bebef9cb99471261d82da", + "chksum_sha256": "c32fb479542c7efef3c436f4716dfdc132184272e79feade3491205f031ae512", + "format": 1 + }, + { + "name": "plugins/action/ipsec_disable_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1163b19b6a1d420764586e5e99295210cb396b1b1ab578b5b84f6e8856453d77", "format": 1 }, { "name": "plugins/action/byod_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a965cf326b2f5bc88375dd1f0c51de17ff2990fe6d2491ae64ce10a7a0a55f9", + "chksum_sha256": "8c4161d9a2005f340d55ad7959f2667c964aded4e4fd0440c8062dd7c04f8392", "format": 1 }, { "name": "plugins/action/sg_to_vn_to_vlan_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "01add89f1198e0a10abf0e3affcc7c7fb4a8968d4f786f805be1cec019a55dbf", + "chksum_sha256": "480a571e539da600b9fa63ce09832231b485332a640f51da13e692aeaf1f5c1a", "format": 1 }, { "name": "plugins/action/active_directory_trusted_domains_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "842161fd50e4cbfe563385fb5d42cad81db4bde0696657f9e4feae78de5f467b", + "chksum_sha256": "643b7432b6d7ff6f9c176a71ac6e52a7b7ebe1e9dd61fdadf14d9f40e78843d8", "format": 1 }, { "name": "plugins/action/pxgrid_authorization.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "164fe32558732672fc4b29499652a9eaf06dcf681995f77d13e0f225bc288476", + "chksum_sha256": "21eb0acbe96d3efa81151e713f863183a91f9799d81c918bec19fcec4ae789c6", + "format": 1 + }, + { + "name": "plugins/action/stop_replication.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fef607d68f1ff2a9579a914739ea105bec537b3e672fa748021f5e162adf2ea9", "format": 1 }, { "name": "plugins/action/licensing_smart_state_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3fa2031f029e2895fbffc37ac17c43e05fd4e68b4053ed5c90ffd96dd5ef046f", + "chksum_sha256": "a43bcc358a7c7af7d65520ad4c6747692bf822cbaa196fdb10b995565a4f3eac", "format": 1 }, { "name": "plugins/action/egress_matrix_cell_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53e0a1f6deff33a9798ebdee10606a0af18b1248e7a77c5d2d4d87d87d56e73c", + "chksum_sha256": "913d3945fc635068c2c98164e01585fcf09f2df90dc560cb692b02fd71f8c2fe", "format": 1 }, { "name": "plugins/action/sg_mapping_deploy_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "95ef74136199dfb3a464acac96f73cf9e60ad41c486dc2ddee7592926bff3d09", + "chksum_sha256": "c088e8b848cf49c0b4d6b82ddf493a037941b3bf0e72400b08cd502079cf1085", "format": 1 }, { "name": "plugins/action/sxp_vpns_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8504aeee386eb36e1a0520b7c658c1255ee7653be4f1a3d980290eafe209621", + "chksum_sha256": "87082944dee47654af1bfc248d0dcb3344e84b88a2f3d453c03639273a404974", "format": 1 }, { "name": "plugins/action/device_administration_command_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ca0c98146a76537cefdefc8be407491c7b7f863dd4ed6d70b494c4373057290", + "chksum_sha256": "68043eb75d719d7eb4c4bb1cfa54d3bfc6b7e0c977f8ce0afcfc5ceece225211", "format": 1 }, { "name": "plugins/action/sg_mapping_group_deploy_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0976ef3e751d67107a530401cf032ceeda4d5263feab1b186c26669941f6ac37", + "chksum_sha256": "6b062a0c3a489d72505618e6f12f3261cf477069995a03e00198b842f6dc0257", "format": 1 }, { "name": "plugins/action/repository.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39233c9082ba5e4d122df594ae33d2008f275a53179bb90eda917cc55e757115", + "chksum_sha256": "198c5f217d0ebd3b6aa7d33d90d79db44adcfcc4a318d411d7550e89da2278e9", "format": 1 }, { "name": "plugins/action/guest_user_suspend.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8bf1355fb8fd14ba00151ebef7906383b05f63cdb3a92bd203827aea5a4e2b5", + "chksum_sha256": "a3b9fe817179609756bd7647ef2170884595ba66db1a74141b751e6e391ff965", "format": 1 }, { "name": "plugins/action/network_access_local_exception_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc23ad75fba43f06663a8774d4177ddb5d6ce5c0059a1d30c7f82e174b3c3dd0", + "chksum_sha256": "cac3089a7ef97fe9c6c81538642ebc8f6e76bb0910e2cac89b6597bcd9735593", "format": 1 }, { "name": "plugins/action/endpoint_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d55e8067da1064224f4cd6f5b819b9958afa4f76eb8abf3f54081ac39e8c651", + "chksum_sha256": "a4cda8a7904ac2d486d9789b1029e0232db8bd21466049f7759d029e2f5ddbd2", + "format": 1 + }, + { + "name": "plugins/action/endpoints.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e36b9386dff1c7e45c9ff666866f05fef684cb111cd1143a5ef8b0a6992a94db", "format": 1 }, { "name": "plugins/action/device_administration_dictionary_attributes_authorization_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43e4cceec5175a45136326ebbdb91ae4495bf8af04ac224ce36759c587ad4d9f", + "chksum_sha256": "4b315544e1cbfed18070ff8c1860251630fdb9afbc831f9ab90e282df5bacd43", "format": 1 }, { "name": "plugins/action/transport_gateway_settings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "01dd914695935470f9070df258a809740f4aeaec336f49866e712fe8fa4d133f", + "chksum_sha256": "aa41b05aa906cebc591dfa8f0a6053ae7a968efdd8aec6c3701733d4eb5f2bb3", + "format": 1 + }, + { + "name": "plugins/action/upgrade_stage_start.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "66e83705b9cd2fd158659afef54093417454224d1965723527be785413d5193f", + "format": 1 + }, + { + "name": "plugins/action/px_grid_direct_dictionary_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0f3647ab61c274168518d704a5ff543b3959447693de78ca5d4c9b97a39a3dcc", "format": 1 }, { "name": "plugins/action/backup_cancel.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c05cbdae22a61b8648e6aabff62cd06964d72c80589b03b6a60832c3968da768", + "chksum_sha256": "cf4bc728f2f26ef7045cc879a63750ec02ea01bbaa90a12cf0efbb4ec22b3c6c", "format": 1 }, { "name": "plugins/action/system_certificate_export_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f13ad574e60af54f0d20a00e0f99ae0517f35d940207cd6d6d6839834a061c9", + "chksum_sha256": "80c9e402506bf395f667a5242d031f8b8e41d94273f9bc9262c751370a41244d", "format": 1 }, { "name": "plugins/action/guest_smtp_notification_settings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c4d2505abeb338fb5bc581536bfa65493d86895b29d37a533bc60a1808a11df8", + "chksum_sha256": "fc161d2bf2f041eadb928d93d8b9090896b7c82d1089ad759d78dfa389d95d21", "format": 1 }, { "name": "plugins/action/network_access_profiles_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "191f5ec8fa5073b6731b42f278491bd244441b20a13215de527ba0b805fd0720", + "chksum_sha256": "b54742170f7c820889f234cab1a0ef21d85416f7d84ceb8bc30cc7421f03b605", "format": 1 }, { "name": "plugins/action/active_directory_add_groups.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97295c2b7e7bf154805438922b9d4c2b136c4e3563a6409da2c9d0a1fcf90647", + "chksum_sha256": "3ffc3b6f6ffdf0eaa359504af1a1f1fa852c3d063d8ba07a82e2819dcfe121e2", + "format": 1 + }, + { + "name": "plugins/action/ipsec_enable.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c71e994752679a68feee521547409eba3b4b80914925d66eb212895e31f92fe8", "format": 1 }, { "name": "plugins/action/mnt_session_active_list_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bc366451453119a0093db804567e2fdcbbcbffd57be720f96aef6b4eacb12d6e", + "chksum_sha256": "dd2b36e3a9dce6538afafbf03ad8d35a50d7e5a3f4bef6da7cdcc1eb02b0ceba", + "format": 1 + }, + { + "name": "plugins/action/ipsec_disable.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bdccbc4cb65890c0fe8fbbc92ef29095133d8ef5914ce634eef8793e753a3124", "format": 1 }, { "name": "plugins/action/anc_endpoint_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b496268db3678eaccf1fd69fdb6281c891b0f628dbfd79a51afd218800010bd", + "chksum_sha256": "d77bcad2e0fa7a98cf598ab183d6df51e24f7e26fd5dac9fe8acc23b2e870e2e", "format": 1 }, { "name": "plugins/action/guest_type.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f3dcbed4e2aba5d68c5122fc9e026e395e0a15a36f42762d5e1bbb2a8e136b04", + "chksum_sha256": "176e9cd33c38774d7916d3b096bdd24a44a79e253ea16fbe6c8d2009aed20d43", "format": 1 }, { "name": "plugins/action/active_directory_groups_by_domain_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cab601e9a87b6be84a397f18c1f4b205bbbb42af2518551594f7f665dbae5025", + "chksum_sha256": "46496ca97c8901998753dbdbd02cb836ab6a6a9acf322f3d35c3cf3a7d7b6459", "format": 1 }, { "name": "plugins/action/network_device.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49b73ec27b42cad62bcd8376870735ae0f3e6a64e8563cee5a5689205e77413b", + "chksum_sha256": "ff7e6efc3f6cf472c73c49d45826f0a2c6245aabc491a0d3132009dbd851c9ab", "format": 1 }, { "name": "plugins/action/network_access_conditions_for_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8d52f5390f848d613529595a6225c51ee0c717bef979de32fa4290ca7ff6932", + "chksum_sha256": "0459e70d289e3b4fe4cc6d979370f563f246e18d80bd41b2a54bcc08e59f278c", "format": 1 }, { "name": "plugins/action/tacacs_external_servers_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6fd21513e50284510c90bf2ad6fc29f2a5b019a26fb773af3adda980a90122e9", + "chksum_sha256": "588cb2521fd870b891db2fe2219d45b843ee6177c084d7af35d54e5eac5b33f2", "format": 1 }, { "name": "plugins/action/active_directory_join_domain_with_all_nodes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7562db5aa714230b24706439845cf0d6bc7dafe41297695412622ce7878c3327", + "chksum_sha256": "03fa4a2e352add7f7ca5c43d3c132b44f1b0bdf666152d77ca0f40c01623168d", "format": 1 }, { "name": "plugins/action/pxgrid_service_reregister.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1702869a6c2a59a0eb86ee64dd3d0e01a836be675647d511336689eb1a039e62", + "chksum_sha256": "cff4d03e86f0b42c5f06b073bddbd1d3c42311d189df2b67cd20fbc4a1fc6bc1", "format": 1 }, { "name": "plugins/action/device_administration_policy_set.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59631633fa15933596394ac10eed5f93cb8fe6b1b410f032c7d411470395a323", + "chksum_sha256": "265ee9f0bfc8fbf4fdb75271d65eb4fd4ecef86673f43d6b7be4d1ca4873a079", "format": 1 }, { "name": "plugins/action/hotpatch_rollback.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6af236dfd2a1227f87bd4741c2d1922aea9baedb70956f42c36ed313896a6563", + "chksum_sha256": "741c32544d6fa04edee9f008b6af4a66c97817937011831f8460e10ff9997641", "format": 1 }, { "name": "plugins/action/pxgrid_service_lookup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02044ae53dc826fa07e493eadf232f29b0c1e7dd61e1167e563d6d52b8efffd7", + "chksum_sha256": "eb4479bc1993ecaa6c54171a7679f0446d0fdd5761342f62364608f8ef1e2686", + "format": 1 + }, + { + "name": "plugins/action/user_equipment_csv.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "62602cc3302bd7ac936e8bbe014faf0c1c7691add814aff16db8f037677e1780", "format": 1 }, { "name": "plugins/action/portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba4df7e93774c450a0373494036c2aafe249c496e4e9a8a0a7e050ee0bbfe83a", + "chksum_sha256": "8aecb82a92048eefda36084f3854e22c01e8a395cab1cc6ae6229a1ef92a144d", "format": 1 }, { "name": "plugins/action/anc_policy_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64f677f0cf2dfba00fcafc68ee1cd5f37deb64ae728519daefec0a6acf8eebd7", + "chksum_sha256": "74bea84fc374cf7a035691efef0e12a1caf1c562813c734f87c33bb045a96a63", + "format": 1 + }, + { + "name": "plugins/action/upgrade_stage_cancel_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "62b0a8930f7335d69a2761021b31346b6d14f7d18d90fbb938ba21a806b2f1a4", "format": 1 }, { "name": "plugins/action/network_access_local_exception_rules_reset_hitcounts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e77fe86a7570db61e2f3da404d138cd412e7c2215c2715e6c4bd5e907e47b9b", + "chksum_sha256": "e06d3cc6c25d7770167e70f06d354418a57f5754a6605aa96daaf23966403599", "format": 1 }, { "name": "plugins/action/device_administration_profiles_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0d63a3bc0c2c057a75f7c79f57bf4dd11ffc08bbcbe92dc3ae05a2287a03da46", + "chksum_sha256": "c0d0d5998f88e77d82ec0e8109c6e94ffe6b438e25513e5ac9ef9e95a52ce28d", "format": 1 }, { "name": "plugins/action/hotspot_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2eaa8e92f722ddb179f033a61ef74e70d56dd70b6be82fe1b55c8dce4ebd34ab", + "chksum_sha256": "2f2ece300fa70cd38f19efa66737152d7de2d4cd4b48e66792c0b279c1b3da06", "format": 1 }, { "name": "plugins/action/backup_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7560acc48a82b3040e02a4af91bab9c886c65576aaacb26d5c7ecf10a05c4ddf", + "chksum_sha256": "d9a77b83208b0b231a639a8b644e7ca260f4981b1f383b89e32ce2f78cd57a41", "format": 1 }, { "name": "plugins/action/sponsor_group_member_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a40e186fa8b8d29ab44c91ed33a5eb95f0b6adc2984de884a3c63410ce4a153b", + "chksum_sha256": "85faa24b9f66bde5014d344cda9729b7ded46dc5c8d906bd4bba7b5caf55e1e3", "format": 1 }, { "name": "plugins/action/native_supplicant_profile.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da5ba7417c132f2174f96743065ee6ff09b066fc310d394f12c05c945b433c33", + "chksum_sha256": "0ec266b729faaaa7e9bdea10cef86fa3abef3f4260948b6a137625ef89b31c8b", "format": 1 }, { "name": "plugins/action/network_device_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac43e02124c51a2065f8e5345970ebb87b47a71ad00c1f63aa9da3601746ae7c", + "chksum_sha256": "479c9608c3d980f47cee6ad04dd15ae333108a95461066bd8818965060756665", "format": 1 }, { "name": "plugins/action/egress_matrix_cell.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a8d7450d118f78138af296625e70805ef58276a5d5c913556162799ab55393e", + "chksum_sha256": "3990d5fcf7b8eae63794189a601401087150d24604b43397e8b594809c76b9fd", "format": 1 }, { "name": "plugins/action/self_registered_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b44e8baadd0d37a2875b45952c31be9a35537366c233b5191f496e47df849f1", + "chksum_sha256": "891423f1dc81c17738113f5aa156255de7805362cac4b096d5aee46f5d37279d", "format": 1 }, { "name": "plugins/action/pxgrid_endpoints_by_type_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a0124d6eea9e3fdfdbc59067fa8f524d6422a41e1393198cf57a24b377de93e", + "chksum_sha256": "43c72731605a085e4730c96c1694d6953c86f9929b32404a3cc5659d56d25e99", "format": 1 }, { "name": "plugins/action/selfsigned_certificate_generate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bd774f12f3935f21423517c7323514182cb08ad2b81e0ceee4dac2072111cf41", + "chksum_sha256": "8ba33175b27be1a3d166097a6da3e9d1dd42ea2df8421cd7c3767c73893383db", + "format": 1 + }, + { + "name": "plugins/action/trustsec_vn_vlan_mapping_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1483a76b949f36ba3e88a82d40e0d81acb1cb3697820293f1b126ce7388ba7e7", "format": 1 }, { "name": "plugins/action/external_radius_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d6e3bb3023b33797f53367f96ebc7ae5c99659bc6d50546ee2a8714778cf951", + "chksum_sha256": "4419e579752a46efb1f35a14ab98a3fa7c6f72ab0af5ed6b66b758023e889907", "format": 1 }, { "name": "plugins/action/dataconnect_settings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "13ed05d46bc6d8a554c4118e01188caac059f872da15d5661564847413402e76", + "chksum_sha256": "e0d8df1604e2d62e15bb7b3cda7109e73f169c3e0f182693c72a4038be0f9677", "format": 1 }, { "name": "plugins/action/pxgrid_security_groups_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55670ec42f2fba6762834642bec08d971f37b83c23a7e407d7e12e5d97ac9716", + "chksum_sha256": "c0c93d148e911bad18aba2ba70d380cdc0ab512e03998e9cdfb4c730adf0ca9f", "format": 1 }, { "name": "plugins/action/internal_user_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "68a12a24b3875f37bbfca7a79080ef1290c1ad6386940f701df7c1d70fe84903", + "chksum_sha256": "dd8eb6e2c6ed94ea255943059b6f123dcfa95db6d55ec6184707b2b83f84d420", "format": 1 }, { "name": "plugins/action/sponsor_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "450565abd7b820154166dfe62c015958d3f1a02a803d4ed2f7f4bde3571e4306", + "chksum_sha256": "385a8805e70612040efcfb578709b8114bd4a9f8c25060c10f0d4961b57394c4", "format": 1 }, { "name": "plugins/action/radius_server_sequence_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5ddc23ab77b097ace4abef075ae05703bf547d04a61f897ec1bcb1a848f66d6a", + "chksum_sha256": "5d66c270c0285a4edd6e77f906c88b8f04c6d5ddf328bed64e72c274186cfd58", "format": 1 }, { "name": "plugins/action/node_deployment_sync.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "985024b588acff250440173d2218af1e50edb72fe5e7d407ab27b045e02d1fb7", + "chksum_sha256": "033fb4f1a538c77eea1990d66f64f2c721b38e1115b7999fca7fad391dc1a966", "format": 1 }, { "name": "plugins/action/sponsored_guest_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43b206a8cd30f0095b70c803ef8589ac7731373a9e4f470f20ae1b98b6801c78", + "chksum_sha256": "1be0f64cc8002c545879b33c8f5726b973c15fe0e202df24e00fb01943e303ea", "format": 1 }, { "name": "plugins/action/guest_type_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "15d2c9edb6e7bd54ce8f0b0f2ff45af5d9b82a16cbdd4ebcde77b9c515e5ef96", + "chksum_sha256": "59fc66a019ec3cb7842e154a52bc64bcb58fb3c18825e40838bea49d99195aa5", "format": 1 }, { "name": "plugins/action/sgt_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c8aec7bbaf09fd5f06d53ac91930425cb94de43c3a2d2d31f2f448e8143f07b", + "chksum_sha256": "c1d0315bde58c60f0b7f686f0e6afd5584785ee640b8b968d56512187218984a", + "format": 1 + }, + { + "name": "plugins/action/px_grid_direct_sync.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d2d0ae1f76a427b1e9a5b31b3acb0dc82501413f461d3004caf587bd090a124b", "format": 1 }, { "name": "plugins/action/sg_mapping_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6f6f7e2714b6194e25bfd1830308c0f3354849dcd8f3344ad25da21554584239", + "chksum_sha256": "8c0a2f73c173a3587787241081953c2aa694a100a787d92198fcc499c5695644", "format": 1 }, { @@ -2748,7 +3210,7 @@ "name": "plugins/plugin_utils/ise.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75af06fa992137e1506d5daba3fe7da1eda9c590fb4190294af256782ee78a60", + "chksum_sha256": "58b9cba5e3fd3e37567e1a6673b76fdb295dc97014c946e1f2bec44cc9fa0bab", "format": 1 }, { @@ -2776,196 +3238,210 @@ "name": "plugins/modules/device_administration_local_exception_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "09ae30cafdfdaedff939f4b2c930cb542fd43b4561624277d409aae46157f7a7", + "chksum_sha256": "ac47c5e0b08f771868c2c56bc988e13c5e9ce93793361b28bc7987e3e8d76ee7", "format": 1 }, { "name": "plugins/modules/device_administration_dictionary_attributes_authentication_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8476e48894a7656205fc78df7eac32ab88ea67689b3f93062dc5b23c018e0461", + "chksum_sha256": "ab243a37d3fd93977eb431aae03530a531248f4eaad3a684fb20018d37ed57b5", "format": 1 }, { "name": "plugins/modules/licensing_tier_state_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "63fb977d105ee74a82916f0ba2298cab112a91c126b43ec2f6eac8031c20bbd5", + "chksum_sha256": "b8d9ffa12dd9a7697382ed8da35dc1ca86954087323d98674592b7c285e99db1", "format": 1 }, { "name": "plugins/modules/trusted_certificate_export_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7005a773193d4c2af2306f641b10c106f205a563ef5903cce77353726b7bc080", + "chksum_sha256": "9ac672294aab0cc66f02e81e045c2096a06105dd17edae9ea6dcf9e312ff2a23", "format": 1 }, { - "name": "plugins/modules/test_connector.py", + "name": "plugins/modules/network_device_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8765f75d2dc3d2e7b12bdbcca138d78e63c90b4d47ddcdd969eccbded3bb6b6", + "chksum_sha256": "a3bc6ac15cbff97155915dfb398f3c92fb16d2227a5e8ccf1752df17ead0cc16", "format": 1 }, { - "name": "plugins/modules/network_device_group_info.py", + "name": "plugins/modules/px_grid_direct_sync_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f2fe4359fc0c23d30519fb22b73700330ca25377e18153339c591d3cc17bca54", + "chksum_sha256": "ecd491e9e40037acd94ff089cc0b7b0d78e2d041d0de68125b6057c392ee459f", "format": 1 }, { "name": "plugins/modules/sxp_connections.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a3c087ea9a964262bc9c18b16b592536c2ac56a76ce8c20b48a7157ef166cac", + "chksum_sha256": "559a7a759cdb1216046034c53dd9788c1f7a75635fa60e127c27209a3a03a8cb", "format": 1 }, { "name": "plugins/modules/guest_ssid.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dede565f2ffb62d09f9bfecc241cf110f74ea4cfb5d36fc89059dc9c9b66653a", + "chksum_sha256": "50c2509b6b9d62c250a9f1c4025152a66929e9cda43c1067c943cdcfa1fb5784", "format": 1 }, { "name": "plugins/modules/proxy_connection_settings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cbb52e38a4f8e52c5fe3f7cd05370657404d99ee22c4f662fafaa68797251d5", + "chksum_sha256": "51419ce21abb9e2a0ab936fa30f9bea02930380af4222acf5f040a5c3a9cd3b9", "format": 1 }, { "name": "plugins/modules/node_services_profiler_probe_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d2f4e2aaef44e1310805589382a1ea7f3c6d93ee2c0b6ed322428fb520455257", + "chksum_sha256": "02ae3b8cb8601e5de52a98362e55dbd3cdc671a8a0353be056a4128f17057633", "format": 1 }, { "name": "plugins/modules/network_access_dictionary_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d69bb851277d9e75a8b93c8ce1dd8c578e6118526abe491a8c6f22c898a764c1", + "chksum_sha256": "3f806085b6c35ae4dc46f73fe03dd3ed3a3206a253882a55fc8b744f6357d058", "format": 1 }, { "name": "plugins/modules/network_access_policy_set.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5713ef3d393066e493d3c87cc9a719c7d16551a1b835b341ea811f977f7c1888", + "chksum_sha256": "feab28fe053e32c968713067f6919ca47daa8f820ab2f2cc7e6a10dfef826782", "format": 1 }, { "name": "plugins/modules/repository_files_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "081546c6c87db20ca51c38d82b012ba8b1bd5070cf652e0d69e9f5a2ab078a2a", + "chksum_sha256": "c076d9bfa537f7bfcf757d061310fbc91f407bd33ac9b521a138e791c29bd67d", "format": 1 }, { "name": "plugins/modules/repository_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1703f4d06378c7020d3f94421a47556b13dbd7cea9941f7f679b81c8d1e83fb9", + "chksum_sha256": "5b9b744e1267aa1a61c452fbfa8f0a25711e0f46a57d3c54c91b79d1f6b7e278", "format": 1 }, { "name": "plugins/modules/rest_id_store_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14b572f096432cf70b51d5baaf706e6d0ba28d86820ea8703dfe5132862561ea", + "chksum_sha256": "394d9ad2b997ab7bd55af93043acf3857db4206787c521e2d517a568e42e89d7", "format": 1 }, { - "name": "plugins/modules/dictionary_references_info.py", + "name": "plugins/modules/anc_policy_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be0b8b39394faa8fcec5576e32b80f640b9226d8f7e07a9c010edd60df55a206", + "chksum_sha256": "d726d9e5f0130e29bdcb4b83c6145691db91e6d20a7a68136baaa3b7196f03e6", "format": 1 }, { - "name": "plugins/modules/anc_policy_info.py", + "name": "plugins/modules/tasks_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "294257a71721b5d974d429af6b3ddff783885fcca6330621af88d5db6fb37d33", + "chksum_sha256": "3751d8e5654a2cf52a81c4086f59c0bbb73a3b09d16bfbe748c1344fde12a5f5", "format": 1 }, { - "name": "plugins/modules/tasks_info.py", + "name": "plugins/modules/configuration.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9867e0e226170cae411c75ec11449a512ec0bb13a344affdf4759217f3e2b1ed", + "chksum_sha256": "e4c6bfea279c8c48bd9f4d31840ec7a37a6e49e1d31be78e9e07796155620db5", "format": 1 }, { - "name": "plugins/modules/configuration.py", + "name": "plugins/modules/trustsec_sg_vn_mapping_bulk_delete.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "716c2d97dfa29982d894ed7b6eed49df77788bf629c12ad17d54b4bd91d2dd9e", + "chksum_sha256": "9058695b4ee0e8a83cecab2f37783154e7c2d13eb78b49c765f4acb019b9fa92", "format": 1 }, { "name": "plugins/modules/device_administration_authorization_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "739ecce2426b8e3de909cfc839fd96205bee964536e62f493becded908ca8eb9", + "chksum_sha256": "f2b4525b7beebd058983763818deae4e016aa629b5948ccba2c79c7ea90d3333", "format": 1 }, { "name": "plugins/modules/guest_user_email.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7d89a26275bc421969561f4dad11a78b569337f49dce8582fcc3eaf213dff98", + "chksum_sha256": "5d6ff83f2a049a4d01d4ccfcc5861569e855117297055b320221f2c0e83e6341", "format": 1 }, { "name": "plugins/modules/node_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6999a49500155c2bb7f46c35c615249636e24b590b584fe9a2a1e0eff1826d44", + "chksum_sha256": "877b3485538320139f6f45f8e1732df5fcf3536ff0d2919eda672a17b68468c1", "format": 1 }, { "name": "plugins/modules/mnt_authentication_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f0681c527c0536669cdfe189906f1a0d50b956ed7d2c62d5ab09a5bd1d164eb", + "chksum_sha256": "3e8a05dca3960d8b236b4e6ab86a1937c74a819158721b469c2228f844ab6550", "format": 1 }, { "name": "plugins/modules/pxgrid_healths_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5ccba2e9d5158dfea68ed16f7a88d20ee607adb1230f571d405aef297ec72331", + "chksum_sha256": "b4524c8967bb9433dfa0830d81b34ea13cdb0bbbdf4cebd544047c1912c1501d", "format": 1 }, { "name": "plugins/modules/hotspot_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3faf22154e3697a6747b9a125c97715d01acc6ec9f68075b41dac7ac3e2f411e", + "chksum_sha256": "4fc83c7da5fbf2834960d484faf566e29b79b97289fe45b6dce0fef80cdf1061", "format": 1 }, { "name": "plugins/modules/authorization_profile_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9313dad0b5059a1248e29e1f6e7c8e85c1295fc1b078a7770380c24fce5c7a88", + "chksum_sha256": "6adffa8ca5b3db5f5208645c31c89689c8f84a18f924f026f266216813960760", + "format": 1 + }, + { + "name": "plugins/modules/reservation.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5008fd7a7382a62dc1b1a2181f06aa3214c42df2469778487cfec1d35d6a543f", "format": 1 }, { "name": "plugins/modules/hotpatch_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0e2c05a9c3a3d0202f0cd9b6b5388815a7021c6caed8bf7237ef7569bd93b03d", + "chksum_sha256": "2e029116dd07b353e86b7e2934d962e28ed99893651c9a2059e977760f212f7f", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_sg_vn_mapping_bulk_update.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "917c137cdb7e435e769ef3ef303c29980a5ab74fd108e1edc1bb1fe5ffea85ab", "format": 1 }, { "name": "plugins/modules/node_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "882b934437c291fb9fad34742acf7dc90fc37d4b3eb026dfb42f30b1457acf50", + "chksum_sha256": "3fb8c32338f9f4018b1dd9b518c766f135e28e9d1739d9573662acf703d8a7d1", "format": 1 }, { @@ -2979,686 +3455,840 @@ "name": "plugins/modules/network_access_dictionary_attributes_authentication_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6c304ee66b0e51c1a3cb95d4a387df3347fc8d34c22b28a8d065a9d79db8674", + "chksum_sha256": "93e1675b10320c085a488b9fb9bdf5a35f0955c4430009f3ead5dcddbe63053d", "format": 1 }, { "name": "plugins/modules/aci_bindings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d00714589a5f15f66f45f8f448144376d3ee8b7fe585909ac7ab35c3ecf49f5d", + "chksum_sha256": "ebe6afd9e611d9545150ab18b9459e8a3d7d48313a968c4110de80a3572a6ffd", "format": 1 }, { "name": "plugins/modules/network_access_policy_set_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8bbef6ddcd1b4622b2a97d7c18e1b0b1f9f9a8e160fbb3a4c5dfde4688b6dfbe", + "chksum_sha256": "0fd31d304d73fd40b924764e2fdc8adb3352a42ab427aa348a2133d79c529358", "format": 1 }, { "name": "plugins/modules/subscriber_imsi_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2ce392430ce97f2daa5d4246e2ea99d9f32b6eef1a962bb8a448f4cd021cc8d", + "chksum_sha256": "4a2cf4bbfec20a1722d5585fb2d326ab21ca859bbe3ce7c166f8e706782d2dfc", "format": 1 }, { "name": "plugins/modules/id_store_sequence_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f493269344feb6a4033def5c0e6d0c3c4d440463b9c19f8ae7a79fb8bcdd7cc9", + "chksum_sha256": "fc48b1ca5b046ded29ccc9129240d51aa1956679603e0f5719227a942d9be5ad", "format": 1 }, { "name": "plugins/modules/device_administration_policy_set_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b82251d9ce28fdee92a44b24606c72313b90ecd377fbb823d528d6fe3bea1a91", + "chksum_sha256": "a8d61f3e4adcf681f45cbc59cc91dbd895bdce6d0c43e631db61eb47938e0dc5", "format": 1 }, { "name": "plugins/modules/sxp_local_bindings_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "35d00be52dbc47268c254ab700bf84d859dc92df667f1b07c62ef68fbb6d4c98", + "chksum_sha256": "a5a1db630c06d02e485769b74193478a058f9219d01c408cc90be2c8a4b689f7", "format": 1 }, { "name": "plugins/modules/ise_root_ca_regenerate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29bd7c7145a9160a485b567a58e97d06b0522f5f610c1efe2cfa9c4243b7bd69", + "chksum_sha256": "e0dd09a066e736a3f37b9a6bcd0f085c968f0efce736af75245fccf011db7b7f", "format": 1 }, { "name": "plugins/modules/mnt_sessions_by_session_id_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2babc37c2aecaca3cea9206bd2f41f0495b3909a4e0a4ab631abd16766499212", + "chksum_sha256": "46f2647089ac4047c8679c2f84a002abc69e56db79d0be02496327fdea7e4eb4", "format": 1 }, { "name": "plugins/modules/network_access_service_name_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b03b476ef2df82c065af8343f272c6b7d88d6853686afea82102e701f707a28", + "chksum_sha256": "39ac2337f4065700e41ca7433d4fe97340c24c6f1f37bd845999a3edc07d2f6c", "format": 1 }, { "name": "plugins/modules/configuration_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e29f02240b3d31ed366388e4cc75fc8da676e639a5cc925c342099a4b785a91e", + "chksum_sha256": "1c2050849d0a945e48d0fe23982953b2584af6c148e4520dbe51e910a9003f11", + "format": 1 + }, + { + "name": "plugins/modules/custom_attributes.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b2d5955ab5976fdf109a7c9dda9ca996c4943908861752defc76f6fa80087e5d", "format": 1 }, { "name": "plugins/modules/guest_user_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "69c182eddf6fa234727d6ed1e37ce07746e7fae7c88c4a29c4f39895ca39ad2e", + "chksum_sha256": "dd77272ba72cbdd1355cfbbad74794c0d2e8bf946b12fc37830ab2b148eb4626", "format": 1 }, { "name": "plugins/modules/aci_settings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2586669093619adb07848595b89811aa8954a4cb8c052cde2a31e2c840b9dad3", + "chksum_sha256": "7b5dec294797f6cdd34f411cfeb36c5ec722f924ebf220cfaed392fe83ebddca", "format": 1 }, { "name": "plugins/modules/bind_signed_certificate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e29bbdf7db56a3801a7bc49509dd30c59a99d31d19c3ed34868258d29f63ecf", + "chksum_sha256": "4ac0aa93e4c0041f10f68fe4068d81913244c1f1a1a2306defaa1a8a271ef95b", "format": 1 }, { "name": "plugins/modules/endpoint_register.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f49a5222503a73a905aa489517c5d5c2c4d42c8fcefbb41418731eaed3cd6ac", + "chksum_sha256": "f9b487a611b8591549d23193f252bb2b6714a7081a69071a757fc3bcd8e9552c", "format": 1 }, { "name": "plugins/modules/px_grid_node_delete.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a784dc14d4e256ae046acae41a8aac1e00e3a35365eb7f3358137695cb4a717", + "chksum_sha256": "7d26da31dbabcd1c31e555259bba968157190a612b7828470e2d1f156bbcaf22", + "format": 1 + }, + { + "name": "plugins/modules/px_grid_direct_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b71d90d1808b21127e6284b2fba18384b9daeeb6416a84629a48980a0dd18469", "format": 1 }, { "name": "plugins/modules/device_administration_network_conditions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39d47ee06a7c2bb9464fb4ce8c3c509010ec682b82fd5d7b8fe172a0dae90802", + "chksum_sha256": "8ed2e94752756a77fcea7238d4c63c819921310eb640a80e1a895a170a651434", "format": 1 }, { "name": "plugins/modules/node_primary_to_standalone.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9aeee0804d23f71e8228af812a2ba0be44719e1d81c6324fb88805a4be56f540", + "chksum_sha256": "ada3ba0b6f339fcbdb63ae1f958b0402bb27b6046f9be0a73c7d958d2fd76382", "format": 1 }, { "name": "plugins/modules/active_directory_leave_domain_with_all_nodes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "748402df727ade75ccb80cd8dc5184c585428649b88a6bdac12f5a1910c115f5", + "chksum_sha256": "0066b9396f3fddddbb7d83a8ae660f9fdf9cf621fd09158b25c2a788cec5f253", "format": 1 }, { "name": "plugins/modules/trusted_certificate_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7866b5a7c01dfacb8500b37a6c9fefabac57fe53e1cca6c4c5269320371b33d2", + "chksum_sha256": "8e0eeb1632c6d0f4e1152355208455cac353aefe5508a17a960be2c5aa00b758", "format": 1 }, { "name": "plugins/modules/licensing_connection_type_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bdcd9d2705e8a2100da6cb81ff01e381f000ff3eb60273e7970d656ae0170861", + "chksum_sha256": "ab725bade0873d2bde546f332273845b0718fe89ab68fa81aa5a7a721f79758e", "format": 1 }, { "name": "plugins/modules/mnt_account_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c4fc3f6fccf8aa815b68914c5fa073ade60fc06c84586aae609557e5620905a6", + "chksum_sha256": "18bfecca4ac2e2c5ed908907107b69cab21fc597968e81ceee2963ad359b2a48", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_sg_vn_mapping_bulk_create.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0918cfd05c084b6c8de7d89297eed9687a6e0ed4af10fc7b10a449e59bd57fe2", "format": 1 }, { "name": "plugins/modules/node_deployment_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "166ab9970563ba3d6d8de08f901e34d08dd445d242ea31b4c518d9f135610b79", + "chksum_sha256": "8b2e37193fd639d0aa1c62c0a4f9d17a1e8c6abdbc1763763151ace639e341cc", "format": 1 }, { "name": "plugins/modules/subscriber_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "92c9e14e1f6a087757a766e596ed0e5cb6a94189257fb7e9d0c216d3dc096ce9", + "chksum_sha256": "28870c94f0b4e58ae128f3eddc02cdeec0781c6e4d79da71ce0ad4ac8806c08a", "format": 1 }, { "name": "plugins/modules/pxgrid_failures_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec85b40aede2c5c985ff8f3b5795d207112c65c6c6675fdf9f9143c7e0211988", + "chksum_sha256": "620047e2528a525cd5198ba9fc2985a02678b3726a5f600a848a69e0b60d538d", "format": 1 }, { "name": "plugins/modules/network_access_global_exception_rules_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6596b2bc770e1e393410b9d91a510e529a71caef529e88d0ca102e244c98b5a", + "chksum_sha256": "117d1bb60bcf8ecb8775b5684ec40be25792214f878c5151246fad899fdf7ff3", "format": 1 }, { "name": "plugins/modules/device_administration_conditions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "92c92206e422eb46973b3b0d0d1b6a1994732b6a4f305e91d1d0843435242c59", + "chksum_sha256": "e0b50ebbb32f33385a443e2645d4a10e282710885e66cab4d41c488329d8d8e8", "format": 1 }, { "name": "plugins/modules/pxgrid_security_group_acls_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5e496a8ed7524abbfa731d8cbb265303e5bd353e64b6d546eb024691400a827", + "chksum_sha256": "0dba9f1f51446eb104b3296dacf9b40d866e15ded14e5b830dcb5cb83507e843", "format": 1 }, { "name": "plugins/modules/guest_user_deny.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ccc7be67ebbae53ee7a9cec8e343351ebf128407dda3c44c793d55dbe3ccd8c6", + "chksum_sha256": "7bc3112a2a8b49ed740fecbadcdf7e7f75f5856060c0feb1c63cd4ee708300e3", "format": 1 }, { "name": "plugins/modules/admin_user_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ae8b4f80470b4fbb690374441da5eb486a6df30f1d805df753b62ee8131fbdb", + "chksum_sha256": "774a439b8e515bbe7a580e770ff677e425e307f3d78226455f896cb28db1c27b", "format": 1 }, { "name": "plugins/modules/endpoint_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7234182a4d90dfcc8d61e69cee62087dd92fa001e0dea6e222da1aad0515d065", + "chksum_sha256": "26c00439c81dfad5e2bc625783ddfbe92681636b77ca9624190e3987ec781169", "format": 1 }, { "name": "plugins/modules/threat_vulnerabilities_clear.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5a65e21240cbdef08c72c22f3fc38024fdf2872157bafb8c9d052d4cd9723e2", + "chksum_sha256": "cae0061dd1bfcf823ac070f1de21842a978a7b4a5506221783cd43c6b245bd54", "format": 1 }, { "name": "plugins/modules/identity_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a7c579389a51f5895c6834b9bc58a1a6078a63c8f56838e40eaec496788c00de", + "chksum_sha256": "a505ca5b027f332777860685058d1ba4fd50c76c7f66c3cd08ca9c4bceefea76", + "format": 1 + }, + { + "name": "plugins/modules/duo_mfa_testconnection.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c074763e5b98d13012981a39b30bc6ba66f912a41cf34b130e806fe627f39938", "format": 1 }, { "name": "plugins/modules/network_access_dictionary_attribute_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f70a53a10f74a5f5c4018edbdaf4ddd5cecad5afa3d9912badbbe38f607d5bae", + "chksum_sha256": "d4d79fe7a6264cd452dc7117a59eab54a95b8a6f8c50ca8c4fda11ec4f2e40f4", "format": 1 }, { "name": "plugins/modules/sxp_vpns_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8f365397225b9fbe923f97d2e7fdf2424d880079c1c39e7432b79fbaef99a315", + "chksum_sha256": "ec3f454a459c375788ab58470ef2b0630116743d6dc6834d243dbbba1be36fad", "format": 1 }, { "name": "plugins/modules/network_access_conditions.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c71c394baee493813c269df1b56c4c7266cb66f8e9e01765c088ca17af0dc0a", + "chksum_sha256": "3a66e03ae6077503a69f831faf64ccbd6b58aa48ae06945a51907d72d9f167ee", + "format": 1 + }, + { + "name": "plugins/modules/user_equipment_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8b133983435d3199ec07ffe19c655eb388afafa630f8619c5ba9ac544f415708", "format": 1 }, { "name": "plugins/modules/certificate_profile.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a60ddf2d4e06b73c26a3fd67fcc0ea49f5a1a7204d31dcaf11d7a84b1b5dc32", + "chksum_sha256": "d9b698133cd644bf1a881e17f2a459e50699a6bce7f261758dc5ac941a0a9045", "format": 1 }, { "name": "plugins/modules/pxgrid_settings_auto_approve.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c71ffca5fee2bf40c945757640205103b8a8dc10244255639f32980d363c996a", + "chksum_sha256": "2211b486ea3eb1e20cb049fc8fdde248cec8b83b1331fe4ded293ecf80c77dcd", "format": 1 }, { "name": "plugins/modules/guest_location_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7524ac95d885e8cd03250c3559cf2d7e27f680de671e8735eb8ce273e8f65bd6", + "chksum_sha256": "189f182a2112405d25ad0f5de587df471cf1a3c67c39077fa1ace5fb944102f6", "format": 1 }, { "name": "plugins/modules/native_supplicant_profile_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c105f24de5e238f0d2d6e67d977fb7aea951d4d846100f071b07045c08a9a15e", + "chksum_sha256": "fef2ef5e316a1314a7de8861e3075e1ade946acc962233d254e48a763ba74293", "format": 1 }, { "name": "plugins/modules/device_administration_dictionary_attributes_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08d859de5c2944ba7ccabf2605e0d1cc7bc560fa3f0bba947593c8a9bebce930", + "chksum_sha256": "7fd5231cb8ea0e426aef8e76622d61aee17c18b1b42963bb7a45825d542d21da", "format": 1 }, { "name": "plugins/modules/network_access_conditions_for_authentication_rule_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "990e98e15ed154a9a30a89853ea49931719f6d53ea6c8c67194a94ee81fc52a9", + "chksum_sha256": "2dcac024072557a9b757ae00a16b27e2961e0f8171b4f6aef79cb68904cbc558", + "format": 1 + }, + { + "name": "plugins/modules/ipsec_bulk.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c8a77cbfd51071fe77a6f19172ff435f08cc69a18a0eb1f85e2dd3d5e6537d66", "format": 1 }, { "name": "plugins/modules/mnt_version_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c673c5c9cc1e42b94130c122a68dc8537483da2cd9d497f0e5aa18c667d03059", + "chksum_sha256": "460117dc5633e2e2d8ef509a060a1ce9e9356bcb798bb30510460361ff2cf6e3", "format": 1 }, { "name": "plugins/modules/sponsor_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "440830d53446c8e995da69cbe9b1321ee5fe90a3fbb56800020dfecf5a792f64", + "chksum_sha256": "4669cc15bf064790912c7e810dd22ffa814a878d7c66a3688da3180935e924db", "format": 1 }, { "name": "plugins/modules/device_administration_local_exception_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49552d90f4c02e903bdf3d927bb4a14ea72cecea862ea4d391d666aca92c5122", + "chksum_sha256": "4f7b27ee724d152e0353bbbe109d24f0ff31770aa4ea396ebc60772d63c66134", "format": 1 }, { "name": "plugins/modules/system_certificate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "13d091928dc59c166119864b976ab912927180878d62b21113269b6fc8e2921e", + "chksum_sha256": "921cc7c7092f734f3f1c5ecb163a38bc552882b3e67fe666d6b6ab48b7933a8d", "format": 1 }, { "name": "plugins/modules/pxgrid_bindings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a44b764670fd210b48bca6484acd60bc1ba75962bd9a863001199aab9ac2d879", + "chksum_sha256": "3f29d60e31f9d0a0a739eb9f70eab09ba31b0657b99f24b6acc1ce51e44db76f", + "format": 1 + }, + { + "name": "plugins/modules/ipsec_delete.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "92fe6dce1651fa4fd30b0fdc7ef41bac345dced536af349f2b3a7f25ee6d99e8", "format": 1 }, { "name": "plugins/modules/tacacs_profile.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24632d1746e614d367f8830fb90e54e811f170bbe72f142846e2353acec6d138", + "chksum_sha256": "6cef78394a831fa057d15dfd2aa7b95ec348f7a6bc45fd0c007735983699bb38", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_nbar_app_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9811782cbdfd59a9fe6fbc68573e5bc3e8a82ecd5f7a6d7791a7e9068a2c71be", "format": 1 }, { "name": "plugins/modules/tacacs_server_sequence.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5cf7cec337806216ce8d2095ac7bde8ef3efba1ff1b449a0076d305f63cab5e5", + "chksum_sha256": "c8970e3784b6e61112a5a3587df1edaf544d89cd21a894160961cfcbf17a9a13", "format": 1 }, { "name": "plugins/modules/network_access_global_exception_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da1584ca3b1a9fd0308554c2726cea2d838cbc3ae42289de3657227c6033ca5e", + "chksum_sha256": "8c99eeb2747cd3255806d6f99f49a2ab28f7b5bd26c2cbd35ec71fcdbb8e38ce", "format": 1 }, { "name": "plugins/modules/mnt_session_profiler_count_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a981bc86da64317d0fb2e5e92d9e8c0390469061923274cdc6359975c707b3fe", + "chksum_sha256": "c454055915d4abb383e7e7e5ce309ca6a3ccca39a1ab303319ed1e38ddf98205", + "format": 1 + }, + { + "name": "plugins/modules/duo_mfa_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0c5ad7fa301e60afd67560f964c7360754e7b74f8a10d88d5a82e856bd57603c", "format": 1 }, { "name": "plugins/modules/external_radius_server_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "814af5eea5adedaf71567040fe7b0868aa1148430395c8cb73efd3d89bc21e2a", + "chksum_sha256": "e8125a7a5ab0e3de44aed06d4c7e87d1e8fe319a7dfbcb558d86fd41baa9e7ff", + "format": 1 + }, + { + "name": "plugins/modules/custom_attributes_rename.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e99533228e2a60cc16b7211f0d6c2398a903764e2aa2ee4f8d5d89af1dee540d", "format": 1 }, { "name": "plugins/modules/session_service_node_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "285305471b4e4b424bf55002cb53b29582264c933c9eeae0a683823e81732c67", + "chksum_sha256": "eeba4cb3e28da3747ecefe61c3ef13dd5bb1dbd85ec39f00128ba57f1f813f25", "format": 1 }, { "name": "plugins/modules/network_access_global_exception_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b8ec79d4392452c1091d30cfa2d5a58866a38b876094aa4923f12c7bc801b88", + "chksum_sha256": "7482602be007b622d901477297bb41fb958652e90c632834337fe6e91581228b", + "format": 1 + }, + { + "name": "plugins/modules/user_equipment_subscriber_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2ccdb846d7ba9d7341cde3aa3209fa9282a6b8d3a04f5f9a2b6cc013df625c74", "format": 1 }, { "name": "plugins/modules/sxp_local_bindings_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf6e0e53c061a0c1808d77e85e0eefe546b5524fd5b62d2b7e670e13140f217d", + "chksum_sha256": "7b9ce5c822ec519cf2dfdb3bbe4086f26a1ba6c41f0362bb960b7dc67f5c9b2f", "format": 1 }, { "name": "plugins/modules/pxgrid_performances_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "efeeb776fe85cea5921d284fd296181f0ed12a607b5fc3f6fbe7ea6a40a348e7", + "chksum_sha256": "05c10d7a9cba232f1b3929936aa0ee680763cc07e2468d5c35cad7c09d9c474c", "format": 1 }, { "name": "plugins/modules/csr_generate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "119d441b532c45269469923f9bceb3fdadc23c8ea96b126ec40cb0663ee282fe", + "chksum_sha256": "330d7f3f7272a72606f2e52f059df7902c73ae251d9d1b17d70682d7cf3a582c", + "format": 1 + }, + { + "name": "plugins/modules/duo_identitysync_sync_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ac97730bac3cbbd796f3d49faa4bc3c8da15fdbcdc6739b4c005b5f2b5e1696d", "format": 1 }, { "name": "plugins/modules/dataconnect_settings_password.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "de0cee6f0f7dafbf1064c2a527765ce3c6ca9238d096763b08bfac161d45d79b", + "chksum_sha256": "3a601b4d44de93859f85f2bdf300d52e9034dbb64b0317b82ae49a1a3e060a8c", "format": 1 }, { "name": "plugins/modules/pan_ha_update.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7704e611ac6a19e9ff118adeec6d3a1eb46c3d1e8dd4597b87190c8215a73a3e", + "chksum_sha256": "bf0a0869e4a1c3c0a04f8b3d6dd720a0be9d229bb97b2679735af97f08766280", "format": 1 }, { "name": "plugins/modules/mnt_session_by_username_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cbab19d5b0c29f5ef2b89a86ee72ba8b2992ef1ecfba05a79a4eb5a0df197cba", + "chksum_sha256": "a80439a8b89b90979476669c37f6399627654ba811a10cedfe34ff92e52d1938", + "format": 1 + }, + { + "name": "plugins/modules/duo_identity_sync_status.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3b7be870c5e4a006f55abe15832dba12650bd97d7975378ed3d82ba1aeb2dfcb", + "format": 1 + }, + { + "name": "plugins/modules/duo_identity_sync.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "63ae97b12506e987db02fd71c1e03d8680c2158939894d2b42a407e595d8fcd3", + "format": 1 + }, + { + "name": "plugins/modules/ipsec_enable_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "92dccabe3a211166e6bd4566468ed48043b03feec309869e0f52bd79f0c9db3c", "format": 1 }, { "name": "plugins/modules/network_access_time_date_conditions.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "512c68e0c3177570b77d3ec64c88ed2f317d36b1e628ab5de3ac474c2097b660", + "chksum_sha256": "f8f782383444dd79bfc3357d2c4b280271fdd2391436b255ed9564cafbed6a4b", "format": 1 }, { "name": "plugins/modules/device_administration_time_date_conditions.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cef7f7b1bb08dfbcfafd73b3503eed875821ba10e5bfa7b10cbc9bd162e3b89d", + "chksum_sha256": "7f759aff760e0e1898f69d84e442478994ab98e9210d2705d19a13d37142a571", "format": 1 }, { "name": "plugins/modules/byod_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4da7335799d04544ba7edc2a85772d5b098293ae6c7c88cfe43a6bb25a299ac5", + "chksum_sha256": "ad2edc5d162c1595764a22cebde04246eb4dd7d5fc7f0c89c133dd752e952116", "format": 1 }, { "name": "plugins/modules/node_services_interfaces_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "178d0c64a801a7692df4bcae630a603bb9c4099c27ba763247d6f15c4e56b275", + "chksum_sha256": "ef69350ccf607ca8bc324f5cd79f7c6e0e4e5d32d87c1a8e5c2db7327e30315e", "format": 1 }, { "name": "plugins/modules/pxgrid_endpoints_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "72465579a8aeeeb2744940cf3d0c35a1b4960639d4cf2f1b44c4b1eac62e219e", + "chksum_sha256": "4ea877870a4c4a50d697c153d7c6f6d6dc1e5bd20b87b6c204d01d69a1535308", "format": 1 }, { "name": "plugins/modules/portal_theme_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8bcfbe78101b725e2e239015a34293ae387d65c87df63fd2dc2569c15b827077", + "chksum_sha256": "366fb7ad1bf2bf00957e5f100d1dd0df518c9e37885701cca3f25e15e01f0544", "format": 1 }, { "name": "plugins/modules/guest_user_approve.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b3fae6c1c1d24e9c807f5a78354f84c35e75f4897a7d1fb3dc1a217dbde532ec", + "chksum_sha256": "b1eea3235c1410c2b7e28f1dcd22faafc0e9e0a1a1d6e39a0fffbb54f5070f61", "format": 1 }, { "name": "plugins/modules/pxgrid_session_for_recovery_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "334e6a36a312cd82103e3af41686ebe5fba1ff067e26ced5204bbb392bbe3d60", + "chksum_sha256": "af21b421849fb0bc5a84e0e077ce1304acfa17fd9adf0be5e3e88d5c7694fa8b", "format": 1 }, { "name": "plugins/modules/licensing_registration_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d6ba9ad31d635db24412aa750982fc42482821b3ee1acd6b3571f50757f02e7", + "chksum_sha256": "2c513aef1fd12b52e19bf4a0dcfc60943e2c0e58a576db318bf4aa732f101a2e", + "format": 1 + }, + { + "name": "plugins/modules/stop_replication_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "57b18e342ec7fbdb9e16dcbccb5e946aee3b42a3b850d98ea979dab2f6234f2a", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_sg_vn_mapping_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "69c105abd0ca2a082bba7ee91eee97966c6cc40416d674706527e46a91f0ca1e", "format": 1 }, { "name": "plugins/modules/tacacs_server_sequence_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82dbccd8a46ae6cbbe2894e54f9a0fe503c02ea351705ea7d079fe1125496505", + "chksum_sha256": "6d11a6e729668dc0923eb50eb70fd547c6137ba5a8bcfdbbe6ef41b5b8eaf70a", "format": 1 }, { "name": "plugins/modules/sg_mapping_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54a0b58cf1763da689c16f4b2f3912bd0f3f6a96dfa1816d4b7a11e6cf8db529", + "chksum_sha256": "b3be0ea1cc652844fff7f76387eaadeeab54a7c38bb20cbc602a15c981064cac", "format": 1 }, { "name": "plugins/modules/dataconnect_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "69d5919d86041f3bf3d7f32ba6720c162e8165e0368b711cad9ede31058c1e2a", + "chksum_sha256": "cc3c211e7f50ed1647ba273085dba91c9958ef6a22bcfad623cfb6684d450ecd", "format": 1 }, { "name": "plugins/modules/system_certificate_import.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dbac596ac6bb7456841a9591a69df3527e48bf82cf78feddf31c6500f0080c8e", + "chksum_sha256": "3dc15f6c5ecf9b1e5e95c9aeb73814655ef2afea5d3395368b989758c92b8eb1", "format": 1 }, { "name": "plugins/modules/mnt_failure_reasons_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84366cea6d069a821d8cabcd550f5deb4af75df67baf7bbb35863199898bc69c", + "chksum_sha256": "d6ca039e54599bafd492c33cfc102aa0392f443ea3d57a9aa9062528ddbf4557", "format": 1 }, { "name": "plugins/modules/transport_gateway_settings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e40a2d87828b48159c32a5ab798f8ad6741dffe81257ce95f61ae09af4382e7", + "chksum_sha256": "f63139744260ff98cead71b4b5957929a2216bbeb5b11940ac20a165b3f110e8", "format": 1 }, { "name": "plugins/modules/network_access_network_condition_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "66e707026f332f82158fd2012fea22d24ff86f290aa599b532e4ef34e19a66ef", + "chksum_sha256": "84da2192aa78d4080aa1bb5ff64974e70e875c2cc551abf8bc168d12f29e24ab", "format": 1 }, { "name": "plugins/modules/device_administration_authentication_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4b693e5505c39c7694e72e228aaff5af8f068f7537d2a35cc95e0f7725f7f8a1", + "chksum_sha256": "f3a3aecd1aa7e19a80af3e09bfcd06807f3f2e9a548bb654f4aebc6fd78c4b03", + "format": 1 + }, + { + "name": "plugins/modules/user_equipment.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6a9b8e6698d97f9a42160f4f037595d7a79d9528f2328acc65997fcdd36d7841", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_sg_vn_mapping.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "30fedf5fc2eacf1345801d559fa607ba88cb36ce5b8f4352ff2efa326511de17", "format": 1 }, { "name": "plugins/modules/backup_schedule_config_update.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f41bdce3c7fb3c2a82dd5b94eecbbbb0db53e1b4488fb76a9254d3b4a70205", + "chksum_sha256": "0c0b65a09ddd28a20347a084433164ca11cc49dc0c0fa03c4fe50a066a4e86e2", "format": 1 }, { "name": "plugins/modules/network_access_authentication_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6ac7edb1debc0ea05a61a364c0eb790fdb27778c30a201c0cf592b3e68a3ed5", + "chksum_sha256": "0b35c9212dc0af4c69f07d7faa7d5a2becd3a9d3ddf84760b8ccb644f5383d19", "format": 1 }, { "name": "plugins/modules/anc_endpoint_apply.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe21680d72da158ac8b28a2f7b2bcea76d2870cf1c605cffc85ff70b5a43f8d2", + "chksum_sha256": "6f22f5e5d63b466d2dfb25741c4e12416785809f29f7e2c55e4bf59a6c3f0f3b", "format": 1 }, { "name": "plugins/modules/endpoint_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a5062fb00b4ca90a7bd677004552a6672b14fc5773bba33d3c630ede90a3556b", + "chksum_sha256": "5f444d6c4b17b177a7b172b27acf9292a4842dd6b599f7c1b5138c5f459981ba", "format": 1 }, { "name": "plugins/modules/guest_type_email.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1b5094c48c7f68b9977588a1276f51fadd56d6653d5b03280a7c997af53526d", + "chksum_sha256": "c5a34caf5a31fc7038c3887d17d207a5ff106ade4729edc02eb2c7a4a6d0db3e", + "format": 1 + }, + { + "name": "plugins/modules/duo_identity_sync_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5387436173ca763a75a616417292dfa947995fb10e36401b7d95a129fe0af6ec", "format": 1 }, { "name": "plugins/modules/rest_id_store.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c89b2fb2ba44a7da3fca22b4f4c3fdf0157c2f4bdc16edd3fe76ffa6be486d0", + "chksum_sha256": "42a18d7f0a19edb93554897443b7f8b5ecf6f2fa1fac5277ee61a589b98bb0de", "format": 1 }, { "name": "plugins/modules/licensing_registration_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e143bbbd3bb0225a2cad0e7c00e00998173ced91eafbd034f1f0963f6efe509", + "chksum_sha256": "1d2eea6269b815f1c46b17ef4061a7abcad04fa36796836091368609a0ff5a4e", "format": 1 }, { "name": "plugins/modules/my_device_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "748f7fb5d09d5eb40a2b621298f0df711ade50999329a6b2b2e24625a98f081d", + "chksum_sha256": "178d3599068faec82ffb363fca7cb7d2657d74ab9edec6df0530d1d4bc1bed9c", "format": 1 }, { "name": "plugins/modules/network_access_authorization_rules_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3cd0179101a1b1efbe61a53a7cb97799ed08e6880bc32d7cbfc89fcae7e98868", + "chksum_sha256": "68fdffa587b0d288d15c49e9c304f8a4455540ab038db5a66c70523024524a66", "format": 1 }, { "name": "plugins/modules/pxgrid_egress_matrices_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "523b21b2be6cc6e4b690615bfa798b85049351b5d5485ac890f3df7abb97fa91", + "chksum_sha256": "2f8a445c311179d1f59584ca6a79cf0ab8d93a156d14064ef851284f64908715", "format": 1 }, { "name": "plugins/modules/active_directory_join_domain.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "113d4c750156d522edd5bba6c030644d9e654e0ae5f04fa73eb39122fec4c032", + "chksum_sha256": "6de6fc619c72d8a30e94462f77c7e9da8d43c73eb75f74713e648b8ae5bf228f", "format": 1 }, { "name": "plugins/modules/device_administration_conditions_for_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2773bf27387c8d366320e3c5c77bbc980c9559ae372087c79dd483fc1896ed63", + "chksum_sha256": "abc9645b45555b7329505e6a20b124f88341d57a802e20b9533f2fa2b6d591fd", "format": 1 }, { "name": "plugins/modules/mnt_session_reauthentication_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2ce45b6bc3c47e65b3262807827399ca8ab390c71e1fdbd83f49559adc975fa", + "chksum_sha256": "7da35619c4d51c859b687bfc329065be793a9f0fe515d2342bf3bf160d5b774c", "format": 1 }, { "name": "plugins/modules/support_bundle.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4b8df8794ae6ef84a2e4ac025033160e625427d2e9abb6f77c35324ac5bec8c8", + "chksum_sha256": "546c16eecf5e8881acc2fff934c02f9d1d6886d4fc57df40291f88607e4f73c6", "format": 1 }, { "name": "plugins/modules/device_administration_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a1a5863fb9eb462402511388a0c639b2439870103a278bfa5b6be90005608f70", + "chksum_sha256": "0b307e15d97aea18d609f7f8f37199b1e07d3e725ffd3df7a0d503d3bedc5b1c", "format": 1 }, { "name": "plugins/modules/subscriber.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55c8d1822050944e73ee3ca1d8536fd57ebeab064bfd5881ce3a70877ed05d61", + "chksum_sha256": "033b5ef3c647ce487107516eaf82dee404870a6bab352dfdaf3cf84306b734be", "format": 1 }, { "name": "plugins/modules/pxgrid_endpoints_by_os_type_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6879191201617c64df2ef196f44fdfacf4515e504659376dc61f252502eb6f45", + "chksum_sha256": "ea477dbf5b1a610067fafe0b971765921636fa929f30d3ef62ea5eb281d788c1", "format": 1 }, { "name": "plugins/modules/egress_matrix_cell_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd3da0a71a6c9aa56fd691517a7e2006251b511f17563c09daceb3ce4be732da", + "chksum_sha256": "41bda1f89e4e555434ea70b41bcf5a0350259cdb231617d2d844405720db417e", + "format": 1 + }, + { + "name": "plugins/modules/upgrade_stage_start_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9442995cd3e5915eb6ffe81993982626fb07cd23a913e4d5ebc4f512391b9e64", "format": 1 }, { "name": "plugins/modules/node_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8522a08959d780c1a5ba51814ed143e40fddc75065bfba19ab0fc85260d31c58", + "chksum_sha256": "1919b5acb4d2705cdff3e09754101b3c581aa63ba6d042160de6379f11ec028f", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_vn_vlan_mapping_bulk_update.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4f322e9da75a7f723909e9aa93f824fb55dca64e4b5d6747eed027fd81962b82", "format": 1 }, { "name": "plugins/modules/licensing_smart_state_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "07e975c845af65bf8c846b1fae10f3d86701964d7dd79561c194fae378ddd680", + "chksum_sha256": "128a67b82de9bb7f031beac784b73fc54fcf22f9843fd0333b7e03ebe7667d75", "format": 1 }, { "name": "plugins/modules/sxp_connections_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "385d9ceff4cffac0ad5569b6c541cde80dc25ff8a5f513e90314d410e04af9f3", + "chksum_sha256": "0abcfd9c3744e3688806d473d0ce91d324e28d1d2b790301f12dc680830f018c", "format": 1 }, { @@ -3672,77 +4302,98 @@ "name": "plugins/modules/guest_user_sms.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cf01c8ef62234046237fd016db6586ddc6f15e0bbef425b852ea87bd2ee093e4", + "chksum_sha256": "cd04818d94bbba39a5aeadc46d37e62f8a0ac0ebf2cef10d5193f5de7bb104b6", "format": 1 }, { "name": "plugins/modules/pxgrid_user_groups_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ebc990799cf775a81fa9103b042a5998d29072c602427c8225365136b3867b27", + "chksum_sha256": "0172e4cafcc03ece894801cd090daf72990554a64391374e618981a3b5efe017", "format": 1 }, { "name": "plugins/modules/pxgrid_profiles_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "63b60b03369e703b7e98ac8698d2dc8541674f4d10b96cbad4d28a955e6f2e9d", + "chksum_sha256": "ad1eed4067fa97b34f925473869f5cc14c019e811a212628e1eef1a990991a5d", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_vn_vlan_mapping_bulk_delete.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2bde54dea645cd71e42ec81996d71f3c5959ea8b33135f661b18bfd8eb778648", "format": 1 }, { "name": "plugins/modules/licensing_eval_license_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "092ad108df75727a6971b82fb7d1faae739f2df3480e3b19961e59fbc27abec5", + "chksum_sha256": "9b9d619cc1f96cf6a22eab84ce705748c34f84b6e21c95b76ef1279c2be4354d", "format": 1 }, { "name": "plugins/modules/guest_user_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e7089d767d922a615f4317503f763dea12565f10c53e88b6f9e9dd1155a9c18", + "chksum_sha256": "d28d76530d43636408cdbf1ae4ec68afaf2b1c236c70b92b42e21bd8d860fd9c", + "format": 1 + }, + { + "name": "plugins/modules/endpoints_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a8877073464f8db929da4b6f48373852a0dd99d23c334d68484c1d65d3dab776", "format": 1 }, { "name": "plugins/modules/node_services_sxp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f9359b6fd1cfd0bbda6fe0b62db6f5d577c6bd0caff3e0d8e18cc5efb6aa59", + "chksum_sha256": "fe9a2f5497d33707745ad86a5561e78a8d19c7df5fe56b0739e676ebcea200bd", "format": 1 }, { "name": "plugins/modules/sg_mapping_group_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "896fb1b8f2b0a354b94629f9f69fe4d56b72c90cb0dc66d0dc0cb8b5460f2d61", + "chksum_sha256": "f8ac6c93e347e9c0a5c86d552b0a784c2807c66e8644e1f804f9459a284300ff", + "format": 1 + }, + { + "name": "plugins/modules/upgrade_proceed.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "276b83407eb1f54b9ca1b50b4cb713973ccf91ce57882ddc14747d11441d5782", "format": 1 }, { "name": "plugins/modules/network_access_conditions_for_authorization_rule_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7f6808078748da83fbd3bf33193a980e16a478823ef26545bf8376fe4c513fa", + "chksum_sha256": "5c56ff749002ab29dd9966a767042458268e50b8a3e4cd0cf6a26aa7c69e3223", "format": 1 }, { "name": "plugins/modules/network_access_identity_stores_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2bff7a962e88648ef38e6a5fc7e4e769d6546ab4bd5530bf229fae94fda7d0cf", + "chksum_sha256": "44eff08307b6dd1817fed439dcb713f5eac3d9926ada966098ec4ab0e2c0e83b", "format": 1 }, { "name": "plugins/modules/pxgrid_account_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "798828d1f1dea8ce271d0d85fac10ae88c58761ebd6d2b68e9654648df813ffe", + "chksum_sha256": "f16fd84646a2ecbada20ed0c915cb5e44236cf058266a754834679298307f491", "format": 1 }, { "name": "plugins/modules/pxgrid_access_secret.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dac8bbd08f48b3dfeb5b2965cef8a570be1b03d56cb778c48d1c94bfe4929e5c", + "chksum_sha256": "a63db44aa753833cd8ca3d5a05cc2b9fb45d697245279e5d3aea977d9bd90085", "format": 1 }, { @@ -3756,56 +4407,63 @@ "name": "plugins/modules/device_administration_authentication_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2216f1e10d9fc493239b212404de1152a8e93a5424e40781ec2c7bc99b3d419e", + "chksum_sha256": "9d2a8085d550b3a4df87bda8b819573c2f16c8c3bf8a083d51de1430ca9c4307", "format": 1 }, { "name": "plugins/modules/active_directory_is_user_member_of_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "392340331831e8f57852bc3fe52fc67346b503b8014aacbbc5daf9b37e12a2f4", + "chksum_sha256": "25ac2d77ebea51facad4f9e47bbc933b6b92bbf942bf1688a75c8e15b21ed0d9", "format": 1 }, { "name": "plugins/modules/sms_provider_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "30e61a30963a7a6953ed62f1cd59222baacef3ba48d6116ed679213367c48626", + "chksum_sha256": "5b627ab07fa9a97a70a744c4b747f4283b2a81dcee761b73761174ec8a06a0f2", "format": 1 }, { "name": "plugins/modules/sxp_local_bindings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab261305426b3606760af2e46fe6d00a84e943192bf2ad51e859904e12680fd8", + "chksum_sha256": "8599221f6b993c53fcb7e03e71b3e706d6ac664b985a80e8c636d872558fced5", "format": 1 }, { "name": "plugins/modules/aci_test_connectivity.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "69b1406fcaffea2e9d7677bbf4f308bb16501522b18fdf4f4255c537d5375654", + "chksum_sha256": "8e781b03585d5cc06de5bef21ca5ea8b94397001d5dc87a3ae1bb1e4bc7b194d", + "format": 1 + }, + { + "name": "plugins/modules/upgrade_proceed_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e60539e6c20a7724491a76a733576876b65d7517cf8db692d9ef26a07394252", "format": 1 }, { "name": "plugins/modules/device_administration_identity_stores_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "47fc19911d0f0cb5ef9d7339d2241caa26ed596e894bdd5bb69d6de031366ce7", + "chksum_sha256": "45cd6f5e9c4552935b061e361ae915a68a0fa7916efb11a8e71217df785047ba", "format": 1 }, { "name": "plugins/modules/id_store_sequence.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "06a6d1fce26994757c7825ea6defbe0c29b653011e30a235afff1ce65136accf", + "chksum_sha256": "2cad7a2d00478de198446755fb9685224c080203d2b23bfbfebbcc089821dfed", "format": 1 }, { "name": "plugins/modules/sg_acl_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d36d21be01c91c21b52a0ea673b78b90e660cc3a883940e8cf1a9d6e948e721", + "chksum_sha256": "78eda82cd5d2e6fcfb3aee784a7facb6cd684eedca982997ff6c11ddd816dceb", "format": 1 }, { @@ -3819,84 +4477,98 @@ "name": "plugins/modules/pxgrid_egress_policies_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d1def0e1c8170e585c9c59e841c35e8f51a917501ec0e719150066e29462832", + "chksum_sha256": "80e2158c652841847d656bdc897ad5a53c8470a77df6e2fda4bc20a9702b9f26", "format": 1 }, { "name": "plugins/modules/anc_endpoint_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d0ed60026d2b75683149dd72c08d85ce9c26ea28566c600a1a9c966e4731420", + "chksum_sha256": "0251bd432e1e195f2dd0ba3edb36c6aa5dcbe3a8de7d4b217bea76772dfa464b", "format": 1 }, { "name": "plugins/modules/guest_user_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc502233f4ebb19bd8baaf8ff496101371bebfb2174243d89140fc85baf8d501", + "chksum_sha256": "600ee4efbeb8470828c0fadad2439e872e0b66628d74a0ade59fd07aa0cfd6c1", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_vn_vlan_mapping.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4323c5fa5e926b7ef55a707d31eb90ea8499b60fde51b2d07644f14778f105a6", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_vn_vlan_mapping_bulk_create.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "800a53452dd653ed3922612968862b2a8bef4c92ef92bbe24e824e8026aeeb08", "format": 1 }, { "name": "plugins/modules/sponsor_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "95514c959d1472f12f379ae7fba7ba17bf369ba32c73538ccc0191d04e047056", + "chksum_sha256": "13e19499252bb2db4d2c90fcbf4febfe6261c1082d2e3b434d566a67261d87c3", "format": 1 }, { "name": "plugins/modules/system_certificate_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b891fbc93ccb6ffb7c1efcbd0b660689a9ed9555c42ec34ff43710c1a1d218f0", + "chksum_sha256": "9626d2b80dd56c3effdc329745ef52b9a17a53f3ad080d2cf7fe699bc658c0b3", "format": 1 }, { "name": "plugins/modules/network_access_dictionary_attributes_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02eb22fda74bfa91c4c6efc3cb5e34467020ec60d2f9a722d838e70269b4992c", + "chksum_sha256": "9ef480b18d743caad7195ea5c6b756c92854c969eb9175be35cf87438e4aab2f", "format": 1 }, { "name": "plugins/modules/px_grid_node_approve.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a460cbcfddbd6be09f3e917dc6b8a222204c846b94e3af6c49196b1e6a9f3064", + "chksum_sha256": "f0870327516d620805cd04b38faffa3915c9c8379d9e84da616d12b6ef8addee", "format": 1 }, { "name": "plugins/modules/device_administration_global_exception_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89e67650f326e57f65431f863ce0c83116db2fc27aae9fe7107f88d16fba7ac3", + "chksum_sha256": "bf84613f4db177bdca1fe10cebbfa5e668bd49184e84539080439bbc8a15850e", "format": 1 }, { "name": "plugins/modules/sg_acl_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73e37949c269a92d51118fba46c5aec3c01a4805ae11ecabf34dece0291a9da9", + "chksum_sha256": "7408ca20199cfe69cd76e41c69ede5a9ea875643dea600afccd2785c7c8ff3ce", "format": 1 }, { "name": "plugins/modules/hotpatch_install.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3931a962d0425130321b383c1374c205b818f3862f434acb3e0582e2aa7ead5", + "chksum_sha256": "fd6272cce1660cb4ccd65081ce88e0e1272b1a40cb4e6f33bf6d94b737c49aa0", "format": 1 }, { "name": "plugins/modules/active_directory_user_groups_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5ce0e60fe79af6b6d2ba5ee11f5f01bdd80b5292d7ad365dc16f7bb62ad9ad13", + "chksum_sha256": "9b3e51208f0cc03886e2a6d61699ba4f4b27dcb54a494155046199b30de82470", "format": 1 }, { "name": "plugins/modules/pxgrid_node_delete.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "67f1f80ae6dfc2f01981388e29aad05165795bc025532d0d4310dc8df83e63c5", + "chksum_sha256": "cf3d637df34d81bd6b131ac16277ea3d65d9c6e6d593536e705af631d728b946", "format": 1 }, { @@ -3906,1544 +4578,1782 @@ "chksum_sha256": "74390d09f37aa5d85cc8143484568195feb83da53aecf81405c59f359129dd41", "format": 1 }, + { + "name": "plugins/modules/trustsec_vn.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3e93c0c467d337abfaa9184cb8520f9f41a258bafca4d28b8a2427b83975e759", + "format": 1 + }, { "name": "plugins/modules/backup_last_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b78f418fa38d677084fb822fa2d09f118db3fad42e89258dd737ee7f5c7c048", + "chksum_sha256": "f015b73a7340e5a08190da357a36f448a73026271e87de2f03687c92c35fbc25", "format": 1 }, { "name": "plugins/modules/deployment_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d05249cd5e5409a1aa6e1b63570775c7ca533217bd6d5bdda3b946e9e870488a", + "chksum_sha256": "e6bfee97e6ab3c5af1105c148cec377b36667616d622be50300984711c0e6cdb", "format": 1 }, { "name": "plugins/modules/sponsor_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cafb343c491e9eccbf48d6910110ed8fa59990c51be6cc1792db13450417b03d", + "chksum_sha256": "bc52aa8987b819d75b25275b07295bfae8e92c9f9358cfc7cbc54e888b0291fe", + "format": 1 + }, + { + "name": "plugins/modules/duo_identity_sync_cancel_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c1684d439a3231b2be2e2af718c3fa2710b83caba7c3880384bed160f66a3442", "format": 1 }, { "name": "plugins/modules/csr_delete.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d9cf9e7c183737edf91c9ce7c523af5271caa44838591b781887656c07e045e", + "chksum_sha256": "356c568e4bdddf1feda1a5f32084d2d88cd475a655abb755153860690a252b2b", "format": 1 }, { "name": "plugins/modules/personas_promote_primary.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "978ab627cb06946f6ac276032a3dfd2d93d4f5819d79708fae074eaffb03098c", + "chksum_sha256": "a2ff9e4cee86312203fd2d62dd43808bc9abde87f001a083b78d38198ff37a7e", + "format": 1 + }, + { + "name": "plugins/modules/ipsec.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b48883695d916b31c0a25cddc528d4f9f2ea118832ca11b0bab6f3d2dfd5dbda", "format": 1 }, { "name": "plugins/modules/pxgrid_session_by_ip_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2623aea5d62e93d061703884869a27d158912ac0669c22a9a7c42ef5a84df36", + "chksum_sha256": "be428ac5652d453b5c27eebc2306a41eb1370b8ff4b6906c540ab42b27dfa0cc", "format": 1 }, { "name": "plugins/modules/node_replication_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9fa2e77980a669234911cbe0225449bb6f3a548e220624e44a1405d4014830aa", + "chksum_sha256": "f78360cb150330456439de0c1f3ba839f8da38d6d915b7bd9caeef00cad3be4e", "format": 1 }, { "name": "plugins/modules/egress_matrix_cell_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6cbacde8df0e160ea8007fe5f926159b1af70194896e1fe93296cbc5f1fca3d4", + "chksum_sha256": "6cfe8faa310b75842a7d4ba12508864f083b3732eff8d6566aca1deb23a8f55e", "format": 1 }, { "name": "plugins/modules/guest_smtp_notification_settings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a113c197beff41107c9522004d60993e53174c1b4193e56f8dbc7c09f4d2eb50", + "chksum_sha256": "2424ac874cbf6e8e056ec4ccdf7a53a2a50994ffe7fbfcb7c8f45ad38bb5a4ff", "format": 1 }, { "name": "plugins/modules/node_standalone_to_primary.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80e251a43c388dd7c921437dd4614161b0fc8da80ca73df2fe37e74c16cbd580", + "chksum_sha256": "9b3d9745242f186138703f3474e1862761d6172af63b359bfb21ebdd5192e16f", "format": 1 }, { "name": "plugins/modules/endpoint_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4bbd0ffcad1d1415e8c0c4a14fb246d1d4ab3b58dedcf3fe5ea39698817866a", + "chksum_sha256": "ddbfdc08d2cab48638db0974629ebeea3cc4492fe71e7f7b30bed1b5c9b6d998", "format": 1 }, { "name": "plugins/modules/sg_mapping_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf6af349ea1a7235560bd8431a0c061bfda1f534f6bee96950f7b018a2a7170f", + "chksum_sha256": "f197d7587b7cad64936701937399aec232f4506eacd7ab70d7a6f078c3278aa6", "format": 1 }, { "name": "plugins/modules/egress_matrix_cell_set_all_status.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a29cee6650c646328b66ab750e3261551ec3ee3b3097f5c528e99d0f9caa733", + "chksum_sha256": "dfd8b5428bc8010428ab0b7bc181ab95c577307db6c5363dea0c5056d291a4bf", "format": 1 }, { "name": "plugins/modules/pxgrid_node_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fba508877c438c68f2092df4a7b4dcaec6dd510c266fc26372831ad6239724c", + "chksum_sha256": "727a21ce03bd3b538b018bc07a38f192c95c2c631fc92a8871c175f590aeee67", "format": 1 }, { "name": "plugins/modules/sg_to_vn_to_vlan_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0e59d1c968814b6c0dab7d9233f0c2e26cb9c037f385ecda25290768ca8ae20f", + "chksum_sha256": "9af6fd0128a51487aba392a99ccd3e0ffa5fd600b368cf35ba2d4f0060b0ca63", "format": 1 }, { "name": "plugins/modules/trusted_certificate_import.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d74fc6796e27f3f666bf81f9f082491d902b36a56bbe234e050c3fdfcfcc030a", + "chksum_sha256": "fb5bd083ee81ac746708bfb466e1890b34776e6960cd67ee0e3d3f201dd4c917", "format": 1 }, { "name": "plugins/modules/network_access_network_condition.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2c19331da2a9a784bdf4b80748b8b3ebf566b83e01c84aeed2b8f2fdccc24cc", + "chksum_sha256": "9b0df6d8c9bf00b178c0c3fe313d369765b77fa791511355e51ccc6c76ffb95f", "format": 1 }, { "name": "plugins/modules/device_administration_authorization_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1eb8aeeed5f6fb7ad12dd76b8b900a1515ac5988b115f7eea36d0b4367fb7717", + "chksum_sha256": "07c9de09e900b30cc6afc471ef0b27ea15c925dbb22daba8bc1a0db7e8693e33", "format": 1 }, { "name": "plugins/modules/backup_schedule_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53f2f0cd988436f036b16318e7102e2d1ef51f91ab5482e703b3c4cabbd5a9df", + "chksum_sha256": "cf1cd7cc8d7314ca4ea380bc6aac696615622bc285a3fb0decd6255a668d9eea", "format": 1 }, { "name": "plugins/modules/pxgrid_session_by_mac_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a390646559f4b45bd5ecf7dddd0a13c2c0bf68907a16a1276f3dcd6e019c2693", + "chksum_sha256": "ef2ba51b33ea9e2feb8ed8129543749b465ae55d51d6e69c42379685c40cad87", "format": 1 }, { "name": "plugins/modules/network_access_local_exception_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0e5a2bc4e2226a937203a521aa4ea6588725a67dc9440b39c281c3001b9a8feb", + "chksum_sha256": "23bc624fedd72b6bd7b2c12c88ae5cc0e8cd9b982e712c1e07a7f648fd4f4e5f", "format": 1 }, { "name": "plugins/modules/sg_mapping_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c86a83f3f03df71b9a9f0ad23f5edefea91445259ba2f6a5610cd734242e2a1", + "chksum_sha256": "4a0c4d9e5eb2fd4e6b0f5dae1ea820eadc1e1b8f247cfc07aaafe5e9e33445b7", "format": 1 }, { "name": "plugins/modules/network_access_security_groups_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "132aea148538582861c38e7b7d828b6fddd1886760ba73f92db3bb004626a744", + "chksum_sha256": "571ab834c7dac64d37f67c2f247fd006621244d0da64a5258c02673f2c3ce99c", "format": 1 }, { "name": "plugins/modules/device_administration_global_exception_rules_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "599cb938596c3fd993c1a5c4e7374aa40f34410a25a68955cf714d09208c5016", + "chksum_sha256": "d0f27905685ed94a9e4e79dc004fcf4e23a58e1b0c3046072530c4266536f065", "format": 1 }, { "name": "plugins/modules/device_administration_network_conditions.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8884d0f1d01999a9ebbefd81a55f08b4ac3d35335293e9b860b2325c7600155e", + "chksum_sha256": "dbfe6bdc5f65d297c0ea1d25ddb930cd5bf4fc20777eb2cafadb0e4d7175ed09", "format": 1 }, { "name": "plugins/modules/network_access_dictionary.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be74a8e486006207c7a811f7578e76fb9e014bb60f3c71dbe4cb75ed7f5b800d", + "chksum_sha256": "2e9cff1489140d5d436a6dcd3d28442af07d5d15e970618121f8bf1b180f321b", "format": 1 }, { "name": "plugins/modules/sponsored_guest_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb7ed5d6de0033b9ac29ef3f0019d8641786e8035792643fed1cd1ab099d9dbe", + "chksum_sha256": "7b503c914e360bf87a0f550970bbb0faef46d28d4a64729f78a22c84aea437cb", "format": 1 }, { "name": "plugins/modules/node_group_node_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "750421162829c5ce10e54ca66917cec11cc3aceee353c541add40fc74fdc81d0", + "chksum_sha256": "6fe67b2c74447b430fd4906f07056259212268f84931248b8b587f2dcf88709e", "format": 1 }, { "name": "plugins/modules/sg_mapping_group_deploy_all.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "465afd9c1280c55f7f866b93d62592363532329b4d29626f823ebf5aca4e02c3", + "chksum_sha256": "be5dfaa5a23c222d5667c62f9dd0e36ac091bf546aa637e16d62bd4fe1c13e59", "format": 1 }, { "name": "plugins/modules/mnt_session_disconnect_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "928b75e31e821d6d8f85eb19ba70d5fc9eb633d8a3d94e7f4b2a467a1f500b00", + "chksum_sha256": "162781e129807345db650e2ac71384432bdd59e72f13781571d56993e1423bd2", + "format": 1 + }, + { + "name": "plugins/modules/px_grid_direct_test_connector.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "235a37645dfbca938b5075d9035c635547f1036572893c7d85882dd6f9ebe31b", "format": 1 }, { "name": "plugins/modules/mnt_session_by_mac_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3f838a5a43a4d49a1d8014bf910dc69bcf416ce65b018c8dc4f5493de6b4a987", + "chksum_sha256": "b65ee7e6ad71f33f34502d57fca2c28535a81e6a371c71283b56aa639ad848bc", "format": 1 }, { "name": "plugins/modules/aci_settings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "054f8da3aa7d75e80d6368e6291f65706b6018b3354f86a9d83dc394fdcd6264", + "chksum_sha256": "f9cd03f0e49273185483366f7774a6d6e7bd3d414f3ce01c080a833c4e9850fa", "format": 1 }, { "name": "plugins/modules/network_access_dictionary_attribute.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64a7414da1cca2e1525d343b3023b413290ee5d0ba8cb0a18368517f502194c1", + "chksum_sha256": "72800995a4c74af5684822839b17be2592729b200ad45099b2ec1cb564eed93b", "format": 1 }, { "name": "plugins/modules/node_sync.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef27395f52d776aee8b2b1f16f5a1217ead7e25418668010c9741ce82793fb15", + "chksum_sha256": "a60363d047b6432dcd0adf1441df0c563d37ecfcab99c212d3b6d90fe46845f9", "format": 1 }, { "name": "plugins/modules/endpoint_get_rejected_endpoints_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba9420c59d0d036c66b144beb2d2d9fb3b052a74c5351d5097b6158c3db1dcbb", + "chksum_sha256": "f380fe0bcfd1f6108555bc49e4a0c37ff86488b75fbee196cb2b7b8b93693588", "format": 1 }, { "name": "plugins/modules/anc_endpoint_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "302241ea02e2aa8c92899a39fba5cd53584f99fbd6c8932eeea9fd718c2bc547", + "chksum_sha256": "059d60e03f527b84d9fd10c42c91090fb82c5cfefd14335ff5ce277cc9aaf00d", "format": 1 }, { "name": "plugins/modules/licensing_feature_to_tier_mapping_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eed26481748e0b3999a12d26ae44d5ffc7fc59f584bd469b8b704ab9cc1ddcf6", + "chksum_sha256": "0564d4ea56dc373a6c401c1f13334180fd8cf8b4427542597d5c4f77b1e95604", "format": 1 }, { "name": "plugins/modules/mnt_session_by_nas_ip_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "388f3cb3c7e525e0f9a66639be2b7bcf1185afd65aa505c787eb1c7fc3213e80", + "chksum_sha256": "a68dae35403ff802b962442f8683e9eeafaed07ff12c27189f8c9338eed5d987", "format": 1 }, { "name": "plugins/modules/node_promotion.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99ec57d08a5609872dda46df7a131b37f5a13f4cc1e8bd60877c0bf1e1e61e9b", + "chksum_sha256": "ade67fb4d29e54ad812de160257e1e6cf1b4361a8053b3f26b10401713ef1e9d", "format": 1 }, { "name": "plugins/modules/tacacs_command_sets.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0320dc2599e63a64fc094b258b0d31b03a5461173df251d592239b62034cca06", + "chksum_sha256": "bb64dcd852e0d1a405a76a3cff22df02f32fde45dbc68d32506d5b8b84ef9809", "format": 1 }, { "name": "plugins/modules/pxgrid_service_register.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "592f8d9ed04c8b3052fab71ffdace5bbd8e877785b8f7a976a0ca06ae52cafa0", + "chksum_sha256": "c7946e09c79d17fb02f7517c5762758b2051fca4d241c4ad01ad2807db56facb", "format": 1 }, { "name": "plugins/modules/guest_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "303a13936efbc79fdb335fe060e914b7642270bcab224de2408bb4491866a943", + "chksum_sha256": "0ae64abe95d719ce7d0aded42b1c0d0e7f3e830e38b4b0585d352ae1eb05d666", "format": 1 }, { "name": "plugins/modules/network_device_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a6ae9cae466b24c6f89ed26beb98b96ae23c2006fa392fae57b35d8d21a7064", + "chksum_sha256": "0edec77c1e46da322a8d5de6cd0429a0059acc2de5e756a7757be0f147fe18a1", "format": 1 }, { "name": "plugins/modules/tacacs_external_servers.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6a2d34d1340291d32d7d0a75ffc349a9f373fea318f798577f1a9bc18af30459", + "chksum_sha256": "fc2de64477b87716e13470d866ec2c41a53c5a95f966c5bbfc12da00b0c13194", "format": 1 }, { "name": "plugins/modules/proxy_connection_settings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ee97d1c9e53a778ed5d7016a15e2476aa7be7dbb5881a9528a37434398a4ee2", + "chksum_sha256": "6153d1cc26151c5acf6d9d121bb65fe3a047a379dfa6cb7ed49974d1b1646004", "format": 1 }, { "name": "plugins/modules/pan_ha.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e88ddf214d69522d4fa0f339857a5edf2645c642dfcf70985955d2f153bd0434", + "chksum_sha256": "41f7626509003fd1adaccc7ccfa392df113dbad87e90211db2b3f80ad7d22658", "format": 1 }, { "name": "plugins/modules/system_certificate_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0879141fb1e747d2396e75a53c6b7578ee0313f96d3ec03da506f729f026b400", + "chksum_sha256": "62cb6cef5698eec7f39c6aa106c4e7c2b0226232734e8626f32f6e3755f9cc69", "format": 1 }, { "name": "plugins/modules/telemetry_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4e1e94af427bc360c5e2d7ab1b0318ff36e1330ae3e7a68ff15027798df198da", + "chksum_sha256": "6b9b60bb368f47aa1abfa9d040e2bb1174c51a9303dde2881f2d643dceeb2172", + "format": 1 + }, + { + "name": "plugins/modules/endpoints_device_type_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fa452ad53d40728d4821dc3d7e7f2c24ce9c32d4e41c4b66c7ed869af6e0b25a", "format": 1 }, { "name": "plugins/modules/sg_mapping_deploy_all.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9ffae7055a016b677ee64586fce1fba74e5cdeac39d2356c3c19b71d0615add", + "chksum_sha256": "698841e082f029b371f43411c3c5ce196c09e64f4413dba4ac3db993f56c7489", "format": 1 }, { "name": "plugins/modules/endpoint.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3ca520ea3b391e222f10e3db2066dcc8aba9225fed6a6ed4cac9029dc5c83f0", + "chksum_sha256": "11dbbccd4f995ebb6b09d5eaef1d565eec061734e3ebb60bbd81d980a8cc0f2e", "format": 1 }, { "name": "plugins/modules/egress_matrix_cell_clear_all.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37c4a01ba9712458b187d4f7a2ebc8c1abafc59d35e46a821fe3c8289634ee34", + "chksum_sha256": "a41061d183bb654b00eceffefc6c4c91d8949732bdafd0bd45ec3841ee63392c", "format": 1 }, { "name": "plugins/modules/endpoint_deregister.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2ddca60a7917b948f22ff4b7c3e34ddc7230afa3bc2de39316461c83242463a", + "chksum_sha256": "fe9196cc2b02bad3ffc222e9d44485fb17bebe814e030f405196c8e1fec84b1c", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_vn_bulk_create.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bebc8b569009b309ea24cc21abdda066b0fe00e8c1b418bd59a133366ce522f3", "format": 1 }, { "name": "plugins/modules/node_group_node_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d0fc32454bf5e66f351919851ff14bae266323f9271e814b696fd41209f6b54d", + "chksum_sha256": "1afe95cdb82090c56c6f52ffbb2ea7159711c8c5bb73489a6ef52704691eed91", "format": 1 }, { "name": "plugins/modules/system_config_version_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85c283de9723c7cc0471b7deb9df5cc7619440ee0f864ce7b403e1b78541c7e8", + "chksum_sha256": "a9f125988d1f770b5829ab988f2a7864474f3d0e0cd126b59b22eeeac61a9bc3", "format": 1 }, { "name": "plugins/modules/downloadable_acl.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "88aebabd41e114775ba25632aa9d34fc806593b841dfaef2c6872ff44a473d53", + "chksum_sha256": "ad3a3a84a5627770470c6d77ed6030f44e62452f983e4223dd6530a4a13fac4f", + "format": 1 + }, + { + "name": "plugins/modules/ipsec_certificates_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f45520bba2660390137b24b1e82305bfdc33e96c9b6b4ce35905d621a8f8343c", "format": 1 }, { "name": "plugins/modules/csr_generate_intermediate_ca.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7043f73b25c85cec1b4c8871e4672ded7582652a405fa17c555af3f7a1fe0467", + "chksum_sha256": "2bb1c0e311a1e5b4d580683d425aeab08dce29ea3bb4749646833b2888f5dee0", "format": 1 }, { "name": "plugins/modules/guest_ssid_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "df41e0151e33bbabaddc14dcb1ae54921f33897ca0725134d80e56622e36d6e9", + "chksum_sha256": "b4eccdf2b434bf47787742e45f0c4cbc807b3c3c739c9c7ae68c80ed7b01ecb1", "format": 1 }, { "name": "plugins/modules/anc_endpoint_clear.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eedc32e574d15d50f354af4ce5bb827a15d460ac00ebd605896edff86d9a41af", + "chksum_sha256": "1e3b73a1240c6e580ac72778b70553e8d6a98a9ca297fa92af51f53ccd70de2e", "format": 1 }, { "name": "plugins/modules/sxp_connections_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84e10a79b7ddd984af08aea91e7c67097dc2e0ff25e17a76fb9da3846c7b88b7", + "chksum_sha256": "154a49cb51f8a09a5cd08cf1df5b38858d932460719758eb82f9164b7edce4df", "format": 1 }, { "name": "plugins/modules/filter_policy_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a4ee69d83504f63cb90cdede8343dfb6b6f123e104b3f3081ccb4de0b0aca10", + "chksum_sha256": "f9f8f83f039b06ae6e03409a3a4d83adc807a1399b168a6e19c9d6e3f115fe3f", "format": 1 }, { "name": "plugins/modules/px_grid_node_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3174d034610bcbb566c84d5bdc9516bb2d645dd4dcd4da9b5a3b7e18647c2bf", + "chksum_sha256": "66daecd4ad243196a5274019d2dc02dfb53e876085549631bd7fdce5eb247796", + "format": 1 + }, + { + "name": "plugins/modules/endpoints_task.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f62777075ffe95cb823f74da23db8b052135c11c14b16985b7ee2bf752628021", + "format": 1 + }, + { + "name": "plugins/modules/ipsec_delete_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "04ea6994df8a2ec6c1e7bd8da578a79261a841d5cff24d681508e8ea85f0d9b4", "format": 1 }, { "name": "plugins/modules/internal_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "decac83ce362739183afe6784a3fcb60598ed04b5e27395b5dbf000a84d6dd08", + "chksum_sha256": "1e07cd9ce2095ac196809469fb73b46c94af045f2f30f3026d4dab5e40ba0d8d", "format": 1 }, { "name": "plugins/modules/licensing_tier_state_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61a3cb27c81ddd2b24e850d7f1a06d5f7aa4501311bdb0aa394e8a1657bc1d39", + "chksum_sha256": "23f58ed59638757b96d02a5dbc8faf3214ffb40a65e008b6e8ff1c2648271d6b", "format": 1 }, { "name": "plugins/modules/anc_policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd48b6e6fa1adb5142c672481943c4595fbf0a7c19b685a02a34ba71346b1eac", + "chksum_sha256": "9627e20f72250a89828dad08ad946c8a4e5f1c760296acd9ae5f0de74d358112", "format": 1 }, { "name": "plugins/modules/device_administration_global_exception_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37f11866c9db5c493a42bf69b755bf6a75b0ebb9f1446a7e1cf1dc68ba24cd88", + "chksum_sha256": "9f6a9fc73b61c19157be399eeb2bec332e158ceebb9d1588722e4bd37cde4ebd", "format": 1 }, { "name": "plugins/modules/sgt_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0314620f736cd3b52e5e0b0daa6cee1c5a4b81f4b4750db1014e15428ed7ff93", + "chksum_sha256": "5439ff5759bd302ae19e73e0f6e611b71051ea74ca4c72b750a213f2c6933e0a", "format": 1 }, { "name": "plugins/modules/certificate_profile_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "854360af02395589593d7bcc70860f21668748ff4be0584b30c10e64fa3e3e8e", + "chksum_sha256": "d7d66b0498a474510833d77f49d9e7bf6be14909093da183a735960a12738183", "format": 1 }, { "name": "plugins/modules/sg_acl_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85248ccb3dfa12c2d39bc9229b8330d38a0e20ed302adbd2e98e985909ea5204", + "chksum_sha256": "078bcfbb6f2f6d7bf8197279c72e94f3af8696e32a7195c05a474cd7a949f5bc", "format": 1 }, { "name": "plugins/modules/patch_rollback.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3233069812fd1b2216d3028928cb27cdebcb0967a8548d4f00fcc8e69a75ce98", + "chksum_sha256": "fe1934dcc5fea2aaa7aae7ad1884744e35a570775f244bcefbef302111d325f4", "format": 1 }, { "name": "plugins/modules/anc_policy_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7436d0ef8ddf89f89c57783f432e793b3cc1e513ecf99d65f6eb16bead437643", + "chksum_sha256": "7f9457f519054ca9556db9ad6e984eb42a710761822f8b8e4b819173f65b9411", "format": 1 }, { "name": "plugins/modules/dataconnect_settings_password_expiry.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c66810eeecb2a946475a1bd433e0c281e060d2214b343d5feea2eb8a7879b14d", + "chksum_sha256": "1d1390e1432b724568ee09e7744e38afc7dfa47f6042a18f395197ba5d4c6318", "format": 1 }, { "name": "plugins/modules/pxgrid_node_approve.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b06a5996f311f83bcd5dec8223fc1c7e2caf3ee1de058211280abf9b7b05ebc1", + "chksum_sha256": "c0ab1e02f95ed44271e1009db465105581fd94b8bb92a5df43cc4210831b47d0", "format": 1 }, { "name": "plugins/modules/network_access_dictionary_attributes_authorization_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b627f20f6bf439ff07b4e4c164ba9de4d56f6f9f0718aa8a1e207e5107205de", - "format": 1 - }, - { - "name": "plugins/modules/connector_config_info.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1b02dee83a5885f217e8b6f3eb36038c9b7ae92483e220d725878f580d8c4199", + "chksum_sha256": "5710b9404639e48ca8cd05dc5d81cd588678dea3b51e6cc829e34863720e8ad7", "format": 1 }, { "name": "plugins/modules/guest_user_reset_password.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "edd84d13bd4585b21bf8f2d3f22618a68f9a7382ff894375d55edae29276aea8", + "chksum_sha256": "bf6dbeb3cbc04b47d5dfb127aaf86f138abb8ad344bc35e5494a37d2f8c6f64c", "format": 1 }, { "name": "plugins/modules/network_access_authorization_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6c4c6eb914b018d631c7d8c2554d25dad66358fd4fcb7bea10e5aacf2afb04b", + "chksum_sha256": "274065fcf90dce57eaf9025477aa54cd21e7cc7b7163e9db52ca3bd2264658b7", "format": 1 }, { "name": "plugins/modules/mnt_session_active_count_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "51d442b3b9d20113be6251325fd453aaf74da8ad9a687b8b5071314aa504ef64", + "chksum_sha256": "c983ccc98d202d3f84abe966f8fa2cf59baa61ea2fcb0b0fe7110d99eaa77c52", "format": 1 }, { "name": "plugins/modules/sxp_vpns_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3f85081ffd0db6815dd8c437fa1804339a497695002f7a3dd38b4a739cf7d8c", + "chksum_sha256": "2e8d963b544399e17ca096d7842b8749c6d3ea9aace15ff51298ed32612b6dcf", "format": 1 }, { "name": "plugins/modules/portal_global_setting.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b54fc63fffdf5b95cb8d4b96b4f2eccc8342028595c39297387f4352c3b9b2ae", + "chksum_sha256": "8b21f1cbd93547ae7c358ea7b4e1109d2b1318aad2d05e88ce6926dec2933457", "format": 1 }, { "name": "plugins/modules/device_administration_conditions_for_authorization_rule_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac0ac34579d1eb813b436f24e5ff6301aa4892012fce09aeb839e7c6303bda07", + "chksum_sha256": "199c276cccce5da361a55e273549da02addcf676e88d53f7e9f5e4b370a1cd74", "format": 1 }, { "name": "plugins/modules/portal_theme.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eac74a6eab83f7eea6b4dcb79218495d9be828c5055b952d320b95abefd9f903", + "chksum_sha256": "c49940e13f7c1927949eec869061b281aecbb90af05cc564d2f614b7dfddace8", + "format": 1 + }, + { + "name": "plugins/modules/px_grid_direct.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "58071a3dae9cb47d49b8c1f9ac9f8665403437295dcb580c22998c58f69666b5", + "format": 1 + }, + { + "name": "plugins/modules/user_equipment_imei_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "03d559ed5b0b7f768f245fa234c0014ff24107783162604dc1fab1268fc57633", "format": 1 }, { "name": "plugins/modules/portal_global_setting_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e832880b77d196074d3db6dd2ecbd5d8a113258054b3fd0c6f1db4e8d80e6549", + "chksum_sha256": "5f54932adce8f3deb6a68858e1d21fbddbd1da3801b684332c743346e62de1e6", + "format": 1 + }, + { + "name": "plugins/modules/active_directories_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7cd476a7ce0e88aa3673d6baa05f12e37d29c32b43171e250b302b8bb2962f6c", "format": 1 }, { "name": "plugins/modules/sg_mapping_group_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fae0b02d5163f8ebbed8648af13143912a5ab3863f4dc432a8bd71b77609a4c0", + "chksum_sha256": "e41b92725029498d87b3a736a69874115ac87a8e69c4bff9e472eeb2b065c300", + "format": 1 + }, + { + "name": "plugins/modules/reservation_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9afff59bb22738968f2b5419b5e16f6ffd31136948ab659b9693ef1fc8e85a52", "format": 1 }, { "name": "plugins/modules/backup_restore.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9adc139c28a598cd729c8cfe383aad08619712a6b33caf6f21802bf62bdea82b", + "chksum_sha256": "162bf5d90e0b8a47d128d39655fddef6e47c0a67f312bb1fb54b5c2a72e01ad4", "format": 1 }, { "name": "plugins/modules/node_group_node_delete.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7d21f4ad4493d9a1e84787d34632bf37c55084f6f79f5f084fb97899e255dc2", + "chksum_sha256": "d0a5895e937ad2362670e5051873f203bb6001edbebaa0148be8c58710070ff9", + "format": 1 + }, + { + "name": "plugins/modules/ipsec_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "41efb0fe8511c5f594cf292f3396ce8a6706a026931adee5495b2f0c043707e7", "format": 1 }, { "name": "plugins/modules/sg_mapping_group_deploy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fa70dd51e24afa87b6842eb88077010e0a01196ebf2855813866568d6179538c", + "chksum_sha256": "7d8a717efb167e3c4e07dd87068a9609aaa2b791bdaa00da4f28bd13495d4ebd", "format": 1 }, { "name": "plugins/modules/allowed_protocols.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5fd8030b06461a911f78269b93e6ab1eb16e486701e9f3d0b4e163965ef40a14", + "chksum_sha256": "a774c63a75d9cdad6dff3cb0e7ef1b45756487935712cf7d3fe294be40614b05", + "format": 1 + }, + { + "name": "plugins/modules/user_equipment_bulk.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "faf468a9ba4250f358da8e2efb8809ffbb42d3a26594b7f83092c6c396c770dc", "format": 1 }, { "name": "plugins/modules/active_directory_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42b2ceb4e49afe80bc417544029f550291558f42198b49addcac44946c7a617b", + "chksum_sha256": "65abf12b8b5aa913248acf21b4c5956272c2dbcfff5bacb9708e48bb2fc330f0", "format": 1 }, { "name": "plugins/modules/sg_mapping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6a62e48d67d99e02e6846a1319c945328d01bf66c3f6885b7812865e46b0410", + "chksum_sha256": "b22a46c81fdf93748b85214f51b7cfa40de1f3ecd435e081e2d6e14bc72a09a8", "format": 1 }, { "name": "plugins/modules/sxp_local_bindings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "135b08abf5d4b53db32136e5d6990b28fe93c49c733e7c304102b387f2135f8e", + "chksum_sha256": "53cb63f49ec5a0f4dd44ecac2bfbf746eba2401bad659605639bef29a2884199", "format": 1 }, { "name": "plugins/modules/support_bundle_download.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31a5652b2de6d2c210928246dcce7c889ccc53b66514527fc5572e062724bbd7", + "chksum_sha256": "2774f2de4503b6bcab4305c3e5a516b35716feefc4add487508ffa4e3ccb2190", "format": 1 }, { "name": "plugins/modules/self_registered_portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1f89c65ddda5385838c739f0bf1225ded48be6c2011b4ea0d718689ca0378f7f", + "chksum_sha256": "0966778adaa9fbc1e3e74fbd1d38647a6e4d60c151c521aac23664b63dfbeba5", "format": 1 }, { "name": "plugins/modules/node_secondary_to_primary.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "65ae947ee89f1b01906e504a9f6d50db8d646148d31b810da2dcac54badf90d3", + "chksum_sha256": "b28f5ea00a64025165db7bdc367f4fb3f123b7404d14d8e1b8d1bf03599550e0", "format": 1 }, { "name": "plugins/modules/guest_type_sms.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b1ce1e32ec0486a3aaed2e0110b432b58dd1409ceae1ec4686a00eff771114c", + "chksum_sha256": "4e11d0d8e4fd71fa865d107f6637823ca243aca3f26a05a39a0cf8f061382041", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_nbar_app.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "86d9bdc0255428795a81c20dd8b3228f482bb732fd72dc43dd8bbd47ed0095a2", "format": 1 }, { "name": "plugins/modules/sgt_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39625699166c8a5ef6a7847951a338289995107068a507ff3fadfc3392f71395", + "chksum_sha256": "154c171586f4afd82cac58be3d768073d495e188d6fce5254fcb4ab2b22d34e3", "format": 1 }, { "name": "plugins/modules/mnt_session_by_ip_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26cea499bea2703550f16836edc00bda73e43568883915ee84ea241cedfa0fbd", + "chksum_sha256": "4995c86579c61504bd8272876339dffb9ff0c324338eeec0f4ba548d6dfa22c6", "format": 1 }, { "name": "plugins/modules/sg_mapping_deploy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cfdc27f93b4de8e932c0a9fd64bcbb3f44fc5f7e68f91e8851718680af258860", + "chksum_sha256": "40b6bc68b93af9d4ebaacf51561eff389bee9e7b4d8858c5be3634039f3a31a4", "format": 1 }, { "name": "plugins/modules/csr_export_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c222e5e60eb643e121607ba219e39ed65ab2df91e2a93f252074a9bc736b7b4", + "chksum_sha256": "5e4a4633f605b9f223f3f695f9da62a7ad8126a0359e760149af9ff5b3097c30", "format": 1 }, { "name": "plugins/modules/trusted_certificate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8122f76bf6346b714aa5503e3beaab91fb06a771ae82315fdbadf2f664883b38", + "chksum_sha256": "cbf379e97ca33e82daeef94fae3b530ce409182b104fa9d3676717976f003091", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_vn_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2458f522034753cb508adb909f2096882132d4fa3adfb4b97cbe79e99b4b8fe1", "format": 1 }, { "name": "plugins/modules/filter_policy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "776fcd99f707be4bdeaf66bb0621bb9cb7295d249c135e0fc4c85e59f9361713", + "chksum_sha256": "41a49e10021768a5fce05582f39172c2959f4d0b871d215398e6311c57141009", "format": 1 }, { "name": "plugins/modules/network_access_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6963091d925e8f14277c0e017da5ba2923cac9a95588b9fd3bfa2f08884b42c8", + "chksum_sha256": "9bd7fe908892dc35bd81ac1aeac98e1ad62ec6eda0447d82b2c25a594f8b2ae3", "format": 1 }, { "name": "plugins/modules/pxgrid_endpoint_by_mac_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b43ba620feaecfc0443cd1c20a2955684aa22c777871c8bbb21529a1156fc5f4", + "chksum_sha256": "b313da9b510b593c63b867b02bd10734d41c2275673d9589bad6c53487e23978", "format": 1 }, { "name": "plugins/modules/radius_server_sequence.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4009b312701993ebb7547211501f4ce87fdbd347b022b439970b896e734ea10a", + "chksum_sha256": "13b454b89c568f95ee8d5905b6d754940c3ad4cfbba7d16e2fe247ca9c154179", "format": 1 }, { "name": "plugins/modules/device_administration_time_date_conditions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29850221d9e680f6ae463b47b2950c27d4c53151fef92029f6690065214ec6f0", + "chksum_sha256": "4b7fb9b154f277e72f1768ae668149720706fec1bc7375f53fe1ea62182eaa99", "format": 1 }, { "name": "plugins/modules/node_services_profiler_probe_config_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82d7d053ad481186e46a981eb1a1d48001c3a0f014633fe4c40dd9eaf0d5675e", + "chksum_sha256": "34b035684a2f3d92ebfefa1601af3081ee785c5d8e74d541be0b118af0718e91", "format": 1 }, { "name": "plugins/modules/pxgrid_sessions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d91b3a54f7cddeda8733304fc81554dcc007461196df950926d7bc3d26373e4b", + "chksum_sha256": "8a647d4bcfcf20417aa71c4b29f9888c425ae41276194472bd2bc835a6fc1105", "format": 1 }, { "name": "plugins/modules/allowed_protocols_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7abcb03fc3ff329d890f4d08a400362d5265a0197edb2531e650e810d6c7e0a", + "chksum_sha256": "24c126452f1f381d7f3a28557dd56322e719746e7f5a8fd7201b7aa3a1fc4efd", "format": 1 }, { "name": "plugins/modules/sg_acl.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b50d52db5a2d56665b884b52c233d1d9935df74258c8f4b74b019a8f4929ff4b", + "chksum_sha256": "808ed5919b8f422b5894968cbcc8cce4bc27a3aff23fdfdae049157d5043ee7e", "format": 1 }, { "name": "plugins/modules/network_access_time_date_conditions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4e5e7b263490fd8129188741d92f478ef7a365133517bd43db464c448a4a68dc", + "chksum_sha256": "0ed5cc093b377beca13e2eab678f86ca8985ae76f7769eec69d88f6721329488", + "format": 1 + }, + { + "name": "plugins/modules/upgrade_stage_cancel.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "25aee6f4b815805c9673c470966c431f1503fdaada40ac0c47426bd763f24bae", "format": 1 }, { "name": "plugins/modules/mnt_session_posture_count_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7ab7510580547456ab47e229b696b50e78fabc01df31ce3dc0a71c32b40e1fa", + "chksum_sha256": "112fa103d2ea1fe24877c6a0ce9d3dc263213406ebf7b8645b8ec41df942a619", "format": 1 }, { "name": "plugins/modules/sg_to_vn_to_vlan_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "16634c15df9a30b3297ab08b36c92ce03ae44fd11fc34ab2e77913adbd142fb0", + "chksum_sha256": "813fe52df9bd58217c8e667152da13937607ff2f0e02ea18d539a5738b928401", "format": 1 }, { "name": "plugins/modules/profiler_profile_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "928d672be6b828d2a83c3c49dbaa21542255c1a59d7186ce3640996fc2e11a77", + "chksum_sha256": "82d62e37b79dcac8afa4b9af054e817d6c3d2009c8152188f1a500480c5d75d8", "format": 1 }, { "name": "plugins/modules/node_services_sxp_interfaces_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08f1727ebf79110d851dbe1f4e3e676bcaf579a8a7d4d0a157039a7949e26f81", + "chksum_sha256": "947afc88468293445e98d3aa91958336fa498b1a16c8f1e2d53bcec2e83b781d", + "format": 1 + }, + { + "name": "plugins/modules/duo_mfa.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "da1a50463ccd9255c68aedc7169045141bc3bdf6f63e4399c091aef6db2b58d0", "format": 1 }, { "name": "plugins/modules/active_directory.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "60f8354f4f55feea9a38372f83d86c4ec2ac29f63a67a2c402b68f7929addb88", + "chksum_sha256": "a45b0d94114f744bb1b4ae44ad779bc631026cd8f0b3f8c62859128973f971eb", "format": 1 }, { "name": "plugins/modules/identity_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ed4883cb6c36f789f4c5751c23ccb42bfa59d5a958c0934f136384f246b4b58", + "chksum_sha256": "d0645f4d91ac9f629a83b9f2d92765cfa67c10ed4d41986865ab272f18305d55", "format": 1 }, { "name": "plugins/modules/mnt_session_auth_list_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "067df7408dadca42dc20f52efac9948264c57c77faf27b726b57847efdb7adb1", + "chksum_sha256": "c70ed08511723bac837ff3e978510336046aa04e6c5fac204de2d2dfd8984d12", "format": 1 }, { "name": "plugins/modules/subscriber_bulk.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70a3ef2f608019f7f0f8c8c34fec3e5249d6b46fea8adc8191ec47e10c86c595", + "chksum_sha256": "7cc827fafa232955686c23a39cf1348348602c57d57f1ee0be033d46bbf29689", "format": 1 }, { "name": "plugins/modules/patch_install.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f99520bf466f21469bbd60d167fa894a875b31aa5ad52e5139a45db3a1ce828c", + "chksum_sha256": "89a43faa76fc15312885613e03e7ad889f6107661237ff28fe237eb17fc01d35", "format": 1 }, { "name": "plugins/modules/network_device_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "934c9fefdd7d0e684791455f315f78d2bc5e82cde15a3c72ca5c8fb60c8ec082", + "chksum_sha256": "fc115ae9180680c17db4179df561dbee06db2f76970541193052c574ddab2050", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_vn_bulk_delete.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "88b83e6178140fe46d0e41ba3c526be032e1aa7169f61fb8f7b80fcbc28e62fc", "format": 1 }, { "name": "plugins/modules/network_access_authentication_rules_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "056e3ab2968b328dbb33ba1f39a6e1f26c824351774e6140581e5bdd8ab3b6f2", + "chksum_sha256": "629f786f94a4e7ac58f828445a68ba3c5faf8e3eab5c5f3fc08b7d22ddfd1724", "format": 1 }, { "name": "plugins/modules/device_administration_authorization_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e5b3ed079b2b2648aa3ed9667df214f21a123b0cea278706b1d2b55903653dc1", + "chksum_sha256": "da60260838d8be160645a5609bd7ed04264e690e395ff2aee68d3fa502f520f2", + "format": 1 + }, + { + "name": "plugins/modules/ad_groups_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "af101c6a5edb345750db2c12bb91dbdd8e839d22b246e659aafcd2121f83f76e", "format": 1 }, { "name": "plugins/modules/tacacs_command_sets_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6078960ad6d221b7d90b7d1c3f7b42194e4b150d4190288242ea2af6445573f5", + "chksum_sha256": "e3580709711eaedd6a08a810c7378cf0053775e6d93d387cc0103166f485c2bc", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_vn_bulk_update.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ab45a8df0632c28782c563a42436e9ff28ddc5cfbbaeab11c91c3eccc07bb189", "format": 1 }, { "name": "plugins/modules/support_bundle_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1676d8c7b2e873fe2e9a1cc71177d8ad46334e5030b245f9a961f3fe235f3b1", + "chksum_sha256": "0eff8e72d911c986dfa81a985ab5deef7ce0d5deb01a30bbbcd9dbd45c06a330", "format": 1 }, { "name": "plugins/modules/active_directory_leave_domain.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c172684a67855d31bb015f9791e44a37aa7c6958200c5ca92dd30ca12b49975", + "chksum_sha256": "0e3a7e3cea68e096e3b4dc5260c66c82588b3019cd822092a2c9e97ff59efb26", "format": 1 }, { "name": "plugins/modules/endpoint_certificate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52663b0e052d8e99c6d88563115c3557a1f549a377b1703107a0bc878378fa8d", + "chksum_sha256": "d7f57b3e39f34d4d84925f29197a90971f68e9289158282ab51e89e6c3f6a8e1", "format": 1 }, { "name": "plugins/modules/guest_user_change_sponsor_password.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ce2b5a24d0096e497b6130fbb03f0c9ec813a53605d6c921474aa9e9b67ca12", + "chksum_sha256": "3dfcc50bbd11c6db1bba70dee2d33b455d7a1e1b3321a2365429f4b4246db8a5", "format": 1 }, { "name": "plugins/modules/network_access_authentication_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aed94f53f09a5f7d861d4482bece10dd484c4362a6a0f02829315f0fd1c72818", + "chksum_sha256": "7ecf4c7a911a73352738dc79cc67e9a67bf7d1659fe3ff07b139f515ca690dae", "format": 1 }, { "name": "plugins/modules/downloadable_acl_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "140ba57c9d7b7f4f0a5b0ea1a51fa0008bc921d6513b0ab39a7622daa43771df", + "chksum_sha256": "d05cbeb7a96328f37cb361de8cdcbb681ffed30a18effeedbd295b8e21fcde5b", "format": 1 }, { "name": "plugins/modules/device_administration_conditions_for_authentication_rule_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d480b64169c3027e837a91cb230f565246041fb282d7229f13d364f04118f01c", + "chksum_sha256": "e36f0b0472155b59c099b8ef1d73bb882b24f8bba57880770e4fd863f45521b8", + "format": 1 + }, + { + "name": "plugins/modules/endpoints_bulk.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "860e72bf418f788c78cb23501e6cabb8813d722478d4f5bd16c7bb2048fa3de9", "format": 1 }, { "name": "plugins/modules/pxgrid_account_activate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c739ef48014d48c8f8c13d6c6508a4c4468083ba1c36d14548175c67ddac24f7", + "chksum_sha256": "908e306db423b3b5a8985b4ade72373be9121b54b0344ad05d9a34fd5dfc748c", "format": 1 }, { "name": "plugins/modules/sg_to_vn_to_vlan.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b0be26d7e8114496c0975235ca07110a05e4b1ec928a646f8949b5790f2bd3bf", + "chksum_sha256": "89102900a85ec1b17b8177cbd125f0e34db1801e845d4e783fe6607a42d2a6b2", "format": 1 }, { "name": "plugins/modules/network_device_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "de59f2824111470884b277f2adee0b3192623514426558fed5a640ad533bed4f", + "chksum_sha256": "6adb2a5daa1a78d66caf7c852cbeee25efb0dc3c5a361e8e7f2484092f122b0f", "format": 1 }, { "name": "plugins/modules/device_administration_authentication_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aad476fd584a0cbbb9e5da60c648e07d19384e111863f323d14ba3915750b844", + "chksum_sha256": "c8c7f2285f66e80e4605b9b8dc27dd8e3769489bbaf7259996a11d6a71fcafc6", "format": 1 }, { "name": "plugins/modules/csr_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8cd0a19db8c2ff90701470eaec2c40eac41fd7e6a1890802aa743e4adaf8317", + "chksum_sha256": "4bd13cbadc4b4249d4be9ca09fbf6973a094d3357b2ad717e463b37ecf860f8e", "format": 1 }, { "name": "plugins/modules/authorization_profile.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f7c133399f06a9a77d4d855195333a9ad9f482c91b1ed12f7715c477316b35f", + "chksum_sha256": "4310b18a46ec20409692387ee47deb19d02f9945b07e703d962398a0cdadd55d", "format": 1 }, { "name": "plugins/modules/sgt.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11990c1d407ad61e77dafa8ddcc1a173c8039a2abb41f30189f0dde0c54ba6ec", + "chksum_sha256": "60059b47046583ac98e5f1c417c9e2b8ca763faee3a93a7cfd67ddf37ea16bea", "format": 1 }, { "name": "plugins/modules/patch_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a0b11e871bfa667c3c162c3e685d0abef3c0ec7bf844bfe2274278dee8123698", + "chksum_sha256": "6e3cb55b3a7f098d01e9635ad999f51ce108953e9a4903aa644f381f7d40238e", "format": 1 }, { "name": "plugins/modules/device_administration_service_names_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd08d6d64c3a1e845cf0c4f12f6965d9c20addec0fc30c3240877e9ddcb98fbf", + "chksum_sha256": "1c9e2766826d22475d0c0138f9d41daa4e2a1ef7b0e9e9d787ee27533d68166f", "format": 1 }, { "name": "plugins/modules/mnt_session_delete_all.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5efd226d77f42f8b8aba5dd2384ff129961c2b9ed6ecded473725d29245779a9", + "chksum_sha256": "8664ac554a3ac412f362b2fb0a59f6ea025daafbf73d6f795cca018c9b039bc8", "format": 1 }, { "name": "plugins/modules/px_grid_settings_auto_approve.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0143c9da5cc4178d9960b3fc8ac7e683e53573eb8e08a506b464fac48aa77c21", - "format": 1 - }, - { - "name": "plugins/modules/connector_config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9e44ac4997b4bdcb9567bdeba890e619a3e794801a89eca2bb4ac71b81ab9206", + "chksum_sha256": "61a09f7433f3103661e06fceae9216776f9dddfb31f3e5749dc4d0fd7f8c51ba", "format": 1 }, { "name": "plugins/modules/endpoint_group.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac2ee91691d27021b47ea49c39b34865b50917d0a30750d651db0341139d3928", + "chksum_sha256": "289b6fccd57a1e5e0da0e505f5a1c49418ee4bc702d4eaa780f7b366771e551b", "format": 1 }, { "name": "plugins/modules/network_access_authorization_rules.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81f196ad4a4027c1a2d9514d92b5459ac2afe68292e5fa28747ab0aab23a932a", + "chksum_sha256": "873645ca49f94de1881101924d2b5c4c6ac484167844948b3488076ffe89deb0", "format": 1 }, { "name": "plugins/modules/mnt_athentication_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "135f75ff102f2cfc50870846320bec461beb3bfda1f0a68acf2b856cbea4ce91", + "chksum_sha256": "08d65ac247f4a004cc821cf386599bf7c5466b702cd571ae9dcdce411c6ca6af", "format": 1 }, { "name": "plugins/modules/dataconnect_settings_status.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e785130c64b7bfda6ec5d0d5916ff1894dfec94406f07c1ec99e82118bdfc04", + "chksum_sha256": "0de1db8238fdebca377a515f9c74863366a686ad375f9b369d810b431563374b", "format": 1 }, { "name": "plugins/modules/device_administration_conditions.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "affd4a8462b694bc6073efa52ec4aee7153864b5f9d9a4c2d43c978d5e11d639", + "chksum_sha256": "83dc201d68cf592977aa0d0e5727ab8d68478a18f1e072fe3b76c4725dfb2fb8", "format": 1 }, { "name": "plugins/modules/sxp_vpns.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "886f4337df0e82da7c94965276eed8638535fa4a3585b97c21afb8f386110963", + "chksum_sha256": "a9315fdfc053e50601672bf287c0c41e169c4bd20ff0ad863c20c87977a7007a", + "format": 1 + }, + { + "name": "plugins/modules/endpoints_bulk_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0de420b05150ef416579f913b6f5bc18d7c83d19b41a0c4deed4ec45c251d79b", "format": 1 }, { "name": "plugins/modules/device_administration_local_exception_rules_reset_hitcount.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b5a1a060008f3d62d51a6461b940471fccf67fd1214f665684d8c131a277ad2", + "chksum_sha256": "a1f1f8034f8bfc16b0ae916af3f5a66366cc793dd4e1807b8843b4d2ca2d0807", "format": 1 }, { "name": "plugins/modules/resource_version_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8cfbf5996672a5cceee6c0cbd8b3855808ddc8982304bc05b87157d0ae8972a4", + "chksum_sha256": "1d4a553c8c18eada55b08c9b204032750f6e0bc82ac1647d4f132e386d60145d", "format": 1 }, { "name": "plugins/modules/renew_certificate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9138ed3377ab770a024a0565d6d56806e31438a3e00bc4ec8c1d61c598424c54", + "chksum_sha256": "62cdce4552ad2051e218c8efa3f161b5f658e91c6a05caa089ec5fe888fe711f", "format": 1 }, { "name": "plugins/modules/endpoint_release_rejected_endpoint.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "76446a579f2f0c2a848d537db6a18d30d9a2e423604a60955118e0607dd5d002", + "chksum_sha256": "f01d5bfe7bc818fe9339842e73d274127a128920fc3d1b4c65b4d4e2e13406b8", "format": 1 }, { "name": "plugins/modules/guest_user_reinstate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c59aa7e1d3108236a62c497bb5ccb392f92ac2b39ea313a86ad738aedbebccf", + "chksum_sha256": "44de430a1f7e3454c1ee9fb355469df375e2d7ffef1558aa26936bbe23864f9b", "format": 1 }, { "name": "plugins/modules/egress_matrix_cell_clone.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c76778fb1db86873357e41b7111e0ffc67d5145c1a647cb1ebe407be2d7fd13", + "chksum_sha256": "e17bc49d6935c4fc7d92f913491e8f4ae3f48d3e2f1bb56ea4111bcf30a2b941", "format": 1 }, { "name": "plugins/modules/my_device_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc58e7e8538e3bbc28dbabdf8f8a1de1d5ddc63ad6353668fd6bbbde18ad811e", + "chksum_sha256": "f7c0d067aa02c7fff1d9e785e300327069168bbf96dd4015e19b2251d856e5fc", "format": 1 }, { "name": "plugins/modules/network_access_conditions_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0dc6bf0621f8e0edbde010726f7adb641d9e9f544d7c2a7a71b58a2196a8b12b", + "chksum_sha256": "486deb6ffc40ba99e12e99aab8aa9a8b38d60840fe17275b2d8fdf4463e5ca86", "format": 1 }, { "name": "plugins/modules/pan_ha_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a5e12e67ea4100d862876a1a20c1d7a8bc4834a34c98f14d28ebd41fc233dc9", + "chksum_sha256": "53a19f839af2976e7be521b07727ea56b0c008a1c08959dc512d9e4e4ea0dedd", "format": 1 }, { "name": "plugins/modules/pxgrid_user_group_by_username_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b7173618a4c649ba56ca8878371c596350964dc5cf80da2e564ba0846e974c70", + "chksum_sha256": "e578d89683ff31d34b10007dee89299f586adb0b61a9623685c4f86a78367d31", "format": 1 }, { "name": "plugins/modules/node_deployment.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e5c430ca6107d1a0c4e473bc2ec7ee2afd9fcd0d3fd1e532496fe10e2ea967aa", + "chksum_sha256": "4d7ad6ec3bf9eb91e0379d867f0328ae9de14cd3ed61cc7f559153cf411c2184", + "format": 1 + }, + { + "name": "plugins/modules/custom_attributes_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ed8a7c39402fff480d892341d61953722cace5684f2603932a03032a75309c49", "format": 1 }, { "name": "plugins/modules/certificate_template_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53aac7e9e6cac4e68448da17e9e1492842685deb6ff3f864af87d583093b7912", + "chksum_sha256": "a79b2a37e5f5761849f8d3741fe58f4f6f66daf097aec9458a65584056ce9888", "format": 1 }, { "name": "plugins/modules/tacacs_profile_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e504ef810dd3090fbcd437cebbfc7f0e00e77b165400d8a8e4bb7323221d12b", + "chksum_sha256": "7876b60b2a86d549d50f4f6f8dea6a6682c1933b5269922aab0d95dfc6ede5ac", "format": 1 }, { "name": "plugins/modules/sg_mapping_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2086f5e45421eef6a31fef68f51d695f766730072a9b0cb9ee72b6b8ba5bc921", + "chksum_sha256": "6ffe04dbe967694b452458e6982ad56d7b36ba0c55694a2030928762dd09f36f", "format": 1 }, { "name": "plugins/modules/sxp_connections_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d4c68238dec1af718271b3d5306ea000197c632d4821032c9a7c8e55b3770d46", + "chksum_sha256": "657554b981fb050e3cc50e0603a5f87a71a189cbb335fe2de29973316d3da69d", "format": 1 }, { "name": "plugins/modules/pxgrid_service_unregister.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac3fb44bf0da59bab2563ecf232edfeb9f1ddab9776733d1790859c292d4d09c", + "chksum_sha256": "b009b4673700833963fbf8570e5919fa074782623f447e57b64c64d4a97a1ed7", + "format": 1 + }, + { + "name": "plugins/modules/ipsec_disable_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bc913cd5ae80a7d16051deb5eb147f506cd2738507f6988b3d0e32eeb982acc1", "format": 1 }, { "name": "plugins/modules/byod_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "850da29937bdddd65d1537819a6bb1b4a24dbbe9a22a656a6ffcf7dcb16b6c1c", + "chksum_sha256": "c830029d5268c39c9a2d3649921ed5fd6a6059babc6090809db08eb89be33b72", "format": 1 }, { "name": "plugins/modules/sg_to_vn_to_vlan_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5149b51f0543e13cd156db9f7a5e348d9e2fb93fb8f667cb7b0dbc51b5e40681", + "chksum_sha256": "b6ad84675b206cdbdbc65bae8e0242a153cc9a9a90da1a3d53985d80ea70a0e9", "format": 1 }, { "name": "plugins/modules/active_directory_trusted_domains_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44e49c7bc5161cba9d58a3369c1280603e9f930f4ce43d89b3b2134c2300f780", + "chksum_sha256": "9d8701debfa107762975d5a8881fad116d36046b5569031a84858e02e110e35a", "format": 1 }, { "name": "plugins/modules/pxgrid_authorization.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "716cbb731974d0a0ccf91ce064d71def0da5c4d69d0b676d7e44b5c014408eb6", + "chksum_sha256": "141c2080d7ea9791b037a8d7953be4f4f6321fdda350ed5030d915b2ce894702", + "format": 1 + }, + { + "name": "plugins/modules/stop_replication.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1f5dfc3fc4fb7474e27ec35821c2944b6c5608715b56d198252e8295f84a19e4", "format": 1 }, { "name": "plugins/modules/licensing_smart_state_create.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "13c2bda14a972d7be86ef90bd61e0c8bd56f7374866f515859bbc003d2d5cdee", + "chksum_sha256": "98d0bef300b43583b1af4418b48d614b83910e2d92e94ac27a8d8791697fbeab", "format": 1 }, { "name": "plugins/modules/egress_matrix_cell_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a365c7a7d2f0b706a63d649acb7807b8c58c06b2f61538c96e27894ac861832", + "chksum_sha256": "2bb63812013669463955c98f35d5b55eaa969cc7e31fa3ed49f3bddf7816a5fe", "format": 1 }, { "name": "plugins/modules/sg_mapping_deploy_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c082f7ba3c2356f15b80b7fd8b0ba8f25093b07815e8a33dea1703616a5127aa", + "chksum_sha256": "610ef30fd9f2dadc016c4740df59a6cfdc475386b6579d5812dd6256657526b8", "format": 1 }, { "name": "plugins/modules/sxp_vpns_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "961ef697ad94b8234c501b39c29b4c4cfeedeb506dd26c2deaccfa843f4561d9", + "chksum_sha256": "dd4d904a5bc2d994c6a7fd0ef92a34c30dc740219402541a8b1b09679f144e58", "format": 1 }, { "name": "plugins/modules/device_administration_command_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "abfd39aea65d01234aeb547e3b1116eb9e3cc2937fc6352699ec6368836f0c32", + "chksum_sha256": "f5db331d4c560369d12786a8e7ef1d7bcbaf3805a8e5c669a2b56836d44b140a", "format": 1 }, { "name": "plugins/modules/sg_mapping_group_deploy_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "20f33dc8990466d7672f50a8b0f7a20f2e20f144828bfc525c3db0454b5fd855", + "chksum_sha256": "b109c0c39a7ca9b03d5b64041b62b887f981ed4afa844b5e162777ffbe7d4588", "format": 1 }, { "name": "plugins/modules/repository.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ffa9ec0cacc42ccf95c6220b57e34e6d63a3c9e563e3199b92b7a4ddbd58e7a", + "chksum_sha256": "c286131f037c126260b78bb5f48dfa794c5ead4631e42cc3de33e0b952ef6112", "format": 1 }, { "name": "plugins/modules/guest_user_suspend.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b79b5d16c3b66c3554577c2af772736f964e81bae3a5c4cce2233fb856f4396b", + "chksum_sha256": "84f74b62dee33422da832cac6884532ce6194d99bec29b23b1d0367f6390cfe9", "format": 1 }, { "name": "plugins/modules/network_access_local_exception_rules_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "51f3ca86580facf658cf1abec964895a4043a4e1f5d207a54f9623cdde7f3431", + "chksum_sha256": "17b0880fb5470e13d5da9db9c558ccdb90875216c91206cbdddbe6c99659c8aa", "format": 1 }, { "name": "plugins/modules/endpoint_group_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fab9f7da635106f2a36d21ba7d1f6ac79693166f3453b50a4b9f4bb29b0bb38", + "chksum_sha256": "0d4eb16c5fe32c76045dc6c2c4d0927d001f36a782097fbf15f75a59265b121d", + "format": 1 + }, + { + "name": "plugins/modules/endpoints.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3ea2ff60c5e1f846bfa63070dfd1e9a449c958055a3b2002e654b4d71d511278", "format": 1 }, { "name": "plugins/modules/device_administration_dictionary_attributes_authorization_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "07cf2f446be9ca3f8ddec70f6fb4f1ea5996c3c021fbb12f342aa2e9a400fbdc", + "chksum_sha256": "e090a2ac42e7995103fac56420f3281a13dca77dfc5ae509b9303adb46b75722", "format": 1 }, { "name": "plugins/modules/transport_gateway_settings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24ad7f493db1ce466405b348ee57cb7b97ad40f12810340c89f8612ac61e5d8e", + "chksum_sha256": "9bfc4e7c868384b24dfd2c537b8bd68acd74c30d0b69a05138366be29ea0a5e8", + "format": 1 + }, + { + "name": "plugins/modules/upgrade_stage_start.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "06b0b7527354070805cd2ead7e4bdf8dfecbbfc488f57beee4978f264bdda551", + "format": 1 + }, + { + "name": "plugins/modules/px_grid_direct_dictionary_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e11f0b8aa737410fe3779d5879cafb13a1a104079a527b866f2f322fec1ac95d", "format": 1 }, { "name": "plugins/modules/backup_cancel.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b42e4d9b7f8dd07571306c1fae0cf89491307672d07b482f8d4b0355843d03b", + "chksum_sha256": "6d3be813dbdd206e996fc8d8ed6f0947cdb273d4c3540c7fdd08cc9cd379f598", "format": 1 }, { "name": "plugins/modules/system_certificate_export_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c01f01b4a086d90244e0ba5ce9348133e88c31f430b01d5b54de5cc5b4b13d2", + "chksum_sha256": "ef5d39e7f834e73ab71f11b2ac325ceee52639c600f41906f0eda678ec25af46", "format": 1 }, { "name": "plugins/modules/guest_smtp_notification_settings.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0305e409cb1ebd535dc7eedeaf444ba65352b9a5cbb17668a2bb136495bac526", + "chksum_sha256": "5396a7f73d87aa41601c4019ff25b2ab485326379aaad8c0cdc35b9091458357", "format": 1 }, { "name": "plugins/modules/network_access_profiles_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a3c11c1dc47edb236e5f5052c50d822cb84a2acaa2518089493c50b51deb8151", + "chksum_sha256": "1ae3960ffe058aadd1a0995b775a86cec5260cee92828b8f33b6efa8ac38a8a0", "format": 1 }, { "name": "plugins/modules/active_directory_add_groups.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4e09e04050499f616733bdb2101d8addb5ac566a31c4b295763180e4430b5bb2", + "chksum_sha256": "2689b83d7644fcdbf544e6843230fc84761d9cc6ce186e7ede1f9e094753c670", + "format": 1 + }, + { + "name": "plugins/modules/ipsec_enable.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8b43a9dc8ef50f1636a2ef56b02d5a4fde8347a3c8a069b3a5af37b027a70806", "format": 1 }, { "name": "plugins/modules/mnt_session_active_list_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1eb5965437fdc4341e192c2ead750e303c95978af102fa36e592a7f19a73416d", + "chksum_sha256": "b95abf9535f91d098e50684404058fe64f1a73c99d577f2f1ecddecca788f539", + "format": 1 + }, + { + "name": "plugins/modules/ipsec_disable.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "566f0ac360630987f7ec13f5bb80a62f2fd9a11f79e9305db2c974c0c5361f78", "format": 1 }, { "name": "plugins/modules/anc_endpoint_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a3569d21abf2efc954fc28bae550fa3785f1422afa361eef6cb3a9ae29b1e37", + "chksum_sha256": "48d9b1693a5f469a2dd80e664e966cc6d054200e8f1c4b22eff5a8837484984a", "format": 1 }, { "name": "plugins/modules/guest_type.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "76559dbf5d0dd9789aafc54c94da8a6de33c526b58d7eff513a66ef39719a703", + "chksum_sha256": "3172bcebf4890852d6598733d9cae8d6f2942573c06c386d7bcd0c9a16b06f58", "format": 1 }, { "name": "plugins/modules/active_directory_groups_by_domain_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0eac95f6f75c1fde3207ac1ee8514e5c2052951cc6d912c5234775e844540a49", + "chksum_sha256": "b2bd2b8414eb87a2c36a19953825613102c9ba14a3f8b5e5dd57567de8d8b12b", "format": 1 }, { "name": "plugins/modules/network_device.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f991f5c35be49f5d6fcbc0bd697d4e026fc446a75ca8623be0b709318156ec69", + "chksum_sha256": "e8ef7f6fd98b00dbe5102e0ef0b74585ddb5fd33bdb70dce5606873765889595", "format": 1 }, { "name": "plugins/modules/network_access_conditions_for_policy_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0d5430c7a05800cb2d57d78ca3481ca0fef6734cebc64080ae973fe04cbbd75e", + "chksum_sha256": "ee3dae72340064b0d9e576d734a8641e9ab3e3bc3a28affc0f88ba3a75935a09", "format": 1 }, { "name": "plugins/modules/tacacs_external_servers_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb879f487ea6f18b672115e75eec0ae4fe4026ddc86f13421bcdea7c1ad3fadb", + "chksum_sha256": "71ce3d8ebc4413bd8f113dbfe5f560efe50ef79819263929befce2dcca58f68b", "format": 1 }, { "name": "plugins/modules/active_directory_join_domain_with_all_nodes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14b06a4ef10b9b2584e8f532fe1c37677b72fad9c239990b2d50b29502f7e6e7", + "chksum_sha256": "a60462e444838fdce58e85caa375114f6d8b373374f60b644678b3ddad303b99", "format": 1 }, { "name": "plugins/modules/pxgrid_service_reregister.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac9855f6d676e6f9300c1993cf53fe6728cfb0eebd08ee2f6bd12a8cb0d09eef", + "chksum_sha256": "71e05ebaa60afb7e18e2e2e6e07b1b5f9623337659e32795926d7fefab9d4256", "format": 1 }, { "name": "plugins/modules/device_administration_policy_set.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b1e339b78bc4a644f0b989808b9e32c74d5dcfec162b97dbb0063f0e0058a111", + "chksum_sha256": "59f9267e9d9aaf3d5089f27dc3482028f27f880c38ac0105caaa775e00b40477", "format": 1 }, { "name": "plugins/modules/hotpatch_rollback.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5bbebb8f1ed74a0d02feab93c65ef1e318512ca91a3439d68a6ff4a95ee7301b", + "chksum_sha256": "6b96430d44af60824dc611361deaece647462e11111f8191d2682b6b3688ad42", "format": 1 }, { "name": "plugins/modules/pxgrid_service_lookup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb23143fd6f111fce408ac8d4e75dac145de82006d52dd37a96ed1ffa05e6e96", + "chksum_sha256": "9e0a4dceededc25fffb8ffa935ed6d74473247ff2c707598585029e44424b15a", + "format": 1 + }, + { + "name": "plugins/modules/user_equipment_csv.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4ca6d2aad1ce94f8bd2c29cb42f4208b26a1c244e9dc871ece8d715da0417ca7", "format": 1 }, { "name": "plugins/modules/portal_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86ab7bb424a1c6a4f41c41bd6d7ad204ff661388f684b774af1b49076ee4f846", + "chksum_sha256": "32b8fa6533ef3655464ac4f41f43bbf0acada71e86689e00e6ed770de68de73d", "format": 1 }, { "name": "plugins/modules/anc_policy_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2db248923a20de099bd0a08ca6005fee8ff8c6d9d86834eebaa3fa3f58b4b6e", + "chksum_sha256": "d074275063a0685ffcc9ed9b1932e69829712ad4e8cbb77247adc70043885f9d", + "format": 1 + }, + { + "name": "plugins/modules/upgrade_stage_cancel_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "165981e3a91180bb75d28734fd771f9b4fc4eef9b5b75905e543680dc6e87bb8", "format": 1 }, { "name": "plugins/modules/network_access_local_exception_rules_reset_hitcounts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d77f9887d2c25f06a3b45201865727e8a145ff2d9aafa2be1f1f760acb5382ba", + "chksum_sha256": "940c1ebd73a4ad60c746428ca9bfcbac95c552654104828f81c3ff7c8abb5f38", "format": 1 }, { "name": "plugins/modules/device_administration_profiles_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "76c1ca1262737ffd4d0ed1c5e3602402de168d0b3e79e06f9981683771a8ecc7", + "chksum_sha256": "7565e7732f762f49ecfabf0e0b1721e89799b509c4282b944cbbbeec11b58c0a", "format": 1 }, { "name": "plugins/modules/hotspot_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "348aff0535f872fac8d9513354f67ee2ca67f84ff42b7052ba1b11abe2e1d536", + "chksum_sha256": "de53bb0e628914dc2911252d8409aaeeeb8c4e403eb51317939921030fab075c", "format": 1 }, { "name": "plugins/modules/backup_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b9ba95bfe05869c4f2ebb1576313c3e277c669686059b9f246fb72c27043a14", + "chksum_sha256": "f66f5ee229dc54fe39a788cc02c6738504fe82e5ad4b5724550999a1351dc968", "format": 1 }, { "name": "plugins/modules/sponsor_group_member_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aefdc19a57de8b900e577a79b07583c669c19ec64c4c974f80cd1078e6d4d0e0", + "chksum_sha256": "2f29785a45919cbc0a1a63b2c3c5c739154086c59372e6fd0a842382868442b9", "format": 1 }, { "name": "plugins/modules/native_supplicant_profile.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ebe468677f8aecc2f3f0b8cd6eda96438228698d3504d992da990bf50d466531", + "chksum_sha256": "95fb03c48d03d8025fe24af654d84e818b4cff18ee6f16c965957b9ca0fe1d2d", "format": 1 }, { "name": "plugins/modules/network_device_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c5f83d40eebe3d0b1db590f20726ade3589910fd444f1de8d6e56afd2466f04", + "chksum_sha256": "c7dcf78b7c931d90182c3951bc0bbd7d5e5cb719ac5ba804d58d28a6d6efcc61", "format": 1 }, { "name": "plugins/modules/egress_matrix_cell.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "168dfa04224c2f353fb93ab9d238d43d5ac8f38dede8a70a8fbdac5cda5c6a63", + "chksum_sha256": "2f2fb087c3ef1c186d1bbbf962e28c3eb42b9ccb9a1a73aa71bc08f051b94917", "format": 1 }, { "name": "plugins/modules/self_registered_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7002e1b65e71ac66cff428c5bc948675cf580925400216659331f2156983c80", + "chksum_sha256": "0ab020fd123e6f9d7ed372b8eca6c6d0c988942dc6fe4afdfdc75d344e75e36e", "format": 1 }, { "name": "plugins/modules/pxgrid_endpoints_by_type_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c19e5636d12ae13395165460aaad23d8462fa70158fecf4e9b8c91d8e9f4d17", + "chksum_sha256": "419828dc91e57a36b8888047ec5e8facfe27bca3e24aaa5fa8335c4ae9b0597f", "format": 1 }, { "name": "plugins/modules/selfsigned_certificate_generate.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "546a291033d01ea28bb968967a462868266c089a876bf60fb2a445f0542ba2d5", + "chksum_sha256": "ee699e1c3578431f8d66fe89d410cf0cde0d0f5ee0b0beeea7c73656a85de313", + "format": 1 + }, + { + "name": "plugins/modules/trustsec_vn_vlan_mapping_info.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a672bc5d49cb66c6ffe0da2f62be3126c3e58ef3fdc4c2f6c0a91441eff0fb94", "format": 1 }, { "name": "plugins/modules/external_radius_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "746b442891b8a9acb1a5bc67b8d2f3ad1b5e27acc2c7fd9f5565b62300d2ac99", + "chksum_sha256": "f5993d5b8b111f3963c53faf66bdc3bb410aa330cc83be6669b554a7b8a3e04d", "format": 1 }, { "name": "plugins/modules/dataconnect_settings_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "890c65c102b37b0306294437f5b1a85973a3a330eb7fc22481799790ea046717", + "chksum_sha256": "3f8999ff3f7ae07f129550692574b748102195cf236d2fc7ece5717984cdb18e", "format": 1 }, { "name": "plugins/modules/pxgrid_security_groups_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0d1a4531df2dac597cd9b30a29263981f527ad353c2eb13294eb2f1999cada56", + "chksum_sha256": "adcd8c7c832b911d91d2657e1674ef44ba69d17116016bd974022399c49e9064", "format": 1 }, { "name": "plugins/modules/internal_user_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05a0e8ebb98b6f10b43c4b2b4e359743d3489742ff8aa2ee1c926e3edd105bf3", + "chksum_sha256": "377376cbc40c88da31216720bfddd179ddad160afcc58e6ac907e333f76bfd7d", "format": 1 }, { "name": "plugins/modules/sponsor_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1d4c4ee1b8aeb96c42bb0a6ed06e8ed37e6a212fba4ff788f177918cea7a9c91", + "chksum_sha256": "53bc9dd242a2178f984594221daaeae6f3ea373bf16d99b41a63bef6c73c17ef", "format": 1 }, { "name": "plugins/modules/radius_server_sequence_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "619ad9d219c78d01a45f712cda378b8ff15945f1d04648c0880feda6e3cd1294", + "chksum_sha256": "498a2a85f1eccf89e853389b55753596de2552bb853468a7ab7c788de605a95d", "format": 1 }, { "name": "plugins/modules/node_deployment_sync.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64a68a165c75c49095fc1677f6319e5353a976870987d806eadb4b4872e0cf52", + "chksum_sha256": "085da391118527130e5c919d36eb0a36524755ef4411763da41bc710d20d7078", "format": 1 }, { "name": "plugins/modules/sponsored_guest_portal.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e4885db2669c90cd436784c60a5f69733c3b7208f605405444d00b7f9ff683a7", + "chksum_sha256": "b3f4bab1c6000f3833c6b9f986ace4f30def377f9a25e2180cee173d1d9efce8", "format": 1 }, { "name": "plugins/modules/guest_type_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31174879c6d1341232fbcaf1e136a18396806b4d80be0e077edcdba639f086bb", + "chksum_sha256": "5b8fa8e738f5dd942aa75ea0131a18e0fa14677f7627a6ef49f06dd3518f213d", "format": 1 }, { "name": "plugins/modules/sgt_bulk_request.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42bf28049da1e968e93c15b189af60fabca2d78bc20be0a931e8b051647a3f94", + "chksum_sha256": "ab11b553b1533ec8508db3b5846232c8f6f744454467877eaf2f9827ca1d692a", + "format": 1 + }, + { + "name": "plugins/modules/px_grid_direct_sync.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "efca245bd4eb986b5c80f2bd3d8aabfb4a5fc893d93ddcaac8e052804847f4a9", "format": 1 }, { "name": "plugins/modules/sg_mapping_bulk_monitor_status_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "45dab621404676dc54ca5934ad34b2fd7ba3f876f5f47911c580eccacdaba8df", + "chksum_sha256": "85e29afac27d1f452df35d4a52b68ce69ad3ee0c9a51a66ef5a40f3e07896065", "format": 1 }, { @@ -5821,7 +6731,7 @@ "name": "playbooks/group_vars/ise_servers", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ac69d55205ddcdb3a2084acb395f4ea26e195b233b37a5fbb01767aff48ce85", + "chksum_sha256": "eb0a366cc83d8539ac2f24b84c4a0f681cd16b06519cc625aafd61d1653e374e", "format": 1 }, { @@ -6171,7 +7081,7 @@ "name": "playbooks/credentials.template", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5db043788f88104f89c0273aece227d6c4fc9cbe1a1ac0d993bc81763b958bd", + "chksum_sha256": "740010e9ee833e5a495a186697687e0a60d93d8c071a3e77fb943855a1088654", "format": 1 }, { @@ -6255,21 +7165,14 @@ "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "46af54b2672389b7a9e635b04c480f0697afee607e2e84199b8c5777e1018017", + "chksum_sha256": "140605f83668879d8c78db738188d906df045dfa6d6f30938b06ff48a02fca68", "format": 1 }, { "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0770ec263df253ef1ee1b8f727e1e03c18f8c1198efbd85d7ed1c63006b3b4a", - "format": 1 - }, - { - "name": "Pipfile", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "17a27a28cca40c85447113986ef3f6491f1e5cae1a17d460adfda229f5296969", + "chksum_sha256": "d1a02a0b361b7e8e37fa4423da5b9c7ac69c9a02c9621a48ee195cc1f5c4f173", "format": 1 }, { @@ -6297,7 +7200,7 @@ "name": ".github/workflows/sanity_tests.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dadf3d50392de4f33e091cf5947f4cf8f4ba153a95b63026e6d8eae8214ebd69", + "chksum_sha256": "c886a00237af058731d9d8fcd9716c646df7f61bac9a410643b5ab837d955376", "format": 1 }, { @@ -6334,6 +7237,27 @@ "chksum_type": "sha256", "chksum_sha256": "1f103c6a9dd07cd13a9a6f17ace6b813f47747eb9cb7e00488cb2073caaf91bb", "format": 1 + }, + { + "name": ".vscode", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".vscode/settings.json", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ff058b88424cd36c92374f3465470d0c24191746d224d3729d623881464c651e", + "format": 1 + }, + { + "name": ".vscode/launch.json", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6a62b2b5cbd6e0edb4942e59fc4451e2e59f12472965990a24029ae24264fcb2", + "format": 1 } ], "format": 1 diff --git a/ansible_collections/cisco/ise/MANIFEST.json b/ansible_collections/cisco/ise/MANIFEST.json index cd7253ccb..0c78fda00 100644 --- a/ansible_collections/cisco/ise/MANIFEST.json +++ b/ansible_collections/cisco/ise/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "cisco", "name": "ise", - "version": "2.8.1", + "version": "2.9.1", "authors": [ "Rafael Campos ", "William Astorga ", @@ -32,7 +32,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0a3e92ae466e59573dc00981d4201e0f64a87340c6ddbbcbdd2a58ed18f8a0a", + "chksum_sha256": "15f432db63325689f8870dba08698116fcf594e05eaa83c4029245933f588784", "format": 1 }, "format": 1 diff --git a/ansible_collections/cisco/ise/Pipfile b/ansible_collections/cisco/ise/Pipfile deleted file mode 100644 index 2bc8501b5..000000000 --- a/ansible_collections/cisco/ise/Pipfile +++ /dev/null @@ -1,13 +0,0 @@ -[[source]] -url = "https://pypi.org/simple" -verify_ssl = true -name = "pypi" - -[packages] -ciscoisesdk = ">=2.1.1" -requests = ">=2.25.1" - -[dev-packages] - -[requires] -python_version = "3.9" diff --git a/ansible_collections/cisco/ise/README.md b/ansible_collections/cisco/ise/README.md index a6471334e..2961ef5f0 100644 --- a/ansible_collections/cisco/ise/README.md +++ b/ansible_collections/cisco/ise/README.md @@ -52,6 +52,7 @@ The following table shows the supported versions. | 3.1.0 | 2.0.0 | 1.2.0 | | 3.1_Patch_1 | 2.5.16 | 2.0.10 | | 3.2_beta | 2.8.0 | 2.1.1 | +| 3.3_patch_1 | 2.9.1 | 2.2.1 | If your Ansible collection is older please consider updating it first. *Notes*: @@ -88,7 +89,7 @@ export ISE_HOSTNAME= export ISE_USERNAME= export ISE_PASSWORD= export ISE_VERIFY=False # optional, defaults to True -export ISE_VERSION=3.2_beta # optional, defaults to 3.2_beta +export ISE_VERSION=3.3_patch_1 # optional, defaults to 3.3_patch_1 export ISE_WAIT_ON_RATE_LIMIT=True # optional, defaults to True export ISE_USES_API_GATEWAY=True # optional, defaults to True export ISE_DEBUG=False # optional, defaults to False @@ -125,7 +126,7 @@ ise_hostname: ise_username: ise_password: ise_verify: False # optional, defaults to True -ise_version: 3.2_beta # optional, defaults to 3.2_beta +ise_version: 3.3_patch_1 # optional, defaults to 3.3_patch_1 ise_wait_on_rate_limit: True # optional, defaults to True ise_debug: False # optional, defaults to False ise_uses_api_gateway: True # optional, defaults to True @@ -175,7 +176,7 @@ ise_hostname: ise_username: ise_password: ise_verify: False # optional, defaults to True -ise_version: 3.2_beta # optional, defaults to 3.2_beta +ise_version: 3.3_patch_1 # optional, defaults to 3.3_patch_1 ise_wait_on_rate_limit: True # optional, defaults to True ise_debug: False # optional, defaults to False ise_uses_api_gateway: True # optional, defaults to True diff --git a/ansible_collections/cisco/ise/changelogs/changelog.yaml b/ansible_collections/cisco/ise/changelogs/changelog.yaml index 6ecbe5f31..d5edc8259 100644 --- a/ansible_collections/cisco/ise/changelogs/changelog.yaml +++ b/ansible_collections/cisco/ise/changelogs/changelog.yaml @@ -982,4 +982,30 @@ releases: changes: release_summary: Changes the requirements of ansible.utils to allow > 4.0.0 versions. bugfixes: - - ansible.utils changes to `">=2.0.0,<5.0"` in galaxy.yml dependencies. \ No newline at end of file + - ansible.utils changes to `">=2.0.0,<5.0"` in galaxy.yml dependencies. + 2.9.0: + release_date: "2024-04-24" + changes: + release_summary: ansible-ise now support 3.3 patch 1. + bugfixes: + - Service included active_directories. + - Service included ad_groups. + - Service included custom_attributes. + - Service included duo_identity_sync. + - Service included duo_mfa. + - Service included enable_mfa. + - Service included endpoint_stop_replication_service. + - Service included endpoints. + - Service included full_upgrade. + - Service included is_mfa_enabled. + - Service included native_ipsec. + - Service included px_grid_direct. + - Service included sgt_range_reservation. + - Service included user_equipment. + 2.9.1: + release_date: "2024-05-15" + changes: + release_summary: Update network_device_group module. + bugfixes: + - network_device_group - change parameter name from ndgtype to othername. + - network_device_group_info - change parameter name from ndgtype to othername. \ No newline at end of file diff --git a/ansible_collections/cisco/ise/playbooks/credentials.template b/ansible_collections/cisco/ise/playbooks/credentials.template index 6cafc452c..96e05b3ca 100644 --- a/ansible_collections/cisco/ise/playbooks/credentials.template +++ b/ansible_collections/cisco/ise/playbooks/credentials.template @@ -3,7 +3,7 @@ ise_hostname: ise_username: ise_password: ise_verify: False # optional, defaults to True -ise_version: 3.2_beta # optional, defaults to 3.2_beta +ise_version: 3.3_patch_1 # optional, defaults to 3.3_patch_1 ise_wait_on_rate_limit: True # optional, defaults to True ise_debug: False # optional, defaults to False ise_uses_api_gateway: True # optional, defaults to True diff --git a/ansible_collections/cisco/ise/playbooks/group_vars/ise_servers b/ansible_collections/cisco/ise/playbooks/group_vars/ise_servers index 5153435b4..091be00a9 100644 --- a/ansible_collections/cisco/ise/playbooks/group_vars/ise_servers +++ b/ansible_collections/cisco/ise/playbooks/group_vars/ise_servers @@ -3,7 +3,7 @@ ise_hostname: "198.18.133.27" ise_username: "admin" ise_password: "910457" -ise_version: "3.2_beta" +ise_version: "3.3_patch_1" ise_verify: False ise_debug: True ise_uses_api_gateway: True diff --git a/ansible_collections/cisco/ise/plugins/.DS_Store b/ansible_collections/cisco/ise/plugins/.DS_Store new file mode 100644 index 000000000..874d3d2c6 Binary files /dev/null and b/ansible_collections/cisco/ise/plugins/.DS_Store differ diff --git a/ansible_collections/cisco/ise/plugins/action/aci_bindings_info.py b/ansible_collections/cisco/ise/plugins/action/aci_bindings_info.py index 53de0a3c9..335850891 100644 --- a/ansible_collections/cisco/ise/plugins/action/aci_bindings_info.py +++ b/ansible_collections/cisco/ise/plugins/action/aci_bindings_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/aci_settings.py b/ansible_collections/cisco/ise/plugins/action/aci_settings.py index f0f255126..95e5e9f20 100644 --- a/ansible_collections/cisco/ise/plugins/action/aci_settings.py +++ b/ansible_collections/cisco/ise/plugins/action/aci_settings.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/aci_settings_info.py b/ansible_collections/cisco/ise/plugins/action/aci_settings_info.py index 930fdb510..c3914a94e 100644 --- a/ansible_collections/cisco/ise/plugins/action/aci_settings_info.py +++ b/ansible_collections/cisco/ise/plugins/action/aci_settings_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/aci_test_connectivity.py b/ansible_collections/cisco/ise/plugins/action/aci_test_connectivity.py index 60b95623a..83934fd12 100644 --- a/ansible_collections/cisco/ise/plugins/action/aci_test_connectivity.py +++ b/ansible_collections/cisco/ise/plugins/action/aci_test_connectivity.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/active_directories_info.py b/ansible_collections/cisco/ise/plugins/action/active_directories_info.py new file mode 100644 index 000000000..caf0cfa69 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/active_directories_info.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if not name and not id: + response = ise.exec( + family="active_directories", + function='get_active_directories', + params=self.get_object(self._task.args) + ).response + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/active_directory.py b/ansible_collections/cisco/ise/plugins/action/active_directory.py index 0d2a18d78..fd56f0eec 100644 --- a/ansible_collections/cisco/ise/plugins/action/active_directory.py +++ b/ansible_collections/cisco/ise/plugins/action/active_directory.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/active_directory_add_groups.py b/ansible_collections/cisco/ise/plugins/action/active_directory_add_groups.py index e6afb52d9..3afd0c961 100644 --- a/ansible_collections/cisco/ise/plugins/action/active_directory_add_groups.py +++ b/ansible_collections/cisco/ise/plugins/action/active_directory_add_groups.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/active_directory_groups_by_domain_info.py b/ansible_collections/cisco/ise/plugins/action/active_directory_groups_by_domain_info.py index 76f1adff1..c5444ec8a 100644 --- a/ansible_collections/cisco/ise/plugins/action/active_directory_groups_by_domain_info.py +++ b/ansible_collections/cisco/ise/plugins/action/active_directory_groups_by_domain_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/active_directory_info.py b/ansible_collections/cisco/ise/plugins/action/active_directory_info.py index 673b0870c..7d77de92b 100644 --- a/ansible_collections/cisco/ise/plugins/action/active_directory_info.py +++ b/ansible_collections/cisco/ise/plugins/action/active_directory_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/active_directory_is_user_member_of_group_info.py b/ansible_collections/cisco/ise/plugins/action/active_directory_is_user_member_of_group_info.py index 1134e7ba5..ce9288be9 100644 --- a/ansible_collections/cisco/ise/plugins/action/active_directory_is_user_member_of_group_info.py +++ b/ansible_collections/cisco/ise/plugins/action/active_directory_is_user_member_of_group_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/active_directory_join_domain.py b/ansible_collections/cisco/ise/plugins/action/active_directory_join_domain.py index 8da2dfe89..187ff6ada 100644 --- a/ansible_collections/cisco/ise/plugins/action/active_directory_join_domain.py +++ b/ansible_collections/cisco/ise/plugins/action/active_directory_join_domain.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/active_directory_join_domain_with_all_nodes.py b/ansible_collections/cisco/ise/plugins/action/active_directory_join_domain_with_all_nodes.py index 3c597a0f2..c26f71cc9 100644 --- a/ansible_collections/cisco/ise/plugins/action/active_directory_join_domain_with_all_nodes.py +++ b/ansible_collections/cisco/ise/plugins/action/active_directory_join_domain_with_all_nodes.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain.py b/ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain.py index c3aa7c7ec..cc72028ba 100644 --- a/ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain.py +++ b/ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain_with_all_nodes.py b/ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain_with_all_nodes.py index 56b8b3b24..9caca6d08 100644 --- a/ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain_with_all_nodes.py +++ b/ansible_collections/cisco/ise/plugins/action/active_directory_leave_domain_with_all_nodes.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/active_directory_trusted_domains_info.py b/ansible_collections/cisco/ise/plugins/action/active_directory_trusted_domains_info.py index 1415f4caf..36d0ace57 100644 --- a/ansible_collections/cisco/ise/plugins/action/active_directory_trusted_domains_info.py +++ b/ansible_collections/cisco/ise/plugins/action/active_directory_trusted_domains_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/active_directory_user_groups_info.py b/ansible_collections/cisco/ise/plugins/action/active_directory_user_groups_info.py index 262c9cd95..c5322a740 100644 --- a/ansible_collections/cisco/ise/plugins/action/active_directory_user_groups_info.py +++ b/ansible_collections/cisco/ise/plugins/action/active_directory_user_groups_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/ad_groups_info.py b/ansible_collections/cisco/ise/plugins/action/ad_groups_info.py new file mode 100644 index 000000000..f590ddd86 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/ad_groups_info.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + activeDirectory=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + active_directory=params.get("activeDirectory"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("activeDirectory") + name = self._task.args.get("name") + if id: + response = ise.exec( + family="ad_groups", + function='get_adgroups', + params=self.get_object(self._task.args) + ).response + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + # NOTICE: Does not have a get all method or it is in another action + response = None + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/admin_user_info.py b/ansible_collections/cisco/ise/plugins/action/admin_user_info.py index 6ee351a30..e2d67b236 100644 --- a/ansible_collections/cisco/ise/plugins/action/admin_user_info.py +++ b/ansible_collections/cisco/ise/plugins/action/admin_user_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/allowed_protocols.py b/ansible_collections/cisco/ise/plugins/action/allowed_protocols.py index eb9de9f66..c878cafd2 100644 --- a/ansible_collections/cisco/ise/plugins/action/allowed_protocols.py +++ b/ansible_collections/cisco/ise/plugins/action/allowed_protocols.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/allowed_protocols_info.py b/ansible_collections/cisco/ise/plugins/action/allowed_protocols_info.py index 00258f04c..b2bd2af51 100644 --- a/ansible_collections/cisco/ise/plugins/action/allowed_protocols_info.py +++ b/ansible_collections/cisco/ise/plugins/action/allowed_protocols_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/anc_endpoint_apply.py b/ansible_collections/cisco/ise/plugins/action/anc_endpoint_apply.py index e6b6b818a..b115ac712 100644 --- a/ansible_collections/cisco/ise/plugins/action/anc_endpoint_apply.py +++ b/ansible_collections/cisco/ise/plugins/action/anc_endpoint_apply.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/anc_endpoint_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/anc_endpoint_bulk_monitor_status_info.py index 96e51ce60..eb33874af 100644 --- a/ansible_collections/cisco/ise/plugins/action/anc_endpoint_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/anc_endpoint_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/anc_endpoint_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/anc_endpoint_bulk_request.py index eb2dcb101..3b9e29e3c 100644 --- a/ansible_collections/cisco/ise/plugins/action/anc_endpoint_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/anc_endpoint_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/anc_endpoint_clear.py b/ansible_collections/cisco/ise/plugins/action/anc_endpoint_clear.py index 696acc0ca..502d6b0ec 100644 --- a/ansible_collections/cisco/ise/plugins/action/anc_endpoint_clear.py +++ b/ansible_collections/cisco/ise/plugins/action/anc_endpoint_clear.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/anc_endpoint_info.py b/ansible_collections/cisco/ise/plugins/action/anc_endpoint_info.py index 69ccd3d4f..ebc578132 100644 --- a/ansible_collections/cisco/ise/plugins/action/anc_endpoint_info.py +++ b/ansible_collections/cisco/ise/plugins/action/anc_endpoint_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/anc_policy.py b/ansible_collections/cisco/ise/plugins/action/anc_policy.py index d429c258d..2d8686140 100644 --- a/ansible_collections/cisco/ise/plugins/action/anc_policy.py +++ b/ansible_collections/cisco/ise/plugins/action/anc_policy.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/anc_policy_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/anc_policy_bulk_monitor_status_info.py index 8815b1bfe..045fe60a1 100644 --- a/ansible_collections/cisco/ise/plugins/action/anc_policy_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/anc_policy_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/anc_policy_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/anc_policy_bulk_request.py index bcd09421e..5a48d7a68 100644 --- a/ansible_collections/cisco/ise/plugins/action/anc_policy_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/anc_policy_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/anc_policy_info.py b/ansible_collections/cisco/ise/plugins/action/anc_policy_info.py index aa54af4e8..a5587e186 100644 --- a/ansible_collections/cisco/ise/plugins/action/anc_policy_info.py +++ b/ansible_collections/cisco/ise/plugins/action/anc_policy_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/authorization_profile.py b/ansible_collections/cisco/ise/plugins/action/authorization_profile.py index cdf71fdcf..7cd9795cc 100644 --- a/ansible_collections/cisco/ise/plugins/action/authorization_profile.py +++ b/ansible_collections/cisco/ise/plugins/action/authorization_profile.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/authorization_profile_info.py b/ansible_collections/cisco/ise/plugins/action/authorization_profile_info.py index da068f9df..220d28e4f 100644 --- a/ansible_collections/cisco/ise/plugins/action/authorization_profile_info.py +++ b/ansible_collections/cisco/ise/plugins/action/authorization_profile_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/backup_cancel.py b/ansible_collections/cisco/ise/plugins/action/backup_cancel.py index 2e27c32b3..167372c73 100644 --- a/ansible_collections/cisco/ise/plugins/action/backup_cancel.py +++ b/ansible_collections/cisco/ise/plugins/action/backup_cancel.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/backup_config.py b/ansible_collections/cisco/ise/plugins/action/backup_config.py index 20b70a7c8..e512c52c0 100644 --- a/ansible_collections/cisco/ise/plugins/action/backup_config.py +++ b/ansible_collections/cisco/ise/plugins/action/backup_config.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/backup_last_status_info.py b/ansible_collections/cisco/ise/plugins/action/backup_last_status_info.py index 6befcecb8..0164258fa 100644 --- a/ansible_collections/cisco/ise/plugins/action/backup_last_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/backup_last_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/backup_restore.py b/ansible_collections/cisco/ise/plugins/action/backup_restore.py index 9898d6fe6..d1495cbb5 100644 --- a/ansible_collections/cisco/ise/plugins/action/backup_restore.py +++ b/ansible_collections/cisco/ise/plugins/action/backup_restore.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/backup_schedule_config.py b/ansible_collections/cisco/ise/plugins/action/backup_schedule_config.py index c26acbfe4..19482ae25 100644 --- a/ansible_collections/cisco/ise/plugins/action/backup_schedule_config.py +++ b/ansible_collections/cisco/ise/plugins/action/backup_schedule_config.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/backup_schedule_config_update.py b/ansible_collections/cisco/ise/plugins/action/backup_schedule_config_update.py index 56aeec22c..a26a3d76b 100644 --- a/ansible_collections/cisco/ise/plugins/action/backup_schedule_config_update.py +++ b/ansible_collections/cisco/ise/plugins/action/backup_schedule_config_update.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/bind_signed_certificate.py b/ansible_collections/cisco/ise/plugins/action/bind_signed_certificate.py index d247db93f..4912aa8c1 100644 --- a/ansible_collections/cisco/ise/plugins/action/bind_signed_certificate.py +++ b/ansible_collections/cisco/ise/plugins/action/bind_signed_certificate.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/byod_portal.py b/ansible_collections/cisco/ise/plugins/action/byod_portal.py index 4de9abd9c..e01960c35 100644 --- a/ansible_collections/cisco/ise/plugins/action/byod_portal.py +++ b/ansible_collections/cisco/ise/plugins/action/byod_portal.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/byod_portal_info.py b/ansible_collections/cisco/ise/plugins/action/byod_portal_info.py index ba4017d9a..80526824d 100644 --- a/ansible_collections/cisco/ise/plugins/action/byod_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/action/byod_portal_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/certificate_profile.py b/ansible_collections/cisco/ise/plugins/action/certificate_profile.py index a6c13c28d..ba9be072a 100644 --- a/ansible_collections/cisco/ise/plugins/action/certificate_profile.py +++ b/ansible_collections/cisco/ise/plugins/action/certificate_profile.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/certificate_profile_info.py b/ansible_collections/cisco/ise/plugins/action/certificate_profile_info.py index 20505acea..e69ad1a47 100644 --- a/ansible_collections/cisco/ise/plugins/action/certificate_profile_info.py +++ b/ansible_collections/cisco/ise/plugins/action/certificate_profile_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/certificate_template_info.py b/ansible_collections/cisco/ise/plugins/action/certificate_template_info.py index 2d0bab581..71e7982fa 100644 --- a/ansible_collections/cisco/ise/plugins/action/certificate_template_info.py +++ b/ansible_collections/cisco/ise/plugins/action/certificate_template_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/configuration.py b/ansible_collections/cisco/ise/plugins/action/configuration.py index de3fe1eff..4f8a16b2c 100644 --- a/ansible_collections/cisco/ise/plugins/action/configuration.py +++ b/ansible_collections/cisco/ise/plugins/action/configuration.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/configuration_info.py b/ansible_collections/cisco/ise/plugins/action/configuration_info.py index d3ed0d5fe..1bcd43c9c 100644 --- a/ansible_collections/cisco/ise/plugins/action/configuration_info.py +++ b/ansible_collections/cisco/ise/plugins/action/configuration_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/connector_config.py b/ansible_collections/cisco/ise/plugins/action/connector_config.py deleted file mode 100644 index 8e124b7ed..000000000 --- a/ansible_collections/cisco/ise/plugins/action/connector_config.py +++ /dev/null @@ -1,250 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (c) 2023, Cisco Systems -# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function - -__metaclass__ = type -from ansible.plugins.action import ActionBase - -try: - from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( - AnsibleArgSpecValidator, - ) -except ImportError: - ANSIBLE_UTILS_IS_INSTALLED = False -else: - ANSIBLE_UTILS_IS_INSTALLED = True -from ansible.errors import AnsibleActionFail -from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( - ISESDK, - ise_argument_spec, - ise_compare_equality, - get_dict_result, -) -from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( - InconsistentParameters, -) - -# Get common arguments specification -argument_spec = ise_argument_spec() -# Add arguments specific for this module -argument_spec.update(dict( - state=dict(type="str", default="present", choices=["present", "absent"]), - additionalProperties=dict(type="dict"), - attributes=dict(type="dict"), - connectorName=dict(type="str"), - connectorType=dict(type="str"), - deltasyncSchedule=dict(type="dict"), - description=dict(type="str"), - enabled=dict(type="bool"), - fullsyncSchedule=dict(type="dict"), - protocol=dict(type="str"), - skipCertificateValidations=dict(type="bool"), - url=dict(type="dict"), -)) - -required_if = [ - ("state", "present", ["connectorName"], True), - ("state", "absent", ["connectorName"], True), -] -required_one_of = [] -mutually_exclusive = [] -required_together = [] - - -class ConnectorConfig(object): - def __init__(self, params, ise): - self.ise = ise - self.new_object = dict( - additional_properties=params.get("additionalProperties"), - attributes=params.get("attributes"), - connector_name=params.get("connectorName"), - connector_type=params.get("connectorType"), - deltasync_schedule=params.get("deltasyncSchedule"), - description=params.get("description"), - enabled=params.get("enabled"), - fullsync_schedule=params.get("fullsyncSchedule"), - protocol=params.get("protocol"), - skip_certificate_validations=params.get("skipCertificateValidations"), - url=params.get("url"), - ) - - def get_object_by_name(self, name): - try: - result = self.ise.exec( - family="edda", - function="get_connector_config_by_connector_name", - params={"connector_name": name}, - handle_func_exception=False, - ).response['response'] - result = get_dict_result(result, 'connectorName', name) - except (TypeError, AttributeError) as e: - self.ise.fail_json( - msg=( - "An error occured when executing operation." - " Check the configuration of your API Settings and API Gateway settings on your ISE server." - " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." - " You may want to enable the (ise_debug: True) argument." - " The error was: {error}" - ).format(error=e) - ) - except Exception: - result = None - return result - - def get_object_by_id(self, id): - # NOTICE: Does not have a get by id method or it is in another action - result = None - return result - - def exists(self): - id_exists = False - name_exists = False - prev_obj = None - o_id = self.new_object.get("id") - name = self.new_object.get("connectorName") - if o_id: - prev_obj = self.get_object_by_id(o_id) - id_exists = prev_obj is not None and isinstance(prev_obj, dict) - if not id_exists and name: - prev_obj = self.get_object_by_name(name) - name_exists = prev_obj is not None and isinstance(prev_obj, dict) - if name_exists: - _id = prev_obj.get("id") - if id_exists and name_exists and o_id != _id: - raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") - it_exists = prev_obj is not None and isinstance(prev_obj, dict) - return (it_exists, prev_obj) - - def requires_update(self, current_obj): - requested_obj = self.new_object - - obj_params = [ - ("additionalProperties", "additional_properties"), - ("attributes", "attributes"), - ("connectorName", "connector_name"), - ("connectorType", "connector_type"), - ("deltasyncSchedule", "deltasync_schedule"), - ("description", "description"), - ("enabled", "enabled"), - ("fullsyncSchedule", "fullsync_schedule"), - ("protocol", "protocol"), - ("skipCertificateValidations", "skip_certificate_validations"), - ("url", "url"), - ] - # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params - # If any does not have eq params, it requires update - return any(not ise_compare_equality(current_obj.get(ise_param), - requested_obj.get(ansible_param)) - for (ise_param, ansible_param) in obj_params) - - def create(self): - result = self.ise.exec( - family="edda", - function="create_connector_config", - params=self.new_object, - ).response - return result - - def update(self): - id = self.new_object.get("id") - name = self.new_object.get("name") - result = None - if not name: - name_ = self.get_object_by_id(id).get("name") - self.new_object.update(dict(name=name_)) - result = self.ise.exec( - family="edda", - function="update_connector_config_by_connector_name", - params=self.new_object - ).response - return result - - def delete(self): - id = self.new_object.get("id") - name = self.new_object.get("name") - result = None - if not name: - name_ = self.get_object_by_id(id).get("name") - self.new_object.update(dict(name=name_)) - result = self.ise.exec( - family="edda", - function="delete_connector_config_by_connector_name", - params=self.new_object - ).response - return result - - -class ActionModule(ActionBase): - def __init__(self, *args, **kwargs): - if not ANSIBLE_UTILS_IS_INSTALLED: - raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") - super(ActionModule, self).__init__(*args, **kwargs) - self._supports_async = False - self._supports_check_mode = False - self._result = None - - # Checks the supplied parameters against the argument spec for this module - def _check_argspec(self): - aav = AnsibleArgSpecValidator( - data=self._task.args, - schema=dict(argument_spec=argument_spec), - schema_format="argspec", - schema_conditionals=dict( - required_if=required_if, - required_one_of=required_one_of, - mutually_exclusive=mutually_exclusive, - required_together=required_together, - ), - name=self._task.action, - ) - valid, errors, self._task.args = aav.validate() - if not valid: - raise AnsibleActionFail(errors) - - def run(self, tmp=None, task_vars=None): - self._task.diff = False - self._result = super(ActionModule, self).run(tmp, task_vars) - self._result["changed"] = False - self._check_argspec() - - ise = ISESDK(params=self._task.args) - obj = ConnectorConfig(self._task.args, ise) - - state = self._task.args.get("state") - - response = None - - if state == "present": - (obj_exists, prev_obj) = obj.exists() - if obj_exists: - if obj.requires_update(prev_obj): - ise_update_response = obj.update() - self._result.update(dict(ise_update_response=ise_update_response)) - (obj_exists, updated_obj) = obj.exists() - response = updated_obj - ise.object_updated() - else: - response = prev_obj - ise.object_already_present() - else: - ise_create_response = obj.create() - (obj_exists, created_obj) = obj.exists() - response = created_obj - ise.object_created() - - elif state == "absent": - (obj_exists, prev_obj) = obj.exists() - if obj_exists: - obj.delete() - response = prev_obj - ise.object_deleted() - else: - ise.object_already_absent() - - self._result.update(dict(ise_response=response)) - self._result.update(ise.exit_json()) - return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/connector_config_info.py b/ansible_collections/cisco/ise/plugins/action/connector_config_info.py deleted file mode 100644 index 05bd40cbe..000000000 --- a/ansible_collections/cisco/ise/plugins/action/connector_config_info.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (c) 2023, Cisco Systems -# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function - -__metaclass__ = type -from ansible.plugins.action import ActionBase - -try: - from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( - AnsibleArgSpecValidator, - ) -except ImportError: - ANSIBLE_UTILS_IS_INSTALLED = False -else: - ANSIBLE_UTILS_IS_INSTALLED = True -from ansible.errors import AnsibleActionFail -from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( - ISESDK, - ise_argument_spec, -) - -# Get common arguements specification -argument_spec = ise_argument_spec() -# Add arguments specific for this module -argument_spec.update(dict( - connectorName=dict(type="str"), -)) - -required_if = [] -required_one_of = [] -mutually_exclusive = [] -required_together = [] - - -class ActionModule(ActionBase): - def __init__(self, *args, **kwargs): - if not ANSIBLE_UTILS_IS_INSTALLED: - raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") - super(ActionModule, self).__init__(*args, **kwargs) - self._supports_async = False - self._supports_check_mode = True - self._result = None - - # Checks the supplied parameters against the argument spec for this module - def _check_argspec(self): - aav = AnsibleArgSpecValidator( - data=self._task.args, - schema=dict(argument_spec=argument_spec), - schema_format="argspec", - schema_conditionals=dict( - required_if=required_if, - required_one_of=required_one_of, - mutually_exclusive=mutually_exclusive, - required_together=required_together, - ), - name=self._task.action, - ) - valid, errors, self._task.args = aav.validate() - if not valid: - raise AnsibleActionFail(errors) - - def get_object(self, params): - new_object = dict( - connector_name=params.get("connectorName"), - ) - return new_object - - def run(self, tmp=None, task_vars=None): - self._task.diff = False - self._result = super(ActionModule, self).run(tmp, task_vars) - self._result["changed"] = False - self._check_argspec() - - self._result.update(dict(ise_response={})) - - ise = ISESDK(params=self._task.args) - - id = self._task.args.get("id") - name = self._task.args.get("connectorName") - if name: - response = ise.exec( - family="edda", - function='get_connector_config_by_connector_name', - params=self.get_object(self._task.args) - ).response['response'] - self._result.update(dict(ise_response=response)) - self._result.update(ise.exit_json()) - return self._result - if not name and not id: - response = ise.exec( - family="edda", - function='get_connector_config', - params=self.get_object(self._task.args) - ).response['response'] - self._result.update(dict(ise_response=response)) - self._result.update(ise.exit_json()) - return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/csr_delete.py b/ansible_collections/cisco/ise/plugins/action/csr_delete.py index 6c0a2f6dd..581005716 100644 --- a/ansible_collections/cisco/ise/plugins/action/csr_delete.py +++ b/ansible_collections/cisco/ise/plugins/action/csr_delete.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/csr_export_info.py b/ansible_collections/cisco/ise/plugins/action/csr_export_info.py index 16e74b49e..4381a1384 100644 --- a/ansible_collections/cisco/ise/plugins/action/csr_export_info.py +++ b/ansible_collections/cisco/ise/plugins/action/csr_export_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/csr_generate.py b/ansible_collections/cisco/ise/plugins/action/csr_generate.py index 8c1d62d60..36429190a 100644 --- a/ansible_collections/cisco/ise/plugins/action/csr_generate.py +++ b/ansible_collections/cisco/ise/plugins/action/csr_generate.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/csr_generate_intermediate_ca.py b/ansible_collections/cisco/ise/plugins/action/csr_generate_intermediate_ca.py index 50eeb9401..1e30f54f6 100644 --- a/ansible_collections/cisco/ise/plugins/action/csr_generate_intermediate_ca.py +++ b/ansible_collections/cisco/ise/plugins/action/csr_generate_intermediate_ca.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/csr_info.py b/ansible_collections/cisco/ise/plugins/action/csr_info.py index 028e2f318..fcf277978 100644 --- a/ansible_collections/cisco/ise/plugins/action/csr_info.py +++ b/ansible_collections/cisco/ise/plugins/action/csr_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -31,7 +31,7 @@ argument_spec.update(dict( size=dict(type="int"), sort=dict(type="str"), sortBy=dict(type="str"), - filter=dict(type="list"), + filter=dict(type="str"), filterType=dict(type="str"), hostName=dict(type="str"), id=dict(type="str"), diff --git a/ansible_collections/cisco/ise/plugins/action/custom_attributes.py b/ansible_collections/cisco/ise/plugins/action/custom_attributes.py new file mode 100644 index 000000000..b0328ed7d --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/custom_attributes.py @@ -0,0 +1,207 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + attributeName=dict(type="str"), + attributeType=dict(type="str"), + name=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["name"], True), + ("state", "absent", ["name"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class CustomAttributes(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + attribute_name=params.get("attributeName"), + attribute_type=params.get("attributeType"), + name=params.get("name"), + ) + + def get_object_by_name(self, name): + try: + result = self.ise.exec( + family="customattributes", + function="get", + params={"name": name}, + handle_func_exception=False, + ).response + result = get_dict_result(result, 'name', name) + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def get_object_by_id(self, id): + # NOTICE: Does not have a get by id method or it is in another action + result = None + return result + + def exists(self): + prev_obj = None + id_exists = False + name_exists = False + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("attributeName", "attribute_name"), + ("attributeType", "attribute_type"), + ("name", "name"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="customattributes", + function="create_custom_attribute", + params=self.new_object, + ).response + return result + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not name: + name_ = self.get_object_by_id(id).get("name") + self.new_object.update(dict(name=name_)) + result = self.ise.exec( + family="customattributes", + function="delete", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = CustomAttributes(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + response = prev_obj + ise.object_present_and_different() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/custom_attributes_info.py b/ansible_collections/cisco/ise/plugins/action/custom_attributes_info.py new file mode 100644 index 000000000..d80c60f68 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/custom_attributes_info.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + name=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + name=params.get("name"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if name: + response = ise.exec( + family="customattributes", + function='get', + params=self.get_object(self._task.args) + ).response + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + response = ise.exec( + family="customattributes", + function='list', + params=self.get_object(self._task.args) + ).response + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/custom_attributes_rename.py b/ansible_collections/cisco/ise/plugins/action/custom_attributes_rename.py new file mode 100644 index 000000000..2a6302296 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/custom_attributes_rename.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + currentName=dict(type="str"), + newName=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + current_name=params.get("currentName"), + new_name=params.get("newName"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="customattributes", + function="rename", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/dataconnect_info.py b/ansible_collections/cisco/ise/plugins/action/dataconnect_info.py index ffd19d387..c4b4322a4 100644 --- a/ansible_collections/cisco/ise/plugins/action/dataconnect_info.py +++ b/ansible_collections/cisco/ise/plugins/action/dataconnect_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_info.py b/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_info.py index 5d794c926..45e618b56 100644 --- a/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_info.py +++ b/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password.py b/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password.py index 0fd96ad3e..e871dcb0c 100644 --- a/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password.py +++ b/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password_expiry.py b/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password_expiry.py index f9db60ec8..ca6569d5f 100644 --- a/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password_expiry.py +++ b/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_password_expiry.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_status.py b/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_status.py index e7232ab0e..108b1b9bc 100644 --- a/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_status.py +++ b/ansible_collections/cisco/ise/plugins/action/dataconnect_settings_status.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/deployment_info.py b/ansible_collections/cisco/ise/plugins/action/deployment_info.py index 206b6673a..b6a615332 100644 --- a/ansible_collections/cisco/ise/plugins/action/deployment_info.py +++ b/ansible_collections/cisco/ise/plugins/action/deployment_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_reset_hitcount.py index 02e4e34ae..065d7c978 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_reset_hitcount.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_rules.py b/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_rules.py index 58e3d55d6..764e9e1b8 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_rules.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_rules.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_rules_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_rules_info.py index ff175ae64..9cdf45c34 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_authentication_rules_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_reset_hitcount.py index 029a324d0..bdbd6601f 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_reset_hitcount.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_rules.py b/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_rules.py index 2645800ce..b6ea4f5c8 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_rules.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_rules.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_rules_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_rules_info.py index dffaf212a..33ca28ca4 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_authorization_rules_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_command_set_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_command_set_info.py index e6adeda11..843282782 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_command_set_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_command_set_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_conditions.py b/ansible_collections/cisco/ise/plugins/action/device_administration_conditions.py index 3f32c7c94..f5baa09d8 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_conditions.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_conditions.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_authentication_rule_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_authentication_rule_info.py index 443fa6b66..e2e164212 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_authentication_rule_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_authentication_rule_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_authorization_rule_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_authorization_rule_info.py index 39ec5bf96..b40b3a461 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_authorization_rule_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_authorization_rule_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_policy_set_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_policy_set_info.py index 84a3b83ef..05a76aa4d 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_for_policy_set_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_info.py index 4277903cf..1e7aa9cb1 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_conditions_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_authentication_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_authentication_info.py index 56a7137b7..32303ed20 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_authentication_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_authentication_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_authorization_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_authorization_info.py index 07606e5a8..97e8d9dbf 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_authorization_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_authorization_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_policy_set_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_policy_set_info.py index eba176051..96d90ea7c 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_dictionary_attributes_policy_set_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules.py b/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules.py index 38718ced2..2095fd10a 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules_info.py index 3bda0eb07..8c7df99e8 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules_reset_hitcount.py index 494b4aeb4..cdca21112 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_global_exception_rules_reset_hitcount.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_identity_stores_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_identity_stores_info.py index e636a01fc..973e11793 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_identity_stores_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_identity_stores_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules.py b/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules.py index 27f5b3401..3583204ba 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules_info.py index 71dbfce79..8b2f54f2c 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules_reset_hitcount.py index ce1b78879..0f46ec415 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_local_exception_rules_reset_hitcount.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_network_conditions.py b/ansible_collections/cisco/ise/plugins/action/device_administration_network_conditions.py index 10bcdc558..d05ffb46e 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_network_conditions.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_network_conditions.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_network_conditions_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_network_conditions_info.py index f04e29791..c8efdc788 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_network_conditions_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_network_conditions_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set.py b/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set.py index 23eb54ef5..977687fe0 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set_info.py index b344da3f2..51519bdb7 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set_reset_hitcount.py index 8c4ca8e24..fa0d4122b 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_policy_set_reset_hitcount.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_profiles_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_profiles_info.py index 406618fdb..1e634209f 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_profiles_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_profiles_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_service_names_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_service_names_info.py index 020515c1b..d63ed8734 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_service_names_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_service_names_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions.py b/ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions.py index e0ffd4d73..f2f602126 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions_info.py b/ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions_info.py index 3e8bfad3d..935155e84 100644 --- a/ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions_info.py +++ b/ansible_collections/cisco/ise/plugins/action/device_administration_time_date_conditions_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/dictionary_references_info.py b/ansible_collections/cisco/ise/plugins/action/dictionary_references_info.py deleted file mode 100644 index 4b4d92cbe..000000000 --- a/ansible_collections/cisco/ise/plugins/action/dictionary_references_info.py +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (c) 2023, Cisco Systems -# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function - -__metaclass__ = type -from ansible.plugins.action import ActionBase - -try: - from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( - AnsibleArgSpecValidator, - ) -except ImportError: - ANSIBLE_UTILS_IS_INSTALLED = False -else: - ANSIBLE_UTILS_IS_INSTALLED = True -from ansible.errors import AnsibleActionFail -from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( - ISESDK, - ise_argument_spec, -) - -# Get common arguements specification -argument_spec = ise_argument_spec() -# Add arguments specific for this module -argument_spec.update(dict( -)) - -required_if = [] -required_one_of = [] -mutually_exclusive = [] -required_together = [] - - -class ActionModule(ActionBase): - def __init__(self, *args, **kwargs): - if not ANSIBLE_UTILS_IS_INSTALLED: - raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") - super(ActionModule, self).__init__(*args, **kwargs) - self._supports_async = False - self._supports_check_mode = True - self._result = None - - # Checks the supplied parameters against the argument spec for this module - def _check_argspec(self): - aav = AnsibleArgSpecValidator( - data=self._task.args, - schema=dict(argument_spec=argument_spec), - schema_format="argspec", - schema_conditionals=dict( - required_if=required_if, - required_one_of=required_one_of, - mutually_exclusive=mutually_exclusive, - required_together=required_together, - ), - name=self._task.action, - ) - valid, errors, self._task.args = aav.validate() - if not valid: - raise AnsibleActionFail(errors) - - def get_object(self, params): - new_object = dict( - ) - return new_object - - def run(self, tmp=None, task_vars=None): - self._task.diff = False - self._result = super(ActionModule, self).run(tmp, task_vars) - self._result["changed"] = False - self._check_argspec() - - self._result.update(dict(ise_response={})) - - ise = ISESDK(params=self._task.args) - - id = self._task.args.get("id") - name = self._task.args.get("name") - if not name and not id: - response = ise.exec( - family="edda", - function='get_edda_dictionary_references', - params=self.get_object(self._task.args) - ).response['response'] - self._result.update(dict(ise_response=response)) - self._result.update(ise.exit_json()) - return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/downloadable_acl.py b/ansible_collections/cisco/ise/plugins/action/downloadable_acl.py index d4a8bf437..7200f6051 100644 --- a/ansible_collections/cisco/ise/plugins/action/downloadable_acl.py +++ b/ansible_collections/cisco/ise/plugins/action/downloadable_acl.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/downloadable_acl_info.py b/ansible_collections/cisco/ise/plugins/action/downloadable_acl_info.py index 8852b8b41..38539b9d3 100644 --- a/ansible_collections/cisco/ise/plugins/action/downloadable_acl_info.py +++ b/ansible_collections/cisco/ise/plugins/action/downloadable_acl_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/duo_identity_sync.py b/ansible_collections/cisco/ise/plugins/action/duo_identity_sync.py new file mode 100644 index 000000000..530bcdd3d --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/duo_identity_sync.py @@ -0,0 +1,235 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + adGroups=dict(type="list"), + configurations=dict(type="dict"), + lastSync=dict(type="str"), + syncName=dict(type="str"), + syncSchedule=dict(type="dict"), + syncStatus=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["syncName"], True), + ("state", "absent", ["syncName"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class DuoIdentitySync(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + ad_groups=params.get("adGroups"), + configurations=params.get("configurations"), + last_sync=params.get("lastSync"), + sync_name=params.get("syncName"), + sync_schedule=params.get("syncSchedule"), + sync_status=params.get("syncStatus"), + ) + + def get_object_by_name(self, name): + try: + result = self.ise.exec( + family="duo_identity_sync", + function="get_identitysync_by_sync_name", + params={"name": name}, + handle_func_exception=False, + ).response['response'] + result = get_dict_result(result, 'name', name) + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def get_object_by_id(self, id): + # NOTICE: Does not have a get by id method or it is in another action + result = None + return result + + def exists(self): + id_exists = False + name_exists = False + prev_obj = None + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("adGroups", "ad_groups"), + ("configurations", "configurations"), + ("lastSync", "last_sync"), + ("syncName", "sync_name"), + ("syncSchedule", "sync_schedule"), + ("syncStatus", "sync_status"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="duo_identity_sync", + function="create_identitysync", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not name: + name_ = self.get_object_by_id(id).get("name") + self.new_object.update(dict(name=name_)) + result = self.ise.exec( + family="duo_identity_sync", + function="update_identitysync_by_sync_name", + params=self.new_object + ).response + return result + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not name: + name_ = self.get_object_by_id(id).get("name") + self.new_object.update(dict(name=name_)) + result = self.ise.exec( + family="duo_identity_sync", + function="delete_identity_sync_by_sync_name", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = DuoIdentitySync(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/duo_identity_sync_cancel_info.py b/ansible_collections/cisco/ise/plugins/action/duo_identity_sync_cancel_info.py new file mode 100644 index 000000000..cf2e7fb50 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/duo_identity_sync_cancel_info.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + syncName=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + sync_name=params.get("syncName"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("syncName") + if name: + response = ise.exec( + family="duo_identity_sync", + function='cancel_sync', + params=self.get_object(self._task.args) + ).response + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + # NOTICE: Does not have a get all method or it is in another action + response = None + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/duo_identity_sync_info.py b/ansible_collections/cisco/ise/plugins/action/duo_identity_sync_info.py new file mode 100644 index 000000000..9336c18fa --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/duo_identity_sync_info.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + syncName=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + sync_name=params.get("syncName"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("syncName") + if name: + response = ise.exec( + family="duo_identity_sync", + function='get_identitysync_by_sync_name', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + response = ise.exec( + family="duo_identity_sync", + function='get_identitysync', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/duo_identity_sync_status.py b/ansible_collections/cisco/ise/plugins/action/duo_identity_sync_status.py new file mode 100644 index 000000000..7dbdbf938 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/duo_identity_sync_status.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + errorList=dict(type="list"), + status=dict(type="str"), + syncName=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + error_list=params.get("errorList"), + status=params.get("status"), + sync_name=params.get("syncName"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="duo_identity_sync", + function="update_status", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/duo_identitysync_sync_info.py b/ansible_collections/cisco/ise/plugins/action/duo_identitysync_sync_info.py new file mode 100644 index 000000000..1b5ab43d0 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/duo_identitysync_sync_info.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + syncName=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + sync_name=params.get("syncName"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("syncName") + if name: + response = ise.exec( + family="duo_identity_sync", + function='sync', + params=self.get_object(self._task.args) + ).response + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + # NOTICE: Does not have a get all method or it is in another action + response = None + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/duo_mfa.py b/ansible_collections/cisco/ise/plugins/action/duo_mfa.py new file mode 100644 index 000000000..d535bcd8b --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/duo_mfa.py @@ -0,0 +1,232 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + accountConfigurations=dict(type="dict"), + connectionName=dict(type="str"), + description=dict(type="str"), + identitySync=dict(type="str"), + type=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["connectionName"], True), + ("state", "absent", ["connectionName"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class DuoMfa(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + account_configurations=params.get("accountConfigurations"), + connection_name=params.get("connectionName"), + description=params.get("description"), + identity_sync=params.get("identitySync"), + type=params.get("type"), + ) + + def get_object_by_name(self, name): + try: + result = self.ise.exec( + family="duo_mfa", + function="get_mfa_byconnection_name", + params={"name": name}, + handle_func_exception=False, + ).response['response'] + result = get_dict_result(result, 'name', name) + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def get_object_by_id(self, id): + # NOTICE: Does not have a get by id method or it is in another action + result = None + return result + + def exists(self): + id_exists = False + name_exists = False + prev_obj = None + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("accountConfigurations", "account_configurations"), + ("connectionName", "connection_name"), + ("description", "description"), + ("identitySync", "identity_sync"), + ("type", "type"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="duo_mfa", + function="create_mfa", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not name: + name_ = self.get_object_by_id(id).get("name") + self.new_object.update(dict(name=name_)) + result = self.ise.exec( + family="duo_mfa", + function="update_m_fa_by_connection_name", + params=self.new_object + ).response + return result + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not name: + name_ = self.get_object_by_id(id).get("name") + self.new_object.update(dict(name=name_)) + result = self.ise.exec( + family="duo_mfa", + function="delete_mfa_by_connection_name", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = DuoMfa(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/duo_mfa_info.py b/ansible_collections/cisco/ise/plugins/action/duo_mfa_info.py new file mode 100644 index 000000000..198d5447a --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/duo_mfa_info.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + connectionName=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + connection_name=params.get("connectionName"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("connectionName") + if name: + response = ise.exec( + family="duo_mfa", + function='get_mfa_byconnection_name', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + response = ise.exec( + family="duo_mfa", + function='get_mfa', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/duo_mfa_testconnection.py b/ansible_collections/cisco/ise/plugins/action/duo_mfa_testconnection.py new file mode 100644 index 000000000..1599d13e3 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/duo_mfa_testconnection.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + adminApi=dict(type="dict"), + apiHostName=dict(type="str"), + authenticationApi=dict(type="dict"), + connectionName=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + admin_api=params.get("adminApi"), + api_host_name=params.get("apiHostName"), + authentication_api=params.get("authenticationApi"), + connection_name=params.get("connectionName"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="duo_mfa", + function="test_connection", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell.py b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell.py index 42f4b0d29..3c65ac475 100644 --- a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell.py +++ b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_monitor_status_info.py index b64520c54..5583569fc 100644 --- a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_request.py index 5d4b889d0..a2548e392 100644 --- a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_clear_all.py b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_clear_all.py index d0f567c59..8281d5cdf 100644 --- a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_clear_all.py +++ b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_clear_all.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_clone.py b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_clone.py index 46f782895..3df3b9468 100644 --- a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_clone.py +++ b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_clone.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_info.py b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_info.py index 0a903b42e..cfb885203 100644 --- a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_info.py +++ b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_set_all_status.py b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_set_all_status.py index 6e51eb944..c5b63c162 100644 --- a/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_set_all_status.py +++ b/ansible_collections/cisco/ise/plugins/action/egress_matrix_cell_set_all_status.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoint.py b/ansible_collections/cisco/ise/plugins/action/endpoint.py index 5de00e6d8..5a37247d5 100644 --- a/ansible_collections/cisco/ise/plugins/action/endpoint.py +++ b/ansible_collections/cisco/ise/plugins/action/endpoint.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoint_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/endpoint_bulk_monitor_status_info.py index c15d2dad6..e39414835 100644 --- a/ansible_collections/cisco/ise/plugins/action/endpoint_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/endpoint_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoint_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/endpoint_bulk_request.py index 346bdb965..729c10fcc 100644 --- a/ansible_collections/cisco/ise/plugins/action/endpoint_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/endpoint_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoint_certificate.py b/ansible_collections/cisco/ise/plugins/action/endpoint_certificate.py index 7c54400af..1246e1609 100644 --- a/ansible_collections/cisco/ise/plugins/action/endpoint_certificate.py +++ b/ansible_collections/cisco/ise/plugins/action/endpoint_certificate.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoint_deregister.py b/ansible_collections/cisco/ise/plugins/action/endpoint_deregister.py index fad82b3af..4f4ccdc11 100644 --- a/ansible_collections/cisco/ise/plugins/action/endpoint_deregister.py +++ b/ansible_collections/cisco/ise/plugins/action/endpoint_deregister.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoint_get_rejected_endpoints_info.py b/ansible_collections/cisco/ise/plugins/action/endpoint_get_rejected_endpoints_info.py index 5b2f513f2..522140067 100644 --- a/ansible_collections/cisco/ise/plugins/action/endpoint_get_rejected_endpoints_info.py +++ b/ansible_collections/cisco/ise/plugins/action/endpoint_get_rejected_endpoints_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoint_group.py b/ansible_collections/cisco/ise/plugins/action/endpoint_group.py index aae2a2f31..5d6f1585c 100644 --- a/ansible_collections/cisco/ise/plugins/action/endpoint_group.py +++ b/ansible_collections/cisco/ise/plugins/action/endpoint_group.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoint_group_info.py b/ansible_collections/cisco/ise/plugins/action/endpoint_group_info.py index 369940972..9e224a672 100644 --- a/ansible_collections/cisco/ise/plugins/action/endpoint_group_info.py +++ b/ansible_collections/cisco/ise/plugins/action/endpoint_group_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoint_info.py b/ansible_collections/cisco/ise/plugins/action/endpoint_info.py index 2dd382b41..fa85a0944 100644 --- a/ansible_collections/cisco/ise/plugins/action/endpoint_info.py +++ b/ansible_collections/cisco/ise/plugins/action/endpoint_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoint_register.py b/ansible_collections/cisco/ise/plugins/action/endpoint_register.py index 8976b3b3f..0a2cc90fe 100644 --- a/ansible_collections/cisco/ise/plugins/action/endpoint_register.py +++ b/ansible_collections/cisco/ise/plugins/action/endpoint_register.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoint_release_rejected_endpoint.py b/ansible_collections/cisco/ise/plugins/action/endpoint_release_rejected_endpoint.py index fdbf701c0..7ae1af1b8 100644 --- a/ansible_collections/cisco/ise/plugins/action/endpoint_release_rejected_endpoint.py +++ b/ansible_collections/cisco/ise/plugins/action/endpoint_release_rejected_endpoint.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/endpoints.py b/ansible_collections/cisco/ise/plugins/action/endpoints.py new file mode 100644 index 000000000..6aff81d62 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/endpoints.py @@ -0,0 +1,310 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + connectedLinks=dict(type="dict"), + customAttributes=dict(type="dict"), + description=dict(type="str"), + deviceType=dict(type="str"), + groupId=dict(type="str"), + hardwareRevision=dict(type="str"), + id=dict(type="str"), + identityStore=dict(type="str"), + identityStoreId=dict(type="str"), + ipAddress=dict(type="str"), + mac=dict(type="str"), + mdmAttributes=dict(type="dict"), + name=dict(type="str"), + portalUser=dict(type="str"), + productId=dict(type="str"), + profileId=dict(type="str"), + protocol=dict(type="str"), + serialNumber=dict(type="str"), + softwareRevision=dict(type="str"), + staticGroupAssignment=dict(type="bool"), + staticProfileAssignment=dict(type="bool"), + vendor=dict(type="str"), + value=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["name", "value"], True), + ("state", "absent", ["name", "value"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class Endpoints(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + connected_links=params.get("connectedLinks"), + custom_attributes=params.get("customAttributes"), + description=params.get("description"), + device_type=params.get("deviceType"), + group_id=params.get("groupId"), + hardware_revision=params.get("hardwareRevision"), + id=params.get("id"), + identity_store=params.get("identityStore"), + identity_store_id=params.get("identityStoreId"), + ip_address=params.get("ipAddress"), + mac=params.get("mac"), + mdm_attributes=params.get("mdmAttributes"), + name=params.get("name"), + portal_user=params.get("portalUser"), + product_id=params.get("productId"), + profile_id=params.get("profileId"), + protocol=params.get("protocol"), + serial_number=params.get("serialNumber"), + software_revision=params.get("softwareRevision"), + static_group_assignment=params.get("staticGroupAssignment"), + static_profile_assignment=params.get("staticProfileAssignment"), + vendor=params.get("vendor"), + value=params.get("value"), + ) + + def get_object_by_name(self, name): + # NOTICE: Get does not support/work for filter by name with EQ + result = None + gen_items_responses = self.ise.exec( + family="endpoints", + function="list_1_generator" + ) + try: + for items_response in gen_items_responses: + items = items_response.response.get('response', []) + result = get_dict_result(items, 'name', name) + if result: + return result + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + return result + + def get_object_by_id(self, id): + try: + result = self.ise.exec( + family="endpoints", + function="get_1", + handle_func_exception=False, + params={"id": id} + ).response + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def exists(self): + id_exists = False + name_exists = False + prev_obj = None + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + if _id: + prev_obj = self.get_object_by_id(_id) + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("connectedLinks", "connected_links"), + ("customAttributes", "custom_attributes"), + ("description", "description"), + ("deviceType", "device_type"), + ("groupId", "group_id"), + ("hardwareRevision", "hardware_revision"), + ("id", "id"), + ("identityStore", "identity_store"), + ("identityStoreId", "identity_store_id"), + ("ipAddress", "ip_address"), + ("mac", "mac"), + ("mdmAttributes", "mdm_attributes"), + ("name", "name"), + ("portalUser", "portal_user"), + ("productId", "product_id"), + ("profileId", "profile_id"), + ("protocol", "protocol"), + ("serialNumber", "serial_number"), + ("softwareRevision", "software_revision"), + ("staticGroupAssignment", "static_group_assignment"), + ("staticProfileAssignment", "static_profile_assignment"), + ("vendor", "vendor"), + ("value", "value"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="endpoints", + function="create_end_point", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="endpoints", + function="update_endpoint", + params=self.new_object + ).response + return result + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="endpoints", + function="delete_endpoint", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = Endpoints(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/endpoints_bulk.py b/ansible_collections/cisco/ise/plugins/action/endpoints_bulk.py new file mode 100644 index 000000000..43dbb06a3 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/endpoints_bulk.py @@ -0,0 +1,313 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + connectedLinks=dict(type="dict"), + customAttributes=dict(type="dict"), + description=dict(type="str"), + deviceType=dict(type="str"), + groupId=dict(type="str"), + hardwareRevision=dict(type="str"), + id=dict(type="str"), + identityStore=dict(type="str"), + identityStoreId=dict(type="str"), + ipAddress=dict(type="str"), + mac=dict(type="str"), + mdmAttributes=dict(type="dict"), + name=dict(type="str"), + portalUser=dict(type="str"), + productId=dict(type="str"), + profileId=dict(type="str"), + protocol=dict(type="str"), + serialNumber=dict(type="str"), + softwareRevision=dict(type="str"), + staticGroupAssignment=dict(type="bool"), + staticProfileAssignment=dict(type="bool"), + vendor=dict(type="str"), + payload=dict(type="list"), + value=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["name", "value"], True), + ("state", "absent", ["name", "value"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class EndpointsBulk(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + connected_links=params.get("connectedLinks"), + custom_attributes=params.get("customAttributes"), + description=params.get("description"), + device_type=params.get("deviceType"), + group_id=params.get("groupId"), + hardware_revision=params.get("hardwareRevision"), + id=params.get("id"), + identity_store=params.get("identityStore"), + identity_store_id=params.get("identityStoreId"), + ip_address=params.get("ipAddress"), + mac=params.get("mac"), + mdm_attributes=params.get("mdmAttributes"), + name=params.get("name"), + portal_user=params.get("portalUser"), + product_id=params.get("productId"), + profile_id=params.get("profileId"), + protocol=params.get("protocol"), + serial_number=params.get("serialNumber"), + software_revision=params.get("softwareRevision"), + static_group_assignment=params.get("staticGroupAssignment"), + static_profile_assignment=params.get("staticProfileAssignment"), + vendor=params.get("vendor"), + payload=params.get("payload"), + value=params.get("value"), + ) + + def get_object_by_name(self, name): + # NOTICE: Get does not support/work for filter by name with EQ + result = None + gen_items_responses = self.ise.exec( + family="endpoints", + function="list_1_generator" + ) + try: + for items_response in gen_items_responses: + items = items_response.response.get('response', []) + result = get_dict_result(items, 'name', name) + if result: + return result + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + return result + + def get_object_by_id(self, id): + try: + result = self.ise.exec( + family="endpoints", + function="get_1", + handle_func_exception=False, + params={"id": id} + ).response + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def exists(self): + id_exists = False + name_exists = False + prev_obj = None + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + if _id: + prev_obj = self.get_object_by_id(_id) + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("connectedLinks", "connected_links"), + ("customAttributes", "custom_attributes"), + ("description", "description"), + ("deviceType", "device_type"), + ("groupId", "group_id"), + ("hardwareRevision", "hardware_revision"), + ("id", "id"), + ("identityStore", "identity_store"), + ("identityStoreId", "identity_store_id"), + ("ipAddress", "ip_address"), + ("mac", "mac"), + ("mdmAttributes", "mdm_attributes"), + ("name", "name"), + ("portalUser", "portal_user"), + ("productId", "product_id"), + ("profileId", "profile_id"), + ("protocol", "protocol"), + ("serialNumber", "serial_number"), + ("softwareRevision", "software_revision"), + ("staticGroupAssignment", "static_group_assignment"), + ("staticProfileAssignment", "static_profile_assignment"), + ("vendor", "vendor"), + ("payload", "payload"), + ("value", "value"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="endpoints", + function="create_bulk_end_points", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="endpoints", + function="update_endpoint", + params=self.new_object + ).response + return result + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="endpoints", + function="delete_endpoint", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = EndpointsBulk(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/endpoints_bulk_info.py b/ansible_collections/cisco/ise/plugins/action/endpoints_bulk_info.py new file mode 100644 index 000000000..3df235103 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/endpoints_bulk_info.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + page=dict(type="int"), + size=dict(type="int"), + sort=dict(type="str"), + sortBy=dict(type="str"), + filter=dict(type="str"), + filterType=dict(type="str"), + value=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + page=params.get("page"), + size=params.get("size"), + sort=params.get("sort"), + sort_by=params.get("sortBy"), + filter=params.get("filter"), + filter_type=params.get("filterType"), + value=params.get("value"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("value") + name = self._task.args.get("name") + if id: + response = ise.exec( + family="endpoints", + function='get_1', + params=self.get_object(self._task.args) + ).response + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + responses = [] + generator = ise.exec( + family="endpoints", + function='list_1_generator', + params=self.get_object(self._task.args), + ) + try: + for item in generator: + tmp_response = item.response + if isinstance(tmp_response, list): + responses += tmp_response + else: + responses.append(tmp_response) + response = responses + except (TypeError, AttributeError) as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " The error was: {error}" + " You may want to enable the (ise_debug: True) argument." + ).format(error=e) + ) + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/endpoints_device_type_info.py b/ansible_collections/cisco/ise/plugins/action/endpoints_device_type_info.py new file mode 100644 index 000000000..fb2386ae6 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/endpoints_device_type_info.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if not name and not id: + response = ise.exec( + family="endpoints", + function='get_device_type_summary', + params=self.get_object(self._task.args) + ).response + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/endpoints_info.py b/ansible_collections/cisco/ise/plugins/action/endpoints_info.py new file mode 100644 index 000000000..3df235103 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/endpoints_info.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + page=dict(type="int"), + size=dict(type="int"), + sort=dict(type="str"), + sortBy=dict(type="str"), + filter=dict(type="str"), + filterType=dict(type="str"), + value=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + page=params.get("page"), + size=params.get("size"), + sort=params.get("sort"), + sort_by=params.get("sortBy"), + filter=params.get("filter"), + filter_type=params.get("filterType"), + value=params.get("value"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("value") + name = self._task.args.get("name") + if id: + response = ise.exec( + family="endpoints", + function='get_1', + params=self.get_object(self._task.args) + ).response + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + responses = [] + generator = ise.exec( + family="endpoints", + function='list_1_generator', + params=self.get_object(self._task.args), + ) + try: + for item in generator: + tmp_response = item.response + if isinstance(tmp_response, list): + responses += tmp_response + else: + responses.append(tmp_response) + response = responses + except (TypeError, AttributeError) as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " The error was: {error}" + " You may want to enable the (ise_debug: True) argument." + ).format(error=e) + ) + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/endpoints_task.py b/ansible_collections/cisco/ise/plugins/action/endpoints_task.py new file mode 100644 index 000000000..e8c1862d3 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/endpoints_task.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + connectedLinks=dict(type="dict"), + customAttributes=dict(type="dict"), + description=dict(type="str"), + deviceType=dict(type="str"), + groupId=dict(type="str"), + hardwareRevision=dict(type="str"), + id=dict(type="str"), + identityStore=dict(type="str"), + identityStoreId=dict(type="str"), + ipAddress=dict(type="str"), + mac=dict(type="str"), + mdmAttributes=dict(type="dict"), + name=dict(type="str"), + portalUser=dict(type="str"), + productId=dict(type="str"), + profileId=dict(type="str"), + protocol=dict(type="str"), + serialNumber=dict(type="str"), + softwareRevision=dict(type="str"), + staticGroupAssignment=dict(type="bool"), + staticProfileAssignment=dict(type="bool"), + vendor=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + connected_links=params.get("connectedLinks"), + custom_attributes=params.get("customAttributes"), + description=params.get("description"), + device_type=params.get("deviceType"), + group_id=params.get("groupId"), + hardware_revision=params.get("hardwareRevision"), + id=params.get("id"), + identity_store=params.get("identityStore"), + identity_store_id=params.get("identityStoreId"), + ip_address=params.get("ipAddress"), + mac=params.get("mac"), + mdm_attributes=params.get("mdmAttributes"), + name=params.get("name"), + portal_user=params.get("portalUser"), + product_id=params.get("productId"), + profile_id=params.get("profileId"), + protocol=params.get("protocol"), + serial_number=params.get("serialNumber"), + software_revision=params.get("softwareRevision"), + static_group_assignment=params.get("staticGroupAssignment"), + static_profile_assignment=params.get("staticProfileAssignment"), + vendor=params.get("vendor"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="endpoints", + function="create_end_point_task", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/external_radius_server.py b/ansible_collections/cisco/ise/plugins/action/external_radius_server.py index 4beda906a..3a6d9b3c8 100644 --- a/ansible_collections/cisco/ise/plugins/action/external_radius_server.py +++ b/ansible_collections/cisco/ise/plugins/action/external_radius_server.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/external_radius_server_info.py b/ansible_collections/cisco/ise/plugins/action/external_radius_server_info.py index e0043a0d0..330e05631 100644 --- a/ansible_collections/cisco/ise/plugins/action/external_radius_server_info.py +++ b/ansible_collections/cisco/ise/plugins/action/external_radius_server_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/filter_policy.py b/ansible_collections/cisco/ise/plugins/action/filter_policy.py index d2a3ca73e..b13a8eeee 100644 --- a/ansible_collections/cisco/ise/plugins/action/filter_policy.py +++ b/ansible_collections/cisco/ise/plugins/action/filter_policy.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/filter_policy_info.py b/ansible_collections/cisco/ise/plugins/action/filter_policy_info.py index 8b19e248c..8eb9b9747 100644 --- a/ansible_collections/cisco/ise/plugins/action/filter_policy_info.py +++ b/ansible_collections/cisco/ise/plugins/action/filter_policy_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_location_info.py b/ansible_collections/cisco/ise/plugins/action/guest_location_info.py index 64c33c097..52127c847 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_location_info.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_location_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_smtp_notification_settings.py b/ansible_collections/cisco/ise/plugins/action/guest_smtp_notification_settings.py index 2744262be..16235ac99 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_smtp_notification_settings.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_smtp_notification_settings.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_smtp_notification_settings_info.py b/ansible_collections/cisco/ise/plugins/action/guest_smtp_notification_settings_info.py index 42f64bcf4..dc8c672c9 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_smtp_notification_settings_info.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_smtp_notification_settings_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_ssid.py b/ansible_collections/cisco/ise/plugins/action/guest_ssid.py index b1549161f..9145d09ad 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_ssid.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_ssid.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_ssid_info.py b/ansible_collections/cisco/ise/plugins/action/guest_ssid_info.py index 7e6efd130..77484a38c 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_ssid_info.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_ssid_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_type.py b/ansible_collections/cisco/ise/plugins/action/guest_type.py index 0891266e2..72e271d9e 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_type.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_type.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_type_email.py b/ansible_collections/cisco/ise/plugins/action/guest_type_email.py index e8d763c7b..b9592741e 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_type_email.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_type_email.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_type_info.py b/ansible_collections/cisco/ise/plugins/action/guest_type_info.py index 1de1cc2d7..5cd3978fe 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_type_info.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_type_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_type_sms.py b/ansible_collections/cisco/ise/plugins/action/guest_type_sms.py index 366f1d6fe..206a207d5 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_type_sms.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_type_sms.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user.py b/ansible_collections/cisco/ise/plugins/action/guest_user.py index 6e0c4c416..45076be9b 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user_approve.py b/ansible_collections/cisco/ise/plugins/action/guest_user_approve.py index 0b66958c9..0c8cb477a 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user_approve.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user_approve.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/guest_user_bulk_monitor_status_info.py index 738d2a50f..eada3c3b3 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/guest_user_bulk_request.py index 9f5409056..309a388ff 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user_change_sponsor_password.py b/ansible_collections/cisco/ise/plugins/action/guest_user_change_sponsor_password.py index d8cba2089..254b38ec2 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user_change_sponsor_password.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user_change_sponsor_password.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user_deny.py b/ansible_collections/cisco/ise/plugins/action/guest_user_deny.py index 6318526bd..b141a674f 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user_deny.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user_deny.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user_email.py b/ansible_collections/cisco/ise/plugins/action/guest_user_email.py index 16c8793b5..83a34c730 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user_email.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user_email.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user_info.py b/ansible_collections/cisco/ise/plugins/action/guest_user_info.py index f6b61c088..64d0247b1 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user_info.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user_reinstate.py b/ansible_collections/cisco/ise/plugins/action/guest_user_reinstate.py index 33d20d1a1..e50c06eec 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user_reinstate.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user_reinstate.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user_reset_password.py b/ansible_collections/cisco/ise/plugins/action/guest_user_reset_password.py index c2eedfac8..92facda82 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user_reset_password.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user_reset_password.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user_sms.py b/ansible_collections/cisco/ise/plugins/action/guest_user_sms.py index 9a84b457a..435d3bf8d 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user_sms.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user_sms.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/guest_user_suspend.py b/ansible_collections/cisco/ise/plugins/action/guest_user_suspend.py index 81f8a1423..5f93e63f8 100644 --- a/ansible_collections/cisco/ise/plugins/action/guest_user_suspend.py +++ b/ansible_collections/cisco/ise/plugins/action/guest_user_suspend.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/hotpatch_info.py b/ansible_collections/cisco/ise/plugins/action/hotpatch_info.py index 0ef0efbc4..4bcf5acd5 100644 --- a/ansible_collections/cisco/ise/plugins/action/hotpatch_info.py +++ b/ansible_collections/cisco/ise/plugins/action/hotpatch_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/hotpatch_install.py b/ansible_collections/cisco/ise/plugins/action/hotpatch_install.py index 3343ed071..f6da42823 100644 --- a/ansible_collections/cisco/ise/plugins/action/hotpatch_install.py +++ b/ansible_collections/cisco/ise/plugins/action/hotpatch_install.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -28,6 +28,7 @@ argument_spec = ise_argument_spec() # Add arguments specific for this module argument_spec.update(dict( hotpatchName=dict(type="str"), + isDirectoryListed=dict(type="bool"), repositoryName=dict(type="str"), )) @@ -67,6 +68,7 @@ class ActionModule(ActionBase): def get_object(self, params): new_object = dict( hotpatch_name=params.get("hotpatchName"), + is_directory_listed=params.get("isDirectoryListed"), repository_name=params.get("repositoryName"), ) return new_object diff --git a/ansible_collections/cisco/ise/plugins/action/hotpatch_rollback.py b/ansible_collections/cisco/ise/plugins/action/hotpatch_rollback.py index 8e976eb50..d7d224d85 100644 --- a/ansible_collections/cisco/ise/plugins/action/hotpatch_rollback.py +++ b/ansible_collections/cisco/ise/plugins/action/hotpatch_rollback.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -28,6 +28,7 @@ argument_spec = ise_argument_spec() # Add arguments specific for this module argument_spec.update(dict( hotpatchName=dict(type="str"), + isDirectoryListed=dict(type="bool"), repositoryName=dict(type="str"), )) @@ -67,6 +68,7 @@ class ActionModule(ActionBase): def get_object(self, params): new_object = dict( hotpatch_name=params.get("hotpatchName"), + is_directory_listed=params.get("isDirectoryListed"), repository_name=params.get("repositoryName"), ) return new_object diff --git a/ansible_collections/cisco/ise/plugins/action/hotspot_portal.py b/ansible_collections/cisco/ise/plugins/action/hotspot_portal.py index 31894a9cd..618a916bc 100644 --- a/ansible_collections/cisco/ise/plugins/action/hotspot_portal.py +++ b/ansible_collections/cisco/ise/plugins/action/hotspot_portal.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/hotspot_portal_info.py b/ansible_collections/cisco/ise/plugins/action/hotspot_portal_info.py index 928265dfb..200e5fec8 100644 --- a/ansible_collections/cisco/ise/plugins/action/hotspot_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/action/hotspot_portal_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/id_store_sequence.py b/ansible_collections/cisco/ise/plugins/action/id_store_sequence.py index 8fff8a901..0703c2df3 100644 --- a/ansible_collections/cisco/ise/plugins/action/id_store_sequence.py +++ b/ansible_collections/cisco/ise/plugins/action/id_store_sequence.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/id_store_sequence_info.py b/ansible_collections/cisco/ise/plugins/action/id_store_sequence_info.py index ec8ce7d66..6a7b9f9a4 100644 --- a/ansible_collections/cisco/ise/plugins/action/id_store_sequence_info.py +++ b/ansible_collections/cisco/ise/plugins/action/id_store_sequence_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/identity_group.py b/ansible_collections/cisco/ise/plugins/action/identity_group.py index 42bf63fc6..f98c65897 100644 --- a/ansible_collections/cisco/ise/plugins/action/identity_group.py +++ b/ansible_collections/cisco/ise/plugins/action/identity_group.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/identity_group_info.py b/ansible_collections/cisco/ise/plugins/action/identity_group_info.py index efa113971..16675a298 100644 --- a/ansible_collections/cisco/ise/plugins/action/identity_group_info.py +++ b/ansible_collections/cisco/ise/plugins/action/identity_group_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/internal_user.py b/ansible_collections/cisco/ise/plugins/action/internal_user.py index 47cb0ea2b..84c182550 100644 --- a/ansible_collections/cisco/ise/plugins/action/internal_user.py +++ b/ansible_collections/cisco/ise/plugins/action/internal_user.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/internal_user_info.py b/ansible_collections/cisco/ise/plugins/action/internal_user_info.py index 5f7315391..98baba812 100644 --- a/ansible_collections/cisco/ise/plugins/action/internal_user_info.py +++ b/ansible_collections/cisco/ise/plugins/action/internal_user_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/ipsec.py b/ansible_collections/cisco/ise/plugins/action/ipsec.py new file mode 100644 index 000000000..f435fa5ca --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/ipsec.py @@ -0,0 +1,257 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present"]), + authType=dict(type="str"), + certId=dict(type="str"), + configureVti=dict(type="bool"), + espAhProtocol=dict(type="str"), + hostName=dict(type="str"), + iface=dict(type="str"), + ikeReAuthTime=dict(type="int"), + ikeVersion=dict(type="str"), + localInternalIp=dict(type="str"), + modeOption=dict(type="str"), + nadIp=dict(type="str"), + phaseOneDHGroup=dict(type="str"), + phaseOneEncryptionAlgo=dict(type="str"), + phaseOneHashAlgo=dict(type="str"), + phaseOneLifeTime=dict(type="int"), + phaseTwoDHGroup=dict(type="str"), + phaseTwoEncryptionAlgo=dict(type="str"), + phaseTwoHashAlgo=dict(type="str"), + phaseTwoLifeTime=dict(type="int"), + psk=dict(type="str"), + remotePeerInternalIp=dict(type="str"), +)) + +required_if = [ + ("state", "present", [], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class Ipsec(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + auth_type=params.get("authType"), + cert_id=params.get("certId"), + configure_vti=params.get("configureVti"), + esp_ah_protocol=params.get("espAhProtocol"), + host_name=params.get("hostName"), + iface=params.get("iface"), + ike_re_auth_time=params.get("ikeReAuthTime"), + ike_version=params.get("ikeVersion"), + local_internal_ip=params.get("localInternalIp"), + mode_option=params.get("modeOption"), + nad_ip=params.get("nadIp"), + phase_one_dhgroup=params.get("phaseOneDHGroup"), + phase_one_encryption_algo=params.get("phaseOneEncryptionAlgo"), + phase_one_hash_algo=params.get("phaseOneHashAlgo"), + phase_one_life_time=params.get("phaseOneLifeTime"), + phase_two_dhgroup=params.get("phaseTwoDHGroup"), + phase_two_encryption_algo=params.get("phaseTwoEncryptionAlgo"), + phase_two_hash_algo=params.get("phaseTwoHashAlgo"), + phase_two_life_time=params.get("phaseTwoLifeTime"), + psk=params.get("psk"), + remote_peer_internal_ip=params.get("remotePeerInternalIp"), + ) + + def get_object_by_name(self, name): + # NOTICE: Get does not support/work for filter by name with EQ + result = None + gen_items_responses = self.ise.exec( + family="native_ipsec", + function="get_ipsec_enabled_nodes_generator" + ) + try: + for items_response in gen_items_responses: + items = items_response.response.get('response', []) + result = get_dict_result(items, 'name', name) + if result: + return result + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + return result + + def get_object_by_id(self, id): + # NOTICE: Does not have a get by id method or it is in another action + result = None + return result + + def exists(self): + prev_obj = None + id_exists = False + name_exists = False + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("authType", "auth_type"), + ("certId", "cert_id"), + ("configureVti", "configure_vti"), + ("espAhProtocol", "esp_ah_protocol"), + ("hostName", "host_name"), + ("iface", "iface"), + ("ikeReAuthTime", "ike_re_auth_time"), + ("ikeVersion", "ike_version"), + ("localInternalIp", "local_internal_ip"), + ("modeOption", "mode_option"), + ("nadIp", "nad_ip"), + ("phaseOneDHGroup", "phase_one_dhgroup"), + ("phaseOneEncryptionAlgo", "phase_one_encryption_algo"), + ("phaseOneHashAlgo", "phase_one_hash_algo"), + ("phaseOneLifeTime", "phase_one_life_time"), + ("phaseTwoDHGroup", "phase_two_dhgroup"), + ("phaseTwoEncryptionAlgo", "phase_two_encryption_algo"), + ("phaseTwoHashAlgo", "phase_two_hash_algo"), + ("phaseTwoLifeTime", "phase_two_life_time"), + ("psk", "psk"), + ("remotePeerInternalIp", "remote_peer_internal_ip"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="native_ipsec", + function="create_ipsec_connection", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + result = self.ise.exec( + family="native_ipsec", + function="update_ipsec_connection_config", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = Ipsec(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/ipsec_bulk.py b/ansible_collections/cisco/ise/plugins/action/ipsec_bulk.py new file mode 100644 index 000000000..b4d0a2039 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/ipsec_bulk.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + ItemList=dict(type="list"), + operation=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + item_list=params.get("ItemList"), + operation=params.get("operation"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="native_ipsec", + function="bulk_ip_sec_operation", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/ipsec_certificates_info.py b/ansible_collections/cisco/ise/plugins/action/ipsec_certificates_info.py new file mode 100644 index 000000000..f8a1dd1a7 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/ipsec_certificates_info.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if not name and not id: + response = ise.exec( + family="native_ipsec", + function='get_ip_sec_certificates', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/ipsec_delete.py b/ansible_collections/cisco/ise/plugins/action/ipsec_delete.py new file mode 100644 index 000000000..3126bac27 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/ipsec_delete.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + hostName=dict(type="str"), + nadIp=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["hostName", "nadIp"], True), + ("state", "absent", ["hostName", "nadIp"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class IpsecDelete(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + host_name=params.get("hostName"), + nad_ip=params.get("nadIp"), + ) + + def get_object_by_name(self, name): + # NOTICE: Does not have a get by name method or it is in another action + result = None + items = self.ise.exec( + family="native_ipsec", + function="" + ).response.get('response', []) + result = get_dict_result(items, 'name', name) + return result + + def get_object_by_id(self, id): + try: + result = self.ise.exec( + family="native_ipsec", + function="get_ipsec_node", + params={"id": id}, + handle_func_exception=False, + ).response['response'] + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def exists(self): + prev_obj = None + id_exists = False + name_exists = False + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + if _id: + prev_obj = self.get_object_by_id(_id) + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("hostName", "host_name"), + ("nadIp", "nad_ip"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="native_ipsec", + function="remove_ipsec_connection", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = IpsecDelete(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + if state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/ipsec_delete_info.py b/ansible_collections/cisco/ise/plugins/action/ipsec_delete_info.py new file mode 100644 index 000000000..2733b3741 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/ipsec_delete_info.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + hostName=dict(type="str"), + nadIp=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + host_name=params.get("hostName"), + nad_ip=params.get("nadIp"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("hostName") + if id: + response = ise.exec( + family="native_ipsec", + function='get_ipsec_node', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + # NOTICE: Does not have a get all method or it is in another action + response = None + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/ipsec_disable.py b/ansible_collections/cisco/ise/plugins/action/ipsec_disable.py new file mode 100644 index 000000000..2d48762fc --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/ipsec_disable.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present"]), + hostName=dict(type="str"), + nadIp=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["hostName", "nadIp"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class IpsecDisable(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + host_name=params.get("hostName"), + nad_ip=params.get("nadIp"), + ) + + def get_object_by_name(self, name): + # NOTICE: Does not have a get by name method or it is in another action + result = None + items = self.ise.exec( + family="native_ipsec", + function="" + ).response.get('response', []) + result = get_dict_result(items, 'name', name) + return result + + def get_object_by_id(self, id): + try: + result = self.ise.exec( + family="native_ipsec", + function="get_ipsec_node", + params={"id": id}, + handle_func_exception=False, + ).response['response'] + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def exists(self): + prev_obj = None + id_exists = False + name_exists = False + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + if _id: + prev_obj = self.get_object_by_id(_id) + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("hostName", "host_name"), + ("nadIp", "nad_ip"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="native_ipsec", + function="disable_ipsec_connection", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = IpsecDisable(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise.fail_json("Object does not exists, plugin only has update") + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/ipsec_disable_info.py b/ansible_collections/cisco/ise/plugins/action/ipsec_disable_info.py new file mode 100644 index 000000000..2733b3741 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/ipsec_disable_info.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + hostName=dict(type="str"), + nadIp=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + host_name=params.get("hostName"), + nad_ip=params.get("nadIp"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("hostName") + if id: + response = ise.exec( + family="native_ipsec", + function='get_ipsec_node', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + # NOTICE: Does not have a get all method or it is in another action + response = None + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/ipsec_enable.py b/ansible_collections/cisco/ise/plugins/action/ipsec_enable.py new file mode 100644 index 000000000..e42d0ff63 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/ipsec_enable.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present"]), + hostName=dict(type="str"), + nadIp=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["hostName", "nadIp"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class IpsecEnable(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + host_name=params.get("hostName"), + nad_ip=params.get("nadIp"), + ) + + def get_object_by_name(self, name): + # NOTICE: Does not have a get by name method or it is in another action + result = None + items = self.ise.exec( + family="native_ipsec", + function="" + ).response.get('response', []) + result = get_dict_result(items, 'name', name) + return result + + def get_object_by_id(self, id): + try: + result = self.ise.exec( + family="native_ipsec", + function="get_ipsec_node", + params={"id": id}, + handle_func_exception=False, + ).response['response'] + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def exists(self): + prev_obj = None + id_exists = False + name_exists = False + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + if _id: + prev_obj = self.get_object_by_id(_id) + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("hostName", "host_name"), + ("nadIp", "nad_ip"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="native_ipsec", + function="enable_ipsec_connection", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = IpsecEnable(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise.fail_json("Object does not exists, plugin only has update") + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/ipsec_enable_info.py b/ansible_collections/cisco/ise/plugins/action/ipsec_enable_info.py new file mode 100644 index 000000000..2733b3741 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/ipsec_enable_info.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + hostName=dict(type="str"), + nadIp=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + host_name=params.get("hostName"), + nad_ip=params.get("nadIp"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("hostName") + if id: + response = ise.exec( + family="native_ipsec", + function='get_ipsec_node', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + # NOTICE: Does not have a get all method or it is in another action + response = None + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/ipsec_info.py b/ansible_collections/cisco/ise/plugins/action/ipsec_info.py new file mode 100644 index 000000000..8e183c204 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/ipsec_info.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + page=dict(type="int"), + size=dict(type="int"), + filter=dict(type="str"), + filterType=dict(type="str"), + sort=dict(type="str"), + sortBy=dict(type="str"), + hostName=dict(type="str"), + nadIp=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + page=params.get("page"), + size=params.get("size"), + filter=params.get("filter"), + filter_type=params.get("filterType"), + sort=params.get("sort"), + sort_by=params.get("sortBy"), + host_name=params.get("hostName"), + nad_ip=params.get("nadIp"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("hostName") + if id: + response = ise.exec( + family="native_ipsec", + function='get_ipsec_node', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + responses = [] + generator = ise.exec( + family="native_ipsec", + function='get_ipsec_enabled_nodes_generator', + params=self.get_object(self._task.args), + ) + try: + for item in generator: + tmp_response = item.response['response'] + if isinstance(tmp_response, list): + responses += tmp_response + else: + responses.append(tmp_response) + response = responses + except (TypeError, AttributeError) as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " The error was: {error}" + " You may want to enable the (ise_debug: True) argument." + ).format(error=e) + ) + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/ise_root_ca_regenerate.py b/ansible_collections/cisco/ise/plugins/action/ise_root_ca_regenerate.py index 37822dd98..8b03a8b04 100644 --- a/ansible_collections/cisco/ise/plugins/action/ise_root_ca_regenerate.py +++ b/ansible_collections/cisco/ise/plugins/action/ise_root_ca_regenerate.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/licensing_connection_type_info.py b/ansible_collections/cisco/ise/plugins/action/licensing_connection_type_info.py index 200fb43c7..5c55282b1 100644 --- a/ansible_collections/cisco/ise/plugins/action/licensing_connection_type_info.py +++ b/ansible_collections/cisco/ise/plugins/action/licensing_connection_type_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/licensing_eval_license_info.py b/ansible_collections/cisco/ise/plugins/action/licensing_eval_license_info.py index 199837b1f..d5eefae2b 100644 --- a/ansible_collections/cisco/ise/plugins/action/licensing_eval_license_info.py +++ b/ansible_collections/cisco/ise/plugins/action/licensing_eval_license_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/licensing_feature_to_tier_mapping_info.py b/ansible_collections/cisco/ise/plugins/action/licensing_feature_to_tier_mapping_info.py index 106410e6e..76ab3424f 100644 --- a/ansible_collections/cisco/ise/plugins/action/licensing_feature_to_tier_mapping_info.py +++ b/ansible_collections/cisco/ise/plugins/action/licensing_feature_to_tier_mapping_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/licensing_registration_create.py b/ansible_collections/cisco/ise/plugins/action/licensing_registration_create.py index b5bea1654..20ac6b2aa 100644 --- a/ansible_collections/cisco/ise/plugins/action/licensing_registration_create.py +++ b/ansible_collections/cisco/ise/plugins/action/licensing_registration_create.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -27,11 +27,11 @@ from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( argument_spec = ise_argument_spec() # Add arguments specific for this module argument_spec.update(dict( + token=dict(type="str"), + tier=dict(type="list"), connectionType=dict(type="str"), registrationType=dict(type="str"), ssmOnPremServer=dict(type="str"), - tier=dict(type="list"), - token=dict(type="str"), )) required_if = [] @@ -69,11 +69,11 @@ class ActionModule(ActionBase): def get_object(self, params): new_object = dict( + token=params.get("token"), + tier=params.get("tier"), connection_type=params.get("connectionType"), registration_type=params.get("registrationType"), ssm_on_prem_server=params.get("ssmOnPremServer"), - tier=params.get("tier"), - token=params.get("token"), ) return new_object diff --git a/ansible_collections/cisco/ise/plugins/action/licensing_registration_info.py b/ansible_collections/cisco/ise/plugins/action/licensing_registration_info.py index becdca1bc..c9b2446af 100644 --- a/ansible_collections/cisco/ise/plugins/action/licensing_registration_info.py +++ b/ansible_collections/cisco/ise/plugins/action/licensing_registration_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/licensing_smart_state_create.py b/ansible_collections/cisco/ise/plugins/action/licensing_smart_state_create.py index 6760b5089..f29e57cc1 100644 --- a/ansible_collections/cisco/ise/plugins/action/licensing_smart_state_create.py +++ b/ansible_collections/cisco/ise/plugins/action/licensing_smart_state_create.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/licensing_smart_state_info.py b/ansible_collections/cisco/ise/plugins/action/licensing_smart_state_info.py index 3ebd9ae99..b9d00853c 100644 --- a/ansible_collections/cisco/ise/plugins/action/licensing_smart_state_info.py +++ b/ansible_collections/cisco/ise/plugins/action/licensing_smart_state_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/licensing_tier_state_create.py b/ansible_collections/cisco/ise/plugins/action/licensing_tier_state_create.py index 2ef2ac224..f5c52263d 100644 --- a/ansible_collections/cisco/ise/plugins/action/licensing_tier_state_create.py +++ b/ansible_collections/cisco/ise/plugins/action/licensing_tier_state_create.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/licensing_tier_state_info.py b/ansible_collections/cisco/ise/plugins/action/licensing_tier_state_info.py index b4855b92b..a85ba4aef 100644 --- a/ansible_collections/cisco/ise/plugins/action/licensing_tier_state_info.py +++ b/ansible_collections/cisco/ise/plugins/action/licensing_tier_state_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_account_status_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_account_status_info.py index 335f25c0d..4a6a47620 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_account_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_account_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_athentication_status_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_athentication_status_info.py index 31a06b209..c990aa483 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_athentication_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_athentication_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_authentication_status_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_authentication_status_info.py index 7f9538455..f670b1baa 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_authentication_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_authentication_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_failure_reasons_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_failure_reasons_info.py index 4a2bfba14..e47756d89 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_failure_reasons_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_failure_reasons_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_active_count_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_active_count_info.py index 643df1b6d..c05407545 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_active_count_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_active_count_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_active_list_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_active_list_info.py index 4e374bc3d..ff8402569 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_active_list_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_active_list_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_auth_list_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_auth_list_info.py index 991c800cb..dd78451c5 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_auth_list_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_auth_list_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_by_ip_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_by_ip_info.py index 41a6b108e..4c08f0cec 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_by_ip_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_by_ip_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_by_mac_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_by_mac_info.py index 57e658c92..9755b956f 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_by_mac_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_by_mac_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_by_nas_ip_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_by_nas_ip_info.py index 964c6ab28..16beddf16 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_by_nas_ip_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_by_nas_ip_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_by_username_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_by_username_info.py index 8c79838f6..c40014429 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_by_username_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_by_username_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_delete_all.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_delete_all.py index ce0a3e687..253212705 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_delete_all.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_delete_all.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_disconnect_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_disconnect_info.py index 36218b231..a9d8c3c6b 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_disconnect_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_disconnect_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_posture_count_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_posture_count_info.py index b67f5da4f..70795380d 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_posture_count_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_posture_count_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_profiler_count_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_profiler_count_info.py index 2cbb1a65b..1bbc0b748 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_profiler_count_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_profiler_count_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_session_reauthentication_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_session_reauthentication_info.py index 351aa4af9..c583b5de4 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_session_reauthentication_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_session_reauthentication_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_sessions_by_session_id_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_sessions_by_session_id_info.py index 2b4a8b240..59df8c752 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_sessions_by_session_id_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_sessions_by_session_id_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/mnt_version_info.py b/ansible_collections/cisco/ise/plugins/action/mnt_version_info.py index f1d1b9d63..ee0f156ac 100644 --- a/ansible_collections/cisco/ise/plugins/action/mnt_version_info.py +++ b/ansible_collections/cisco/ise/plugins/action/mnt_version_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/my_device_portal.py b/ansible_collections/cisco/ise/plugins/action/my_device_portal.py index 874389fb4..382184b9e 100644 --- a/ansible_collections/cisco/ise/plugins/action/my_device_portal.py +++ b/ansible_collections/cisco/ise/plugins/action/my_device_portal.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/my_device_portal_info.py b/ansible_collections/cisco/ise/plugins/action/my_device_portal_info.py index ba6fc0316..db2b5c6a8 100644 --- a/ansible_collections/cisco/ise/plugins/action/my_device_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/action/my_device_portal_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/native_supplicant_profile.py b/ansible_collections/cisco/ise/plugins/action/native_supplicant_profile.py index b5c0a0713..6fcb63642 100644 --- a/ansible_collections/cisco/ise/plugins/action/native_supplicant_profile.py +++ b/ansible_collections/cisco/ise/plugins/action/native_supplicant_profile.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/native_supplicant_profile_info.py b/ansible_collections/cisco/ise/plugins/action/native_supplicant_profile_info.py index 45f45ca27..742b92f98 100644 --- a/ansible_collections/cisco/ise/plugins/action/native_supplicant_profile_info.py +++ b/ansible_collections/cisco/ise/plugins/action/native_supplicant_profile_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules.py b/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules.py index b8663b844..cf6956d71 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules_info.py index a8676637e..2dafaf3b0 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules_reset_hitcount.py index ec714f3f2..52f3e5910 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_authentication_rules_reset_hitcount.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules.py b/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules.py index 2b6ae8c21..79d0f0bd4 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules_info.py index 20432e921..1fd9fa90f 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules_reset_hitcount.py index 8610301ff..244cbc931 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_authorization_rules_reset_hitcount.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_conditions.py b/ansible_collections/cisco/ise/plugins/action/network_access_conditions.py index 7ab7a5b7e..16d642339 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_conditions.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_conditions.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_authentication_rule_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_authentication_rule_info.py index 630ae4d48..c6abb0a94 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_authentication_rule_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_authentication_rule_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_authorization_rule_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_authorization_rule_info.py index 66fcf2fd7..80c78899e 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_authorization_rule_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_authorization_rule_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_policy_set_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_policy_set_info.py index be454029c..7d66b021f 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_conditions_for_policy_set_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_conditions_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_conditions_info.py index 13d01ddbf..0619c9850 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_conditions_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_conditions_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary.py b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary.py index b0383b769..463dedb73 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attribute.py b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attribute.py index 7636058a5..55c1e5f55 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attribute.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attribute.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attribute_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attribute_info.py index 7eccecf63..94226131e 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attribute_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attribute_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_authentication_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_authentication_info.py index 433872fe3..18cccc517 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_authentication_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_authentication_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_authorization_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_authorization_info.py index 94bb7ea6b..80d8756ec 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_authorization_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_authorization_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_policy_set_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_policy_set_info.py index 3da3318d8..1e80f3b5a 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_attributes_policy_set_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_info.py index e4527b1e0..9dc45f196 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_dictionary_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules.py b/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules.py index b67519de4..0c3907e7f 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules_info.py index 9f6a065de..500d3b1f9 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules_reset_hitcount.py index 73db95225..0dec88d1a 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_global_exception_rules_reset_hitcount.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_identity_stores_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_identity_stores_info.py index 27a9769d2..6d845221f 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_identity_stores_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_identity_stores_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules.py b/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules.py index c5b3c4d86..9d004537e 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules_info.py index f05f7c150..2de294f77 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules_reset_hitcounts.py b/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules_reset_hitcounts.py index c575a8c81..fb13aff0a 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules_reset_hitcounts.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_local_exception_rules_reset_hitcounts.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_network_condition.py b/ansible_collections/cisco/ise/plugins/action/network_access_network_condition.py index dd223d169..6d709d060 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_network_condition.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_network_condition.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_network_condition_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_network_condition_info.py index 5dbf02a0d..205290e90 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_network_condition_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_network_condition_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_policy_set.py b/ansible_collections/cisco/ise/plugins/action/network_access_policy_set.py index a11f40f0c..bbc4f3be0 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_policy_set.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_policy_set.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_policy_set_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_policy_set_info.py index 6c329de57..a1195321a 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_policy_set_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_policy_set_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/action/network_access_policy_set_reset_hitcount.py index fca1b223d..0508661ad 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_policy_set_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_policy_set_reset_hitcount.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_profiles_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_profiles_info.py index d89bf00a7..29f37540d 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_profiles_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_profiles_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_security_groups_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_security_groups_info.py index 8319bac08..b3e658eb9 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_security_groups_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_security_groups_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_service_name_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_service_name_info.py index 3e0c7cbbf..840286e22 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_service_name_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_service_name_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_time_date_conditions.py b/ansible_collections/cisco/ise/plugins/action/network_access_time_date_conditions.py index 23b46c263..c8a0ed136 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_time_date_conditions.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_time_date_conditions.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_access_time_date_conditions_info.py b/ansible_collections/cisco/ise/plugins/action/network_access_time_date_conditions_info.py index 5d3f5206c..22cb9289a 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_access_time_date_conditions_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_access_time_date_conditions_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_device.py b/ansible_collections/cisco/ise/plugins/action/network_device.py index f5d9636a8..05a67b6aa 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_device.py +++ b/ansible_collections/cisco/ise/plugins/action/network_device.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_device_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/network_device_bulk_monitor_status_info.py index 801d0aef0..bcc6c67ca 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_device_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_device_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_device_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/network_device_bulk_request.py index 49fb1bd94..4276b1c05 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_device_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/network_device_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_device_group.py b/ansible_collections/cisco/ise/plugins/action/network_device_group.py index d45ef371a..22af98522 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_device_group.py +++ b/ansible_collections/cisco/ise/plugins/action/network_device_group.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -32,7 +32,7 @@ argument_spec.update(dict( state=dict(type="str", default="present", choices=["present", "absent"]), name=dict(type="str"), description=dict(type="str"), - ndgtype=dict(type="str"), + othername=dict(type="str"), id=dict(type="str"), )) @@ -51,7 +51,7 @@ class NetworkDeviceGroup(object): self.new_object = dict( name=params.get("name"), description=params.get("description"), - ndgtype=params.get("ndgtype"), + othername=params.get("othername"), id=params.get("id"), ) @@ -122,7 +122,7 @@ class NetworkDeviceGroup(object): obj_params = [ ("name", "name"), ("description", "description"), - ("ndgtype", "ndgtype"), + ("othername", "othername"), ("id", "id"), ] # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params diff --git a/ansible_collections/cisco/ise/plugins/action/network_device_group_info.py b/ansible_collections/cisco/ise/plugins/action/network_device_group_info.py index 739808f9f..0a2f29349 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_device_group_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_device_group_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/network_device_info.py b/ansible_collections/cisco/ise/plugins/action/network_device_info.py index 454e7ac3a..0e5504f4e 100644 --- a/ansible_collections/cisco/ise/plugins/action/network_device_info.py +++ b/ansible_collections/cisco/ise/plugins/action/network_device_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_deployment.py b/ansible_collections/cisco/ise/plugins/action/node_deployment.py index 2610dd71e..076869afc 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_deployment.py +++ b/ansible_collections/cisco/ise/plugins/action/node_deployment.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_deployment_info.py b/ansible_collections/cisco/ise/plugins/action/node_deployment_info.py index 7427e473c..1ad12ef61 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_deployment_info.py +++ b/ansible_collections/cisco/ise/plugins/action/node_deployment_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_deployment_sync.py b/ansible_collections/cisco/ise/plugins/action/node_deployment_sync.py index 90fcaf23a..580617be2 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_deployment_sync.py +++ b/ansible_collections/cisco/ise/plugins/action/node_deployment_sync.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_group.py b/ansible_collections/cisco/ise/plugins/action/node_group.py index be56fbbf5..d482cd261 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_group.py +++ b/ansible_collections/cisco/ise/plugins/action/node_group.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_group_info.py b/ansible_collections/cisco/ise/plugins/action/node_group_info.py index 91d9a4740..7f1334ffc 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_group_info.py +++ b/ansible_collections/cisco/ise/plugins/action/node_group_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_group_node_create.py b/ansible_collections/cisco/ise/plugins/action/node_group_node_create.py index e28107702..266ecefe8 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_group_node_create.py +++ b/ansible_collections/cisco/ise/plugins/action/node_group_node_create.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_group_node_delete.py b/ansible_collections/cisco/ise/plugins/action/node_group_node_delete.py index a3b33f274..c9805e140 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_group_node_delete.py +++ b/ansible_collections/cisco/ise/plugins/action/node_group_node_delete.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_group_node_info.py b/ansible_collections/cisco/ise/plugins/action/node_group_node_info.py index c2c36914e..c5ab89163 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_group_node_info.py +++ b/ansible_collections/cisco/ise/plugins/action/node_group_node_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_info.py b/ansible_collections/cisco/ise/plugins/action/node_info.py index aa02ede7b..e6e71ddf3 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_info.py +++ b/ansible_collections/cisco/ise/plugins/action/node_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_primary_to_standalone.py b/ansible_collections/cisco/ise/plugins/action/node_primary_to_standalone.py index 9d5364d4d..873aed1f9 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_primary_to_standalone.py +++ b/ansible_collections/cisco/ise/plugins/action/node_primary_to_standalone.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_promotion.py b/ansible_collections/cisco/ise/plugins/action/node_promotion.py index be953fd15..4146d46f6 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_promotion.py +++ b/ansible_collections/cisco/ise/plugins/action/node_promotion.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_replication_status_info.py b/ansible_collections/cisco/ise/plugins/action/node_replication_status_info.py index 807d97613..549d32606 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_replication_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/node_replication_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_secondary_to_primary.py b/ansible_collections/cisco/ise/plugins/action/node_secondary_to_primary.py index 386e2aada..b7ce9f9d2 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_secondary_to_primary.py +++ b/ansible_collections/cisco/ise/plugins/action/node_secondary_to_primary.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_services_interfaces_info.py b/ansible_collections/cisco/ise/plugins/action/node_services_interfaces_info.py index 62c74180e..33aad5821 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_services_interfaces_info.py +++ b/ansible_collections/cisco/ise/plugins/action/node_services_interfaces_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_services_profiler_probe_config.py b/ansible_collections/cisco/ise/plugins/action/node_services_profiler_probe_config.py index 53a9a7920..eddc706e8 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_services_profiler_probe_config.py +++ b/ansible_collections/cisco/ise/plugins/action/node_services_profiler_probe_config.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_services_profiler_probe_config_info.py b/ansible_collections/cisco/ise/plugins/action/node_services_profiler_probe_config_info.py index 484b1101e..ba2db51de 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_services_profiler_probe_config_info.py +++ b/ansible_collections/cisco/ise/plugins/action/node_services_profiler_probe_config_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_services_sxp_interfaces.py b/ansible_collections/cisco/ise/plugins/action/node_services_sxp_interfaces.py index 622f25e27..5102be39e 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_services_sxp_interfaces.py +++ b/ansible_collections/cisco/ise/plugins/action/node_services_sxp_interfaces.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_services_sxp_interfaces_info.py b/ansible_collections/cisco/ise/plugins/action/node_services_sxp_interfaces_info.py index 48f7d0198..91250ea5c 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_services_sxp_interfaces_info.py +++ b/ansible_collections/cisco/ise/plugins/action/node_services_sxp_interfaces_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_standalone_to_primary.py b/ansible_collections/cisco/ise/plugins/action/node_standalone_to_primary.py index 2a6dcb0b2..5a5f8a163 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_standalone_to_primary.py +++ b/ansible_collections/cisco/ise/plugins/action/node_standalone_to_primary.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/node_sync.py b/ansible_collections/cisco/ise/plugins/action/node_sync.py index 941729ebe..6ec66120a 100644 --- a/ansible_collections/cisco/ise/plugins/action/node_sync.py +++ b/ansible_collections/cisco/ise/plugins/action/node_sync.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pan_ha.py b/ansible_collections/cisco/ise/plugins/action/pan_ha.py index 2b6ce746f..a6db98408 100644 --- a/ansible_collections/cisco/ise/plugins/action/pan_ha.py +++ b/ansible_collections/cisco/ise/plugins/action/pan_ha.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pan_ha_info.py b/ansible_collections/cisco/ise/plugins/action/pan_ha_info.py index 02a4f1b5b..72a7ef7dc 100644 --- a/ansible_collections/cisco/ise/plugins/action/pan_ha_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pan_ha_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pan_ha_update.py b/ansible_collections/cisco/ise/plugins/action/pan_ha_update.py index db7f3c14b..96dad28c0 100644 --- a/ansible_collections/cisco/ise/plugins/action/pan_ha_update.py +++ b/ansible_collections/cisco/ise/plugins/action/pan_ha_update.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -27,11 +27,11 @@ from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( argument_spec = ise_argument_spec() # Add arguments specific for this module argument_spec.update(dict( - failedAttempts=dict(type="int"), isEnabled=dict(type="bool"), - pollingInterval=dict(type="int"), primaryHealthCheckNode=dict(type="dict"), secondaryHealthCheckNode=dict(type="dict"), + pollingInterval=dict(type="int"), + failedAttempts=dict(type="int"), )) required_if = [] @@ -69,11 +69,11 @@ class ActionModule(ActionBase): def get_object(self, params): new_object = dict( - failed_attempts=params.get("failedAttempts"), is_enabled=params.get("isEnabled"), - polling_interval=params.get("pollingInterval"), primary_health_check_node=params.get("primaryHealthCheckNode"), secondary_health_check_node=params.get("secondaryHealthCheckNode"), + polling_interval=params.get("pollingInterval"), + failed_attempts=params.get("failedAttempts"), ) return new_object diff --git a/ansible_collections/cisco/ise/plugins/action/patch_info.py b/ansible_collections/cisco/ise/plugins/action/patch_info.py index a04933848..c2b37a390 100644 --- a/ansible_collections/cisco/ise/plugins/action/patch_info.py +++ b/ansible_collections/cisco/ise/plugins/action/patch_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/patch_install.py b/ansible_collections/cisco/ise/plugins/action/patch_install.py index 6e8250509..69d635930 100644 --- a/ansible_collections/cisco/ise/plugins/action/patch_install.py +++ b/ansible_collections/cisco/ise/plugins/action/patch_install.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -27,6 +27,7 @@ from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( argument_spec = ise_argument_spec() # Add arguments specific for this module argument_spec.update(dict( + isDirectoryListed=dict(type="bool"), patchName=dict(type="str"), repositoryName=dict(type="str"), )) @@ -66,6 +67,7 @@ class ActionModule(ActionBase): def get_object(self, params): new_object = dict( + is_directory_listed=params.get("isDirectoryListed"), patch_name=params.get("patchName"), repository_name=params.get("repositoryName"), ) diff --git a/ansible_collections/cisco/ise/plugins/action/patch_rollback.py b/ansible_collections/cisco/ise/plugins/action/patch_rollback.py index 246845d7a..623a9a352 100644 --- a/ansible_collections/cisco/ise/plugins/action/patch_rollback.py +++ b/ansible_collections/cisco/ise/plugins/action/patch_rollback.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/personas_check_standalone.py b/ansible_collections/cisco/ise/plugins/action/personas_check_standalone.py index 7e4007d03..7ca4732a4 100644 --- a/ansible_collections/cisco/ise/plugins/action/personas_check_standalone.py +++ b/ansible_collections/cisco/ise/plugins/action/personas_check_standalone.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/personas_export_certs.py b/ansible_collections/cisco/ise/plugins/action/personas_export_certs.py index 8acba2dd2..2e66d07a1 100644 --- a/ansible_collections/cisco/ise/plugins/action/personas_export_certs.py +++ b/ansible_collections/cisco/ise/plugins/action/personas_export_certs.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/personas_promote_primary.py b/ansible_collections/cisco/ise/plugins/action/personas_promote_primary.py index 8e7a1c2b5..874ea9866 100644 --- a/ansible_collections/cisco/ise/plugins/action/personas_promote_primary.py +++ b/ansible_collections/cisco/ise/plugins/action/personas_promote_primary.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -22,8 +22,10 @@ from ansible_collections.cisco.ise.plugins.plugin_utils.personas_utils import No argument_spec = dict( ip=dict(type="str", required=True), + hostname=dict(type="str", required=True), username=dict(type="str", required=True), password=dict(type="str", required=True), + roles=dict(type="list", required=True), ise_verify=dict(type="bool", default=True), ise_version=dict(type="str", default="3.1.0"), ise_wait_on_rate_limit=dict(type="bool", default=True), @@ -71,8 +73,10 @@ class ActionModule(ActionBase): self._check_argspec() node = Node(dict(ip=self._task.args.get("ip"), + hostname=self._task.args.get("hostname"), username=self._task.args.get("username"), password=self._task.args.get("password"), + roles=self._task.args.get("roles"), ) ) diff --git a/ansible_collections/cisco/ise/plugins/action/personas_register_node.py b/ansible_collections/cisco/ise/plugins/action/personas_register_node.py index 2a1b008f2..09f332e7a 100644 --- a/ansible_collections/cisco/ise/plugins/action/personas_register_node.py +++ b/ansible_collections/cisco/ise/plugins/action/personas_register_node.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/portal_global_setting.py b/ansible_collections/cisco/ise/plugins/action/portal_global_setting.py index 762235af9..c2e0657f0 100644 --- a/ansible_collections/cisco/ise/plugins/action/portal_global_setting.py +++ b/ansible_collections/cisco/ise/plugins/action/portal_global_setting.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/portal_global_setting_info.py b/ansible_collections/cisco/ise/plugins/action/portal_global_setting_info.py index b27bd26b0..166e1b6b5 100644 --- a/ansible_collections/cisco/ise/plugins/action/portal_global_setting_info.py +++ b/ansible_collections/cisco/ise/plugins/action/portal_global_setting_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/portal_info.py b/ansible_collections/cisco/ise/plugins/action/portal_info.py index 3e4a54e7d..6c79f5cb8 100644 --- a/ansible_collections/cisco/ise/plugins/action/portal_info.py +++ b/ansible_collections/cisco/ise/plugins/action/portal_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/portal_theme.py b/ansible_collections/cisco/ise/plugins/action/portal_theme.py index 7b2d2c914..4e731dafa 100644 --- a/ansible_collections/cisco/ise/plugins/action/portal_theme.py +++ b/ansible_collections/cisco/ise/plugins/action/portal_theme.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/portal_theme_info.py b/ansible_collections/cisco/ise/plugins/action/portal_theme_info.py index ab52db7d4..40c7fd90d 100644 --- a/ansible_collections/cisco/ise/plugins/action/portal_theme_info.py +++ b/ansible_collections/cisco/ise/plugins/action/portal_theme_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/profiler_profile_info.py b/ansible_collections/cisco/ise/plugins/action/profiler_profile_info.py index 50cedbbb9..46a20019c 100644 --- a/ansible_collections/cisco/ise/plugins/action/profiler_profile_info.py +++ b/ansible_collections/cisco/ise/plugins/action/profiler_profile_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/proxy_connection_settings.py b/ansible_collections/cisco/ise/plugins/action/proxy_connection_settings.py index 758eebd78..5246821c9 100644 --- a/ansible_collections/cisco/ise/plugins/action/proxy_connection_settings.py +++ b/ansible_collections/cisco/ise/plugins/action/proxy_connection_settings.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/proxy_connection_settings_info.py b/ansible_collections/cisco/ise/plugins/action/proxy_connection_settings_info.py index 629e4373c..745f96312 100644 --- a/ansible_collections/cisco/ise/plugins/action/proxy_connection_settings_info.py +++ b/ansible_collections/cisco/ise/plugins/action/proxy_connection_settings_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/px_grid_direct.py b/ansible_collections/cisco/ise/plugins/action/px_grid_direct.py new file mode 100644 index 000000000..c1861824f --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/px_grid_direct.py @@ -0,0 +1,250 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + additionalProperties=dict(type="dict"), + attributes=dict(type="dict"), + connectorName=dict(type="str"), + connectorType=dict(type="str"), + deltasyncSchedule=dict(type="dict"), + description=dict(type="str"), + enabled=dict(type="bool"), + fullsyncSchedule=dict(type="dict"), + protocol=dict(type="str"), + skipCertificateValidations=dict(type="bool"), + url=dict(type="dict"), +)) + +required_if = [ + ("state", "present", ["connectorName"], True), + ("state", "absent", ["connectorName"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class PxGridDirect(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + additional_properties=params.get("additionalProperties"), + attributes=params.get("attributes"), + connector_name=params.get("connectorName"), + connector_type=params.get("connectorType"), + deltasync_schedule=params.get("deltasyncSchedule"), + description=params.get("description"), + enabled=params.get("enabled"), + fullsync_schedule=params.get("fullsyncSchedule"), + protocol=params.get("protocol"), + skip_certificate_validations=params.get("skipCertificateValidations"), + url=params.get("url"), + ) + + def get_object_by_name(self, name): + try: + result = self.ise.exec( + family="px_grid_direct", + function="get_connector_config_by_connector_name", + params={"name": name}, + handle_func_exception=False, + ).response['response'] + result = get_dict_result(result, 'name', name) + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def get_object_by_id(self, id): + # NOTICE: Does not have a get by id method or it is in another action + result = None + return result + + def exists(self): + id_exists = False + name_exists = False + prev_obj = None + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("additionalProperties", "additional_properties"), + ("attributes", "attributes"), + ("connectorName", "connector_name"), + ("connectorType", "connector_type"), + ("deltasyncSchedule", "deltasync_schedule"), + ("description", "description"), + ("enabled", "enabled"), + ("fullsyncSchedule", "fullsync_schedule"), + ("protocol", "protocol"), + ("skipCertificateValidations", "skip_certificate_validations"), + ("url", "url"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="px_grid_direct", + function="create_connector_config", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not name: + name_ = self.get_object_by_id(id).get("name") + self.new_object.update(dict(name=name_)) + result = self.ise.exec( + family="px_grid_direct", + function="update_connector_config_by_connector_name", + params=self.new_object + ).response + return result + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not name: + name_ = self.get_object_by_id(id).get("name") + self.new_object.update(dict(name=name_)) + result = self.ise.exec( + family="px_grid_direct", + function="delete_connector_config_by_connector_name", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = PxGridDirect(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/px_grid_direct_dictionary_info.py b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_dictionary_info.py new file mode 100644 index 000000000..501f121a6 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_dictionary_info.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if not name and not id: + response = ise.exec( + family="px_grid_direct", + function='getpxgrid_direct_dictionary_references', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/px_grid_direct_info.py b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_info.py new file mode 100644 index 000000000..a07394aef --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_info.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + connectorName=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + connector_name=params.get("connectorName"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("connectorName") + if name: + response = ise.exec( + family="px_grid_direct", + function='get_connector_config_by_connector_name', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + response = ise.exec( + family="px_grid_direct", + function='get_connector_config', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync.py b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync.py new file mode 100644 index 000000000..b6fe0817e --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present"]), + SyncType=dict(type="str"), + connectorName=dict(type="str"), + description=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["connectorName"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class PxGridDirectSync(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + sync_type=params.get("SyncType"), + connector_name=params.get("connectorName"), + description=params.get("description"), + ) + + def get_object_by_name(self, name): + try: + result = self.ise.exec( + family="px_grid_direct", + function="get_connector_config_sync_now_status", + params={"connectorName": name}, + handle_func_exception=False, + ).response['response'] + result = get_dict_result(result, 'name', name) + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def get_object_by_id(self, id): + # NOTICE: Does not have a get by id method or it is in another action + result = None + return result + + def exists(self): + prev_obj = None + id_exists = False + name_exists = False + o_id = self.new_object.get("id") + name = self.new_object.get("connectorName") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("SyncType", "sync_type"), + ("connectorName", "connector_name"), + ("description", "description"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="px_grid_direct", + function="sync_now_connector", + params=self.new_object, + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = PxGridDirectSync(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + response = prev_obj + ise.object_present_and_different() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync_info.py b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync_info.py new file mode 100644 index 000000000..a96835fdc --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_sync_info.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + connectorName=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + connector_name=params.get("connectorName"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("connectorName") + if name: + response = ise.exec( + family="px_grid_direct", + function='get_connector_config_sync_now_status', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + # NOTICE: Does not have a get all method or it is in another action + response = None + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/px_grid_direct_test_connector.py b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_test_connector.py new file mode 100644 index 000000000..940e1d2c5 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/px_grid_direct_test_connector.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + authType=dict(type="str"), + authValues=dict(type="dict"), + connectorName=dict(type="str"), + responseParsing=dict(type="str"), + skipCertificateValidations=dict(type="bool"), + uniqueID=dict(type="str"), + url=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + auth_type=params.get("authType"), + auth_values=params.get("authValues"), + connector_name=params.get("connectorName"), + response_parsing=params.get("responseParsing"), + skip_certificate_validations=params.get("skipCertificateValidations"), + unique_id=params.get("uniqueID"), + url=params.get("url"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="px_grid_direct", + function="test_connector", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/px_grid_node_approve.py b/ansible_collections/cisco/ise/plugins/action/px_grid_node_approve.py index d1a28a5ac..c3f71ac1e 100644 --- a/ansible_collections/cisco/ise/plugins/action/px_grid_node_approve.py +++ b/ansible_collections/cisco/ise/plugins/action/px_grid_node_approve.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/px_grid_node_delete.py b/ansible_collections/cisco/ise/plugins/action/px_grid_node_delete.py index eff20fc8b..f51f9f73e 100644 --- a/ansible_collections/cisco/ise/plugins/action/px_grid_node_delete.py +++ b/ansible_collections/cisco/ise/plugins/action/px_grid_node_delete.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/px_grid_node_info.py b/ansible_collections/cisco/ise/plugins/action/px_grid_node_info.py index 20e5bdf53..2b1aa7bf1 100644 --- a/ansible_collections/cisco/ise/plugins/action/px_grid_node_info.py +++ b/ansible_collections/cisco/ise/plugins/action/px_grid_node_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/px_grid_settings_auto_approve.py b/ansible_collections/cisco/ise/plugins/action/px_grid_settings_auto_approve.py index ed674d644..79cfb3e3f 100644 --- a/ansible_collections/cisco/ise/plugins/action/px_grid_settings_auto_approve.py +++ b/ansible_collections/cisco/ise/plugins/action/px_grid_settings_auto_approve.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_access_secret.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_access_secret.py index 43bbb95f2..f707432b8 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_access_secret.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_access_secret.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_account_activate.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_account_activate.py index 8c7e71aad..84f042489 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_account_activate.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_account_activate.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_account_create.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_account_create.py index 040247a7e..647f79984 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_account_create.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_account_create.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_authorization.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_authorization.py index 7ac4e39b9..bb4e073e5 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_authorization.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_authorization.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_bindings_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_bindings_info.py index fba8c50fe..275b4ca2f 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_bindings_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_bindings_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_egress_matrices_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_egress_matrices_info.py index 510540974..210df469b 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_egress_matrices_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_egress_matrices_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_egress_policies_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_egress_policies_info.py index 4ef5b302b..8d59f1187 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_egress_policies_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_egress_policies_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoint_by_mac_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoint_by_mac_info.py index afcdf8652..b1f2e75bc 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoint_by_mac_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoint_by_mac_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_by_os_type_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_by_os_type_info.py index 0df3187ba..d09e741ca 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_by_os_type_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_by_os_type_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_by_type_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_by_type_info.py index e7508f6dc..218354951 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_by_type_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_by_type_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_info.py index ba538d3a9..f57c53d8e 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_endpoints_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_failures_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_failures_info.py index 145586690..03fe49c3e 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_failures_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_failures_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_healths_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_healths_info.py index a0ff7012d..309bab442 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_healths_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_healths_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_node_approve.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_node_approve.py index d1a28a5ac..c3f71ac1e 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_node_approve.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_node_approve.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_node_delete.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_node_delete.py index eff20fc8b..f51f9f73e 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_node_delete.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_node_delete.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_node_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_node_info.py index 20e5bdf53..2b1aa7bf1 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_node_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_node_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_performances_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_performances_info.py index 9297f8fc3..dd77a2c9d 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_performances_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_performances_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_profiles_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_profiles_info.py index ddf5a5aef..89af46f52 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_profiles_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_profiles_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_security_group_acls_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_security_group_acls_info.py index 9f7c69c60..ad57677d9 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_security_group_acls_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_security_group_acls_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_security_groups_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_security_groups_info.py index a5e808207..ab18eb7f2 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_security_groups_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_security_groups_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_service_lookup.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_service_lookup.py index afc650923..02b7b61c8 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_service_lookup.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_service_lookup.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_service_register.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_service_register.py index df3e440c7..a689f4105 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_service_register.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_service_register.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_service_reregister.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_service_reregister.py index 0260f6e65..9f9637030 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_service_reregister.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_service_reregister.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_service_unregister.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_service_unregister.py index e245c4d84..2bc362861 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_service_unregister.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_service_unregister.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_session_by_ip_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_session_by_ip_info.py index 82f255692..af65bbf8e 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_session_by_ip_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_session_by_ip_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_session_by_mac_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_session_by_mac_info.py index 17cdf4e2f..01bb6f95a 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_session_by_mac_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_session_by_mac_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_session_for_recovery_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_session_for_recovery_info.py index 35c2a0fbe..8c4045fed 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_session_for_recovery_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_session_for_recovery_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_sessions_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_sessions_info.py index 86316c1ba..141d8501c 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_sessions_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_sessions_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_settings_auto_approve.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_settings_auto_approve.py index ed674d644..79cfb3e3f 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_settings_auto_approve.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_settings_auto_approve.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_user_group_by_username_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_user_group_by_username_info.py index 67513d4ce..b61fa9917 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_user_group_by_username_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_user_group_by_username_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/pxgrid_user_groups_info.py b/ansible_collections/cisco/ise/plugins/action/pxgrid_user_groups_info.py index ecfd2bb5c..ac1989a5b 100644 --- a/ansible_collections/cisco/ise/plugins/action/pxgrid_user_groups_info.py +++ b/ansible_collections/cisco/ise/plugins/action/pxgrid_user_groups_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/radius_server_sequence.py b/ansible_collections/cisco/ise/plugins/action/radius_server_sequence.py index ab25c9a52..7deec1bf7 100644 --- a/ansible_collections/cisco/ise/plugins/action/radius_server_sequence.py +++ b/ansible_collections/cisco/ise/plugins/action/radius_server_sequence.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/radius_server_sequence_info.py b/ansible_collections/cisco/ise/plugins/action/radius_server_sequence_info.py index 821f5ac30..0198fcc1b 100644 --- a/ansible_collections/cisco/ise/plugins/action/radius_server_sequence_info.py +++ b/ansible_collections/cisco/ise/plugins/action/radius_server_sequence_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/renew_certificate.py b/ansible_collections/cisco/ise/plugins/action/renew_certificate.py index e8c5aca11..65b26d27b 100644 --- a/ansible_collections/cisco/ise/plugins/action/renew_certificate.py +++ b/ansible_collections/cisco/ise/plugins/action/renew_certificate.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/repository.py b/ansible_collections/cisco/ise/plugins/action/repository.py index 0b01c202e..5f2557854 100644 --- a/ansible_collections/cisco/ise/plugins/action/repository.py +++ b/ansible_collections/cisco/ise/plugins/action/repository.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/repository_files_info.py b/ansible_collections/cisco/ise/plugins/action/repository_files_info.py index f41da0ffd..8de12e117 100644 --- a/ansible_collections/cisco/ise/plugins/action/repository_files_info.py +++ b/ansible_collections/cisco/ise/plugins/action/repository_files_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/repository_info.py b/ansible_collections/cisco/ise/plugins/action/repository_info.py index 4c27ff60c..c24a14eb0 100644 --- a/ansible_collections/cisco/ise/plugins/action/repository_info.py +++ b/ansible_collections/cisco/ise/plugins/action/repository_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/reservation.py b/ansible_collections/cisco/ise/plugins/action/reservation.py new file mode 100644 index 000000000..731a1e57f --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/reservation.py @@ -0,0 +1,255 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + clientName=dict(type="str"), + numberOfTags=dict(type="int"), + clientID=dict(type="str"), + endIndex=dict(type="int"), + startIndex=dict(type="int"), +)) + +required_if = [ + ("state", "absent", ["clientID"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class Reservation(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + client_name=params.get("clientName"), + number_of_tags=params.get("numberOfTags"), + client_id=params.get("clientID"), + end_index=params.get("endIndex"), + start_index=params.get("startIndex"), + ) + + def get_object_by_name(self, name): + # NOTICE: Does not have a get by name method or it is in another action + result = None + gen_items_responses = self.ise.exec( + family="sgt_range_reservation", + function="get_sgt_reserved_ranges_generator" + ) + try: + for items_response in gen_items_responses: + items = items_response.response.get('response', []) + result = get_dict_result(items, 'name', name) + if result: + return result + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + return result + + def get_object_by_id(self, id): + try: + result = self.ise.exec( + family="sgt_range_reservation", + function="get_sgt_reserved_range", + handle_func_exception=False, + params={"id": id} + ).response['response'] + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def exists(self): + id_exists = False + name_exists = False + prev_obj = None + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + if _id: + prev_obj = self.get_object_by_id(_id) + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("clientName", "client_name"), + ("numberOfTags", "number_of_tags"), + ("clientID", "client_id"), + ("endIndex", "end_index"), + ("startIndex", "start_index"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="sgt_range_reservation", + function="reserve_sgt_range", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="sgt_range_reservation", + function="update_reserved_range", + params=self.new_object + ).response + return result + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="sgt_range_reservation", + function="delete_sgt_reserve_range", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = Reservation(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/reservation_info.py b/ansible_collections/cisco/ise/plugins/action/reservation_info.py new file mode 100644 index 000000000..e02ce3162 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/reservation_info.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + page=dict(type="int"), + size=dict(type="int"), + clientID=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + page=params.get("page"), + size=params.get("size"), + client_id=params.get("clientID"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("clientID") + name = self._task.args.get("name") + if id: + response = ise.exec( + family="sgt_range_reservation", + function='get_sgt_reserved_range', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + responses = [] + generator = ise.exec( + family="sgt_range_reservation", + function='get_sgt_reserved_ranges_generator', + params=self.get_object(self._task.args), + ) + try: + for item in generator: + tmp_response = item.response['response'] + if isinstance(tmp_response, list): + responses += tmp_response + else: + responses.append(tmp_response) + response = responses + except (TypeError, AttributeError) as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " The error was: {error}" + " You may want to enable the (ise_debug: True) argument." + ).format(error=e) + ) + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/resource_version_info.py b/ansible_collections/cisco/ise/plugins/action/resource_version_info.py index 4dcf7478c..e8536d9a1 100644 --- a/ansible_collections/cisco/ise/plugins/action/resource_version_info.py +++ b/ansible_collections/cisco/ise/plugins/action/resource_version_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/rest_id_store.py b/ansible_collections/cisco/ise/plugins/action/rest_id_store.py index 298223855..8d16915c9 100644 --- a/ansible_collections/cisco/ise/plugins/action/rest_id_store.py +++ b/ansible_collections/cisco/ise/plugins/action/rest_id_store.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/rest_id_store_info.py b/ansible_collections/cisco/ise/plugins/action/rest_id_store_info.py index 64726af72..e93c29a46 100644 --- a/ansible_collections/cisco/ise/plugins/action/rest_id_store_info.py +++ b/ansible_collections/cisco/ise/plugins/action/rest_id_store_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/self_registered_portal.py b/ansible_collections/cisco/ise/plugins/action/self_registered_portal.py index fb0bf742b..cd534b5a9 100644 --- a/ansible_collections/cisco/ise/plugins/action/self_registered_portal.py +++ b/ansible_collections/cisco/ise/plugins/action/self_registered_portal.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/self_registered_portal_info.py b/ansible_collections/cisco/ise/plugins/action/self_registered_portal_info.py index d02d00167..57ee5e3d5 100644 --- a/ansible_collections/cisco/ise/plugins/action/self_registered_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/action/self_registered_portal_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/selfsigned_certificate_generate.py b/ansible_collections/cisco/ise/plugins/action/selfsigned_certificate_generate.py index 5c1a29bd5..e485061ab 100644 --- a/ansible_collections/cisco/ise/plugins/action/selfsigned_certificate_generate.py +++ b/ansible_collections/cisco/ise/plugins/action/selfsigned_certificate_generate.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/session_service_node_info.py b/ansible_collections/cisco/ise/plugins/action/session_service_node_info.py index edd33df5a..463f85fe0 100644 --- a/ansible_collections/cisco/ise/plugins/action/session_service_node_info.py +++ b/ansible_collections/cisco/ise/plugins/action/session_service_node_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_acl.py b/ansible_collections/cisco/ise/plugins/action/sg_acl.py index 152d6176d..78da03e23 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_acl.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_acl.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_acl_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/sg_acl_bulk_monitor_status_info.py index 863c2f4c9..39fd63aa7 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_acl_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_acl_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_acl_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/sg_acl_bulk_request.py index 7cfff24d9..db68ff947 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_acl_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_acl_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_acl_info.py b/ansible_collections/cisco/ise/plugins/action/sg_acl_info.py index 36b14a20f..e2382fce7 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_acl_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_acl_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping.py index 288fd80b6..df4f298f1 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_bulk_monitor_status_info.py index d7f242022..3bde15cc3 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_bulk_request.py index e82eb637f..f2e121d07 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy.py index 784a828d5..329ec469f 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy_all.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy_all.py index cf72239c1..2d04386cf 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy_all.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy_all.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy_status_info.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy_status_info.py index 216014fc4..70818b5fe 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_deploy_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group.py index 67bac9001..f7d4fa5ec 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_bulk_monitor_status_info.py index 567ab2dcb..e794ca395 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_bulk_request.py index f1830ce02..a3fc52f5b 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy.py index e9035f0ab..639747314 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy_all.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy_all.py index 55c9a7ae8..067ef4dd7 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy_all.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy_all.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy_status_info.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy_status_info.py index 38f02d4e8..91ea9faf9 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_deploy_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_info.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_info.py index 04b67c510..0aabee221 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_group_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_mapping_info.py b/ansible_collections/cisco/ise/plugins/action/sg_mapping_info.py index 8d8b0beaf..4d65f144d 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_mapping_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_mapping_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan.py b/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan.py index 243b6d208..6fae123d1 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_bulk_monitor_status_info.py index 692d4b83b..67b3c1f4e 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_bulk_request.py index 23a48207b..acda6a98c 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_info.py b/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_info.py index b0194ce10..561498ec5 100644 --- a/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sg_to_vn_to_vlan_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sgt.py b/ansible_collections/cisco/ise/plugins/action/sgt.py index 6b4c11232..db45d70d9 100644 --- a/ansible_collections/cisco/ise/plugins/action/sgt.py +++ b/ansible_collections/cisco/ise/plugins/action/sgt.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sgt_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/sgt_bulk_monitor_status_info.py index 1ad0b0718..b95084ee6 100644 --- a/ansible_collections/cisco/ise/plugins/action/sgt_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sgt_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sgt_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/sgt_bulk_request.py index 2157144ba..eb5fd4c52 100644 --- a/ansible_collections/cisco/ise/plugins/action/sgt_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/sgt_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sgt_info.py b/ansible_collections/cisco/ise/plugins/action/sgt_info.py index 3c1602e76..27c172494 100644 --- a/ansible_collections/cisco/ise/plugins/action/sgt_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sgt_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sms_provider_info.py b/ansible_collections/cisco/ise/plugins/action/sms_provider_info.py index 75971faf3..235626668 100644 --- a/ansible_collections/cisco/ise/plugins/action/sms_provider_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sms_provider_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sponsor_group.py b/ansible_collections/cisco/ise/plugins/action/sponsor_group.py index 8bd4bc92b..ab46d1f2b 100644 --- a/ansible_collections/cisco/ise/plugins/action/sponsor_group.py +++ b/ansible_collections/cisco/ise/plugins/action/sponsor_group.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sponsor_group_info.py b/ansible_collections/cisco/ise/plugins/action/sponsor_group_info.py index 695b98952..f94e22cdf 100644 --- a/ansible_collections/cisco/ise/plugins/action/sponsor_group_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sponsor_group_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sponsor_group_member_info.py b/ansible_collections/cisco/ise/plugins/action/sponsor_group_member_info.py index 4efac6fbe..dd522d14e 100644 --- a/ansible_collections/cisco/ise/plugins/action/sponsor_group_member_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sponsor_group_member_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sponsor_portal.py b/ansible_collections/cisco/ise/plugins/action/sponsor_portal.py index 95a45c1ab..cb2fd1943 100644 --- a/ansible_collections/cisco/ise/plugins/action/sponsor_portal.py +++ b/ansible_collections/cisco/ise/plugins/action/sponsor_portal.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sponsor_portal_info.py b/ansible_collections/cisco/ise/plugins/action/sponsor_portal_info.py index 41ce0dfe2..fe3a1f908 100644 --- a/ansible_collections/cisco/ise/plugins/action/sponsor_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sponsor_portal_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal.py b/ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal.py index 437eb6b17..f0e9a1346 100644 --- a/ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal.py +++ b/ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal_info.py b/ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal_info.py index 732d3e77a..464361302 100644 --- a/ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sponsored_guest_portal_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/stop_replication.py b/ansible_collections/cisco/ise/plugins/action/stop_replication.py new file mode 100644 index 000000000..0d678ee50 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/stop_replication.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present"]), + isEnabled=dict(type="bool"), +)) + +required_if = [ + ("state", "present", [], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class StopReplication(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + is_enabled=params.get("isEnabled"), + ) + + def get_object_by_name(self, name): + # NOTICE: Does not have a get by name method or it is in another action + result = None + items = self.ise.exec( + family="endpoint_stop_replication_service", + function="get_stop_replication_status" + ).response['response'] + result = get_dict_result(items, 'name', name) + return result + + def get_object_by_id(self, id): + # NOTICE: Does not have a get by id method or it is in another action + result = None + return result + + def exists(self): + prev_obj = None + id_exists = False + name_exists = False + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("isEnabled", "is_enabled"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + result = self.ise.exec( + family="endpoint_stop_replication_service", + function="set_stop_replication_service", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = StopReplication(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise.fail_json("Object does not exists, plugin only has update") + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/stop_replication_info.py b/ansible_collections/cisco/ise/plugins/action/stop_replication_info.py new file mode 100644 index 000000000..729e698fe --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/stop_replication_info.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if not name and not id: + response = ise.exec( + family="endpoint_stop_replication_service", + function='get_stop_replication_status', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/subscriber.py b/ansible_collections/cisco/ise/plugins/action/subscriber.py index a3713078a..11b89e884 100644 --- a/ansible_collections/cisco/ise/plugins/action/subscriber.py +++ b/ansible_collections/cisco/ise/plugins/action/subscriber.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2023, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -37,9 +37,9 @@ argument_spec.update(dict( friendlyName=dict(type="str"), identityGroups=dict(type="str"), imeis=dict(type="str"), - imsi=dict(type="str"), - ki=dict(type="str"), opc=dict(type="str"), + ki=dict(type="str"), + imsi=dict(type="str"), subscriberId=dict(type="str"), )) @@ -57,9 +57,9 @@ class Subscriber(object): friendly_name=params.get("friendlyName"), identity_groups=params.get("identityGroups"), imeis=params.get("imeis"), - imsi=params.get("imsi"), - ki=params.get("ki"), opc=params.get("opc"), + ki=params.get("ki"), + imsi=params.get("imsi"), subscriber_id=params.get("subscriberId"), ) @@ -97,7 +97,7 @@ class Subscriber(object): family="subscriber", function="get_subscriber_by_id", handle_func_exception=False, - params={"subscriber_id": id} + params={"id": id} ).response['response'] except (TypeError, AttributeError) as e: self.ise.fail_json( @@ -117,7 +117,7 @@ class Subscriber(object): id_exists = False name_exists = False prev_obj = None - o_id = self.new_object.get("subscriberId") + o_id = self.new_object.get("id") name = self.new_object.get("name") if o_id: prev_obj = self.get_object_by_id(o_id) @@ -142,9 +142,9 @@ class Subscriber(object): ("friendlyName", "friendly_name"), ("identityGroups", "identity_groups"), ("imeis", "imeis"), - ("imsi", "imsi"), - ("ki", "ki"), ("opc", "opc"), + ("ki", "ki"), + ("imsi", "imsi"), ("subscriberId", "subscriber_id"), ] # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params diff --git a/ansible_collections/cisco/ise/plugins/action/subscriber_bulk.py b/ansible_collections/cisco/ise/plugins/action/subscriber_bulk.py index bd392306d..0477c5b43 100644 --- a/ansible_collections/cisco/ise/plugins/action/subscriber_bulk.py +++ b/ansible_collections/cisco/ise/plugins/action/subscriber_bulk.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2023, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -27,8 +27,8 @@ from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( argument_spec = ise_argument_spec() # Add arguments specific for this module argument_spec.update(dict( - ItemList=dict(type="list"), operation=dict(type="str"), + ItemList=dict(type="list"), )) required_if = [] @@ -66,8 +66,8 @@ class ActionModule(ActionBase): def get_object(self, params): new_object = dict( - item_list=params.get("ItemList"), operation=params.get("operation"), + item_list=params.get("ItemList"), ) return new_object diff --git a/ansible_collections/cisco/ise/plugins/action/subscriber_imsi_info.py b/ansible_collections/cisco/ise/plugins/action/subscriber_imsi_info.py index f82cd0d6d..0a2149781 100644 --- a/ansible_collections/cisco/ise/plugins/action/subscriber_imsi_info.py +++ b/ansible_collections/cisco/ise/plugins/action/subscriber_imsi_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2023, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/subscriber_info.py b/ansible_collections/cisco/ise/plugins/action/subscriber_info.py index 65d8cc69c..172b076d2 100644 --- a/ansible_collections/cisco/ise/plugins/action/subscriber_info.py +++ b/ansible_collections/cisco/ise/plugins/action/subscriber_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2023, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/support_bundle.py b/ansible_collections/cisco/ise/plugins/action/support_bundle.py index 73e925af8..d7921171d 100644 --- a/ansible_collections/cisco/ise/plugins/action/support_bundle.py +++ b/ansible_collections/cisco/ise/plugins/action/support_bundle.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/support_bundle_download.py b/ansible_collections/cisco/ise/plugins/action/support_bundle_download.py index e21df3e22..5031e886a 100644 --- a/ansible_collections/cisco/ise/plugins/action/support_bundle_download.py +++ b/ansible_collections/cisco/ise/plugins/action/support_bundle_download.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/support_bundle_status_info.py b/ansible_collections/cisco/ise/plugins/action/support_bundle_status_info.py index 34f77c217..61357d6fc 100644 --- a/ansible_collections/cisco/ise/plugins/action/support_bundle_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/support_bundle_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_connections.py b/ansible_collections/cisco/ise/plugins/action/sxp_connections.py index 1ad726f43..d068ce425 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_connections.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_connections.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_connections_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/sxp_connections_bulk_monitor_status_info.py index 3376e2f75..9232d5aea 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_connections_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_connections_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_connections_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/sxp_connections_bulk_request.py index ff5ab9c19..fd9b00778 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_connections_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_connections_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_connections_info.py b/ansible_collections/cisco/ise/plugins/action/sxp_connections_info.py index 55411cb90..42afe968e 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_connections_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_connections_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings.py b/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings.py index 10451d9bd..3f1e386f0 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_bulk_monitor_status_info.py index da9fe0d18..b2d5e1940 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_bulk_request.py index ff23aa0df..3778beb53 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_info.py b/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_info.py index e2856ee0e..cca2bf477 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_local_bindings_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_vpns.py b/ansible_collections/cisco/ise/plugins/action/sxp_vpns.py index e9021d464..db1deb187 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_vpns.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_vpns.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_vpns_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/action/sxp_vpns_bulk_monitor_status_info.py index 74a8cf9da..5e2b53e0f 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_vpns_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_vpns_bulk_monitor_status_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_vpns_bulk_request.py b/ansible_collections/cisco/ise/plugins/action/sxp_vpns_bulk_request.py index 391deb4c4..214eeda0c 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_vpns_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_vpns_bulk_request.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/sxp_vpns_info.py b/ansible_collections/cisco/ise/plugins/action/sxp_vpns_info.py index ca26ec9b5..bacbc1e96 100644 --- a/ansible_collections/cisco/ise/plugins/action/sxp_vpns_info.py +++ b/ansible_collections/cisco/ise/plugins/action/sxp_vpns_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/system_certificate.py b/ansible_collections/cisco/ise/plugins/action/system_certificate.py index 3faae7fec..58991206b 100644 --- a/ansible_collections/cisco/ise/plugins/action/system_certificate.py +++ b/ansible_collections/cisco/ise/plugins/action/system_certificate.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/system_certificate_create.py b/ansible_collections/cisco/ise/plugins/action/system_certificate_create.py index 0b47847ac..31461874c 100644 --- a/ansible_collections/cisco/ise/plugins/action/system_certificate_create.py +++ b/ansible_collections/cisco/ise/plugins/action/system_certificate_create.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/system_certificate_export_info.py b/ansible_collections/cisco/ise/plugins/action/system_certificate_export_info.py index 6922b5a9f..f45e274a2 100644 --- a/ansible_collections/cisco/ise/plugins/action/system_certificate_export_info.py +++ b/ansible_collections/cisco/ise/plugins/action/system_certificate_export_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -28,6 +28,7 @@ argument_spec = ise_argument_spec() # Add arguments specific for this module argument_spec.update(dict( export=dict(type="str"), + hostName=dict(type="str"), id=dict(type="str"), password=dict(type="str", no_log=True), dirPath=dict(type="str"), @@ -71,6 +72,7 @@ class ActionModule(ActionBase): def get_object(self, params): new_object = dict( export=params.get("export"), + host_name=params.get("hostName"), id=params.get("id"), password=params.get("password"), dirpath=params.get("dirPath"), diff --git a/ansible_collections/cisco/ise/plugins/action/system_certificate_import.py b/ansible_collections/cisco/ise/plugins/action/system_certificate_import.py index 51050e3e7..988fb5e01 100644 --- a/ansible_collections/cisco/ise/plugins/action/system_certificate_import.py +++ b/ansible_collections/cisco/ise/plugins/action/system_certificate_import.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/system_certificate_info.py b/ansible_collections/cisco/ise/plugins/action/system_certificate_info.py index 5f1d0e7c2..6c6ee0d4d 100644 --- a/ansible_collections/cisco/ise/plugins/action/system_certificate_info.py +++ b/ansible_collections/cisco/ise/plugins/action/system_certificate_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -32,7 +32,7 @@ argument_spec.update(dict( size=dict(type="int"), sort=dict(type="str"), sortBy=dict(type="str"), - filter=dict(type="list"), + filter=dict(type="str"), filterType=dict(type="str"), id=dict(type="str"), )) diff --git a/ansible_collections/cisco/ise/plugins/action/system_config_version_info.py b/ansible_collections/cisco/ise/plugins/action/system_config_version_info.py index 17a4d3e2d..ae68a50a6 100644 --- a/ansible_collections/cisco/ise/plugins/action/system_config_version_info.py +++ b/ansible_collections/cisco/ise/plugins/action/system_config_version_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/tacacs_command_sets.py b/ansible_collections/cisco/ise/plugins/action/tacacs_command_sets.py index 471cd6b70..ec60cd403 100644 --- a/ansible_collections/cisco/ise/plugins/action/tacacs_command_sets.py +++ b/ansible_collections/cisco/ise/plugins/action/tacacs_command_sets.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/tacacs_command_sets_info.py b/ansible_collections/cisco/ise/plugins/action/tacacs_command_sets_info.py index 7df402af6..db96fe04a 100644 --- a/ansible_collections/cisco/ise/plugins/action/tacacs_command_sets_info.py +++ b/ansible_collections/cisco/ise/plugins/action/tacacs_command_sets_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/tacacs_external_servers.py b/ansible_collections/cisco/ise/plugins/action/tacacs_external_servers.py index 60c07d1dc..fa36fb7cf 100644 --- a/ansible_collections/cisco/ise/plugins/action/tacacs_external_servers.py +++ b/ansible_collections/cisco/ise/plugins/action/tacacs_external_servers.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/tacacs_external_servers_info.py b/ansible_collections/cisco/ise/plugins/action/tacacs_external_servers_info.py index e64bf2d8d..bc0d21ef8 100644 --- a/ansible_collections/cisco/ise/plugins/action/tacacs_external_servers_info.py +++ b/ansible_collections/cisco/ise/plugins/action/tacacs_external_servers_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/tacacs_profile.py b/ansible_collections/cisco/ise/plugins/action/tacacs_profile.py index d87faab8f..5a0b846ef 100644 --- a/ansible_collections/cisco/ise/plugins/action/tacacs_profile.py +++ b/ansible_collections/cisco/ise/plugins/action/tacacs_profile.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/tacacs_profile_info.py b/ansible_collections/cisco/ise/plugins/action/tacacs_profile_info.py index d48f8753b..86001ae69 100644 --- a/ansible_collections/cisco/ise/plugins/action/tacacs_profile_info.py +++ b/ansible_collections/cisco/ise/plugins/action/tacacs_profile_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence.py b/ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence.py index 3292d9482..d43760a55 100644 --- a/ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence.py +++ b/ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence_info.py b/ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence_info.py index 6b3cee9f1..d182d64e4 100644 --- a/ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence_info.py +++ b/ansible_collections/cisco/ise/plugins/action/tacacs_server_sequence_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/tasks_info.py b/ansible_collections/cisco/ise/plugins/action/tasks_info.py index a99af7810..49cdf6805 100644 --- a/ansible_collections/cisco/ise/plugins/action/tasks_info.py +++ b/ansible_collections/cisco/ise/plugins/action/tasks_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/telemetry_info.py b/ansible_collections/cisco/ise/plugins/action/telemetry_info.py index c2981dffb..24fd1b852 100644 --- a/ansible_collections/cisco/ise/plugins/action/telemetry_info.py +++ b/ansible_collections/cisco/ise/plugins/action/telemetry_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/test_connector.py b/ansible_collections/cisco/ise/plugins/action/test_connector.py deleted file mode 100644 index f3a1b5797..000000000 --- a/ansible_collections/cisco/ise/plugins/action/test_connector.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright (c) 2023, Cisco Systems -# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function - -__metaclass__ = type -from ansible.plugins.action import ActionBase - -try: - from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( - AnsibleArgSpecValidator, - ) -except ImportError: - ANSIBLE_UTILS_IS_INSTALLED = False -else: - ANSIBLE_UTILS_IS_INSTALLED = True -from ansible.errors import AnsibleActionFail -from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( - ISESDK, - ise_argument_spec, -) - -# Get common arguements specification -argument_spec = ise_argument_spec() -# Add arguments specific for this module -argument_spec.update(dict( - authType=dict(type="str"), - authValues=dict(type="dict"), - connectorName=dict(type="str"), - responseParsing=dict(type="str"), - uniqueID=dict(type="str"), - url=dict(type="str"), -)) - -required_if = [] -required_one_of = [] -mutually_exclusive = [] -required_together = [] - - -class ActionModule(ActionBase): - def __init__(self, *args, **kwargs): - if not ANSIBLE_UTILS_IS_INSTALLED: - raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") - super(ActionModule, self).__init__(*args, **kwargs) - self._supports_async = False - self._supports_check_mode = False - self._result = None - - # Checks the supplied parameters against the argument spec for this module - def _check_argspec(self): - aav = AnsibleArgSpecValidator( - data=self._task.args, - schema=dict(argument_spec=argument_spec), - schema_format="argspec", - schema_conditionals=dict( - required_if=required_if, - required_one_of=required_one_of, - mutually_exclusive=mutually_exclusive, - required_together=required_together, - ), - name=self._task.action, - ) - valid, errors, self._task.args = aav.validate() - if not valid: - raise AnsibleActionFail(errors) - - def get_object(self, params): - new_object = dict( - auth_type=params.get("authType"), - auth_values=params.get("authValues"), - connector_name=params.get("connectorName"), - response_parsing=params.get("responseParsing"), - unique_id=params.get("uniqueID"), - url=params.get("url"), - ) - return new_object - - def run(self, tmp=None, task_vars=None): - self._task.diff = False - self._result = super(ActionModule, self).run(tmp, task_vars) - self._result["changed"] = False - self._check_argspec() - - ise = ISESDK(params=self._task.args) - - response = ise.exec( - family="edda", - function="test_connector", - params=self.get_object(self._task.args), - ).response - - self._result.update(dict(ise_response=response)) - self._result.update(ise.exit_json()) - return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/threat_vulnerabilities_clear.py b/ansible_collections/cisco/ise/plugins/action/threat_vulnerabilities_clear.py index 6360671d7..f3ce50d40 100644 --- a/ansible_collections/cisco/ise/plugins/action/threat_vulnerabilities_clear.py +++ b/ansible_collections/cisco/ise/plugins/action/threat_vulnerabilities_clear.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/transport_gateway_settings.py b/ansible_collections/cisco/ise/plugins/action/transport_gateway_settings.py index 10555db06..ec5076e29 100644 --- a/ansible_collections/cisco/ise/plugins/action/transport_gateway_settings.py +++ b/ansible_collections/cisco/ise/plugins/action/transport_gateway_settings.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/transport_gateway_settings_info.py b/ansible_collections/cisco/ise/plugins/action/transport_gateway_settings_info.py index 8aa181500..b0c609e4d 100644 --- a/ansible_collections/cisco/ise/plugins/action/transport_gateway_settings_info.py +++ b/ansible_collections/cisco/ise/plugins/action/transport_gateway_settings_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/trusted_certificate.py b/ansible_collections/cisco/ise/plugins/action/trusted_certificate.py index 8b86c914b..65765c65d 100644 --- a/ansible_collections/cisco/ise/plugins/action/trusted_certificate.py +++ b/ansible_collections/cisco/ise/plugins/action/trusted_certificate.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/trusted_certificate_export_info.py b/ansible_collections/cisco/ise/plugins/action/trusted_certificate_export_info.py index fc1e9d075..7a6cd3241 100644 --- a/ansible_collections/cisco/ise/plugins/action/trusted_certificate_export_info.py +++ b/ansible_collections/cisco/ise/plugins/action/trusted_certificate_export_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/trusted_certificate_import.py b/ansible_collections/cisco/ise/plugins/action/trusted_certificate_import.py index c36cdf54b..e3b9bf48e 100644 --- a/ansible_collections/cisco/ise/plugins/action/trusted_certificate_import.py +++ b/ansible_collections/cisco/ise/plugins/action/trusted_certificate_import.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function diff --git a/ansible_collections/cisco/ise/plugins/action/trusted_certificate_info.py b/ansible_collections/cisco/ise/plugins/action/trusted_certificate_info.py index b0fd68fb4..ef552c9c6 100644 --- a/ansible_collections/cisco/ise/plugins/action/trusted_certificate_info.py +++ b/ansible_collections/cisco/ise/plugins/action/trusted_certificate_info.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2021, Cisco Systems +# Copyright (c) 2024, Cisco Systems # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -31,7 +31,7 @@ argument_spec.update(dict( size=dict(type="int"), sort=dict(type="str"), sortBy=dict(type="str"), - filter=dict(type="list"), + filter=dict(type="str"), filterType=dict(type="str"), id=dict(type="str"), )) diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app.py b/ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app.py new file mode 100644 index 000000000..953ffeecd --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app.py @@ -0,0 +1,256 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + description=dict(type="str"), + id=dict(type="str"), + name=dict(type="str"), + networkIdentities=dict(type="list"), +)) + +required_if = [ + ("state", "present", ["id", "name"], True), + ("state", "absent", ["id", "name"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class TrustsecNbarApp(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + description=params.get("description"), + id=params.get("id"), + name=params.get("name"), + network_identities=params.get("networkIdentities"), + ) + + def get_object_by_name(self, name): + # NOTICE: Get does not support/work for filter by name with EQ + result = None + gen_items_responses = self.ise.exec( + family="nbar_app", + function="get_nbar_apps_generator", + params={"filter": "name.EQ.{name}".format(name=name)} + ) + try: + for items_response in gen_items_responses: + items = items_response.response['response'] + result = get_dict_result(items, 'name', name) + if result: + return result + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + return result + + def get_object_by_id(self, id): + try: + result = self.ise.exec( + family="nbar_app", + function="get_nbar_app_by_id", + handle_func_exception=False, + params={"id": id} + ).response['response'] + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + if isinstance(result, list) and len(result) > 0: + return result[0] + return result + + def exists(self): + id_exists = False + name_exists = False + prev_obj = None + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + if _id: + prev_obj = self.get_object_by_id(_id) + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("description", "description"), + ("id", "id"), + ("name", "name"), + ("networkIdentities", "network_identities"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="nbar_app", + function="create_nbar_app", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="nbar_app", + function="update_nbar_app_by_id", + params=self.new_object + ).response + return result + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="nbar_app", + function="delete_nbar_app_by_id", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = TrustsecNbarApp(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app_info.py b/ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app_info.py new file mode 100644 index 000000000..f4ff6f4b7 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_nbar_app_info.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + page=dict(type="int"), + size=dict(type="int"), + sort=dict(type="str"), + sortBy=dict(type="str"), + filter=dict(type="str"), + filterType=dict(type="str"), + id=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + page=params.get("page"), + size=params.get("size"), + sort=params.get("sort"), + sort_by=params.get("sortBy"), + filter=params.get("filter"), + filter_type=params.get("filterType"), + id=params.get("id"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if id: + response = ise.exec( + family="nbar_app", + function='get_nbar_app_by_id', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + responses = [] + generator = ise.exec( + family="nbar_app", + function='get_nbar_apps_generator', + params=self.get_object(self._task.args), + ) + try: + for item in generator: + tmp_response = item.response['response'] + if isinstance(tmp_response, list): + responses += tmp_response + else: + responses.append(tmp_response) + response = responses + except (TypeError, AttributeError) as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " The error was: {error}" + " You may want to enable the (ise_debug: True) argument." + ).format(error=e) + ) + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping.py b/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping.py new file mode 100644 index 000000000..55970b9b7 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping.py @@ -0,0 +1,266 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + id=dict(type="str"), + lastUpdate=dict(type="str"), + sgName=dict(type="str"), + sgtId=dict(type="str"), + vnId=dict(type="str"), + vnName=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["id", "sgName", "vnName"], True), + ("state", "absent", ["id", "sgName", "vnName"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class TrustsecSgVnMapping(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + id=params.get("id"), + last_update=params.get("lastUpdate"), + sg_name=params.get("sgName"), + sgt_id=params.get("sgtId"), + vn_id=params.get("vnId"), + vn_name=params.get("vnName"), + ) + + def get_object_by_name(self, sg_name, vn_name): + # NOTICE: Get does not support/work for filter by name with EQ + result = None + gen_items_responses = self.ise.exec( + family="sg_vn_mapping", + function="get_sg_vn_mapping_list_generator" + ) + try: + for items_response in gen_items_responses: + items = items_response.response['response'] + for item in items: + if isinstance(item, dict) and item.get('sgName') == sg_name and item.get('vnName') == vn_name: + result = item + break + if result: + return result + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + return result + + def get_object_by_id(self, id): + try: + result = self.ise.exec( + family="sg_vn_mapping", + function="get_sg_vn_mapping_by_id", + handle_func_exception=False, + params={"id": id} + ).response['response'] + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + if isinstance(result, list) and len(result) > 0: + return result[0] + return result + + def exists(self): + id_exists = False + name_exists = False + prev_obj = None + o_id = self.new_object.get("id") + sg_name = self.new_object.get("sg_name") + vn_name = self.new_object.get("vn_name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and sg_name and vn_name: + prev_obj = self.get_object_by_name(sg_name, vn_name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + if _id: + prev_obj = self.get_object_by_id(_id) + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("id", "id"), + ("lastUpdate", "last_update"), + ("sgName", "sg_name"), + ("sgtId", "sgt_id"), + ("vnId", "vn_id"), + ("vnName", "vn_name"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="sg_vn_mapping", + function="create_sg_vn_mapping", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + sg_name = self.new_object.get("sg_name") + vn_name = self.new_object.get("vn_name") + result = None + if not id: + id_ = self.get_object_by_name(sg_name, vn_name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="sg_vn_mapping", + function="update_sg_vn_mapping", + params=self.new_object + ).response + return result + + def delete(self): + id = self.new_object.get("id") + sg_name = self.new_object.get("sg_name") + vn_name = self.new_object.get("vn_name") + result = None + if not id: + id_ = self.get_object_by_name(sg_name, vn_name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="sg_vn_mapping", + function="delete_sg_vn_mapping", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = TrustsecSgVnMapping(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_create.py b/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_create.py new file mode 100644 index 000000000..b1f0c73a2 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_create.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + payload=dict(type="list"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + payload=params.get("payload"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="sg_vn_mapping", + function="bulk_create_sg_vn_mappings", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_delete.py b/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_delete.py new file mode 100644 index 000000000..04f7b0917 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_delete.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + payload=dict(type="list"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + payload=params.get("payload"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="sg_vn_mapping", + function="bulk_delete_sg_vn_mappings", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_update.py b/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_update.py new file mode 100644 index 000000000..1502caf8c --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_bulk_update.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + payload=dict(type="list"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + payload=params.get("payload"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="sg_vn_mapping", + function="bulk_update_sg_vn_mappings", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_info.py b/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_info.py new file mode 100644 index 000000000..63ac32359 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_sg_vn_mapping_info.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + page=dict(type="int"), + size=dict(type="int"), + sort=dict(type="str"), + sortBy=dict(type="str"), + filter=dict(type="str"), + filterType=dict(type="str"), + id=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + page=params.get("page"), + size=params.get("size"), + sort=params.get("sort"), + sort_by=params.get("sortBy"), + filter=params.get("filter"), + filter_type=params.get("filterType"), + id=params.get("id"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if id: + response = ise.exec( + family="sg_vn_mapping", + function='get_sg_vn_mapping_by_id', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + responses = [] + generator = ise.exec( + family="sg_vn_mapping", + function='get_sg_vn_mapping_list_generator', + params=self.get_object(self._task.args), + ) + try: + for item in generator: + tmp_response = item.response['response'] + if isinstance(tmp_response, list): + responses += tmp_response + else: + responses.append(tmp_response) + response = responses + except (TypeError, AttributeError) as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " The error was: {error}" + " You may want to enable the (ise_debug: True) argument." + ).format(error=e) + ) + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_vn.py b/ansible_collections/cisco/ise/plugins/action/trustsec_vn.py new file mode 100644 index 000000000..3a405f476 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_vn.py @@ -0,0 +1,256 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + additionalAttributes=dict(type="str"), + id=dict(type="str"), + lastUpdate=dict(type="str"), + name=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["id", "name"], True), + ("state", "absent", ["id", "name"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class TrustsecVn(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + additional_attributes=params.get("additionalAttributes"), + id=params.get("id"), + last_update=params.get("lastUpdate"), + name=params.get("name"), + ) + + def get_object_by_name(self, name): + # NOTICE: Get does not support/work for filter by name with EQ + result = None + gen_items_responses = self.ise.exec( + family="virtual_network", + function="get_virtual_networks_generator", + params={"filter": "name.EQ.{name}".format(name=name)} + ) + try: + for items_response in gen_items_responses: + items = items_response.response['response'] + result = get_dict_result(items, 'name', name) + if result: + return result + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + return result + + def get_object_by_id(self, id): + try: + result = self.ise.exec( + family="virtual_network", + function="get_virtual_network_by_id", + handle_func_exception=False, + params={"id": id} + ).response['response'] + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + if isinstance(result, list) and len(result) > 0: + return result[0] + return result + + def exists(self): + id_exists = False + name_exists = False + prev_obj = None + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + if _id: + prev_obj = self.get_object_by_id(_id) + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("additionalAttributes", "additional_attributes"), + ("id", "id"), + ("lastUpdate", "last_update"), + ("name", "name"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="virtual_network", + function="create_virtual_network", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="virtual_network", + function="update_virtual_network_by_id", + params=self.new_object + ).response + return result + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="virtual_network", + function="delete_virtual_network_by_id", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = TrustsecVn(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_create.py b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_create.py new file mode 100644 index 000000000..c2ce4fd33 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_create.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + payload=dict(type="list"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + payload=params.get("payload"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="virtual_network", + function="bulk_create_virtual_networks", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_delete.py b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_delete.py new file mode 100644 index 000000000..a0a169b94 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_delete.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + payload=dict(type="list"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + payload=params.get("payload"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="virtual_network", + function="bulk_delete_virtual_networks", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_update.py b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_update.py new file mode 100644 index 000000000..5ca4c7a67 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_bulk_update.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + payload=dict(type="list"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + payload=params.get("payload"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="virtual_network", + function="bulk_update_virtual_networks", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_vn_info.py b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_info.py new file mode 100644 index 000000000..d7ecfe6b8 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_info.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + page=dict(type="int"), + size=dict(type="int"), + sort=dict(type="str"), + sortBy=dict(type="str"), + filter=dict(type="str"), + filterType=dict(type="str"), + id=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + page=params.get("page"), + size=params.get("size"), + sort=params.get("sort"), + sort_by=params.get("sortBy"), + filter=params.get("filter"), + filter_type=params.get("filterType"), + id=params.get("id"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if id: + response = ise.exec( + family="virtual_network", + function='get_virtual_network_by_id', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + responses = [] + generator = ise.exec( + family="virtual_network", + function='get_virtual_networks_generator', + params=self.get_object(self._task.args), + ) + try: + for item in generator: + tmp_response = item.response['response'] + if isinstance(tmp_response, list): + responses += tmp_response + else: + responses.append(tmp_response) + response = responses + except (TypeError, AttributeError) as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " The error was: {error}" + " You may want to enable the (ise_debug: True) argument." + ).format(error=e) + ) + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping.py b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping.py new file mode 100644 index 000000000..ac4eb4764 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping.py @@ -0,0 +1,268 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + id=dict(type="str"), + isData=dict(type="bool"), + isDefaultVlan=dict(type="bool"), + lastUpdate=dict(type="str"), + maxValue=dict(type="int"), + name=dict(type="str"), + vnId=dict(type="str"), + vnName=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["id", "name"], True), + ("state", "absent", ["id", "name"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class TrustsecVnVlanMapping(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + id=params.get("id"), + is_data=params.get("isData"), + is_default_vlan=params.get("isDefaultVlan"), + last_update=params.get("lastUpdate"), + max_value=params.get("maxValue"), + name=params.get("name"), + vn_id=params.get("vnId"), + vn_name=params.get("vnName"), + ) + + def get_object_by_name(self, name): + # NOTICE: Get does not support/work for filter by name with EQ + result = None + gen_items_responses = self.ise.exec( + family="vn_vlan_mapping", + function="get_vn_vlan_mapping_list_generator", + params={"filter": "name.EQ.{name}".format(name=name)} + ) + try: + for items_response in gen_items_responses: + items = items_response.response['response'] + result = get_dict_result(items, 'name', name) + if result: + return result + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + return result + + def get_object_by_id(self, id): + try: + result = self.ise.exec( + family="vn_vlan_mapping", + function="get_vn_vlan_mapping_by_id", + handle_func_exception=False, + params={"id": id} + ).response['response'] + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + if isinstance(result, list) and len(result) > 0: + return result[0] + return result + + def exists(self): + id_exists = False + name_exists = False + prev_obj = None + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + if _id: + prev_obj = self.get_object_by_id(_id) + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("id", "id"), + ("isData", "is_data"), + ("isDefaultVlan", "is_default_vlan"), + ("lastUpdate", "last_update"), + ("maxValue", "max_value"), + ("name", "name"), + ("vnId", "vn_id"), + ("vnName", "vn_name"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="vn_vlan_mapping", + function="create_vn_vlan_mapping", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="vn_vlan_mapping", + function="update_vn_vlan_mapping", + params=self.new_object + ).response + return result + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="vn_vlan_mapping", + function="delete_vn_vlan_mapping", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = TrustsecVnVlanMapping(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_create.py b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_create.py new file mode 100644 index 000000000..3af9a3182 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_create.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + payload=dict(type="list"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + payload=params.get("payload"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="vn_vlan_mapping", + function="bulk_create_vn_vlan_mappings", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_delete.py b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_delete.py new file mode 100644 index 000000000..ab269311f --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_delete.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + payload=dict(type="list"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + payload=params.get("payload"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="vn_vlan_mapping", + function="bulk_delete_vn_vlan_mappings", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_update.py b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_update.py new file mode 100644 index 000000000..d47de7a4b --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_bulk_update.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + payload=dict(type="list"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + payload=params.get("payload"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="vn_vlan_mapping", + function="bulk_update_vn_vlan_mappings", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_info.py b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_info.py new file mode 100644 index 000000000..dbc8442a0 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/trustsec_vn_vlan_mapping_info.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + page=dict(type="int"), + size=dict(type="int"), + sort=dict(type="str"), + sortBy=dict(type="str"), + filter=dict(type="str"), + filterType=dict(type="str"), + id=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + page=params.get("page"), + size=params.get("size"), + sort=params.get("sort"), + sort_by=params.get("sortBy"), + filter=params.get("filter"), + filter_type=params.get("filterType"), + id=params.get("id"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if id: + response = ise.exec( + family="vn_vlan_mapping", + function='get_vn_vlan_mapping_by_id', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + responses = [] + generator = ise.exec( + family="vn_vlan_mapping", + function='get_vn_vlan_mapping_list_generator', + params=self.get_object(self._task.args), + ) + try: + for item in generator: + tmp_response = item.response['response'] + if isinstance(tmp_response, list): + responses += tmp_response + else: + responses.append(tmp_response) + response = responses + except (TypeError, AttributeError) as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " The error was: {error}" + " You may want to enable the (ise_debug: True) argument." + ).format(error=e) + ) + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/upgrade_proceed.py b/ansible_collections/cisco/ise/plugins/action/upgrade_proceed.py new file mode 100644 index 000000000..7a44b3489 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/upgrade_proceed.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present"]), + hostnames=dict(type="list"), + preCheckReportID=dict(type="str"), + upgradeType=dict(type="str"), +)) + +required_if = [ + ("state", "present", [], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class UpgradeProceed(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + hostnames=params.get("hostnames"), + pre_check_report_id=params.get("preCheckReportID"), + upgrade_type=params.get("upgradeType"), + ) + + def get_object_by_name(self, name): + # NOTICE: Does not have a get by name method or it is in another action + result = None + items = self.ise.exec( + family="fullupgrade", + function="" + ).response.get('response', []) + result = get_dict_result(items, 'name', name) + return result + + def get_object_by_id(self, id): + # NOTICE: Does not have a get by id method or it is in another action + result = None + return result + + def exists(self): + prev_obj = None + id_exists = False + name_exists = False + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("hostnames", "hostnames"), + ("preCheckReportID", "pre_check_report_id"), + ("upgradeType", "upgrade_type"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="fullupgrade", + function="initiate_upgrade_on_p_p_a_n", + params=self.new_object, + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = UpgradeProceed(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + response = prev_obj + ise.object_present_and_different() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/upgrade_proceed_info.py b/ansible_collections/cisco/ise/plugins/action/upgrade_proceed_info.py new file mode 100644 index 000000000..e8487e84b --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/upgrade_proceed_info.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if not name and not id: + # NOTICE: Does not have a get all method or it is in another action + response = None + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel.py b/ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel.py new file mode 100644 index 000000000..90070b06e --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present"]), + hostnames=dict(type="list"), + preCheckReportID=dict(type="str"), + upgradeType=dict(type="str"), +)) + +required_if = [ + ("state", "present", [], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class UpgradestageCancel(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + hostnames=params.get("hostnames"), + pre_check_report_id=params.get("preCheckReportID"), + upgrade_type=params.get("upgradeType"), + ) + + def get_object_by_name(self, name): + # NOTICE: Does not have a get by name method or it is in another action + result = None + items = self.ise.exec( + family="fullupgrade", + function="stage_status" + ).response['response'] + result = get_dict_result(items, 'name', name) + return result + + def get_object_by_id(self, id): + # NOTICE: Does not have a get by id method or it is in another action + result = None + return result + + def exists(self): + prev_obj = None + id_exists = False + name_exists = False + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("hostnames", "hostnames"), + ("preCheckReportID", "pre_check_report_id"), + ("upgradeType", "upgrade_type"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="fullupgrade", + function="cancel_staging_on_p_p_a_n", + params=self.new_object, + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = UpgradestageCancel(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + response = prev_obj + ise.object_present_and_different() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel_info.py b/ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel_info.py new file mode 100644 index 000000000..dafbeb1de --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/upgrade_stage_cancel_info.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + preCheckReportID=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + pre_check_report_id=params.get("preCheckReportID"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if not name and not id: + response = ise.exec( + family="fullupgrade", + function='stage_status', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/upgrade_stage_start.py b/ansible_collections/cisco/ise/plugins/action/upgrade_stage_start.py new file mode 100644 index 000000000..9718de17b --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/upgrade_stage_start.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present"]), + hostnames=dict(type="list"), + preCheckReportID=dict(type="str"), + reTrigger=dict(type="bool"), + upgradeType=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class UpgradestageStart(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + hostnames=params.get("hostnames"), + pre_check_report_id=params.get("preCheckReportID"), + re_trigger=params.get("reTrigger"), + upgrade_type=params.get("upgradeType"), + ) + + def get_object_by_name(self, name): + # NOTICE: Does not have a get by name method or it is in another action + result = None + items = self.ise.exec( + family="fullupgrade", + function="stage_status" + ).response['response'] + result = get_dict_result(items, 'name', name) + return result + + def get_object_by_id(self, id): + # NOTICE: Does not have a get by id method or it is in another action + result = None + return result + + def exists(self): + prev_obj = None + id_exists = False + name_exists = False + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("hostnames", "hostnames"), + ("preCheckReportID", "pre_check_report_id"), + ("reTrigger", "re_trigger"), + ("upgradeType", "upgrade_type"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="fullupgrade", + function="initiate_staging_on_p_p_a_n", + params=self.new_object, + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = UpgradestageStart(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + response = prev_obj + ise.object_present_and_different() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/upgrade_stage_start_info.py b/ansible_collections/cisco/ise/plugins/action/upgrade_stage_start_info.py new file mode 100644 index 000000000..dafbeb1de --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/upgrade_stage_start_info.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + preCheckReportID=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + pre_check_report_id=params.get("preCheckReportID"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("id") + name = self._task.args.get("name") + if not name and not id: + response = ise.exec( + family="fullupgrade", + function='stage_status', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/user_equipment.py b/ansible_collections/cisco/ise/plugins/action/user_equipment.py new file mode 100644 index 000000000..ef1c4578f --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/user_equipment.py @@ -0,0 +1,253 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, + ise_compare_equality, + get_dict_result, +) +from ansible_collections.cisco.ise.plugins.plugin_utils.exceptions import ( + InconsistentParameters, +) + +# Get common arguments specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + state=dict(type="str", default="present", choices=["present", "absent"]), + description=dict(type="str"), + deviceGroup=dict(type="str"), + imei=dict(type="str"), + userEquipmentId=dict(type="str"), +)) + +required_if = [ + ("state", "present", ["userEquipmentId"], True), + ("state", "absent", ["userEquipmentId"], True), +] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class UserEquipment(object): + def __init__(self, params, ise): + self.ise = ise + self.new_object = dict( + description=params.get("description"), + device_group=params.get("deviceGroup"), + imei=params.get("imei"), + user_equipment_id=params.get("userEquipmentId"), + ) + + def get_object_by_name(self, name): + # NOTICE: Get does not support/work for filter by name with EQ + result = None + gen_items_responses = self.ise.exec( + family="user_equipment", + function="get_user_equipments_generator" + ) + try: + for items_response in gen_items_responses: + items = items_response.response.get('response', []) + result = get_dict_result(items, 'name', name) + if result: + return result + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + return result + + def get_object_by_id(self, id): + try: + result = self.ise.exec( + family="user_equipment", + function="get_user_equipment_by_id", + handle_func_exception=False, + params={"id": id} + ).response['response'] + except (TypeError, AttributeError) as e: + self.ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception: + result = None + return result + + def exists(self): + id_exists = False + name_exists = False + prev_obj = None + o_id = self.new_object.get("id") + name = self.new_object.get("name") + if o_id: + prev_obj = self.get_object_by_id(o_id) + id_exists = prev_obj is not None and isinstance(prev_obj, dict) + if not id_exists and name: + prev_obj = self.get_object_by_name(name) + name_exists = prev_obj is not None and isinstance(prev_obj, dict) + if name_exists: + _id = prev_obj.get("id") + if id_exists and name_exists and o_id != _id: + raise InconsistentParameters("The 'id' and 'name' params don't refer to the same object") + if _id: + prev_obj = self.get_object_by_id(_id) + it_exists = prev_obj is not None and isinstance(prev_obj, dict) + return (it_exists, prev_obj) + + def requires_update(self, current_obj): + requested_obj = self.new_object + + obj_params = [ + ("description", "description"), + ("deviceGroup", "device_group"), + ("imei", "imei"), + ("userEquipmentId", "user_equipment_id"), + ] + # Method 1. Params present in request (Ansible) obj are the same as the current (ISE) params + # If any does not have eq params, it requires update + return any(not ise_compare_equality(current_obj.get(ise_param), + requested_obj.get(ansible_param)) + for (ise_param, ansible_param) in obj_params) + + def create(self): + result = self.ise.exec( + family="user_equipment", + function="create_user_equipment", + params=self.new_object, + ).response + return result + + def update(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="user_equipment", + function="update_user_equipment", + params=self.new_object + ).response + return result + + def delete(self): + id = self.new_object.get("id") + name = self.new_object.get("name") + result = None + if not id: + id_ = self.get_object_by_name(name).get("id") + self.new_object.update(dict(id=id_)) + result = self.ise.exec( + family="user_equipment", + function="delete_user_equipment", + params=self.new_object + ).response + return result + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + obj = UserEquipment(self._task.args, ise) + + state = self._task.args.get("state") + + response = None + + if state == "present": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + if obj.requires_update(prev_obj): + ise_update_response = obj.update() + self._result.update(dict(ise_update_response=ise_update_response)) + (obj_exists, updated_obj) = obj.exists() + response = updated_obj + ise.object_updated() + else: + response = prev_obj + ise.object_already_present() + else: + ise_create_response = obj.create() + (obj_exists, created_obj) = obj.exists() + response = created_obj + ise.object_created() + + elif state == "absent": + (obj_exists, prev_obj) = obj.exists() + if obj_exists: + obj.delete() + response = prev_obj + ise.object_deleted() + else: + ise.object_already_absent() + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/user_equipment_bulk.py b/ansible_collections/cisco/ise/plugins/action/user_equipment_bulk.py new file mode 100644 index 000000000..5ed919fe7 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/user_equipment_bulk.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + operation=dict(type="str"), + ItemList=dict(type="list"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + operation=params.get("operation"), + item_list=params.get("ItemList"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="user_equipment", + function="bulk_user_equipment_operation", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/user_equipment_csv.py b/ansible_collections/cisco/ise/plugins/action/user_equipment_csv.py new file mode 100644 index 000000000..afb8df4e3 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/user_equipment_csv.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = False + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + ise = ISESDK(params=self._task.args) + + response = ise.exec( + family="user_equipment", + function="create_user_equipments_from_c_s_v", + params=self.get_object(self._task.args), + ).response + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/user_equipment_imei_info.py b/ansible_collections/cisco/ise/plugins/action/user_equipment_imei_info.py new file mode 100644 index 000000000..d501ddb5b --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/user_equipment_imei_info.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + imei=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + imei=params.get("imei"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("imei") + name = self._task.args.get("name") + if id: + response = ise.exec( + family="user_equipment", + function='get_user_equipment_by_i_m_e_i', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + # NOTICE: Does not have a get all method or it is in another action + response = None + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/user_equipment_info.py b/ansible_collections/cisco/ise/plugins/action/user_equipment_info.py new file mode 100644 index 000000000..94879efff --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/user_equipment_info.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + page=dict(type="int"), + size=dict(type="int"), + filter=dict(type="str"), + filterType=dict(type="str"), + sort=dict(type="str"), + sortBy=dict(type="str"), + userEquipmentId=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + page=params.get("page"), + size=params.get("size"), + filter=params.get("filter"), + filter_type=params.get("filterType"), + sort=params.get("sort"), + sort_by=params.get("sortBy"), + user_equipment_id=params.get("userEquipmentId"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response=[])) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("userEquipmentId") + name = self._task.args.get("name") + if id: + response = ise.exec( + family="user_equipment", + function='get_user_equipment_by_id', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + responses = [] + generator = ise.exec( + family="user_equipment", + function='get_user_equipments_generator', + params=self.get_object(self._task.args), + ) + try: + for item in generator: + tmp_response = item.response['response'] + if isinstance(tmp_response, list): + responses += tmp_response + else: + responses.append(tmp_response) + response = responses + except (TypeError, AttributeError) as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " Check the configuration of your API Settings and API Gateway settings on your ISE server." + " This collection assumes that the API Gateway, the ERS APIs and OpenAPIs are enabled." + " You may want to enable the (ise_debug: True) argument." + " The error was: {error}" + ).format(error=e) + ) + except Exception as e: + ise.fail_json( + msg=( + "An error occured when executing operation." + " The error was: {error}" + " You may want to enable the (ise_debug: True) argument." + ).format(error=e) + ) + + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/action/user_equipment_subscriber_info.py b/ansible_collections/cisco/ise/plugins/action/user_equipment_subscriber_info.py new file mode 100644 index 000000000..6a4e91fa3 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/action/user_equipment_subscriber_info.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2024, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type +from ansible.plugins.action import ActionBase + +try: + from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( + AnsibleArgSpecValidator, + ) +except ImportError: + ANSIBLE_UTILS_IS_INSTALLED = False +else: + ANSIBLE_UTILS_IS_INSTALLED = True +from ansible.errors import AnsibleActionFail +from ansible_collections.cisco.ise.plugins.plugin_utils.ise import ( + ISESDK, + ise_argument_spec, +) + +# Get common arguements specification +argument_spec = ise_argument_spec() +# Add arguments specific for this module +argument_spec.update(dict( + subscriberId=dict(type="str"), +)) + +required_if = [] +required_one_of = [] +mutually_exclusive = [] +required_together = [] + + +class ActionModule(ActionBase): + def __init__(self, *args, **kwargs): + if not ANSIBLE_UTILS_IS_INSTALLED: + raise AnsibleActionFail("ansible.utils is not installed. Execute 'ansible-galaxy collection install ansible.utils'") + super(ActionModule, self).__init__(*args, **kwargs) + self._supports_async = False + self._supports_check_mode = True + self._result = None + + # Checks the supplied parameters against the argument spec for this module + def _check_argspec(self): + aav = AnsibleArgSpecValidator( + data=self._task.args, + schema=dict(argument_spec=argument_spec), + schema_format="argspec", + schema_conditionals=dict( + required_if=required_if, + required_one_of=required_one_of, + mutually_exclusive=mutually_exclusive, + required_together=required_together, + ), + name=self._task.action, + ) + valid, errors, self._task.args = aav.validate() + if not valid: + raise AnsibleActionFail(errors) + + def get_object(self, params): + new_object = dict( + subscriber_id=params.get("subscriberId"), + ) + return new_object + + def run(self, tmp=None, task_vars=None): + self._task.diff = False + self._result = super(ActionModule, self).run(tmp, task_vars) + self._result["changed"] = False + self._check_argspec() + + self._result.update(dict(ise_response={})) + + ise = ISESDK(params=self._task.args) + + id = self._task.args.get("subscriberId") + name = self._task.args.get("name") + if id: + response = ise.exec( + family="user_equipment", + function='get_user_equipments_by_subscriber_id', + params=self.get_object(self._task.args) + ).response['response'] + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result + if not name and not id: + # NOTICE: Does not have a get all method or it is in another action + response = None + self._result.update(dict(ise_response=response)) + self._result.update(ise.exit_json()) + return self._result diff --git a/ansible_collections/cisco/ise/plugins/modules/aci_bindings_info.py b/ansible_collections/cisco/ise/plugins/modules/aci_bindings_info.py index b8d1afa37..75aca0860 100644 --- a/ansible_collections/cisco/ise/plugins/modules/aci_bindings_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/aci_bindings_info.py @@ -43,7 +43,7 @@ options: elements: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/aci_settings.py b/ansible_collections/cisco/ise/plugins/modules/aci_settings.py index b338f5888..eda39cd12 100644 --- a/ansible_collections/cisco/ise/plugins/modules/aci_settings.py +++ b/ansible_collections/cisco/ise/plugins/modules/aci_settings.py @@ -87,7 +87,7 @@ options: description: ACI Settings's untaggedPacketIepgName. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/aci_settings_info.py b/ansible_collections/cisco/ise/plugins/modules/aci_settings_info.py index 61bad7bbe..4742f614a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/aci_settings_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/aci_settings_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/aci_test_connectivity.py b/ansible_collections/cisco/ise/plugins/modules/aci_test_connectivity.py index 61d13bf89..ea52c4b98 100644 --- a/ansible_collections/cisco/ise/plugins/modules/aci_test_connectivity.py +++ b/ansible_collections/cisco/ise/plugins/modules/aci_test_connectivity.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directories_info.py b/ansible_collections/cisco/ise/plugins/modules/active_directories_info.py new file mode 100644 index 000000000..e99e2b1d4 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/active_directories_info.py @@ -0,0 +1,56 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: active_directories_info +short_description: Information module for Active Directories Info +description: +- Get all Active Directories Info. +- Duo-IdentitySync - Get the list of all configured Active Directories. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: {} +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + active_directories.ActiveDirectories.get_active_directories, + + - Paths used are + get /api/v1/duo-identitysync/activedirectories, + +""" + +EXAMPLES = r""" +- name: Get all Active Directories Info + cisco.ise.active_directories_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "directoryID": "string", + "domain": "string", + "name": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directory.py b/ansible_collections/cisco/ise/plugins/modules/active_directory.py index 0cc8e53ec..6707c8780 100644 --- a/ansible_collections/cisco/ise/plugins/modules/active_directory.py +++ b/ansible_collections/cisco/ise/plugins/modules/active_directory.py @@ -191,7 +191,7 @@ options: alphanumeric and .-_/\\ characters. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directory_add_groups.py b/ansible_collections/cisco/ise/plugins/modules/active_directory_add_groups.py index 729454376..7f6834d44 100644 --- a/ansible_collections/cisco/ise/plugins/modules/active_directory_add_groups.py +++ b/ansible_collections/cisco/ise/plugins/modules/active_directory_add_groups.py @@ -190,7 +190,7 @@ options: alphanumeric and .-_/\\ characters. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directory_groups_by_domain_info.py b/ansible_collections/cisco/ise/plugins/modules/active_directory_groups_by_domain_info.py index f0925183c..144c00021 100644 --- a/ansible_collections/cisco/ise/plugins/modules/active_directory_groups_by_domain_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/active_directory_groups_by_domain_info.py @@ -32,7 +32,7 @@ options: type: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directory_info.py b/ansible_collections/cisco/ise/plugins/modules/active_directory_info.py index d8e4db519..2a69857aa 100644 --- a/ansible_collections/cisco/ise/plugins/modules/active_directory_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/active_directory_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directory_is_user_member_of_group_info.py b/ansible_collections/cisco/ise/plugins/modules/active_directory_is_user_member_of_group_info.py index 5fbe56eb9..0b000aa5f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/active_directory_is_user_member_of_group_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/active_directory_is_user_member_of_group_info.py @@ -32,7 +32,7 @@ options: type: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directory_join_domain.py b/ansible_collections/cisco/ise/plugins/modules/active_directory_join_domain.py index 6782bb235..7d00c4c14 100644 --- a/ansible_collections/cisco/ise/plugins/modules/active_directory_join_domain.py +++ b/ansible_collections/cisco/ise/plugins/modules/active_directory_join_domain.py @@ -31,7 +31,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directory_join_domain_with_all_nodes.py b/ansible_collections/cisco/ise/plugins/modules/active_directory_join_domain_with_all_nodes.py index 6dc4da875..5516d3890 100644 --- a/ansible_collections/cisco/ise/plugins/modules/active_directory_join_domain_with_all_nodes.py +++ b/ansible_collections/cisco/ise/plugins/modules/active_directory_join_domain_with_all_nodes.py @@ -31,7 +31,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain.py b/ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain.py index 4f1e46c87..d3487f8a2 100644 --- a/ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain.py +++ b/ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain.py @@ -31,7 +31,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain_with_all_nodes.py b/ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain_with_all_nodes.py index 7359c6151..ff9ddd31f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain_with_all_nodes.py +++ b/ansible_collections/cisco/ise/plugins/modules/active_directory_leave_domain_with_all_nodes.py @@ -31,7 +31,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directory_trusted_domains_info.py b/ansible_collections/cisco/ise/plugins/modules/active_directory_trusted_domains_info.py index 6974288ac..f6e1070fc 100644 --- a/ansible_collections/cisco/ise/plugins/modules/active_directory_trusted_domains_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/active_directory_trusted_domains_info.py @@ -21,7 +21,7 @@ options: - Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/active_directory_user_groups_info.py b/ansible_collections/cisco/ise/plugins/modules/active_directory_user_groups_info.py index 2df9027f7..735428bc6 100644 --- a/ansible_collections/cisco/ise/plugins/modules/active_directory_user_groups_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/active_directory_user_groups_info.py @@ -32,7 +32,7 @@ options: type: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/ad_groups_info.py b/ansible_collections/cisco/ise/plugins/modules/ad_groups_info.py new file mode 100644 index 000000000..25e0fa705 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/ad_groups_info.py @@ -0,0 +1,60 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: ad_groups_info +short_description: Information module for Ad Groups Info +description: +- Get Ad Groups Info by id. +- Duo-IdentitySync - Get the list of all AD groups for the specified Active Directory. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + activeDirectory: + description: + - ActiveDirectory path parameter. List of AD groups for the specified Active Directory. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + ad_groups.ADGroups.get_adgroups, + + - Paths used are + get /api/v1/duo-identitysync/adgroups/{activeDirectory}, + +""" + +EXAMPLES = r""" +- name: Get Ad Groups Info by id + cisco.ise.ad_groups_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + activeDirectory: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "name": "string", + "source": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/admin_user_info.py b/ansible_collections/cisco/ise/plugins/modules/admin_user_info.py index cf793e354..ab75e52ba 100644 --- a/ansible_collections/cisco/ise/plugins/modules/admin_user_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/admin_user_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/allowed_protocols.py b/ansible_collections/cisco/ise/plugins/modules/allowed_protocols.py index 88fa594b4..c2da203c9 100644 --- a/ansible_collections/cisco/ise/plugins/modules/allowed_protocols.py +++ b/ansible_collections/cisco/ise/plugins/modules/allowed_protocols.py @@ -310,7 +310,7 @@ options: type: bool type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/allowed_protocols_info.py b/ansible_collections/cisco/ise/plugins/modules/allowed_protocols_info.py index 84b86e5e9..43934d89d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/allowed_protocols_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/allowed_protocols_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_apply.py b/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_apply.py index f1fde8079..9edacf089 100644 --- a/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_apply.py +++ b/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_apply.py @@ -28,7 +28,7 @@ options: type: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_bulk_monitor_status_info.py index 2615a8aff..2a5917433 100644 --- a/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_bulk_request.py index 3e9037107..0aae0261b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_bulk_request.py @@ -23,7 +23,7 @@ options: description: ANC Endpoint Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_clear.py b/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_clear.py index 1117dafa2..442410997 100644 --- a/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_clear.py +++ b/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_clear.py @@ -28,7 +28,7 @@ options: type: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_info.py b/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_info.py index 5a58c8f22..394a4f202 100644 --- a/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/anc_endpoint_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/anc_policy.py b/ansible_collections/cisco/ise/plugins/modules/anc_policy.py index a49bc949f..3bb5528b4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/anc_policy.py +++ b/ansible_collections/cisco/ise/plugins/modules/anc_policy.py @@ -33,7 +33,7 @@ options: description: ANC Policy's name. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/anc_policy_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/anc_policy_bulk_monitor_status_info.py index 285529a89..79e991a4c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/anc_policy_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/anc_policy_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/anc_policy_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/anc_policy_bulk_request.py index ea2e59efc..b5770270a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/anc_policy_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/anc_policy_bulk_request.py @@ -23,7 +23,7 @@ options: description: ANC Policy Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/anc_policy_info.py b/ansible_collections/cisco/ise/plugins/modules/anc_policy_info.py index 21051ffdf..6ba8e7f34 100644 --- a/ansible_collections/cisco/ise/plugins/modules/anc_policy_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/anc_policy_info.py @@ -71,7 +71,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/authorization_profile.py b/ansible_collections/cisco/ise/plugins/modules/authorization_profile.py index 75587110f..86944f7bc 100644 --- a/ansible_collections/cisco/ise/plugins/modules/authorization_profile.py +++ b/ansible_collections/cisco/ise/plugins/modules/authorization_profile.py @@ -174,7 +174,7 @@ options: type: str type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/authorization_profile_info.py b/ansible_collections/cisco/ise/plugins/modules/authorization_profile_info.py index 2b0f7bfcb..6004bdd10 100644 --- a/ansible_collections/cisco/ise/plugins/modules/authorization_profile_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/authorization_profile_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/backup_cancel.py b/ansible_collections/cisco/ise/plugins/modules/backup_cancel.py index 11176958d..030e5da1a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/backup_cancel.py +++ b/ansible_collections/cisco/ise/plugins/modules/backup_cancel.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Backup And Restore diff --git a/ansible_collections/cisco/ise/plugins/modules/backup_config.py b/ansible_collections/cisco/ise/plugins/modules/backup_config.py index ef5a51df3..c68f4baf1 100644 --- a/ansible_collections/cisco/ise/plugins/modules/backup_config.py +++ b/ansible_collections/cisco/ise/plugins/modules/backup_config.py @@ -31,7 +31,7 @@ options: get copied. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Backup And Restore diff --git a/ansible_collections/cisco/ise/plugins/modules/backup_last_status_info.py b/ansible_collections/cisco/ise/plugins/modules/backup_last_status_info.py index 7d22a9314..79f888957 100644 --- a/ansible_collections/cisco/ise/plugins/modules/backup_last_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/backup_last_status_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Backup And Restore diff --git a/ansible_collections/cisco/ise/plugins/modules/backup_restore.py b/ansible_collections/cisco/ise/plugins/modules/backup_restore.py index 908059a00..b660f3683 100644 --- a/ansible_collections/cisco/ise/plugins/modules/backup_restore.py +++ b/ansible_collections/cisco/ise/plugins/modules/backup_restore.py @@ -30,7 +30,7 @@ options: true, false. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Backup And Restore diff --git a/ansible_collections/cisco/ise/plugins/modules/backup_schedule_config.py b/ansible_collections/cisco/ise/plugins/modules/backup_schedule_config.py index e994d04d2..85862ba60 100644 --- a/ansible_collections/cisco/ise/plugins/modules/backup_schedule_config.py +++ b/ansible_collections/cisco/ise/plugins/modules/backup_schedule_config.py @@ -57,7 +57,7 @@ options: description: Backup Schedule Config's weekDay. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Backup And Restore diff --git a/ansible_collections/cisco/ise/plugins/modules/backup_schedule_config_update.py b/ansible_collections/cisco/ise/plugins/modules/backup_schedule_config_update.py index a8ce5bb2a..805d07846 100644 --- a/ansible_collections/cisco/ise/plugins/modules/backup_schedule_config_update.py +++ b/ansible_collections/cisco/ise/plugins/modules/backup_schedule_config_update.py @@ -57,7 +57,7 @@ options: description: Backup Schedule Config Update's weekDay. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Backup And Restore diff --git a/ansible_collections/cisco/ise/plugins/modules/bind_signed_certificate.py b/ansible_collections/cisco/ise/plugins/modules/bind_signed_certificate.py index 1dcccb2b8..107e54c01 100644 --- a/ansible_collections/cisco/ise/plugins/modules/bind_signed_certificate.py +++ b/ansible_collections/cisco/ise/plugins/modules/bind_signed_certificate.py @@ -68,7 +68,7 @@ options: description: Validate Certificate Extensions. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/byod_portal.py b/ansible_collections/cisco/ise/plugins/modules/byod_portal.py index b6073d0f9..d6af22709 100644 --- a/ansible_collections/cisco/ise/plugins/modules/byod_portal.py +++ b/ansible_collections/cisco/ise/plugins/modules/byod_portal.py @@ -259,7 +259,7 @@ options: type: dict type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/byod_portal_info.py b/ansible_collections/cisco/ise/plugins/modules/byod_portal_info.py index 530eae753..0de5b0440 100644 --- a/ansible_collections/cisco/ise/plugins/modules/byod_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/byod_portal_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/certificate_profile.py b/ansible_collections/cisco/ise/plugins/modules/certificate_profile.py index da2bb18b7..18e506ca4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/certificate_profile.py +++ b/ansible_collections/cisco/ise/plugins/modules/certificate_profile.py @@ -51,7 +51,7 @@ options: - an option only in AD). type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/certificate_profile_info.py b/ansible_collections/cisco/ise/plugins/modules/certificate_profile_info.py index ff5eac756..da184c0bd 100644 --- a/ansible_collections/cisco/ise/plugins/modules/certificate_profile_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/certificate_profile_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/certificate_template_info.py b/ansible_collections/cisco/ise/plugins/modules/certificate_template_info.py index 580e85c1a..249050b77 100644 --- a/ansible_collections/cisco/ise/plugins/modules/certificate_template_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/certificate_template_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/configuration.py b/ansible_collections/cisco/ise/plugins/modules/configuration.py index 1c551c299..130edb727 100644 --- a/ansible_collections/cisco/ise/plugins/modules/configuration.py +++ b/ansible_collections/cisco/ise/plugins/modules/configuration.py @@ -24,7 +24,7 @@ options: will be set to false if enableEPO flag is false. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/configuration_info.py b/ansible_collections/cisco/ise/plugins/modules/configuration_info.py index 6a942dedf..304124df4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/configuration_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/configuration_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/connector_config.py b/ansible_collections/cisco/ise/plugins/modules/connector_config.py deleted file mode 100644 index b374012b1..000000000 --- a/ansible_collections/cisco/ise/plugins/modules/connector_config.py +++ /dev/null @@ -1,305 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# Copyright (c) 2021, Cisco Systems -# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) - -DOCUMENTATION = r""" ---- -module: connector_config -short_description: Resource module for Connector Config -description: -- Manage operations create, update and delete of the resource Connector Config. -- EDDA - Configure connectorconfig information. -- EDDA - Delete Configure connectorConfig information based on ConnectorName. -- EDDA - update Configure connectorConfig information based on ConnectorName. -version_added: '2.8.0' -extends_documentation_fragment: - - cisco.ise.module -author: Rafael Campos (@racampos) -options: - additionalProperties: - description: Connector Config's additionalProperties. - type: dict - attributes: - description: ConnectorName. - suboptions: - attributeMapping: - description:

    List of feature names

    . - elements: dict - suboptions: - dictionaryAttribute: - description: Connector Config's dictionaryAttribute. - type: str - includeInDictionary: - description: IncludeInDictionary flag. - type: bool - jsonAttribute: - description: Connector Config's jsonAttribute. - type: str - type: list - bulkUniqueIdentifier: - description: Uniqueness to identify. - type: str - topLevelObject: - description: Root level of json. - type: str - uniqueIdentifier: - description: Uniqueness to identify. - type: str - versionIdentifier: - description: Version uniqueness to identify. - type: str - type: dict - connectorName: - description: ConnectorName. - type: str - connectorType: - description: Connector Type list. - type: str - deltasyncSchedule: - description: Connector Config's deltasyncSchedule. - suboptions: - interval: - description: Run at interval (hours). - type: int - intervalUnit: - description: Interval Units. - type: str - startDate: - description: Start date and Time. - type: str - type: dict - description: - description: Description. - type: str - enabled: - description: Enabled flag. - type: bool - fullsyncSchedule: - description: Connector Config's fullsyncSchedule. - suboptions: - interval: - description: Run at interval (hours). - type: int - intervalUnit: - description: Interval Units. - type: str - startDate: - description: Start date and Time. - type: str - type: dict - protocol: - description: Protocol. - type: str - skipCertificateValidations: - description: SkipCertificateValidations flag. - type: bool - url: - description: Connector Config's url. - suboptions: - accessKey: - description: Accesskey. - type: str - authenticationType: - description: Authentication Type list. - type: str - bulkUrl: - description: BulkUrl. - type: str - clientId: - description: Clientid. - type: str - clientSecret: - description: Clientsecret. - type: str - incrementalUrl: - description: IncrementalUrl. - type: str - password: - description: Password. - type: str - refreshToken: - description: Refreshtoken. - type: str - tokenHeader: - description: TokenHeader. - type: str - userName: - description: UserName. - type: str - type: dict -requirements: -- ciscoisesdk >= 2.0.1 -- python >= 3.5 -notes: - - SDK Method used are - edda.Edda.create_connector_config, - edda.Edda.delete_connector_config_by_connector_name, - edda.Edda.update_connector_config_by_connector_name, - - - Paths used are - post /api/v1/edda/connector-config, - delete /api/v1/edda/connector-config/{connectorName}, - put /api/v1/edda/connector-config/{connectorName}, - -""" - -EXAMPLES = r""" -- name: Create - cisco.ise.connector_config: - ise_hostname: "{{ise_hostname}}" - ise_username: "{{ise_username}}" - ise_password: "{{ise_password}}" - ise_verify: "{{ise_verify}}" - state: present - additionalProperties: {} - attributes: - attributeMapping: - - dictionaryAttribute: string - includeInDictionary: true - jsonAttribute: string - bulkUniqueIdentifier: string - topLevelObject: string - uniqueIdentifier: string - versionIdentifier: string - connectorName: string - connectorType: string - deltasyncSchedule: - interval: 0 - intervalUnit: string - startDate: string - description: string - enabled: true - fullsyncSchedule: - interval: 0 - intervalUnit: string - startDate: string - protocol: string - skipCertificateValidations: true - url: - accessKey: string - authenticationType: string - bulkUrl: string - clientId: string - clientSecret: string - incrementalUrl: string - password: string - refreshToken: string - tokenHeader: string - userName: string - -- name: Update by name - cisco.ise.connector_config: - ise_hostname: "{{ise_hostname}}" - ise_username: "{{ise_username}}" - ise_password: "{{ise_password}}" - ise_verify: "{{ise_verify}}" - state: present - additionalProperties: {} - attributes: - attributeMapping: - - dictionaryAttribute: string - includeInDictionary: true - jsonAttribute: string - bulkUniqueIdentifier: string - topLevelObject: string - uniqueIdentifier: string - versionIdentifier: string - connectorName: string - connectorType: string - deltasyncSchedule: - interval: 0 - intervalUnit: string - startDate: string - description: string - enabled: true - fullsyncSchedule: - interval: 0 - intervalUnit: string - startDate: string - protocol: string - skipCertificateValidations: true - url: - accessKey: string - authenticationType: string - bulkUrl: string - clientId: string - clientSecret: string - incrementalUrl: string - password: string - refreshToken: string - tokenHeader: string - userName: string - -- name: Delete by name - cisco.ise.connector_config: - ise_hostname: "{{ise_hostname}}" - ise_username: "{{ise_username}}" - ise_password: "{{ise_password}}" - ise_verify: "{{ise_verify}}" - state: absent - connectorName: string - -""" - -RETURN = r""" -ise_response: - description: A dictionary or list with the response returned by the Cisco ISE Python SDK - returned: always - type: dict - sample: > - { - "connector": { - "additionalProperties": {}, - "attributes": { - "attributeMapping": [ - { - "dictionaryAttribute": "string", - "includeInDictionary": true, - "jsonAttribute": "string" - } - ], - "bulkUniqueIdentifier": "string", - "topLevelObject": "string", - "uniqueIdentifier": "string", - "versionIdentifier": "string" - }, - "connectorName": "string", - "connectorType": "string", - "deltasyncSchedule": { - "interval": 0, - "intervalUnit": "string", - "startDate": "string" - }, - "description": "string", - "enabled": true, - "fullsyncSchedule": { - "interval": 0, - "intervalUnit": "string", - "startDate": "string" - }, - "protocol": "string", - "skipCertificateValidations": true, - "url": { - "accessKey": "string", - "authenticationType": "string", - "bulkUrl": "string", - "clientId": "string", - "clientSecret": "string", - "incrementalUrl": "string", - "password": "string", - "refreshToken": "string", - "tokenHeader": "string", - "userName": "string" - } - } - } - -ise_update_response: - description: A dictionary or list with the response returned by the Cisco ISE Python SDK - returned: always - type: str - sample: > - "'string'" -""" diff --git a/ansible_collections/cisco/ise/plugins/modules/connector_config_info.py b/ansible_collections/cisco/ise/plugins/modules/connector_config_info.py deleted file mode 100644 index 698dd2fd7..000000000 --- a/ansible_collections/cisco/ise/plugins/modules/connector_config_info.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# Copyright (c) 2021, Cisco Systems -# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) - -DOCUMENTATION = r""" ---- -module: connector_config_info -short_description: Information module for Connector Config -description: -- Get all Connector Config. -- Get Connector Config by name. -- EDDA - Get ALL connectorConfig information. -- EDDA - Get connectorConfig information based on ConnectorName. -version_added: '2.8.0' -extends_documentation_fragment: - - cisco.ise.module_info -author: Rafael Campos (@racampos) -options: - connectorName: - description: - - ConnectorName path parameter. Update or delete or retrieve the connector config. - type: str -requirements: -- ciscoisesdk >= 2.0.1 -- python >= 3.5 -notes: - - SDK Method used are - edda.Edda.get_connector_config, - edda.Edda.get_connector_config_by_connector_name, - - - Paths used are - get /api/v1/edda/connector-config, - get /api/v1/edda/connector-config/{connectorName}, - -""" - -EXAMPLES = r""" -- name: Get all Connector Config - cisco.ise.connector_config_info: - ise_hostname: "{{ise_hostname}}" - ise_username: "{{ise_username}}" - ise_password: "{{ise_password}}" - ise_verify: "{{ise_verify}}" - register: result - -- name: Get Connector Config by name - cisco.ise.connector_config_info: - ise_hostname: "{{ise_hostname}}" - ise_username: "{{ise_username}}" - ise_password: "{{ise_password}}" - ise_verify: "{{ise_verify}}" - connectorName: string - register: result - -""" - -RETURN = r""" -ise_response: - description: A dictionary or list with the response returned by the Cisco ISE Python SDK - returned: always - type: dict - sample: > - { - "connector": { - "additionalProperties": {}, - "attributes": { - "attributeMapping": [ - { - "dictionaryAttribute": "string", - "includeInDictionary": true, - "jsonAttribute": "string" - } - ], - "bulkUniqueIdentifier": "string", - "topLevelObject": "string", - "uniqueIdentifier": "string", - "versionIdentifier": "string" - }, - "connectorName": "string", - "connectorType": "string", - "deltasyncSchedule": { - "interval": 0, - "intervalUnit": "string", - "startDate": "string" - }, - "description": "string", - "enabled": true, - "fullsyncSchedule": { - "interval": 0, - "intervalUnit": "string", - "startDate": "string" - }, - "protocol": "string", - "skipCertificateValidations": true, - "url": { - "accessKey": "string", - "authenticationType": "string", - "bulkUrl": "string", - "clientId": "string", - "clientSecret": "string", - "incrementalUrl": "string", - "password": "string", - "refreshToken": "string", - "tokenHeader": "string", - "userName": "string" - } - } - } -""" diff --git a/ansible_collections/cisco/ise/plugins/modules/csr_delete.py b/ansible_collections/cisco/ise/plugins/modules/csr_delete.py index 0fc26c12b..4e1b6da04 100644 --- a/ansible_collections/cisco/ise/plugins/modules/csr_delete.py +++ b/ansible_collections/cisco/ise/plugins/modules/csr_delete.py @@ -24,7 +24,7 @@ options: description: Id path parameter. ID of the Certificate Signing Request to be deleted. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/csr_export_info.py b/ansible_collections/cisco/ise/plugins/modules/csr_export_info.py index 4cadca891..ccac5ac27 100644 --- a/ansible_collections/cisco/ise/plugins/modules/csr_export_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/csr_export_info.py @@ -37,7 +37,7 @@ options: - The filename used to save the download file. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/csr_generate.py b/ansible_collections/cisco/ise/plugins/modules/csr_generate.py index 3d769adc0..6cfee8fa3 100644 --- a/ansible_collections/cisco/ise/plugins/modules/csr_generate.py +++ b/ansible_collections/cisco/ise/plugins/modules/csr_generate.py @@ -76,7 +76,7 @@ options: description: CSR Generate's usedFor. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/csr_generate_intermediate_ca.py b/ansible_collections/cisco/ise/plugins/modules/csr_generate_intermediate_ca.py index b8727a777..79e1056e4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/csr_generate_intermediate_ca.py +++ b/ansible_collections/cisco/ise/plugins/modules/csr_generate_intermediate_ca.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/csr_info.py b/ansible_collections/cisco/ise/plugins/modules/csr_info.py index 3ccee98ed..3482ae2a4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/csr_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/csr_info.py @@ -11,8 +11,8 @@ short_description: Information module for CSR description: - Get all CSR. - Get CSR by id. -- This API displays details of a Certificate Signing Request of a particular node for given HostName and ID. -- This API supports Filtering, Sorting and Pagination. +- This API displays details of a certificate signing request of a particular node for a given hostname and ID. +- This API supports filtering, sorting and pagination. version_added: '1.0.0' extends_documentation_fragment: - cisco.ise.module_info @@ -52,8 +52,7 @@ options: - The 'NENDSW' operator describes 'Not Ends With'. - The 'CONTAINS' operator describes 'Contains'. - The 'NCONTAINS' operator describes 'Not Contains'. - elements: str - type: list + type: str filterType: description: - > @@ -69,7 +68,7 @@ options: - Id path parameter. ID of the Certificate Signing Request returned. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates @@ -97,7 +96,7 @@ EXAMPLES = r""" size: 0 sort: string sortBy: string - filter: [] + filter: string filterType: string register: result @@ -131,6 +130,7 @@ ise_response: "rel": "string", "type": "string" }, + "sanNames": "string", "signatureAlgorithm": "string", "subject": "string", "timeStamp": "string", @@ -157,6 +157,7 @@ ise_responses: "rel": "string", "type": "string" }, + "sanNames": "string", "signatureAlgorithm": "string", "subject": "string", "timeStamp": "string", diff --git a/ansible_collections/cisco/ise/plugins/modules/custom_attributes.py b/ansible_collections/cisco/ise/plugins/modules/custom_attributes.py new file mode 100644 index 000000000..f4e49e6a2 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/custom_attributes.py @@ -0,0 +1,73 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: custom_attributes +short_description: Resource module for Custom Attributes +description: +- Manage operations create and delete of the resource Custom Attributes. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + attributeName: + description: Custom Attributes's attributeName. + type: str + attributeType: + description: Custom Attributes's attributeType. + type: str + name: + description: Name path parameter. The name of the custom attribute. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + customattributes.Customattributes.create_custom_attribute, + customattributes.Customattributes.delete, + + - Paths used are + post /api/v1/endpoint-custom-attribute, + delete /api/v1/endpoint-custom-attribute/{name}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.custom_attributes: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + attributeName: string + attributeType: string + +- name: Delete by name + cisco.ise.custom_attributes: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + name: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "attributeName": "string", + "attributeType": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/custom_attributes_info.py b/ansible_collections/cisco/ise/plugins/modules/custom_attributes_info.py new file mode 100644 index 000000000..409ad4179 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/custom_attributes_info.py @@ -0,0 +1,67 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: custom_attributes_info +short_description: Information module for Custom Attributes Info +description: +- Get all Custom Attributes Info. +- Get Custom Attributes Info by name. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + name: + description: + - Name path parameter. Name of the custom attribute. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + customattributes.Customattributes.get, + customattributes.Customattributes.list, + + - Paths used are + get /api/v1/endpoint-custom-attribute, + get /api/v1/endpoint-custom-attribute/{name}, + +""" + +EXAMPLES = r""" +- name: Get all Custom Attributes Info + cisco.ise.custom_attributes_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + register: result + +- name: Get Custom Attributes Info by name + cisco.ise.custom_attributes_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + name: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "attributeName": "string", + "attributeType": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/custom_attributes_rename.py b/ansible_collections/cisco/ise/plugins/modules/custom_attributes_rename.py new file mode 100644 index 000000000..edc18aaad --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/custom_attributes_rename.py @@ -0,0 +1,55 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: custom_attributes_rename +short_description: Resource module for Custom Attributes Rename +description: +- Manage operation create of the resource Custom Attributes Rename. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + currentName: + description: Custom Attributes Rename's currentName. + type: str + newName: + description: Custom Attributes Rename's newName. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + customattributes.Customattributes.rename, + + - Paths used are + post /api/v1/endpoint-custom-attribute/rename, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.custom_attributes_rename: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + currentName: string + newName: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: str + sample: > + "'string'" +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/dataconnect_info.py b/ansible_collections/cisco/ise/plugins/modules/dataconnect_info.py index 3c213e44c..0dcfbb285 100644 --- a/ansible_collections/cisco/ise/plugins/modules/dataconnect_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/dataconnect_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_info.py b/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_info.py index cbb6aff7e..a71aac762 100644 --- a/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password.py b/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password.py index 4f731bf44..1712d60f0 100644 --- a/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password.py +++ b/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password.py @@ -23,7 +23,7 @@ options: #$%&*+,-. ;=?^_~, Has at least 12 characters, Has not more than 30 characters.' type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password_expiry.py b/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password_expiry.py index ec4897b57..898b3b605 100644 --- a/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password_expiry.py +++ b/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_password_expiry.py @@ -20,7 +20,7 @@ options: description: Dataconnect Settings Password Expiry's passwordExpiresInDays. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_status.py b/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_status.py index f782455ec..778a46c94 100644 --- a/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_status.py +++ b/ansible_collections/cisco/ise/plugins/modules/dataconnect_settings_status.py @@ -20,7 +20,7 @@ options: description: IsEnabled flag. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/deployment_info.py b/ansible_collections/cisco/ise/plugins/modules/deployment_info.py index f09b21d69..decfd5e17 100644 --- a/ansible_collections/cisco/ise/plugins/modules/deployment_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/deployment_info.py @@ -21,7 +21,7 @@ options: - How long to wait for the server to send data before giving up. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for PullDeploymentInfo diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_reset_hitcount.py index c65a26ede..3c32a185b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_reset_hitcount.py @@ -20,7 +20,7 @@ options: description: PolicyId path parameter. Policy id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authentication Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_rules.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_rules.py index e0a283492..4d01abfba 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_rules.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_rules.py @@ -229,7 +229,7 @@ options: type: str type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authentication Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_rules_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_rules_info.py index 6e02cd5b6..6151b75bf 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_authentication_rules_info.py @@ -27,7 +27,7 @@ options: - Id path parameter. Rule id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authentication Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_reset_hitcount.py index b2d3dbb1f..a962a1f0c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_reset_hitcount.py @@ -20,7 +20,7 @@ options: description: PolicyId path parameter. Policy id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authorization Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_rules.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_rules.py index a762b3923..281b9e126 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_rules.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_rules.py @@ -222,7 +222,7 @@ options: type: str type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authorization Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_rules_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_rules_info.py index 8e01d1e0d..33d9e9f9c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_authorization_rules_info.py @@ -27,7 +27,7 @@ options: - Id path parameter. Rule id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authorization Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_command_set_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_command_set_info.py index 46a9cfcfe..08103ca94 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_command_set_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_command_set_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Command Set diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions.py index e1d2a666f..24a8a0f7b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions.py @@ -164,7 +164,7 @@ options: elements: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_authentication_rule_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_authentication_rule_info.py index f071af305..8396c2e35 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_authentication_rule_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_authentication_rule_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_authorization_rule_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_authorization_rule_info.py index 1fa414c1a..c27ddc6d4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_authorization_rule_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_authorization_rule_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_policy_set_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_policy_set_info.py index 6264730c2..876b28aa7 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_for_policy_set_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_info.py index 5fbeeac28..3732ae9b1 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_conditions_info.py @@ -29,7 +29,7 @@ options: - Id path parameter. Condition id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_authentication_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_authentication_info.py index efcca2198..1f018f809 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_authentication_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_authentication_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Dictionary Attributes List diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_authorization_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_authorization_info.py index 90c278c57..705eeac56 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_authorization_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_authorization_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Dictionary Attributes List diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_policy_set_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_policy_set_info.py index 14aaba870..19d941d20 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_dictionary_attributes_policy_set_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Dictionary Attributes List diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules.py index a6fb8c2b8..11c1acd04 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules.py @@ -219,7 +219,7 @@ options: type: str type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authorization Global Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules_info.py index 98b4bf506..b8fbde1e3 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules_info.py @@ -23,7 +23,7 @@ options: - Id path parameter. Rule id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authorization Global Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules_reset_hitcount.py index 066bbaf1f..fb173e85b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_global_exception_rules_reset_hitcount.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authorization Global Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_identity_stores_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_identity_stores_info.py index b870c7121..5d8479cda 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_identity_stores_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_identity_stores_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Identity Stores diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules.py index 9b86cab32..6fa22c346 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules.py @@ -222,7 +222,7 @@ options: type: str type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authorization Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules_info.py index 953ab8564..88cbca903 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules_info.py @@ -27,7 +27,7 @@ options: - Id path parameter. Rule id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authorization Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules_reset_hitcount.py index b549075f4..afce62bfe 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_local_exception_rules_reset_hitcount.py @@ -20,7 +20,7 @@ options: description: PolicyId path parameter. Policy id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Authorization Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_network_conditions.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_network_conditions.py index 67c802d16..b2d8025d5 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_network_conditions.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_network_conditions.py @@ -73,7 +73,7 @@ options: description: Network Condition name. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Network Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_network_conditions_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_network_conditions_info.py index 59c2eb239..d13aabffe 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_network_conditions_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_network_conditions_info.py @@ -23,7 +23,7 @@ options: - Id path parameter. Condition id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Network Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set.py index fb0f769a1..340b8c54b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set.py @@ -210,7 +210,7 @@ options: matched. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Policy Set diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set_info.py index fb996df50..f22ba0c20 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set_info.py @@ -23,7 +23,7 @@ options: - Id path parameter. Policy id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Policy Set diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set_reset_hitcount.py index 609e0b122..2b98a0213 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_policy_set_reset_hitcount.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Policy Set diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_profiles_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_profiles_info.py index 2aba7c1bd..a02a612d9 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_profiles_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_profiles_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Profiles diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_service_names_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_service_names_info.py index 77a27332f..99d6c1e39 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_service_names_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_service_names_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Service Names diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions.py index c5326d8cb..647e4bd27 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions.py @@ -162,7 +162,7 @@ options: elements: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Time/Date Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions_info.py b/ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions_info.py index 26c796202..8cc487451 100644 --- a/ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/device_administration_time_date_conditions_info.py @@ -23,7 +23,7 @@ options: - Id path parameter. Condition id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Device Administration - Time/Date Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/dictionary_references_info.py b/ansible_collections/cisco/ise/plugins/modules/dictionary_references_info.py deleted file mode 100644 index 85bb07b7b..000000000 --- a/ansible_collections/cisco/ise/plugins/modules/dictionary_references_info.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# Copyright (c) 2021, Cisco Systems -# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) - -DOCUMENTATION = r""" ---- -module: dictionary_references_info -short_description: Information module for Dictionary References Info -description: -- Get all Dictionary References Info. -- EDDA - Get a map of references to EDDA dictionaries. -version_added: '2.8.0' -extends_documentation_fragment: - - cisco.ise.module_info -author: Rafael Campos (@racampos) -options: {} -requirements: -- ciscoisesdk >= 2.0.1 -- python >= 3.5 -notes: - - SDK Method used are - edda.Edda.get_edda_dictionary_references, - - - Paths used are - get /api/v1/edda/dictionary-references, - -""" - -EXAMPLES = r""" -- name: Get all Dictionary References Info - cisco.ise.dictionary_references_info: - ise_hostname: "{{ise_hostname}}" - ise_username: "{{ise_username}}" - ise_password: "{{ise_password}}" - ise_verify: "{{ise_verify}}" - register: result - -""" - -RETURN = r""" -ise_response: - description: A dictionary or list with the response returned by the Cisco ISE Python SDK - returned: always - type: dict - sample: > - {} -""" diff --git a/ansible_collections/cisco/ise/plugins/modules/downloadable_acl.py b/ansible_collections/cisco/ise/plugins/modules/downloadable_acl.py index f4cd77e29..258cfc561 100644 --- a/ansible_collections/cisco/ise/plugins/modules/downloadable_acl.py +++ b/ansible_collections/cisco/ise/plugins/modules/downloadable_acl.py @@ -35,7 +35,7 @@ options: characters _.-. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/downloadable_acl_info.py b/ansible_collections/cisco/ise/plugins/modules/downloadable_acl_info.py index cb35f5056..33cede1f4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/downloadable_acl_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/downloadable_acl_info.py @@ -31,7 +31,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync.py b/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync.py new file mode 100644 index 000000000..cd30a126c --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync.py @@ -0,0 +1,195 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: duo_identity_sync +short_description: Resource module for Duo Identity Sync +description: +- Manage operations create, update and delete of the resource Duo Identity Sync. +- Duo-IdentitySync - Create a new IdentitySync configuration. +- Duo-Identitysync - Delete the Identitysync configuration specified in the syncName. +- Duo-Identitysync - Update the Identitysync configuration specified in the syncName. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + adGroups: + description: Duo Identity Sync's adGroups. + elements: dict + suboptions: + name: + description: Active Directory Group ID. + type: str + source: + description: Source of the Active Directory Group. + type: str + type: list + configurations: + description: Duo Identity Sync's configurations. + suboptions: + activeDirectories: + description: Duo Identity Sync's activeDirectories. + elements: dict + suboptions: + directoryID: + description: Active Directory ID. + type: str + domain: + description: Active Directory domain name. + type: str + name: + description: Name of the Active Directory. + type: str + type: list + type: dict + lastSync: + description: Time of the last Sync. + type: str + syncName: + description: Name of the Identitysync configuration. + type: str + syncSchedule: + description: Duo Identity Sync's syncSchedule. + suboptions: + interval: + description: Frequency of the sync schedule. + type: int + intervalUnit: + description: Unit of the time interval. + type: str + schedulerSync: + description: Type of Sync Schedule - If "Recurring", please specify schedule + details. + type: str + startDate: + description: Start date and start time of the sync schedule. + type: str + type: dict + syncStatus: + description: Duo Identity Sync's syncStatus. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + duo_identity_sync.DuoIdentitySync.create_identitysync, + duo_identity_sync.DuoIdentitySync.delete_identity_sync_by_sync_name, + duo_identity_sync.DuoIdentitySync.update_identitysync_by_sync_name, + + - Paths used are + post /api/v1/duo-identitysync/identitysync, + delete /api/v1/duo-identitysync/identitysync/{syncName}, + put /api/v1/duo-identitysync/identitysync/{syncName}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.duo_identity_sync: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + adGroups: + - name: string + source: string + configurations: + activeDirectories: + - directoryID: string + domain: string + name: string + lastSync: string + syncName: string + syncSchedule: + interval: 0 + intervalUnit: string + schedulerSync: string + startDate: string + syncStatus: string + +- name: Update by name + cisco.ise.duo_identity_sync: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + adGroups: + - name: string + source: string + configurations: + activeDirectories: + - directoryID: string + domain: string + name: string + lastSync: string + syncName: string + syncSchedule: + interval: 0 + intervalUnit: string + schedulerSync: string + startDate: string + syncStatus: string + +- name: Delete by name + cisco.ise.duo_identity_sync: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + syncName: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "identitySync": { + "adGroups": [ + { + "name": "string", + "sid": "string", + "source": "string" + } + ], + "configurations": { + "activeDirectories": [ + { + "directoryID": "string", + "domain": "string", + "name": "string" + } + ] + }, + "lastSync": "string", + "syncName": "string", + "syncSchedule": { + "interval": 0, + "intervalUnit": "string", + "schedulerSync": "string", + "startDate": "string" + }, + "syncStatus": "string" + } + } + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: str + sample: > + "'string'" +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_cancel_info.py b/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_cancel_info.py new file mode 100644 index 000000000..77aca9753 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_cancel_info.py @@ -0,0 +1,54 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: duo_identity_sync_cancel_info +short_description: Information module for Duo Identity Sync Cancel Info +description: +- Get Duo Identity Sync Cancel Info by name. +- Cancel the sync between the Active Directory and the corresponding Mfa provider associated with this Identitysync config. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + syncName: + description: + - SyncName path parameter. Name of the Identitysync configuration used to cancel sync. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + duo_identity_sync.DuoIdentitySync.cancel_sync, + + - Paths used are + get /api/v1/duo-identitysync/identitysync/sync/cancel/{syncName}, + +""" + +EXAMPLES = r""" +- name: Get Duo Identity Sync Cancel Info by name + cisco.ise.duo_identity_sync_cancel_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + syncName: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: str + sample: > + "'string'" +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_info.py b/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_info.py new file mode 100644 index 000000000..9db4f3618 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_info.py @@ -0,0 +1,94 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: duo_identity_sync_info +short_description: Information module for Duo Identity Sync Info +description: +- Get all Duo Identity Sync Info. +- Get Duo Identity Sync Info by name. +- Duo-IdentitySync - Get the Identitysync config specified in the syncName. +- Duo-IdentitySync - Get the list of all Identitysync configurations. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + syncName: + description: + - SyncName path parameter. This name is used to update, delete or retrieve the specific Identitysync config. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + duo_identity_sync.DuoIdentitySync.get_identitysync, + duo_identity_sync.DuoIdentitySync.get_identitysync_by_sync_name, + + - Paths used are + get /api/v1/duo-identitysync/identitysync, + get /api/v1/duo-identitysync/identitysync/{syncName}, + +""" + +EXAMPLES = r""" +- name: Get all Duo Identity Sync Info + cisco.ise.duo_identity_sync_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + register: result + +- name: Get Duo Identity Sync Info by name + cisco.ise.duo_identity_sync_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + syncName: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "identitySync": { + "adGroups": [ + { + "name": "string", + "sid": "string", + "source": "string" + } + ], + "configurations": { + "activeDirectories": [ + { + "directoryID": "string", + "domain": "string", + "name": "string" + } + ] + }, + "lastSync": "string", + "syncName": "string", + "syncSchedule": { + "interval": 0, + "intervalUnit": "string", + "schedulerSync": "string", + "startDate": "string" + }, + "syncStatus": "string" + } + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_status.py b/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_status.py new file mode 100644 index 000000000..bd6d569bc --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/duo_identity_sync_status.py @@ -0,0 +1,107 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: duo_identity_sync_status +short_description: Resource module for Duo Identity Sync Status +description: +- Manage operation update of the resource Duo Identity Sync Status. +- Duo-identitysync - update sync status. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + errorList: + description: Duo Identity Sync Status's errorList. + elements: dict + suboptions: + reason: + description: Reason user failed sync. + type: str + user: + description: User to be synced to Duo. + suboptions: + directoryname: + description: Active directory that duo user is contained in. + type: str + email: + description: Email of Duo user. + type: str + firstname: + description: First name of Duo user. + type: str + groupname: + description: Acrive directory group that duo user is contained in. + type: str + lastname: + description: Last name of duo user. + type: str + notes: + description: Notes of Duo user. + type: str + realname: + description: Realname of Duo user. + type: str + status: + description: Status of Duo user. + type: str + username: + description: Username of Duo user. + type: str + type: dict + type: list + status: + description: Status of sync. + type: str + syncName: + description: SyncName path parameter. Sync connection to be updated. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + duo_identity_sync.DuoIdentitySync.update_status, + + - Paths used are + put /api/v1/duo-identitysync/identitysync/status/{syncName}, + +""" + +EXAMPLES = r""" +- name: Update by name + cisco.ise.duo_identity_sync_status: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + errorList: + - reason: string + user: + directoryname: string + email: string + firstname: string + groupname: string + lastname: string + notes: string + realname: string + status: string + username: string + status: string + syncName: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: str + sample: > + "'string'" +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/duo_identitysync_sync_info.py b/ansible_collections/cisco/ise/plugins/modules/duo_identitysync_sync_info.py new file mode 100644 index 000000000..258bfa4f1 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/duo_identitysync_sync_info.py @@ -0,0 +1,54 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: duo_identitysync_sync_info +short_description: Information module for Duo Identitysync Sync Info +description: +- Get Duo Identitysync Sync Info by name. +- Initiate the sync between the Active Directory and the corresponding Mfa provider associated with this Identitysync config. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + syncName: + description: + - SyncName path parameter. Name of the Identitysync configuration used to initiate sync. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + duo_identity_sync.DuoIdentitySync.sync, + + - Paths used are + get /api/v1/duo-identitysync/identitysync/sync/{syncName}, + +""" + +EXAMPLES = r""" +- name: Get Duo Identitysync Sync Info by name + cisco.ise.duo_identitysync_sync_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + syncName: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: str + sample: > + "'string'" +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/duo_mfa.py b/ansible_collections/cisco/ise/plugins/modules/duo_mfa.py new file mode 100644 index 000000000..636a8e36e --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/duo_mfa.py @@ -0,0 +1,161 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: duo_mfa +short_description: Resource module for Duo Mfa +description: +- Manage operations create, update and delete of the resource Duo Mfa. +- Duo-MFA - Create a new Duo-MFA configuration. +- Duo-MFA - Delete the Duo-MFA configuration specified in the connectionName. +- Duo-MFA - Update the Duo-MFA configuration specified in the connectionName. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + accountConfigurations: + description: Duo Mfa's accountConfigurations. + suboptions: + adminApi: + description: API type. + suboptions: + ikey: + description: Integration Key. + type: str + sKey: + description: Secret Key. + type: str + type: dict + apiHostName: + description: Duo API HostName. + type: str + authenticationApi: + description: API type. + suboptions: + ikey: + description: Integration Key. + type: str + sKey: + description: Secret Key. + type: str + type: dict + type: dict + connectionName: + description: Name of the Duo-MFA configuration. + type: str + description: + description: Description of the Duo-MFA configuration. + type: str + identitySync: + description: Name of the Identity Sync configuration. + type: str + type: + description: Protocol type for which this Duo-MFA can be used. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + duo_mfa.DuoMfa.create_mfa, + duo_mfa.DuoMfa.delete_mfa_by_connection_name, + duo_mfa.DuoMfa.update_m_fa_by_connection_name, + + - Paths used are + post /api/v1/duo-mfa/mfa, + delete /api/v1/duo-mfa/mfa/{connectionName}, + put /api/v1/duo-mfa/mfa/{connectionName}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.duo_mfa: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + accountConfigurations: + adminApi: + ikey: string + sKey: string + apiHostName: string + authenticationApi: + ikey: string + sKey: string + connectionName: string + description: string + identitySync: string + type: string + +- name: Update by name + cisco.ise.duo_mfa: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + accountConfigurations: + adminApi: + ikey: string + sKey: string + apiHostName: string + authenticationApi: + ikey: string + sKey: string + connectionName: string + description: string + identitySync: string + type: string + +- name: Delete by name + cisco.ise.duo_mfa: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + connectionName: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "mfa": { + "accountConfigurations": { + "adminApi": { + "ikey": "string", + "sKey": "string" + }, + "apiHostName": "string", + "authenticationApi": { + "ikey": "string", + "sKey": "string" + } + }, + "connectionName": "string", + "description": "string", + "identitySync": "string", + "type": "string" + } + } + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: str + sample: > + "'string'" +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/duo_mfa_info.py b/ansible_collections/cisco/ise/plugins/modules/duo_mfa_info.py new file mode 100644 index 000000000..646813b22 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/duo_mfa_info.py @@ -0,0 +1,84 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: duo_mfa_info +short_description: Information module for Duo Mfa Info +description: +- Get all Duo Mfa Info. +- Get Duo Mfa Info by name. +- Duo-MFA - Get the Duo-MFA configuration specified in the connectionName. +- Duo-MFA - List of Duo-MFA configurations. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + connectionName: + description: + - ConnectionName path parameter. This name is used to update, delete or retrieve the specific Duo-MFA configuration. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + duo_mfa.DuoMfa.get_mfa, + duo_mfa.DuoMfa.get_mfa_byconnection_name, + + - Paths used are + get /api/v1/duo-mfa/mfa, + get /api/v1/duo-mfa/mfa/{connectionName}, + +""" + +EXAMPLES = r""" +- name: Get all Duo Mfa Info + cisco.ise.duo_mfa_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + register: result + +- name: Get Duo Mfa Info by name + cisco.ise.duo_mfa_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + connectionName: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "mfa": { + "accountConfigurations": { + "adminApi": { + "ikey": "string", + "sKey": "string" + }, + "apiHostName": "string", + "authenticationApi": { + "ikey": "string", + "sKey": "string" + } + }, + "connectionName": "string", + "description": "string", + "identitySync": "string", + "type": "string" + } + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/duo_mfa_testconnection.py b/ansible_collections/cisco/ise/plugins/modules/duo_mfa_testconnection.py new file mode 100644 index 000000000..8e9f033f4 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/duo_mfa_testconnection.py @@ -0,0 +1,84 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: duo_mfa_testconnection +short_description: Resource module for Duo Mfa Testconnection +description: +- Manage operation create of the resource Duo Mfa Testconnection. +- Duo-MFA - Verify the Auth and Admin API keys of the Duo Host. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + adminApi: + description: API type. + suboptions: + ikey: + description: Integration Key. + type: str + sKey: + description: Secret Key. + type: str + type: dict + apiHostName: + description: Duo API HostName. + type: str + authenticationApi: + description: API type. + suboptions: + ikey: + description: Integration Key. + type: str + sKey: + description: Secret Key. + type: str + type: dict + connectionName: + description: ConnectionName path parameter. This name is used to retrieve secret + keys for testing connection of the specified Duo-MFA configuration in case none + are specified. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + duo_mfa.DuoMfa.test_connection, + + - Paths used are + post /api/v1/duo-mfa/mfa/testconnection/{connectionName}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.duo_mfa_testconnection: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + adminApi: + ikey: string + sKey: string + apiHostName: string + authenticationApi: + ikey: string + sKey: string + connectionName: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: str + sample: > + "'string'" +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell.py b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell.py index 15af377c6..9660da6aa 100644 --- a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell.py +++ b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell.py @@ -44,7 +44,7 @@ options: description: Egress Matrix Cell's sourceSGtId. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_monitor_status_info.py index 716e9dad9..21e61afb7 100644 --- a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_request.py index dd45607d6..3d8c31a78 100644 --- a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_bulk_request.py @@ -23,7 +23,7 @@ options: description: Egress Matrix Cell Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_clear_all.py b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_clear_all.py index d5edb3ede..1810e8963 100644 --- a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_clear_all.py +++ b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_clear_all.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_clone.py b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_clone.py index 90483a2ea..26cfc4da6 100644 --- a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_clone.py +++ b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_clone.py @@ -26,7 +26,7 @@ options: description: SrcSGtId path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_info.py b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_info.py index 309b8f242..f0157fd87 100644 --- a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_set_all_status.py b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_set_all_status.py index ca6f394eb..fff1b6fba 100644 --- a/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_set_all_status.py +++ b/ansible_collections/cisco/ise/plugins/modules/egress_matrix_cell_set_all_status.py @@ -20,7 +20,7 @@ options: description: Status path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoint.py b/ansible_collections/cisco/ise/plugins/modules/endpoint.py index d6c3db64f..d776617d5 100644 --- a/ansible_collections/cisco/ise/plugins/modules/endpoint.py +++ b/ansible_collections/cisco/ise/plugins/modules/endpoint.py @@ -102,7 +102,7 @@ options: description: StaticProfileAssignment flag. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoint_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/endpoint_bulk_monitor_status_info.py index 920378939..c625df079 100644 --- a/ansible_collections/cisco/ise/plugins/modules/endpoint_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/endpoint_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoint_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/endpoint_bulk_request.py index f74c5d1f6..2b032b498 100644 --- a/ansible_collections/cisco/ise/plugins/modules/endpoint_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/endpoint_bulk_request.py @@ -23,7 +23,7 @@ options: description: Endpoint Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoint_certificate.py b/ansible_collections/cisco/ise/plugins/modules/endpoint_certificate.py index be6995cbb..279a64632 100644 --- a/ansible_collections/cisco/ise/plugins/modules/endpoint_certificate.py +++ b/ansible_collections/cisco/ise/plugins/modules/endpoint_certificate.py @@ -48,7 +48,7 @@ options: description: Enable or disable automatic file creation of raw response. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for EndpointCertificate diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoint_deregister.py b/ansible_collections/cisco/ise/plugins/modules/endpoint_deregister.py index 53f050168..0f849b360 100644 --- a/ansible_collections/cisco/ise/plugins/modules/endpoint_deregister.py +++ b/ansible_collections/cisco/ise/plugins/modules/endpoint_deregister.py @@ -20,7 +20,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoint_get_rejected_endpoints_info.py b/ansible_collections/cisco/ise/plugins/modules/endpoint_get_rejected_endpoints_info.py index 7507f3e70..0cd7095bf 100644 --- a/ansible_collections/cisco/ise/plugins/modules/endpoint_get_rejected_endpoints_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/endpoint_get_rejected_endpoints_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoint_group.py b/ansible_collections/cisco/ise/plugins/modules/endpoint_group.py index bf2cf58b8..5b85b32ad 100644 --- a/ansible_collections/cisco/ise/plugins/modules/endpoint_group.py +++ b/ansible_collections/cisco/ise/plugins/modules/endpoint_group.py @@ -31,7 +31,7 @@ options: description: SystemDefined flag. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for EndpointIdentityGroup diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoint_group_info.py b/ansible_collections/cisco/ise/plugins/modules/endpoint_group_info.py index 0850f50a4..f8b0174b9 100644 --- a/ansible_collections/cisco/ise/plugins/modules/endpoint_group_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/endpoint_group_info.py @@ -71,7 +71,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for EndpointIdentityGroup diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoint_info.py b/ansible_collections/cisco/ise/plugins/modules/endpoint_info.py index 88a81827d..97ff55c3b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/endpoint_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/endpoint_info.py @@ -71,7 +71,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoint_register.py b/ansible_collections/cisco/ise/plugins/modules/endpoint_register.py index 8807a6b11..97932950b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/endpoint_register.py +++ b/ansible_collections/cisco/ise/plugins/modules/endpoint_register.py @@ -100,7 +100,7 @@ options: description: StaticProfileAssignment flag. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoint_release_rejected_endpoint.py b/ansible_collections/cisco/ise/plugins/modules/endpoint_release_rejected_endpoint.py index e86e63d9a..c87bbfb2a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/endpoint_release_rejected_endpoint.py +++ b/ansible_collections/cisco/ise/plugins/modules/endpoint_release_rejected_endpoint.py @@ -20,7 +20,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoints.py b/ansible_collections/cisco/ise/plugins/modules/endpoints.py new file mode 100644 index 000000000..c541932b3 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/endpoints.py @@ -0,0 +1,237 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: endpoints +short_description: Resource module for Endpoints +description: +- Manage operations create, update and delete of the resource Endpoints. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + connectedLinks: + description: Endpoints's connectedLinks. + type: dict + customAttributes: + description: Endpoints's customAttributes. + type: dict + description: + description: Endpoints's description. + type: str + deviceType: + description: Endpoints's deviceType. + type: str + groupId: + description: Endpoints's groupId. + type: str + hardwareRevision: + description: Endpoints's hardwareRevision. + type: str + id: + description: Endpoints's id. + type: str + identityStore: + description: Endpoints's identityStore. + type: str + identityStoreId: + description: Endpoints's identityStoreId. + type: str + ipAddress: + description: Endpoints's ipAddress. + type: str + mac: + description: Endpoints's mac. + type: str + mdmAttributes: + description: Endpoints's mdmAttributes. + type: dict + name: + description: Endpoints's name. + type: str + portalUser: + description: Endpoints's portalUser. + type: str + productId: + description: Endpoints's productId. + type: str + profileId: + description: Endpoints's profileId. + type: str + protocol: + description: Endpoints's protocol. + type: str + serialNumber: + description: Endpoints's serialNumber. + type: str + softwareRevision: + description: Endpoints's softwareRevision. + type: str + staticGroupAssignment: + description: StaticGroupAssignment flag. + type: bool + staticProfileAssignment: + description: StaticProfileAssignment flag. + type: bool + value: + description: Value path parameter. The id or MAC of the endpoint. + type: str + vendor: + description: Endpoints's vendor. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + endpoints.Endpoints.create_end_point, + endpoints.Endpoints.delete_endpoint, + endpoints.Endpoints.update_endpoint, + + - Paths used are + post /api/v1/endpoint, + delete /api/v1/endpoint/{value}, + put /api/v1/endpoint/{value}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.endpoints: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + connectedLinks: {} + customAttributes: {} + description: string + deviceType: string + groupId: string + hardwareRevision: string + id: string + identityStore: string + identityStoreId: string + ipAddress: string + mac: string + mdmAttributes: {} + name: string + portalUser: string + productId: string + profileId: string + protocol: string + serialNumber: string + softwareRevision: string + staticGroupAssignment: true + staticProfileAssignment: true + vendor: string + +- name: Update by id + cisco.ise.endpoints: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + connectedLinks: {} + customAttributes: {} + description: string + deviceType: string + groupId: string + hardwareRevision: string + id: string + identityStore: string + identityStoreId: string + ipAddress: string + mac: string + mdmAttributes: {} + name: string + portalUser: string + productId: string + profileId: string + protocol: string + serialNumber: string + softwareRevision: string + staticGroupAssignment: true + staticProfileAssignment: true + value: string + vendor: string + +- name: Delete by id + cisco.ise.endpoints: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + value: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "connectedLinks": {}, + "customAttributes": {}, + "description": "string", + "deviceType": "string", + "groupId": "string", + "hardwareRevision": "string", + "id": "string", + "identityStore": "string", + "identityStoreId": "string", + "ipAddress": "string", + "mac": "string", + "mdmAttributes": {}, + "name": "string", + "portalUser": "string", + "productId": "string", + "profileId": "string", + "protocol": "string", + "serialNumber": "string", + "softwareRevision": "string", + "staticGroupAssignment": true, + "staticProfileAssignment": true, + "vendor": "string" + } + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: dict + sample: > + { + "connectedLinks": {}, + "customAttributes": {}, + "description": "string", + "deviceType": "string", + "groupId": "string", + "hardwareRevision": "string", + "id": "string", + "identityStore": "string", + "identityStoreId": "string", + "ipAddress": "string", + "mac": "string", + "mdmAttributes": {}, + "name": "string", + "portalUser": "string", + "productId": "string", + "profileId": "string", + "protocol": "string", + "serialNumber": "string", + "softwareRevision": "string", + "staticGroupAssignment": true, + "staticProfileAssignment": true, + "vendor": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoints_bulk.py b/ansible_collections/cisco/ise/plugins/modules/endpoints_bulk.py new file mode 100644 index 000000000..00f9048c0 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/endpoints_bulk.py @@ -0,0 +1,352 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: endpoints_bulk +short_description: Resource module for Endpoints Bulk +description: +- Manage operations create, update and delete of the resource Endpoints Bulk. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + connectedLinks: + description: Endpoints Bulk's connectedLinks. + type: dict + customAttributes: + description: Endpoints Bulk's customAttributes. + type: dict + description: + description: Endpoints Bulk's description. + type: str + deviceType: + description: Endpoints Bulk's deviceType. + type: str + groupId: + description: Endpoints Bulk's groupId. + type: str + hardwareRevision: + description: Endpoints Bulk's hardwareRevision. + type: str + id: + description: Endpoints Bulk's id. + type: str + identityStore: + description: Endpoints Bulk's identityStore. + type: str + identityStoreId: + description: Endpoints Bulk's identityStoreId. + type: str + ipAddress: + description: Endpoints Bulk's ipAddress. + type: str + mac: + description: Endpoints Bulk's mac. + type: str + mdmAttributes: + description: Endpoints Bulk's mdmAttributes. + type: dict + name: + description: Endpoints Bulk's name. + type: str + payload: + description: Endpoints Bulk's payload. + elements: dict + suboptions: + connectedLinks: + description: Endpoints Bulk's connectedLinks. + type: dict + customAttributes: + description: Endpoints Bulk's customAttributes. + type: dict + description: + description: Endpoints Bulk's description. + type: str + deviceType: + description: Endpoints Bulk's deviceType. + type: str + groupId: + description: Endpoints Bulk's groupId. + type: str + hardwareRevision: + description: Endpoints Bulk's hardwareRevision. + type: str + id: + description: Endpoints Bulk's id. + type: str + identityStore: + description: Endpoints Bulk's identityStore. + type: str + identityStoreId: + description: Endpoints Bulk's identityStoreId. + type: str + ipAddress: + description: Endpoints Bulk's ipAddress. + type: str + mac: + description: Endpoints Bulk's mac. + type: str + mdmAttributes: + description: Endpoints Bulk's mdmAttributes. + type: dict + name: + description: Endpoints Bulk's name. + type: str + portalUser: + description: Endpoints Bulk's portalUser. + type: str + productId: + description: Endpoints Bulk's productId. + type: str + profileId: + description: Endpoints Bulk's profileId. + type: str + protocol: + description: Endpoints Bulk's protocol. + type: str + serialNumber: + description: Endpoints Bulk's serialNumber. + type: str + softwareRevision: + description: Endpoints Bulk's softwareRevision. + type: str + staticGroupAssignment: + description: StaticGroupAssignment flag. + type: bool + staticProfileAssignment: + description: StaticProfileAssignment flag. + type: bool + vendor: + description: Endpoints Bulk's vendor. + type: str + type: list + portalUser: + description: Endpoints Bulk's portalUser. + type: str + productId: + description: Endpoints Bulk's productId. + type: str + profileId: + description: Endpoints Bulk's profileId. + type: str + protocol: + description: Endpoints Bulk's protocol. + type: str + serialNumber: + description: Endpoints Bulk's serialNumber. + type: str + softwareRevision: + description: Endpoints Bulk's softwareRevision. + type: str + staticGroupAssignment: + description: StaticGroupAssignment flag. + type: bool + staticProfileAssignment: + description: StaticProfileAssignment flag. + type: bool + value: + description: Value path parameter. The id or MAC of the endpoint. + type: str + vendor: + description: Endpoints Bulk's vendor. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + endpoints.Endpoints.create_bulk_end_points, + endpoints.Endpoints.delete_endpoint, + endpoints.Endpoints.update_bulk_end_points, + endpoints.Endpoints.update_endpoint, + + - Paths used are + post /api/v1/endpoint, + post /api/v1/endpoint/bulk, + delete /api/v1/endpoint/bulk, + delete /api/v1/endpoint/{value}, + put /api/v1/endpoint/bulk, + put /api/v1/endpoint/{value}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.endpoints_bulk: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + payload: + - connectedLinks: {} + customAttributes: {} + description: string + deviceType: string + groupId: string + hardwareRevision: string + id: string + identityStore: string + identityStoreId: string + ipAddress: string + mac: string + mdmAttributes: {} + name: string + portalUser: string + productId: string + profileId: string + protocol: string + serialNumber: string + softwareRevision: string + staticGroupAssignment: true + staticProfileAssignment: true + vendor: string + +- name: Update all + cisco.ise.endpoints_bulk: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + payload: + - connectedLinks: {} + customAttributes: {} + description: string + deviceType: string + groupId: string + hardwareRevision: string + id: string + identityStore: string + identityStoreId: string + ipAddress: string + mac: string + mdmAttributes: {} + name: string + portalUser: string + productId: string + profileId: string + protocol: string + serialNumber: string + softwareRevision: string + staticGroupAssignment: true + staticProfileAssignment: true + vendor: string + +- name: Delete all + cisco.ise.endpoints_bulk: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + +- name: Update by id + cisco.ise.endpoints_bulk: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + connectedLinks: {} + customAttributes: {} + description: string + deviceType: string + groupId: string + hardwareRevision: string + id: string + identityStore: string + identityStoreId: string + ipAddress: string + mac: string + mdmAttributes: {} + name: string + portalUser: string + productId: string + profileId: string + protocol: string + serialNumber: string + softwareRevision: string + staticGroupAssignment: true + staticProfileAssignment: true + value: string + vendor: string + +- name: Delete by id + cisco.ise.endpoints_bulk: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + value: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "connectedLinks": {}, + "customAttributes": {}, + "description": "string", + "deviceType": "string", + "groupId": "string", + "hardwareRevision": "string", + "id": "string", + "identityStore": "string", + "identityStoreId": "string", + "ipAddress": "string", + "mac": "string", + "mdmAttributes": {}, + "name": "string", + "portalUser": "string", + "productId": "string", + "profileId": "string", + "protocol": "string", + "serialNumber": "string", + "softwareRevision": "string", + "staticGroupAssignment": true, + "staticProfileAssignment": true, + "vendor": "string" + } + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: dict + sample: > + { + "connectedLinks": {}, + "customAttributes": {}, + "description": "string", + "deviceType": "string", + "groupId": "string", + "hardwareRevision": "string", + "id": "string", + "identityStore": "string", + "identityStoreId": "string", + "ipAddress": "string", + "mac": "string", + "mdmAttributes": {}, + "name": "string", + "portalUser": "string", + "productId": "string", + "profileId": "string", + "protocol": "string", + "serialNumber": "string", + "softwareRevision": "string", + "staticGroupAssignment": true, + "staticProfileAssignment": true, + "vendor": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoints_bulk_info.py b/ansible_collections/cisco/ise/plugins/modules/endpoints_bulk_info.py new file mode 100644 index 000000000..8d2cc4604 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/endpoints_bulk_info.py @@ -0,0 +1,168 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: endpoints_bulk_info +short_description: Information module for Endpoints Bulk +description: +- Get all Endpoints Bulk. +- Get Endpoints Bulk by id. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + page: + description: + - Page query parameter. Page number. + type: int + size: + description: + - Size query parameter. Number of objects returned per page. + type: int + sort: + description: + - Sort query parameter. Sort type - asc or desc. + type: str + sortBy: + description: + - SortBy query parameter. Sort column by which objects needs to be sorted. + type: str + filter: + description: + - > + Filter query parameter. .. Container **Simple filtering** should be available through the filter query + string parameter. The structure of a filter is a triplet of field operator and value separated with dots. + More than one filter can be sent. The logical operator common to ALL filter criteria will be by default AND, + and can be changed by using the *'filterType=or'* query string parameter. + - Each resource Data model description should specify if an attribute is a filtered field. + - The 'EQ' operator describes 'Equals'. + - The 'NEQ' operator describes 'Not Equals'. + - The 'GT' operator describes 'Greater Than'. + - The 'LT' operator describes 'Less Than'. + - The 'STARTSW' operator describes 'Starts With'. + - The 'NSTARTSW' operator describes 'Not Starts With'. + - The 'ENDSW' operator describes 'Ends With'. + - The 'NENDSW' operator describes 'Not Ends With'. + - The 'CONTAINS' operator describes 'Contains'. + - The 'NCONTAINS' operator describes 'Not Contains'. + type: str + filterType: + description: + - > + FilterType query parameter. The logical operator common to ALL filter criteria will be by default AND, and + can be changed by using the parameter. + type: str + value: + description: + - Value path parameter. The id or MAC of the endpoint. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + endpoints.Endpoints.get_1, + endpoints.Endpoints.list_1_generator, + + - Paths used are + get /api/v1/endpoint, + get /api/v1/endpoint/{value}, + +""" + +EXAMPLES = r""" +- name: Get all Endpoints Bulk + cisco.ise.endpoints_bulk_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + page: 0 + size: 0 + sort: string + sortBy: string + filter: string + filterType: string + register: result + +- name: Get Endpoints Bulk by id + cisco.ise.endpoints_bulk_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + value: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "connectedLinks": {}, + "customAttributes": {}, + "description": "string", + "deviceType": "string", + "groupId": "string", + "hardwareRevision": "string", + "id": "string", + "identityStore": "string", + "identityStoreId": "string", + "ipAddress": "string", + "mac": "string", + "mdmAttributes": {}, + "name": "string", + "portalUser": "string", + "productId": "string", + "profileId": "string", + "protocol": "string", + "serialNumber": "string", + "softwareRevision": "string", + "staticGroupAssignment": true, + "staticProfileAssignment": true, + "vendor": "string" + } + +ise_responses: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: list + elements: dict + sample: > + [ + { + "connectedLinks": {}, + "customAttributes": {}, + "description": "string", + "deviceType": "string", + "groupId": "string", + "hardwareRevision": "string", + "id": "string", + "identityStore": "string", + "identityStoreId": "string", + "ipAddress": "string", + "mac": "string", + "mdmAttributes": {}, + "name": "string", + "portalUser": "string", + "productId": "string", + "profileId": "string", + "protocol": "string", + "serialNumber": "string", + "softwareRevision": "string", + "staticGroupAssignment": true, + "staticProfileAssignment": true, + "vendor": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoints_device_type_info.py b/ansible_collections/cisco/ise/plugins/modules/endpoints_device_type_info.py new file mode 100644 index 000000000..4df2926bd --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/endpoints_device_type_info.py @@ -0,0 +1,54 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: endpoints_device_type_info +short_description: Information module for Endpoints Device Type Info +description: +- Get all Endpoints Device Type Info. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: {} +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + endpoints.Endpoints.get_device_type_summary, + + - Paths used are + get /api/v1/endpoint/deviceType/summary, + +""" + +EXAMPLES = r""" +- name: Get all Endpoints Device Type Info + cisco.ise.endpoints_device_type_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "deviceType": "string", + "total": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoints_info.py b/ansible_collections/cisco/ise/plugins/modules/endpoints_info.py new file mode 100644 index 000000000..6646ca0b3 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/endpoints_info.py @@ -0,0 +1,168 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: endpoints_info +short_description: Information module for Endpoints Info +description: +- Get all Endpoints Info. +- Get Endpoints Info by id. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + page: + description: + - Page query parameter. Page number. + type: int + size: + description: + - Size query parameter. Number of objects returned per page. + type: int + sort: + description: + - Sort query parameter. Sort type - asc or desc. + type: str + sortBy: + description: + - SortBy query parameter. Sort column by which objects needs to be sorted. + type: str + filter: + description: + - > + Filter query parameter. .. Container **Simple filtering** should be available through the filter query + string parameter. The structure of a filter is a triplet of field operator and value separated with dots. + More than one filter can be sent. The logical operator common to ALL filter criteria will be by default AND, + and can be changed by using the *'filterType=or'* query string parameter. + - Each resource Data model description should specify if an attribute is a filtered field. + - The 'EQ' operator describes 'Equals'. + - The 'NEQ' operator describes 'Not Equals'. + - The 'GT' operator describes 'Greater Than'. + - The 'LT' operator describes 'Less Than'. + - The 'STARTSW' operator describes 'Starts With'. + - The 'NSTARTSW' operator describes 'Not Starts With'. + - The 'ENDSW' operator describes 'Ends With'. + - The 'NENDSW' operator describes 'Not Ends With'. + - The 'CONTAINS' operator describes 'Contains'. + - The 'NCONTAINS' operator describes 'Not Contains'. + type: str + filterType: + description: + - > + FilterType query parameter. The logical operator common to ALL filter criteria will be by default AND, and + can be changed by using the parameter. + type: str + value: + description: + - Value path parameter. The id or MAC of the endpoint. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + endpoints.Endpoints.get_1, + endpoints.Endpoints.list_1_generator, + + - Paths used are + get /api/v1/endpoint, + get /api/v1/endpoint/{value}, + +""" + +EXAMPLES = r""" +- name: Get all Endpoints Info + cisco.ise.endpoints_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + page: 0 + size: 0 + sort: string + sortBy: string + filter: string + filterType: string + register: result + +- name: Get Endpoints Info by id + cisco.ise.endpoints_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + value: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "connectedLinks": {}, + "customAttributes": {}, + "description": "string", + "deviceType": "string", + "groupId": "string", + "hardwareRevision": "string", + "id": "string", + "identityStore": "string", + "identityStoreId": "string", + "ipAddress": "string", + "mac": "string", + "mdmAttributes": {}, + "name": "string", + "portalUser": "string", + "productId": "string", + "profileId": "string", + "protocol": "string", + "serialNumber": "string", + "softwareRevision": "string", + "staticGroupAssignment": true, + "staticProfileAssignment": true, + "vendor": "string" + } + +ise_responses: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: list + elements: dict + sample: > + [ + { + "connectedLinks": {}, + "customAttributes": {}, + "description": "string", + "deviceType": "string", + "groupId": "string", + "hardwareRevision": "string", + "id": "string", + "identityStore": "string", + "identityStoreId": "string", + "ipAddress": "string", + "mac": "string", + "mdmAttributes": {}, + "name": "string", + "portalUser": "string", + "productId": "string", + "profileId": "string", + "protocol": "string", + "serialNumber": "string", + "softwareRevision": "string", + "staticGroupAssignment": true, + "staticProfileAssignment": true, + "vendor": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/endpoints_task.py b/ansible_collections/cisco/ise/plugins/modules/endpoints_task.py new file mode 100644 index 000000000..5eeed88c7 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/endpoints_task.py @@ -0,0 +1,137 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: endpoints_task +short_description: Resource module for Endpoints Task +description: +- Manage operation create of the resource Endpoints Task. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + connectedLinks: + description: Endpoints Task's connectedLinks. + type: dict + customAttributes: + description: Endpoints Task's customAttributes. + type: dict + description: + description: Endpoints Task's description. + type: str + deviceType: + description: Endpoints Task's deviceType. + type: str + groupId: + description: Endpoints Task's groupId. + type: str + hardwareRevision: + description: Endpoints Task's hardwareRevision. + type: str + id: + description: Endpoints Task's id. + type: str + identityStore: + description: Endpoints Task's identityStore. + type: str + identityStoreId: + description: Endpoints Task's identityStoreId. + type: str + ipAddress: + description: Endpoints Task's ipAddress. + type: str + mac: + description: Endpoints Task's mac. + type: str + mdmAttributes: + description: Endpoints Task's mdmAttributes. + type: dict + name: + description: Endpoints Task's name. + type: str + portalUser: + description: Endpoints Task's portalUser. + type: str + productId: + description: Endpoints Task's productId. + type: str + profileId: + description: Endpoints Task's profileId. + type: str + protocol: + description: Endpoints Task's protocol. + type: str + serialNumber: + description: Endpoints Task's serialNumber. + type: str + softwareRevision: + description: Endpoints Task's softwareRevision. + type: str + staticGroupAssignment: + description: StaticGroupAssignment flag. + type: bool + staticProfileAssignment: + description: StaticProfileAssignment flag. + type: bool + vendor: + description: Endpoints Task's vendor. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + endpoints.Endpoints.create_end_point_task, + + - Paths used are + post /api/v1/endpointTask, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.endpoints_task: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + connectedLinks: {} + customAttributes: {} + description: string + deviceType: string + groupId: string + hardwareRevision: string + id: string + identityStore: string + identityStoreId: string + ipAddress: string + mac: string + mdmAttributes: {} + name: string + portalUser: string + productId: string + profileId: string + protocol: string + serialNumber: string + softwareRevision: string + staticGroupAssignment: true + staticProfileAssignment: true + vendor: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/external_radius_server.py b/ansible_collections/cisco/ise/plugins/modules/external_radius_server.py index 0c16d8c98..c88b03dab 100644 --- a/ansible_collections/cisco/ise/plugins/modules/external_radius_server.py +++ b/ansible_collections/cisco/ise/plugins/modules/external_radius_server.py @@ -67,7 +67,7 @@ options: description: Valid Range 1 to 120. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/external_radius_server_info.py b/ansible_collections/cisco/ise/plugins/modules/external_radius_server_info.py index 98bb7c155..3710b8678 100644 --- a/ansible_collections/cisco/ise/plugins/modules/external_radius_server_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/external_radius_server_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/filter_policy.py b/ansible_collections/cisco/ise/plugins/modules/filter_policy.py index c7b3f5696..c260d893c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/filter_policy.py +++ b/ansible_collections/cisco/ise/plugins/modules/filter_policy.py @@ -35,7 +35,7 @@ options: description: Virtual Network. At least one of subnet or sgt or vn should be defined. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/filter_policy_info.py b/ansible_collections/cisco/ise/plugins/modules/filter_policy_info.py index 486c4c0f4..bd949c955 100644 --- a/ansible_collections/cisco/ise/plugins/modules/filter_policy_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/filter_policy_info.py @@ -31,7 +31,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_location_info.py b/ansible_collections/cisco/ise/plugins/modules/guest_location_info.py index 98f77ab17..1854a9630 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_location_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_location_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_smtp_notification_settings.py b/ansible_collections/cisco/ise/plugins/modules/guest_smtp_notification_settings.py index 1f7fc6f17..b2c9e8a6e 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_smtp_notification_settings.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_smtp_notification_settings.py @@ -54,7 +54,7 @@ options: description: Username of Secure SMTP server. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_smtp_notification_settings_info.py b/ansible_collections/cisco/ise/plugins/modules/guest_smtp_notification_settings_info.py index dec4146c7..d6a0edad3 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_smtp_notification_settings_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_smtp_notification_settings_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_ssid.py b/ansible_collections/cisco/ise/plugins/modules/guest_ssid.py index 3dac851e9..cb74d8a56 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_ssid.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_ssid.py @@ -26,7 +26,7 @@ options: characters _.-. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_ssid_info.py b/ansible_collections/cisco/ise/plugins/modules/guest_ssid_info.py index 40cc1eaeb..a0bf77842 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_ssid_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_ssid_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_type.py b/ansible_collections/cisco/ise/plugins/modules/guest_type.py index 4ac0b34d6..ce9705c67 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_type.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_type.py @@ -120,7 +120,7 @@ options: elements: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_type_email.py b/ansible_collections/cisco/ise/plugins/modules/guest_type_email.py index 9f386a62b..83a57e74d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_type_email.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_type_email.py @@ -31,7 +31,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_type_info.py b/ansible_collections/cisco/ise/plugins/modules/guest_type_info.py index 9a77176b1..e8e241e2f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_type_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_type_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_type_sms.py b/ansible_collections/cisco/ise/plugins/modules/guest_type_sms.py index 08e88c869..5d0575527 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_type_sms.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_type_sms.py @@ -31,7 +31,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user.py b/ansible_collections/cisco/ise/plugins/modules/guest_user.py index f65ae8c24..88d51e9e6 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user.py @@ -115,7 +115,7 @@ options: description: Guest User's statusReason. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user_approve.py b/ansible_collections/cisco/ise/plugins/modules/guest_user_approve.py index a8aa5dd45..c85d36193 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user_approve.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user_approve.py @@ -20,7 +20,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/guest_user_bulk_monitor_status_info.py index 0445a7379..fb64aa656 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/guest_user_bulk_request.py index 5542a71ce..3f95aa357 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user_bulk_request.py @@ -23,7 +23,7 @@ options: description: Guest User Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user_change_sponsor_password.py b/ansible_collections/cisco/ise/plugins/modules/guest_user_change_sponsor_password.py index 701c53136..076e3b968 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user_change_sponsor_password.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user_change_sponsor_password.py @@ -31,7 +31,7 @@ options: description: PortalId path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user_deny.py b/ansible_collections/cisco/ise/plugins/modules/guest_user_deny.py index b4308026a..4629adf22 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user_deny.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user_deny.py @@ -20,7 +20,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user_email.py b/ansible_collections/cisco/ise/plugins/modules/guest_user_email.py index 94fb4f6a2..1d6f7f028 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user_email.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user_email.py @@ -34,7 +34,7 @@ options: description: PortalId path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user_info.py b/ansible_collections/cisco/ise/plugins/modules/guest_user_info.py index 7713cb784..14c95818e 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user_info.py @@ -71,7 +71,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user_reinstate.py b/ansible_collections/cisco/ise/plugins/modules/guest_user_reinstate.py index 36a8001e0..d66f78064 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user_reinstate.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user_reinstate.py @@ -24,7 +24,7 @@ options: description: Name path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user_reset_password.py b/ansible_collections/cisco/ise/plugins/modules/guest_user_reset_password.py index a544c1707..799274837 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user_reset_password.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user_reset_password.py @@ -20,7 +20,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user_sms.py b/ansible_collections/cisco/ise/plugins/modules/guest_user_sms.py index 1c9ffa411..d8d8ed77b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user_sms.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user_sms.py @@ -23,7 +23,7 @@ options: description: PortalId path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/guest_user_suspend.py b/ansible_collections/cisco/ise/plugins/modules/guest_user_suspend.py index 93c2e0d28..44e0015fe 100644 --- a/ansible_collections/cisco/ise/plugins/modules/guest_user_suspend.py +++ b/ansible_collections/cisco/ise/plugins/modules/guest_user_suspend.py @@ -35,7 +35,7 @@ options: description: Name path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/hotpatch_info.py b/ansible_collections/cisco/ise/plugins/modules/hotpatch_info.py index ddc28f545..18c05777d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/hotpatch_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/hotpatch_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Patching diff --git a/ansible_collections/cisco/ise/plugins/modules/hotpatch_install.py b/ansible_collections/cisco/ise/plugins/modules/hotpatch_install.py index 143c1acad..24af4a2cb 100644 --- a/ansible_collections/cisco/ise/plugins/modules/hotpatch_install.py +++ b/ansible_collections/cisco/ise/plugins/modules/hotpatch_install.py @@ -12,7 +12,8 @@ description: - Manage operation create of the resource Hotpatch Install. - > Triggers hot patch installation on the Cisco ISE node. A task ID is returned which can be used to monitor the progress of the hot patch installation - process. As hot patch installation triggers the Cisco ISE to restart, the task API becomes unavailable for a certain period of time. + process. As hot patch installation triggers the Cisco ISE to restart, the task API becomes unavailable for a certain period of time. For installation of + hotpatch on secondary nodes, request needs to be sent to individual node instead of the Primary Administration Node. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module @@ -21,11 +22,14 @@ options: hotpatchName: description: Hotpatch Install's hotpatchName. type: str + isDirectoryListed: + description: IsDirectoryListed flag. + type: bool repositoryName: description: Hotpatch Install's repositoryName. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Patching @@ -48,6 +52,7 @@ EXAMPLES = r""" ise_password: "{{ise_password}}" ise_verify: "{{ise_verify}}" hotpatchName: string + isDirectoryListed: true repositoryName: string """ diff --git a/ansible_collections/cisco/ise/plugins/modules/hotpatch_rollback.py b/ansible_collections/cisco/ise/plugins/modules/hotpatch_rollback.py index 7db0ae257..4ae39d247 100644 --- a/ansible_collections/cisco/ise/plugins/modules/hotpatch_rollback.py +++ b/ansible_collections/cisco/ise/plugins/modules/hotpatch_rollback.py @@ -12,7 +12,8 @@ description: - Manage operation create of the resource Hotpatch Rollback. - > Triggers hot patch rollback on the Cisco ISE node. A task ID is returned which can be used to monitor the progress of the hot patch rollback process. As - hot patch rollback triggers the Cisco ISE to restart, the task API becomes unavailable for a certain period of time. + hot patch rollback triggers the Cisco ISE to restart, the task API becomes unavailable for a certain period of time. For rollback of hotpatch on + secondary nodes , request needs to be sent on individual node instead of the Primary Administration Node. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module @@ -21,11 +22,14 @@ options: hotpatchName: description: Hotpatch Rollback's hotpatchName. type: str + isDirectoryListed: + description: IsDirectoryListed flag. + type: bool repositoryName: description: Hotpatch Rollback's repositoryName. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Patching @@ -48,6 +52,7 @@ EXAMPLES = r""" ise_password: "{{ise_password}}" ise_verify: "{{ise_verify}}" hotpatchName: string + isDirectoryListed: true repositoryName: string """ diff --git a/ansible_collections/cisco/ise/plugins/modules/hotspot_portal.py b/ansible_collections/cisco/ise/plugins/modules/hotspot_portal.py index f8047fc0c..650e6110b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/hotspot_portal.py +++ b/ansible_collections/cisco/ise/plugins/modules/hotspot_portal.py @@ -251,7 +251,7 @@ options: type: dict type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/hotspot_portal_info.py b/ansible_collections/cisco/ise/plugins/modules/hotspot_portal_info.py index fe316031c..2eebad547 100644 --- a/ansible_collections/cisco/ise/plugins/modules/hotspot_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/hotspot_portal_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/id_store_sequence.py b/ansible_collections/cisco/ise/plugins/modules/id_store_sequence.py index fa0906397..723b3c589 100644 --- a/ansible_collections/cisco/ise/plugins/modules/id_store_sequence.py +++ b/ansible_collections/cisco/ise/plugins/modules/id_store_sequence.py @@ -48,7 +48,7 @@ options: description: Id Store Sequence's parent. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IdentitySequence diff --git a/ansible_collections/cisco/ise/plugins/modules/id_store_sequence_info.py b/ansible_collections/cisco/ise/plugins/modules/id_store_sequence_info.py index 1903ae417..7c4669d55 100644 --- a/ansible_collections/cisco/ise/plugins/modules/id_store_sequence_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/id_store_sequence_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IdentitySequence diff --git a/ansible_collections/cisco/ise/plugins/modules/identity_group.py b/ansible_collections/cisco/ise/plugins/modules/identity_group.py index 13dfda39f..985fcaa41 100644 --- a/ansible_collections/cisco/ise/plugins/modules/identity_group.py +++ b/ansible_collections/cisco/ise/plugins/modules/identity_group.py @@ -30,7 +30,7 @@ options: description: Identity Group's parent. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IdentityGroups diff --git a/ansible_collections/cisco/ise/plugins/modules/identity_group_info.py b/ansible_collections/cisco/ise/plugins/modules/identity_group_info.py index c2acbc9d3..2e0a6dfe1 100644 --- a/ansible_collections/cisco/ise/plugins/modules/identity_group_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/identity_group_info.py @@ -71,7 +71,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IdentityGroups diff --git a/ansible_collections/cisco/ise/plugins/modules/internal_user.py b/ansible_collections/cisco/ise/plugins/modules/internal_user.py index 238b344b0..d19ab6086 100644 --- a/ansible_collections/cisco/ise/plugins/modules/internal_user.py +++ b/ansible_collections/cisco/ise/plugins/modules/internal_user.py @@ -69,7 +69,7 @@ options: description: The id store where the internal user's password is kept. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/internal_user_info.py b/ansible_collections/cisco/ise/plugins/modules/internal_user_info.py index eb6da52de..20e7bac0a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/internal_user_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/internal_user_info.py @@ -71,7 +71,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/ipsec.py b/ansible_collections/cisco/ise/plugins/modules/ipsec.py new file mode 100644 index 000000000..2fef3c1fb --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/ipsec.py @@ -0,0 +1,236 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: ipsec +short_description: Resource module for Ipsec +description: +- Manage operations create and update of the resource Ipsec. +- Creates an IPsec connection. +- Updates the configuration of existing IPsec connection. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + authType: + description: Authentication type for establishing connection. + type: str + certId: + description: ID of the certificate for establishing connection. + type: str + configureVti: + description: Authentication type for establishing connection. + type: bool + espAhProtocol: + description: Encryption protocol used for establishing connection. + type: str + hostName: + description: Hostname of the node. + type: str + iface: + description: Ethernet port of the node. + type: str + ikeReAuthTime: + description: IKE re-authentication time. + type: int + ikeVersion: + description: IKE version. + type: str + localInternalIp: + description: Local Tunnel IP address. + type: str + modeOption: + description: The Mode type used for establishing the connection. + type: str + nadIp: + description: NAD IP address for establishing connection. + type: str + phaseOneDHGroup: + description: Phase-one DH group used for establishing connection. + type: str + phaseOneEncryptionAlgo: + description: Phase-one encryption algorithm used for establishing connection. + type: str + phaseOneHashAlgo: + description: Phase-one hashing algorithm used for establishing connection. + type: str + phaseOneLifeTime: + description: Phase-one connection lifetime. + type: int + phaseTwoDHGroup: + description: Phase-two DH group used for establishing connection. + type: str + phaseTwoEncryptionAlgo: + description: Phase-two encryption algorithm used for establishing connection. + type: str + phaseTwoHashAlgo: + description: Phase-two hashing algorithm used for establishing connection. + type: str + phaseTwoLifeTime: + description: Phase-two connection lifetime. + type: int + psk: + description: Pre-shared key used for establishing connection. + type: str + remotePeerInternalIp: + description: Remote Tunnel IP address. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + native_ipsec.NativeIpsec.create_ipsec_connection, + native_ipsec.NativeIpsec.update_ipsec_connection_config, + + - Paths used are + post /api/v1/ipsec, + put /api/v1/ipsec, + +""" + +EXAMPLES = r""" +- name: Update all + cisco.ise.ipsec: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + authType: string + certId: string + configureVti: true + espAhProtocol: string + hostName: string + iface: string + ikeReAuthTime: 0 + ikeVersion: string + localInternalIp: string + modeOption: string + nadIp: string + phaseOneDHGroup: string + phaseOneEncryptionAlgo: string + phaseOneHashAlgo: string + phaseOneLifeTime: 0 + phaseTwoDHGroup: string + phaseTwoEncryptionAlgo: string + phaseTwoHashAlgo: string + phaseTwoLifeTime: 0 + psk: string + remotePeerInternalIp: string + +- name: Create + cisco.ise.ipsec: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + authType: string + certId: string + configureVti: true + espAhProtocol: string + hostName: string + iface: string + ikeReAuthTime: 0 + ikeVersion: string + localInternalIp: string + modeOption: string + nadIp: string + phaseOneDHGroup: string + phaseOneEncryptionAlgo: string + phaseOneHashAlgo: string + phaseOneLifeTime: 0 + phaseTwoDHGroup: string + phaseTwoEncryptionAlgo: string + phaseTwoHashAlgo: string + phaseTwoLifeTime: 0 + psk: string + remotePeerInternalIp: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "authType": "string", + "certId": "string", + "configureVti": true, + "createTime": "string", + "espAhProtocol": "string", + "hostName": "string", + "id": "string", + "iface": "string", + "ikeReAuthTime": 0, + "ikeVersion": "string", + "localInternalIp": "string", + "modeOption": "string", + "nadIp": "string", + "phaseOneDHGroup": "string", + "phaseOneEncryptionAlgo": "string", + "phaseOneHashAlgo": "string", + "phaseOneLifeTime": 0, + "phaseTwoDHGroup": "string", + "phaseTwoEncryptionAlgo": "string", + "phaseTwoHashAlgo": "string", + "phaseTwoLifeTime": 0, + "psk": "string", + "remotePeerInternalIp": "string", + "status": "string", + "updateTime": "string" + } + ] + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: dict + sample: > + { + "response": { + "authType": "string", + "certId": "string", + "configureVti": true, + "createTime": "string", + "espAhProtocol": "string", + "hostName": "string", + "id": "string", + "iface": "string", + "ikeReAuthTime": 0, + "ikeVersion": "string", + "link": { + "href": "string", + "rel": "string", + "type": "string" + }, + "localInternalIp": "string", + "modeOption": "string", + "nadIp": "string", + "phaseOneDHGroup": "string", + "phaseOneEncryptionAlgo": "string", + "phaseOneHashAlgo": "string", + "phaseOneLifeTime": 0, + "phaseTwoDHGroup": "string", + "phaseTwoEncryptionAlgo": "string", + "phaseTwoHashAlgo": "string", + "phaseTwoLifeTime": 0, + "psk": "string", + "remotePeerInternalIp": "string", + "status": "string", + "updateTime": "string" + }, + "version": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/ipsec_bulk.py b/ansible_collections/cisco/ise/plugins/modules/ipsec_bulk.py new file mode 100644 index 000000000..9ebc9574e --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/ipsec_bulk.py @@ -0,0 +1,143 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: ipsec_bulk +short_description: Resource module for Ipsec Bulk +description: +- Manage operation create of the resource Ipsec Bulk. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + ItemList: + description: Ipsec Bulk's ItemList. + elements: dict + suboptions: + authType: + description: Authentication type for establishing connection. + type: str + certId: + description: ID of the certificate for establishing connection. + type: str + configureVti: + description: Authentication type for establishing connection. + type: bool + espAhProtocol: + description: Encryption protocol used for establishing connection. + type: str + hostName: + description: Hostname of the node. + type: str + iface: + description: Ethernet port of the node. + type: str + ikeReAuthTime: + description: IKE re-authentication time. + type: int + ikeVersion: + description: IKE version. + type: str + localInternalIp: + description: Local Tunnel IP address. + type: str + modeOption: + description: The Mode type used for establishing the connection. + type: str + nadIp: + description: NAD IP address for establishing connection. + type: str + phaseOneDHGroup: + description: Phase-one DH group used for establishing connection. + type: str + phaseOneEncryptionAlgo: + description: Phase-one encryption algorithm used for establishing connection. + type: str + phaseOneHashAlgo: + description: Phase-one hashing algorithm used for establishing connection. + type: str + phaseOneLifeTime: + description: Phase-one connection lifetime. + type: int + phaseTwoDHGroup: + description: Phase-two DH group used for establishing connection. + type: str + phaseTwoEncryptionAlgo: + description: Phase-two encryption algorithm used for establishing connection. + type: str + phaseTwoHashAlgo: + description: Phase-two hashing algorithm used for establishing connection. + type: str + phaseTwoLifeTime: + description: Phase-two connection lifetime. + type: int + psk: + description: Pre-shared key used for establishing connection. + type: str + remotePeerInternalIp: + description: Remote Tunnel IP address. + type: str + type: list + operation: + description: Ipsec Bulk's operation. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + native_ipsec.NativeIpsec.bulk_ip_sec_operation, + + - Paths used are + post /api/v1/ipsec/bulk, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.ipsec_bulk: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + ItemList: + - authType: string + certId: string + configureVti: true + espAhProtocol: string + hostName: string + iface: string + ikeReAuthTime: 0 + ikeVersion: string + localInternalIp: string + modeOption: string + nadIp: string + phaseOneDHGroup: string + phaseOneEncryptionAlgo: string + phaseOneHashAlgo: string + phaseOneLifeTime: 0 + phaseTwoDHGroup: string + phaseTwoEncryptionAlgo: string + phaseTwoHashAlgo: string + phaseTwoLifeTime: 0 + psk: string + remotePeerInternalIp: string + operation: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/ipsec_certificates_info.py b/ansible_collections/cisco/ise/plugins/modules/ipsec_certificates_info.py new file mode 100644 index 000000000..f68ee2b56 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/ipsec_certificates_info.py @@ -0,0 +1,55 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: ipsec_certificates_info +short_description: Information module for Ipsec Certificates Info +description: +- Get all Ipsec Certificates Info. +- Returns all the certificates for IPsec role. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: {} +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + native_ipsec.NativeIpsec.get_ip_sec_certificates, + + - Paths used are + get /api/v1/ipsec/certificates, + +""" + +EXAMPLES = r""" +- name: Get all Ipsec Certificates Info + cisco.ise.ipsec_certificates_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "friendlyName": "string", + "id": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/ipsec_delete.py b/ansible_collections/cisco/ise/plugins/modules/ipsec_delete.py new file mode 100644 index 000000000..2779fdd5b --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/ipsec_delete.py @@ -0,0 +1,88 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: ipsec_delete +short_description: Resource module for Ipsec Delete +description: +- Manage operation delete of the resource Ipsec Delete. +- Removes an enabled IPsec node connection. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + hostName: + description: HostName path parameter. Hostname of the deployed node. + type: str + nadIp: + description: NadIp path parameter. IP address of the NAD. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + native_ipsec.NativeIpsec.remove_ipsec_connection, + + - Paths used are + delete /api/v1/ipsec/{hostName}/{nadIp}, + +""" + +EXAMPLES = r""" +- name: Delete by id + cisco.ise.ipsec_delete: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + hostName: string + nadIp: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "authType": "string", + "certId": "string", + "configureVti": true, + "createTime": "string", + "espAhProtocol": "string", + "hostName": "string", + "id": "string", + "iface": "string", + "ikeReAuthTime": 0, + "ikeVersion": "string", + "link": { + "href": "string", + "rel": "string", + "type": "string" + }, + "localInternalIp": "string", + "modeOption": "string", + "nadIp": "string", + "phaseOneDHGroup": "string", + "phaseOneEncryptionAlgo": "string", + "phaseOneHashAlgo": "string", + "phaseOneLifeTime": 0, + "phaseTwoDHGroup": "string", + "phaseTwoEncryptionAlgo": "string", + "phaseTwoHashAlgo": "string", + "phaseTwoLifeTime": 0, + "psk": "string", + "remotePeerInternalIp": "string", + "status": "string", + "updateTime": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/ipsec_delete_info.py b/ansible_collections/cisco/ise/plugins/modules/ipsec_delete_info.py new file mode 100644 index 000000000..f4d65bc29 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/ipsec_delete_info.py @@ -0,0 +1,90 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: ipsec_delete_info +short_description: Information module for Ipsec Delete +description: +- Get Ipsec Delete by id. +- Returns the IPsec configuration details of a given node with the hostname and the NAD IP. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + hostName: + description: + - HostName path parameter. Hostname of the deployed node. + type: str + nadIp: + description: + - NadIp path parameter. IP address of the NAD. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + native_ipsec.NativeIpsec.get_ipsec_node, + + - Paths used are + get /api/v1/ipsec/{hostName}/{nadIp}, + +""" + +EXAMPLES = r""" +- name: Get Ipsec Delete by id + cisco.ise.ipsec_delete_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + hostName: string + nadIp: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "authType": "string", + "certId": "string", + "configureVti": true, + "createTime": "string", + "espAhProtocol": "string", + "hostName": "string", + "id": "string", + "iface": "string", + "ikeReAuthTime": 0, + "ikeVersion": "string", + "link": { + "href": "string", + "rel": "string", + "type": "string" + }, + "localInternalIp": "string", + "modeOption": "string", + "nadIp": "string", + "phaseOneDHGroup": "string", + "phaseOneEncryptionAlgo": "string", + "phaseOneHashAlgo": "string", + "phaseOneLifeTime": 0, + "phaseTwoDHGroup": "string", + "phaseTwoEncryptionAlgo": "string", + "phaseTwoHashAlgo": "string", + "phaseTwoLifeTime": 0, + "psk": "string", + "remotePeerInternalIp": "string", + "status": "string", + "updateTime": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/ipsec_disable.py b/ansible_collections/cisco/ise/plugins/modules/ipsec_disable.py new file mode 100644 index 000000000..6c47bf81b --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/ipsec_disable.py @@ -0,0 +1,98 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: ipsec_disable +short_description: Resource module for Ipsec Disable +description: +- Manage operation update of the resource Ipsec Disable. +- Disables an enabled IPsec node connection. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + hostName: + description: HostName path parameter. Hostname of the deployed node. + type: str + nadIp: + description: NadIp path parameter. IP address of the NAD. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + native_ipsec.NativeIpsec.disable_ipsec_connection, + + - Paths used are + put /api/v1/ipsec/disable/{hostName}/{nadIp}, + +""" + +EXAMPLES = r""" +- name: Update by id + cisco.ise.ipsec_disable: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + hostName: string + nadIp: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "authType": "string", + "certId": "string", + "configureVti": true, + "createTime": "string", + "espAhProtocol": "string", + "hostName": "string", + "id": "string", + "iface": "string", + "ikeReAuthTime": 0, + "ikeVersion": "string", + "link": { + "href": "string", + "rel": "string", + "type": "string" + }, + "localInternalIp": "string", + "modeOption": "string", + "nadIp": "string", + "phaseOneDHGroup": "string", + "phaseOneEncryptionAlgo": "string", + "phaseOneHashAlgo": "string", + "phaseOneLifeTime": 0, + "phaseTwoDHGroup": "string", + "phaseTwoEncryptionAlgo": "string", + "phaseTwoHashAlgo": "string", + "phaseTwoLifeTime": 0, + "psk": "string", + "remotePeerInternalIp": "string", + "status": "string", + "updateTime": "string" + } + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: dict + sample: > + { + "message": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/ipsec_disable_info.py b/ansible_collections/cisco/ise/plugins/modules/ipsec_disable_info.py new file mode 100644 index 000000000..a0a72bc74 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/ipsec_disable_info.py @@ -0,0 +1,90 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: ipsec_disable_info +short_description: Information module for Ipsec Disable +description: +- Get Ipsec Disable by id. +- Returns the IPsec configuration details of a given node with the hostname and the NAD IP. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + hostName: + description: + - HostName path parameter. Hostname of the deployed node. + type: str + nadIp: + description: + - NadIp path parameter. IP address of the NAD. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + native_ipsec.NativeIpsec.get_ipsec_node, + + - Paths used are + get /api/v1/ipsec/{hostName}/{nadIp}, + +""" + +EXAMPLES = r""" +- name: Get Ipsec Disable by id + cisco.ise.ipsec_disable_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + hostName: string + nadIp: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "authType": "string", + "certId": "string", + "configureVti": true, + "createTime": "string", + "espAhProtocol": "string", + "hostName": "string", + "id": "string", + "iface": "string", + "ikeReAuthTime": 0, + "ikeVersion": "string", + "link": { + "href": "string", + "rel": "string", + "type": "string" + }, + "localInternalIp": "string", + "modeOption": "string", + "nadIp": "string", + "phaseOneDHGroup": "string", + "phaseOneEncryptionAlgo": "string", + "phaseOneHashAlgo": "string", + "phaseOneLifeTime": 0, + "phaseTwoDHGroup": "string", + "phaseTwoEncryptionAlgo": "string", + "phaseTwoHashAlgo": "string", + "phaseTwoLifeTime": 0, + "psk": "string", + "remotePeerInternalIp": "string", + "status": "string", + "updateTime": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/ipsec_enable.py b/ansible_collections/cisco/ise/plugins/modules/ipsec_enable.py new file mode 100644 index 000000000..45366e0ab --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/ipsec_enable.py @@ -0,0 +1,98 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: ipsec_enable +short_description: Resource module for Ipsec Enable +description: +- Manage operation update of the resource Ipsec Enable. +- Enables an disabled IPsec node connection. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + hostName: + description: HostName path parameter. Hostname of the deployed node. + type: str + nadIp: + description: NadIp path parameter. IP address of the NAD. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + native_ipsec.NativeIpsec.enable_ipsec_connection, + + - Paths used are + put /api/v1/ipsec/enable/{hostName}/{nadIp}, + +""" + +EXAMPLES = r""" +- name: Update by id + cisco.ise.ipsec_enable: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + hostName: string + nadIp: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "authType": "string", + "certId": "string", + "configureVti": true, + "createTime": "string", + "espAhProtocol": "string", + "hostName": "string", + "id": "string", + "iface": "string", + "ikeReAuthTime": 0, + "ikeVersion": "string", + "link": { + "href": "string", + "rel": "string", + "type": "string" + }, + "localInternalIp": "string", + "modeOption": "string", + "nadIp": "string", + "phaseOneDHGroup": "string", + "phaseOneEncryptionAlgo": "string", + "phaseOneHashAlgo": "string", + "phaseOneLifeTime": 0, + "phaseTwoDHGroup": "string", + "phaseTwoEncryptionAlgo": "string", + "phaseTwoHashAlgo": "string", + "phaseTwoLifeTime": 0, + "psk": "string", + "remotePeerInternalIp": "string", + "status": "string", + "updateTime": "string" + } + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: dict + sample: > + { + "message": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/ipsec_enable_info.py b/ansible_collections/cisco/ise/plugins/modules/ipsec_enable_info.py new file mode 100644 index 000000000..93dfd3cc4 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/ipsec_enable_info.py @@ -0,0 +1,90 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: ipsec_enable_info +short_description: Information module for Ipsec Enable +description: +- Get Ipsec Enable by id. +- Returns the IPsec configuration details of a given node with the hostname and the NAD IP. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + hostName: + description: + - HostName path parameter. Hostname of the deployed node. + type: str + nadIp: + description: + - NadIp path parameter. IP address of the NAD. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + native_ipsec.NativeIpsec.get_ipsec_node, + + - Paths used are + get /api/v1/ipsec/{hostName}/{nadIp}, + +""" + +EXAMPLES = r""" +- name: Get Ipsec Enable by id + cisco.ise.ipsec_enable_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + hostName: string + nadIp: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "authType": "string", + "certId": "string", + "configureVti": true, + "createTime": "string", + "espAhProtocol": "string", + "hostName": "string", + "id": "string", + "iface": "string", + "ikeReAuthTime": 0, + "ikeVersion": "string", + "link": { + "href": "string", + "rel": "string", + "type": "string" + }, + "localInternalIp": "string", + "modeOption": "string", + "nadIp": "string", + "phaseOneDHGroup": "string", + "phaseOneEncryptionAlgo": "string", + "phaseOneHashAlgo": "string", + "phaseOneLifeTime": 0, + "phaseTwoDHGroup": "string", + "phaseTwoEncryptionAlgo": "string", + "phaseTwoHashAlgo": "string", + "phaseTwoLifeTime": 0, + "psk": "string", + "remotePeerInternalIp": "string", + "status": "string", + "updateTime": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/ipsec_info.py b/ansible_collections/cisco/ise/plugins/modules/ipsec_info.py new file mode 100644 index 000000000..16c0e3572 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/ipsec_info.py @@ -0,0 +1,193 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: ipsec_info +short_description: Information module for Ipsec Info +description: +- Get all Ipsec Info. +- Get Ipsec Info by id. +- Returns all the IPsec enabled nodes with configuration details. +- Returns the IPsec configuration details of a given node with the hostname and the NAD IP. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + page: + description: + - Page query parameter. Page number. + type: int + size: + description: + - Size query parameter. Number of objects returned per page. + type: int + filter: + description: + - > + Filter query parameter. .. Container **Simple filtering** should be available through the filter query + string parameter. The structure of a filter is a triplet of field operator and value separated with dots. + More than one filter can be sent. The logical operator common to ALL filter criteria will be by default AND, + and can be changed by using the *"filterType=or"* query string parameter. + - Each resource Data model description should specify if an attribute is a filtered field. + - The 'EQ' operator describes 'Equals'. + - The 'NEQ' operator describes 'Not Equals'. + - The 'GT' operator describes 'Greater Than'. + - The 'LT' operator describes 'Less Than'. + - The 'STARTSW' operator describes 'Starts With'. + - The 'NSTARTSW' operator describes 'Not Starts With'. + - The 'ENDSW' operator describes 'Ends With'. + - The 'NENDSW' operator describes 'Not Ends With'. + - The 'CONTAINS' operator describes 'Contains'. + - The 'NCONTAINS' operator describes 'Not Contains'. + type: str + filterType: + description: + - > + FilterType query parameter. The logical operator common to ALL filter criteria will be by default AND, and + can be changed by using the parameter. + type: str + sort: + description: + - Sort query parameter. Sort type - asc or desc. + type: str + sortBy: + description: + - > + SortBy query parameter. Sort column - The IPsec enabled nodes are sorted based on the columns. This is + applicable for the field - hostName. + type: str + hostName: + description: + - HostName path parameter. Hostname of the deployed node. + type: str + nadIp: + description: + - NadIp path parameter. IP address of the NAD. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + native_ipsec.NativeIpsec.get_ipsec_enabled_nodes_generator, + native_ipsec.NativeIpsec.get_ipsec_node, + + - Paths used are + get /api/v1/ipsec, + get /api/v1/ipsec/{hostName}/{nadIp}, + +""" + +EXAMPLES = r""" +- name: Get all Ipsec Info + cisco.ise.ipsec_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + page: 0 + size: 0 + filter: string + filterType: string + sort: string + sortBy: string + register: result + +- name: Get Ipsec Info by id + cisco.ise.ipsec_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + hostName: string + nadIp: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "authType": "string", + "certId": "string", + "configureVti": true, + "createTime": "string", + "espAhProtocol": "string", + "hostName": "string", + "id": "string", + "iface": "string", + "ikeReAuthTime": 0, + "ikeVersion": "string", + "link": { + "href": "string", + "rel": "string", + "type": "string" + }, + "localInternalIp": "string", + "modeOption": "string", + "nadIp": "string", + "phaseOneDHGroup": "string", + "phaseOneEncryptionAlgo": "string", + "phaseOneHashAlgo": "string", + "phaseOneLifeTime": 0, + "phaseTwoDHGroup": "string", + "phaseTwoEncryptionAlgo": "string", + "phaseTwoHashAlgo": "string", + "phaseTwoLifeTime": 0, + "psk": "string", + "remotePeerInternalIp": "string", + "status": "string", + "updateTime": "string" + } + +ise_responses: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: list + elements: dict + sample: > + [ + { + "authType": "string", + "certId": "string", + "configureVti": true, + "createTime": "string", + "espAhProtocol": "string", + "hostName": "string", + "id": "string", + "iface": "string", + "ikeReAuthTime": 0, + "ikeVersion": "string", + "link": { + "href": "string", + "rel": "string", + "type": "string" + }, + "localInternalIp": "string", + "modeOption": "string", + "nadIp": "string", + "phaseOneDHGroup": "string", + "phaseOneEncryptionAlgo": "string", + "phaseOneHashAlgo": "string", + "phaseOneLifeTime": 0, + "phaseTwoDHGroup": "string", + "phaseTwoEncryptionAlgo": "string", + "phaseTwoHashAlgo": "string", + "phaseTwoLifeTime": 0, + "psk": "string", + "remotePeerInternalIp": "string", + "status": "string", + "updateTime": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/ise_root_ca_regenerate.py b/ansible_collections/cisco/ise/plugins/modules/ise_root_ca_regenerate.py index c61db07fd..bb80533e3 100644 --- a/ansible_collections/cisco/ise/plugins/modules/ise_root_ca_regenerate.py +++ b/ansible_collections/cisco/ise/plugins/modules/ise_root_ca_regenerate.py @@ -21,7 +21,7 @@ options: CSR. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/licensing_connection_type_info.py b/ansible_collections/cisco/ise/plugins/modules/licensing_connection_type_info.py index 46a7b777d..3415ea2b8 100644 --- a/ansible_collections/cisco/ise/plugins/modules/licensing_connection_type_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/licensing_connection_type_info.py @@ -10,14 +10,14 @@ module: licensing_connection_type_info short_description: Information module for Licensing Connection Type description: - Get all Licensing Connection Type. -- Get connection type. +- Get the connection type. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module_info author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Licensing diff --git a/ansible_collections/cisco/ise/plugins/modules/licensing_eval_license_info.py b/ansible_collections/cisco/ise/plugins/modules/licensing_eval_license_info.py index b594f90db..0a50416b9 100644 --- a/ansible_collections/cisco/ise/plugins/modules/licensing_eval_license_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/licensing_eval_license_info.py @@ -10,14 +10,14 @@ module: licensing_eval_license_info short_description: Information module for Licensing Eval License description: - Get all Licensing Eval License. -- Get registration information. +- Get registration information related to the evaluation license. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module_info author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Licensing diff --git a/ansible_collections/cisco/ise/plugins/modules/licensing_feature_to_tier_mapping_info.py b/ansible_collections/cisco/ise/plugins/modules/licensing_feature_to_tier_mapping_info.py index 0ecf5b696..d33c19bb0 100644 --- a/ansible_collections/cisco/ise/plugins/modules/licensing_feature_to_tier_mapping_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/licensing_feature_to_tier_mapping_info.py @@ -10,14 +10,14 @@ module: licensing_feature_to_tier_mapping_info short_description: Information module for Licensing Feature To Tier Mapping description: - Get all Licensing Feature To Tier Mapping. -- Get feature to tier mapping. +- Get feature to tier mapping information. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module_info author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Licensing @@ -52,10 +52,10 @@ ise_response: sample: > [ { + "tier": "string", "featureName": [ "string" - ], - "tier": "string" + ] } ] """ diff --git a/ansible_collections/cisco/ise/plugins/modules/licensing_registration_create.py b/ansible_collections/cisco/ise/plugins/modules/licensing_registration_create.py index b224fdcc8..c4bb7e59d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/licensing_registration_create.py +++ b/ansible_collections/cisco/ise/plugins/modules/licensing_registration_create.py @@ -10,21 +10,22 @@ module: licensing_registration_create short_description: Resource module for Licensing Registration Create description: - Manage operation create of the resource Licensing Registration Create. -- License - Configure registration information. +- Configure registration information. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module author: Rafael Campos (@racampos) options: connectionType: - description: Licensing Registration Create's connectionType. + description: Type of connection for the registration. type: str registrationType: - description: Licensing Registration Create's registrationType. + description: Register, deregister, renew or update. type: str ssmOnPremServer: - description: If connection type is selected as SSM_ONPREM_SERVER, then IP address - or the hostname (or FQDN) of the SSM On-Prem server Host. + description: If the connection type is selected as SSM_ONPREM_SERVER, then this + field consists of IP address or the hostname (or FQDN) of the SSM On-Prem server + host. type: str tier: description: Licensing Registration Create's tier. @@ -34,7 +35,7 @@ options: description: Token. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Licensing diff --git a/ansible_collections/cisco/ise/plugins/modules/licensing_registration_info.py b/ansible_collections/cisco/ise/plugins/modules/licensing_registration_info.py index d88e0e987..1a42c6fb2 100644 --- a/ansible_collections/cisco/ise/plugins/modules/licensing_registration_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/licensing_registration_info.py @@ -10,14 +10,14 @@ module: licensing_registration_info short_description: Information module for Licensing Registration description: - Get all Licensing Registration. -- Get registration information. +- Get the registration information. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module_info author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Licensing @@ -50,11 +50,11 @@ ise_response: type: dict sample: > { - "connectionType": "string", - "registrationState": "string", - "ssmOnPremServer": "string", "tier": [ "string" - ] + ], + "connectionType": "string", + "registrationState": "string", + "ssmOnPremServer": "string" } """ diff --git a/ansible_collections/cisco/ise/plugins/modules/licensing_smart_state_create.py b/ansible_collections/cisco/ise/plugins/modules/licensing_smart_state_create.py index 85dcd4876..7a644dfc4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/licensing_smart_state_create.py +++ b/ansible_collections/cisco/ise/plugins/modules/licensing_smart_state_create.py @@ -10,14 +10,14 @@ module: licensing_smart_state_create short_description: Resource module for Licensing Smart State Create description: - Manage operation create of the resource Licensing Smart State Create. -- License - Configure smart state information. +- Configure smart state information. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Licensing diff --git a/ansible_collections/cisco/ise/plugins/modules/licensing_smart_state_info.py b/ansible_collections/cisco/ise/plugins/modules/licensing_smart_state_info.py index e82937305..eedf0c669 100644 --- a/ansible_collections/cisco/ise/plugins/modules/licensing_smart_state_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/licensing_smart_state_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Licensing diff --git a/ansible_collections/cisco/ise/plugins/modules/licensing_tier_state_create.py b/ansible_collections/cisco/ise/plugins/modules/licensing_tier_state_create.py index fe66204bd..930633f54 100644 --- a/ansible_collections/cisco/ise/plugins/modules/licensing_tier_state_create.py +++ b/ansible_collections/cisco/ise/plugins/modules/licensing_tier_state_create.py @@ -21,14 +21,14 @@ options: elements: dict suboptions: name: - description: Licensing Tier State Create's name. + description: License tier list. type: str status: - description: Licensing Tier State Create's status. + description: Current Smart Licensing State. type: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Licensing @@ -63,13 +63,13 @@ ise_response: type: dict sample: > { + "version": "string", "response": [ { - "message": "string", "name": "string", - "status": "string" + "status": "string", + "message": "string" } - ], - "version": "string" + ] } """ diff --git a/ansible_collections/cisco/ise/plugins/modules/licensing_tier_state_info.py b/ansible_collections/cisco/ise/plugins/modules/licensing_tier_state_info.py index 11ef62dae..d2838ad9a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/licensing_tier_state_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/licensing_tier_state_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Licensing @@ -52,12 +52,12 @@ ise_response: sample: > [ { + "name": "string", + "status": "string", "compliance": "string", "consumptionCounter": 0, "daysOutOfCompliance": "string", - "lastAuthorization": "string", - "name": "string", - "status": "string" + "lastAuthorization": "string" } ] """ diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_account_status_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_account_status_info.py index 8a64d0eb2..6b70acd3e 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_account_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_account_status_info.py @@ -24,7 +24,7 @@ options: - Duration path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_athentication_status_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_athentication_status_info.py index fd9138adf..541496cf8 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_athentication_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_athentication_status_info.py @@ -28,7 +28,7 @@ options: - RECORDS path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_authentication_status_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_authentication_status_info.py index 5a033a6c9..58ed4a68f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_authentication_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_authentication_status_info.py @@ -28,7 +28,7 @@ options: - RECORDS path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_failure_reasons_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_failure_reasons_info.py index 6ffa6c354..05cb7e7f0 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_failure_reasons_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_failure_reasons_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_active_count_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_active_count_info.py index 0a0bf0c25..bd1b0797a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_active_count_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_active_count_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_active_list_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_active_list_info.py index e62b3ef9b..1e5352a4e 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_active_list_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_active_list_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_auth_list_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_auth_list_info.py index 44685ba33..17890b330 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_auth_list_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_auth_list_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_ip_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_ip_info.py index ec45c8782..ce5a6c909 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_ip_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_ip_info.py @@ -20,7 +20,7 @@ options: - Endpoint_ipv4 path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_mac_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_mac_info.py index d9a4bcfb3..22b41e7a0 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_mac_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_mac_info.py @@ -20,7 +20,7 @@ options: - Mac path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_nas_ip_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_nas_ip_info.py index d6f0fa959..68e64d96c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_nas_ip_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_nas_ip_info.py @@ -20,7 +20,7 @@ options: - Nas_ipv4 path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_username_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_username_info.py index 548da9c6b..eea1960c3 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_username_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_by_username_info.py @@ -20,7 +20,7 @@ options: - Username path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_delete_all.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_delete_all.py index 63b7fa1aa..c127e0a09 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_delete_all.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_delete_all.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_disconnect_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_disconnect_info.py index 8de5ed1d5..083cb56c9 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_disconnect_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_disconnect_info.py @@ -36,7 +36,7 @@ options: - NAS_IPV4 path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_posture_count_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_posture_count_info.py index 774d9709a..78fa719cc 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_posture_count_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_posture_count_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_profiler_count_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_profiler_count_info.py index 05494c7d6..820197fb2 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_profiler_count_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_profiler_count_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_session_reauthentication_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_session_reauthentication_info.py index 9f1e55b73..d0786bf63 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_session_reauthentication_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_session_reauthentication_info.py @@ -28,7 +28,7 @@ options: - REAUTH_TYPE path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_sessions_by_session_id_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_sessions_by_session_id_info.py index b00af3952..f7dedd57f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_sessions_by_session_id_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_sessions_by_session_id_info.py @@ -20,7 +20,7 @@ options: - Session_id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/mnt_version_info.py b/ansible_collections/cisco/ise/plugins/modules/mnt_version_info.py index c26efbd54..413db1fca 100644 --- a/ansible_collections/cisco/ise/plugins/modules/mnt_version_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/mnt_version_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/my_device_portal.py b/ansible_collections/cisco/ise/plugins/modules/my_device_portal.py index 5677290f9..cb258d0de 100644 --- a/ansible_collections/cisco/ise/plugins/modules/my_device_portal.py +++ b/ansible_collections/cisco/ise/plugins/modules/my_device_portal.py @@ -275,7 +275,7 @@ options: type: dict type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/my_device_portal_info.py b/ansible_collections/cisco/ise/plugins/modules/my_device_portal_info.py index 742308c72..4b0a21b82 100644 --- a/ansible_collections/cisco/ise/plugins/modules/my_device_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/my_device_portal_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/native_supplicant_profile.py b/ansible_collections/cisco/ise/plugins/modules/native_supplicant_profile.py index c250782f3..4dc1b5796 100644 --- a/ansible_collections/cisco/ise/plugins/modules/native_supplicant_profile.py +++ b/ansible_collections/cisco/ise/plugins/modules/native_supplicant_profile.py @@ -48,7 +48,7 @@ options: type: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for NativeSupplicantProfile diff --git a/ansible_collections/cisco/ise/plugins/modules/native_supplicant_profile_info.py b/ansible_collections/cisco/ise/plugins/modules/native_supplicant_profile_info.py index 5976821cb..8fc75f333 100644 --- a/ansible_collections/cisco/ise/plugins/modules/native_supplicant_profile_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/native_supplicant_profile_info.py @@ -31,7 +31,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for NativeSupplicantProfile diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules.py b/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules.py index 4b3be685e..9cf9b6e0a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules.py @@ -229,7 +229,7 @@ options: type: str type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authentication Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules_info.py index f121dc6f2..9c298b03d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules_info.py @@ -27,7 +27,7 @@ options: - Id path parameter. Rule id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authentication Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules_reset_hitcount.py index e3e918c5f..476695c0e 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_authentication_rules_reset_hitcount.py @@ -20,7 +20,7 @@ options: description: PolicyId path parameter. Policy id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authentication Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules.py b/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules.py index 11cb7caff..04262598b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules.py @@ -220,7 +220,7 @@ options: description: Security group used in authorization policies. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authorization Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules_info.py index 6a5f812d3..0a237fa1b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules_info.py @@ -27,7 +27,7 @@ options: - Id path parameter. Rule id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authorization Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules_reset_hitcount.py index fc9311404..58ba3af9c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_authorization_rules_reset_hitcount.py @@ -20,7 +20,7 @@ options: description: PolicyId path parameter. Policy id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authorization Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_conditions.py b/ansible_collections/cisco/ise/plugins/modules/network_access_conditions.py index b5abc72da..8f1947cc6 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_conditions.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_conditions.py @@ -164,7 +164,7 @@ options: elements: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_authentication_rule_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_authentication_rule_info.py index d1977079d..d1025bb5a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_authentication_rule_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_authentication_rule_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_authorization_rule_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_authorization_rule_info.py index 1c33ff340..351c82760 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_authorization_rule_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_authorization_rule_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_policy_set_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_policy_set_info.py index eb9d44889..ad7ef2d1f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_for_policy_set_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_info.py index 04f96b355..aaf9ade1f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_conditions_info.py @@ -29,7 +29,7 @@ options: - Id path parameter. Condition id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary.py b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary.py index 64b1abb37..d2da6dfca 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary.py @@ -47,7 +47,7 @@ options: description: The dictionary version. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Dictionary diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attribute.py b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attribute.py index 2572d3833..7cd4a6705 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attribute.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attribute.py @@ -55,7 +55,7 @@ options: description: The dictionary attribute's name. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Dictionary Attribute diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attribute_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attribute_info.py index 117323aac..fa44c37ec 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attribute_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attribute_info.py @@ -27,7 +27,7 @@ options: - Name path parameter. The dictionary attribute name. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Dictionary Attribute diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_authentication_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_authentication_info.py index cf7b71905..27d99454f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_authentication_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_authentication_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Dictionary Attributes List diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_authorization_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_authorization_info.py index 7325147f9..f549bf9d6 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_authorization_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_authorization_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Dictionary Attributes List diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_policy_set_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_policy_set_info.py index 07ac1479c..e2efc8258 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_attributes_policy_set_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Dictionary Attributes List diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_info.py index 7ddff701a..b74780804 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_dictionary_info.py @@ -23,7 +23,7 @@ options: - Name path parameter. The dictionary name. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Dictionary diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules.py b/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules.py index cb6eb3e48..1aeea1a74 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules.py @@ -217,7 +217,7 @@ options: description: Security group used in authorization policies. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authorization Global Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules_info.py index e98c99cb6..6bfc2d26b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules_info.py @@ -23,7 +23,7 @@ options: - Id path parameter. Rule id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authorization Global Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules_reset_hitcount.py index de070305f..48d8437f6 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_global_exception_rules_reset_hitcount.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authorization Global Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_identity_stores_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_identity_stores_info.py index 50c59b392..68f21b90d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_identity_stores_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_identity_stores_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Identity Stores diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules.py b/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules.py index 94bd67b35..6862a69d8 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules.py @@ -220,7 +220,7 @@ options: description: Security group used in authorization policies. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authorization Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules_info.py index 572027db8..db3bcee1c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules_info.py @@ -27,7 +27,7 @@ options: - Id path parameter. Rule id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authorization Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules_reset_hitcounts.py b/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules_reset_hitcounts.py index a7e32207d..a15aeb581 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules_reset_hitcounts.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_local_exception_rules_reset_hitcounts.py @@ -20,7 +20,7 @@ options: description: PolicyId path parameter. Policy id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Authorization Exception Rules diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_network_condition.py b/ansible_collections/cisco/ise/plugins/modules/network_access_network_condition.py index 4cf768c5d..db71eaaf2 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_network_condition.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_network_condition.py @@ -30,24 +30,23 @@ options: description: Network Access Network Condition's description. type: str deviceGroupList: - description:

    This field should contain a NDG Root, comma, and an NDG + description:

    This field should contain a tuple with NDG Root, comma, and an NDG (that it under the root).
    Line format - NDG Root Name, NDG, Port

    . elements: str type: list deviceList: - description:

    This field should contain Device-Name,port-number. The device - name must be the same as the name field in a Network Device object.
    Line - format - Device Name,Port

    . + description:

    This field should contain Device Name. The device name must be the + same as the name field in a Network Device object. Line format - Device Name

    . elements: str type: list id: description: Network Access Network Condition's id. type: str ipAddrList: - description:

    This field should contain IP-address-or-subnet,port number
    - IP address can be IPV4 format (n.n.n.n) or IPV6 format (n n n n n n n n).
    - IP subnet can be IPV4 format (n.n.n.n/m) or IPV6 format (n n n n n n n n/m).
    - Line format - IP Address or subnet,Port

    . + description:

    This field should contain IP address or subnet.
    IP address can + be IPV4 format (n.n.n.n) or IPV6 format (n n n n n n n n).
    IP subnet can be + IPV4 format (n.n.n.n/m) or IPV6 format (n n n n n n n n/m).
    Line format - + IP Address or subnet

    . elements: str type: list link: @@ -74,7 +73,7 @@ options: description: Network Condition name. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Network Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_network_condition_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_network_condition_info.py index 063585c97..ecfa4589e 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_network_condition_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_network_condition_info.py @@ -23,7 +23,7 @@ options: - Id path parameter. Condition id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Network Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set.py b/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set.py index 8e98f1cb8..082866604 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set.py @@ -210,7 +210,7 @@ options: matched. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Policy Set diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set_info.py index 7c5c9d535..62ee4c19f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set_info.py @@ -23,7 +23,7 @@ options: - Id path parameter. Policy id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Policy Set diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set_reset_hitcount.py b/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set_reset_hitcount.py index ceda451e8..9d7de077c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set_reset_hitcount.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_policy_set_reset_hitcount.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Policy Set diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_profiles_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_profiles_info.py index 5c954e513..b4cbade5e 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_profiles_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_profiles_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Profiles diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_security_groups_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_security_groups_info.py index bcb6d16c9..921655812 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_security_groups_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_security_groups_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Security Groups diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_service_name_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_service_name_info.py index 1f63e6c1c..68695c941 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_service_name_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_service_name_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Service Names diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_time_date_conditions.py b/ansible_collections/cisco/ise/plugins/modules/network_access_time_date_conditions.py index efa5d901c..ef7706751 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_time_date_conditions.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_time_date_conditions.py @@ -162,7 +162,7 @@ options: elements: str type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Time/Date Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/network_access_time_date_conditions_info.py b/ansible_collections/cisco/ise/plugins/modules/network_access_time_date_conditions_info.py index eb6ee1b0b..f1fcd11db 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_access_time_date_conditions_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_access_time_date_conditions_info.py @@ -23,7 +23,7 @@ options: - Id path parameter. Condition id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Network Access - Time/Date Conditions diff --git a/ansible_collections/cisco/ise/plugins/modules/network_device.py b/ansible_collections/cisco/ise/plugins/modules/network_device.py index cde422c7a..8e15c4604 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_device.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_device.py @@ -191,7 +191,7 @@ options: type: dict type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/network_device_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/network_device_bulk_monitor_status_info.py index 8a766835d..2944371f3 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_device_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_device_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/network_device_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/network_device_bulk_request.py index 530df579b..df606cf06 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_device_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_device_bulk_request.py @@ -23,7 +23,7 @@ options: description: Network Device Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/network_device_group.py b/ansible_collections/cisco/ise/plugins/modules/network_device_group.py index d2c17dd56..13736156c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_device_group.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_device_group.py @@ -27,11 +27,11 @@ options: name: description: Network Device Group's name. type: str - ndgtype: - description: Network Device Group's ndgtype. + othername: + description: Network Device Group's othername. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are @@ -57,7 +57,7 @@ EXAMPLES = r""" description: string id: string name: string - ndgtype: string + othername: string - name: Delete by id cisco.ise.network_device_group: @@ -77,7 +77,7 @@ EXAMPLES = r""" state: present description: string name: string - ndgtype: string + othername: string """ @@ -96,7 +96,7 @@ ise_response: "href": "string", "type": "string" }, - "ndgtype": "string" + "othername": "string" } ise_update_response: diff --git a/ansible_collections/cisco/ise/plugins/modules/network_device_group_info.py b/ansible_collections/cisco/ise/plugins/modules/network_device_group_info.py index 757237f1d..ac6dd2542 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_device_group_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_device_group_info.py @@ -73,7 +73,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are @@ -138,7 +138,7 @@ ise_response: "href": "string", "type": "string" }, - "ndgtype": "string" + "othername": "string" } ise_responses: @@ -158,7 +158,7 @@ ise_responses: "href": "string", "type": "string" }, - "ndgtype": "string" + "othername": "string" } ] """ diff --git a/ansible_collections/cisco/ise/plugins/modules/network_device_info.py b/ansible_collections/cisco/ise/plugins/modules/network_device_info.py index 36505fec4..036a7bcbe 100644 --- a/ansible_collections/cisco/ise/plugins/modules/network_device_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/network_device_info.py @@ -71,7 +71,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/node_deployment.py b/ansible_collections/cisco/ise/plugins/modules/node_deployment.py index 237154029..0c997d773 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_deployment.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_deployment.py @@ -42,7 +42,7 @@ options: description: Node Deployment's userName. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Deployment diff --git a/ansible_collections/cisco/ise/plugins/modules/node_deployment_info.py b/ansible_collections/cisco/ise/plugins/modules/node_deployment_info.py index 86af43a84..bbe07b639 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_deployment_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_deployment_info.py @@ -49,7 +49,7 @@ options: - Hostname path parameter. Hostname of the deployed node. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Deployment diff --git a/ansible_collections/cisco/ise/plugins/modules/node_deployment_sync.py b/ansible_collections/cisco/ise/plugins/modules/node_deployment_sync.py index fd2e3ecca..60efa7d22 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_deployment_sync.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_deployment_sync.py @@ -10,7 +10,7 @@ module: node_deployment_sync short_description: Resource module for Node Deployment Sync description: - Manage operation create of the resource Node Deployment Sync. -- Performing a manual synchronization involves a reload of the target node, but. +- Performing a manual synchronization involves a reload of the target node, but not the primary PAN. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module @@ -20,7 +20,7 @@ options: description: Hostname path parameter. Hostname of the node. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Deployment diff --git a/ansible_collections/cisco/ise/plugins/modules/node_group.py b/ansible_collections/cisco/ise/plugins/modules/node_group.py index 04fcc0f7d..0c6da3f49 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_group.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_group.py @@ -12,7 +12,7 @@ description: - Manage operations create, update and delete of the resource Node Group. - This API creates a node group in the cluster. A node group is a group of PSNs,. - Delete an existing node group in the cluster. Deleting the node group does not delete the nodes, but failover is no longer carried out among the nodes. -- Purpose of this API is to update an existing node group. +- Update an existing node group. version_added: '1.0.0' extends_documentation_fragment: - cisco.ise.module @@ -52,7 +52,7 @@ options: description: NodeGroupName path parameter. Name of the existing node group. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Group @@ -122,14 +122,14 @@ ise_response: type: dict sample: > { + "name": "string", "description": "string", "marCache": { - "query-attempts": 0, - "query-timeout": 0, + "replication-timeout": 0, "replication-attempts": 0, - "replication-timeout": 0 - }, - "name": "string" + "query-timeout": 0, + "query-attempts": 0 + } } ise_update_response: diff --git a/ansible_collections/cisco/ise/plugins/modules/node_group_info.py b/ansible_collections/cisco/ise/plugins/modules/node_group_info.py index 4fbf7af0f..c2cc29728 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_group_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_group_info.py @@ -23,7 +23,7 @@ options: - NodeGroupName path parameter. Name of the existing node group. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Group @@ -67,13 +67,13 @@ ise_response: type: dict sample: > { + "name": "string", "description": "string", "marCache": { - "query-attempts": 0, - "query-timeout": 0, + "replication-timeout": 0, "replication-attempts": 0, - "replication-timeout": 0 - }, - "name": "string" + "query-timeout": 0, + "query-attempts": 0 + } } """ diff --git a/ansible_collections/cisco/ise/plugins/modules/node_group_node_create.py b/ansible_collections/cisco/ise/plugins/modules/node_group_node_create.py index 6a70be798..7f420797c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_group_node_create.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_group_node_create.py @@ -23,7 +23,7 @@ options: description: NodeGroupName path parameter. Name of the existing node group. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Group diff --git a/ansible_collections/cisco/ise/plugins/modules/node_group_node_delete.py b/ansible_collections/cisco/ise/plugins/modules/node_group_node_delete.py index 84fc6b947..b6615c667 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_group_node_delete.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_group_node_delete.py @@ -23,7 +23,7 @@ options: description: NodeGroupName path parameter. Name of the existing node group. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Group diff --git a/ansible_collections/cisco/ise/plugins/modules/node_group_node_info.py b/ansible_collections/cisco/ise/plugins/modules/node_group_node_info.py index a2fbd4294..c35c00fa3 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_group_node_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_group_node_info.py @@ -21,7 +21,7 @@ options: - NodeGroupName path parameter. Name of the existing node group. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Group diff --git a/ansible_collections/cisco/ise/plugins/modules/node_info.py b/ansible_collections/cisco/ise/plugins/modules/node_info.py index 92e80d782..2c5d0acab 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_info.py @@ -63,7 +63,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for NodeDetails diff --git a/ansible_collections/cisco/ise/plugins/modules/node_primary_to_standalone.py b/ansible_collections/cisco/ise/plugins/modules/node_primary_to_standalone.py index a9d2c776f..e2bafd34a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_primary_to_standalone.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_primary_to_standalone.py @@ -21,7 +21,7 @@ options: type: str required: true requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Deployment diff --git a/ansible_collections/cisco/ise/plugins/modules/node_promotion.py b/ansible_collections/cisco/ise/plugins/modules/node_promotion.py index 8c6582275..84eca3856 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_promotion.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_promotion.py @@ -19,7 +19,7 @@ options: description: Node Promotion's promotionType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/node_replication_status_info.py b/ansible_collections/cisco/ise/plugins/modules/node_replication_status_info.py index 430ddc187..ef6d06338 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_replication_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_replication_status_info.py @@ -20,7 +20,7 @@ options: - Node path parameter. ID of the existing node. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/node_secondary_to_primary.py b/ansible_collections/cisco/ise/plugins/modules/node_secondary_to_primary.py index f837ebfe1..7e3901fb2 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_secondary_to_primary.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_secondary_to_primary.py @@ -21,7 +21,7 @@ options: type: str required: true requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Deployment diff --git a/ansible_collections/cisco/ise/plugins/modules/node_services_interfaces_info.py b/ansible_collections/cisco/ise/plugins/modules/node_services_interfaces_info.py index 15d3d06b2..8b0564968 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_services_interfaces_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_services_interfaces_info.py @@ -21,7 +21,7 @@ options: - Hostname path parameter. Hostname of the node. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Services diff --git a/ansible_collections/cisco/ise/plugins/modules/node_services_profiler_probe_config.py b/ansible_collections/cisco/ise/plugins/modules/node_services_profiler_probe_config.py index 1307411ce..4abe83a25 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_services_profiler_probe_config.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_services_profiler_probe_config.py @@ -140,7 +140,7 @@ options: type: int type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Services diff --git a/ansible_collections/cisco/ise/plugins/modules/node_services_profiler_probe_config_info.py b/ansible_collections/cisco/ise/plugins/modules/node_services_profiler_probe_config_info.py index c65326de2..82a284ed0 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_services_profiler_probe_config_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_services_profiler_probe_config_info.py @@ -21,7 +21,7 @@ options: - Hostname path parameter. Hostname of the node. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Services diff --git a/ansible_collections/cisco/ise/plugins/modules/node_services_sxp_interfaces.py b/ansible_collections/cisco/ise/plugins/modules/node_services_sxp_interfaces.py index fc29dc3e5..3d28ad1bc 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_services_sxp_interfaces.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_services_sxp_interfaces.py @@ -23,7 +23,7 @@ options: description: Node Services SXP Interfaces's interface. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Services diff --git a/ansible_collections/cisco/ise/plugins/modules/node_services_sxp_interfaces_info.py b/ansible_collections/cisco/ise/plugins/modules/node_services_sxp_interfaces_info.py index 3c2f925d9..219b3cae9 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_services_sxp_interfaces_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_services_sxp_interfaces_info.py @@ -21,7 +21,7 @@ options: - Hostname path parameter. Hostname of the node. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Services diff --git a/ansible_collections/cisco/ise/plugins/modules/node_standalone_to_primary.py b/ansible_collections/cisco/ise/plugins/modules/node_standalone_to_primary.py index 67160219b..c096002b1 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_standalone_to_primary.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_standalone_to_primary.py @@ -21,7 +21,7 @@ options: type: str required: true requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Node Deployment diff --git a/ansible_collections/cisco/ise/plugins/modules/node_sync.py b/ansible_collections/cisco/ise/plugins/modules/node_sync.py index 7389635e4..51a79c2a3 100644 --- a/ansible_collections/cisco/ise/plugins/modules/node_sync.py +++ b/ansible_collections/cisco/ise/plugins/modules/node_sync.py @@ -19,7 +19,7 @@ options: description: Node Sync's hostname. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pan_ha.py b/ansible_collections/cisco/ise/plugins/modules/pan_ha.py index 3029954f9..a7df12555 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pan_ha.py +++ b/ansible_collections/cisco/ise/plugins/modules/pan_ha.py @@ -31,7 +31,7 @@ options: description: Pan Ha's secondaryHealthCheckNode. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pan_ha_info.py b/ansible_collections/cisco/ise/plugins/modules/pan_ha_info.py index 3061000ca..4a7b4da1c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pan_ha_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pan_ha_info.py @@ -20,7 +20,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for PAN HA @@ -53,14 +53,14 @@ ise_response: type: dict sample: > { - "failedAttempts": 0, "isEnabled": true, - "pollingInterval": 0, "primaryHealthCheckNode": { "hostname": "string" }, "secondaryHealthCheckNode": { "hostname": "string" - } + }, + "pollingInterval": 0, + "failedAttempts": 0 } """ diff --git a/ansible_collections/cisco/ise/plugins/modules/pan_ha_update.py b/ansible_collections/cisco/ise/plugins/modules/pan_ha_update.py index 9a8b048b2..afde826c2 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pan_ha_update.py +++ b/ansible_collections/cisco/ise/plugins/modules/pan_ha_update.py @@ -42,7 +42,7 @@ options: type: str type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for PAN HA diff --git a/ansible_collections/cisco/ise/plugins/modules/patch_info.py b/ansible_collections/cisco/ise/plugins/modules/patch_info.py index ba13a4851..54eaafff9 100644 --- a/ansible_collections/cisco/ise/plugins/modules/patch_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/patch_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Patching diff --git a/ansible_collections/cisco/ise/plugins/modules/patch_install.py b/ansible_collections/cisco/ise/plugins/modules/patch_install.py index d2a1bfc92..fcc239e3e 100644 --- a/ansible_collections/cisco/ise/plugins/modules/patch_install.py +++ b/ansible_collections/cisco/ise/plugins/modules/patch_install.py @@ -12,12 +12,16 @@ description: - Manage operation create of the resource Patch Install. - > Triggers patch installation on the Cisco ISE node. A task ID is returned which can be used to monitor the progress of the patch installation process. As - the patch installation triggers the Cisco ISE to restart, the task API becomes unavailable for a certain period of time. + the patch installation triggers the Cisco ISE to restart, the task API becomes unavailable for a certain period of time. For installation of patch on + secondary nodes, request needs to be sent to individual node instead of the Primary Administration Node. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module author: Rafael Campos (@racampos) options: + isDirectoryListed: + description: IsDirectoryListed flag. + type: bool patchName: description: Patch Install's patchName. type: str @@ -25,7 +29,7 @@ options: description: Patch Install's repositoryName. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Patching @@ -47,6 +51,7 @@ EXAMPLES = r""" ise_username: "{{ise_username}}" ise_password: "{{ise_password}}" ise_verify: "{{ise_verify}}" + isDirectoryListed: true patchName: string repositoryName: string diff --git a/ansible_collections/cisco/ise/plugins/modules/patch_rollback.py b/ansible_collections/cisco/ise/plugins/modules/patch_rollback.py index 2838048f8..277eda197 100644 --- a/ansible_collections/cisco/ise/plugins/modules/patch_rollback.py +++ b/ansible_collections/cisco/ise/plugins/modules/patch_rollback.py @@ -12,7 +12,8 @@ description: - Manage operation create of the resource Patch Rollback. - > Triggers patch rollback on the Cisco ISE node. A task ID is returned which can be used to monitor the progress of the patch rollback process. As the - patch rollback triggers the Cisco ISE to restart, the task API becomes unavailable for a certain period of time. + patch rollback triggers the Cisco ISE to restart, the task API becomes unavailable for a certain period of time. For rollback of patch on secondary + nodes , request needs to sent on individual node instead of the Primary Administration Node. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module @@ -22,7 +23,7 @@ options: description: Patch Rollback's patchNumber. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Patching diff --git a/ansible_collections/cisco/ise/plugins/modules/personas_promote_primary.py b/ansible_collections/cisco/ise/plugins/modules/personas_promote_primary.py index 428c48230..a25ac912e 100644 --- a/ansible_collections/cisco/ise/plugins/modules/personas_promote_primary.py +++ b/ansible_collections/cisco/ise/plugins/modules/personas_promote_primary.py @@ -15,7 +15,11 @@ author: Rafael Campos (@racampos) options: ip: description: - - The IP address of the primary node + - The public IP address of the primary node + type: str + hostname: + description: + - The hostname of the primary node. type: str username: description: @@ -25,6 +29,11 @@ options: description: - The password to log into the primary node. type: str + roles: + description: + - The roles to be fulfilled by this node. Must contain at least PPAN and any of MNT-ACTIVE or MNT-STANDBY or PDP + type: list + elements: str ise_verify: description: - Whether or not to verify the identity of the node. @@ -51,8 +60,12 @@ EXAMPLES = r""" - name: Promote primary node cisco.ise.personas_promote_primary: ip: 10.1.1.1 + hostname: ise-pan-server-1 username: admin - password: Cisco123 + password: cisco123 + roles: + - PPAN + - MNT-ACTIVE """ RETURN = r""" diff --git a/ansible_collections/cisco/ise/plugins/modules/portal_global_setting.py b/ansible_collections/cisco/ise/plugins/modules/portal_global_setting.py index af332d5c2..72ca73642 100644 --- a/ansible_collections/cisco/ise/plugins/modules/portal_global_setting.py +++ b/ansible_collections/cisco/ise/plugins/modules/portal_global_setting.py @@ -23,7 +23,7 @@ options: description: Portal Global Setting's id. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/portal_global_setting_info.py b/ansible_collections/cisco/ise/plugins/modules/portal_global_setting_info.py index ae481c4a3..91e70d099 100644 --- a/ansible_collections/cisco/ise/plugins/modules/portal_global_setting_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/portal_global_setting_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/portal_info.py b/ansible_collections/cisco/ise/plugins/modules/portal_info.py index 2d9654517..f394eabc9 100644 --- a/ansible_collections/cisco/ise/plugins/modules/portal_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/portal_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/portal_theme.py b/ansible_collections/cisco/ise/plugins/modules/portal_theme.py index 8554639f4..b795db83a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/portal_theme.py +++ b/ansible_collections/cisco/ise/plugins/modules/portal_theme.py @@ -31,7 +31,7 @@ options: description: Portal Theme for all portals. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/portal_theme_info.py b/ansible_collections/cisco/ise/plugins/modules/portal_theme_info.py index bc1fb3884..d1cd77e77 100644 --- a/ansible_collections/cisco/ise/plugins/modules/portal_theme_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/portal_theme_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/profiler_profile_info.py b/ansible_collections/cisco/ise/plugins/modules/profiler_profile_info.py index 9ddd192b0..60f716403 100644 --- a/ansible_collections/cisco/ise/plugins/modules/profiler_profile_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/profiler_profile_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings.py b/ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings.py index a4bb5b688..5ff3e0a6b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings.py +++ b/ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings.py @@ -35,7 +35,7 @@ options: description: User name for the proxy connection. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for proxy diff --git a/ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings_info.py b/ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings_info.py index 989e22add..ca4f92afd 100644 --- a/ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/proxy_connection_settings_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for proxy diff --git a/ansible_collections/cisco/ise/plugins/modules/px_grid_direct.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct.py new file mode 100644 index 000000000..69fefc242 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct.py @@ -0,0 +1,276 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: px_grid_direct +short_description: Resource module for Px Grid Direct +description: +- Manage operations create, update and delete of the resource Px Grid Direct. +- PxGrid Direct - Configure connectorconfig information. +- PxGrid Direct - Delete Configure connectorConfig information based on ConnectorName. +- PxGrid Direct - update Configure connectorConfig information based on ConnectorName. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + additionalProperties: + description: Px Grid Direct's additionalProperties. + type: dict + attributes: + description: ConnectorName. + suboptions: + attributeMapping: + description:

    List of feature names

    . + elements: dict + suboptions: + dictionaryAttribute: + description: Px Grid Direct's dictionaryAttribute. + type: str + includeInDictionary: + description: IncludeInDictionary flag. + type: bool + jsonAttribute: + description: Px Grid Direct's jsonAttribute. + type: str + type: list + correlationIdentifier: + description: Uniqueness to identify. + type: str + topLevelObject: + description: Root level of json. + type: str + uniqueIdentifier: + description: Uniqueness to identify. + type: str + versionIdentifier: + description: Version uniqueness to identify. + type: str + type: dict + connectorName: + description: ConnectorName. + type: str + connectorType: + description: Connector Type list. + type: str + deltasyncSchedule: + description: Px Grid Direct's deltasyncSchedule. + suboptions: + interval: + description: Run at interval (hours). + type: int + intervalUnit: + description: Interval Units. + type: str + startDate: + description: Start date and Time. + type: str + type: dict + description: + description: Description. + type: str + enabled: + description: Enabled flag. + type: bool + fullsyncSchedule: + description: Px Grid Direct's fullsyncSchedule. + suboptions: + interval: + description: Run at interval (hours). + type: int + intervalUnit: + description: Interval Units. + type: str + startDate: + description: Start date and Time. + type: str + type: dict + protocol: + description: Protocol. + type: str + skipCertificateValidations: + description: SkipCertificateValidations flag. + type: bool + url: + description: Px Grid Direct's url. + suboptions: + authenticationType: + description: Authentication Type list. + type: str + bulkUrl: + description: BulkUrl. + type: str + incrementalUrl: + description: IncrementalUrl. + type: str + password: + description: Password. + type: str + userName: + description: UserName. + type: str + type: dict +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + px_grid_direct.PxGridDirect.create_connector_config, + px_grid_direct.PxGridDirect.delete_connector_config_by_connector_name, + px_grid_direct.PxGridDirect.update_connector_config_by_connector_name, + + - Paths used are + post /api/v1/pxgrid-direct/connector-config, + delete /api/v1/pxgrid-direct/connector-config/{connectorName}, + put /api/v1/pxgrid-direct/connector-config/{connectorName}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.px_grid_direct: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + additionalProperties: {} + attributes: + attributeMapping: + - dictionaryAttribute: string + includeInDictionary: true + jsonAttribute: string + correlationIdentifier: string + topLevelObject: string + uniqueIdentifier: string + versionIdentifier: string + connectorName: string + connectorType: string + deltasyncSchedule: + interval: 0 + intervalUnit: string + startDate: string + description: string + enabled: true + fullsyncSchedule: + interval: 0 + intervalUnit: string + startDate: string + protocol: string + skipCertificateValidations: true + url: + authenticationType: string + bulkUrl: string + incrementalUrl: string + password: string + userName: string + +- name: Update by name + cisco.ise.px_grid_direct: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + additionalProperties: {} + attributes: + attributeMapping: + - dictionaryAttribute: string + includeInDictionary: true + jsonAttribute: string + correlationIdentifier: string + topLevelObject: string + uniqueIdentifier: string + versionIdentifier: string + connectorName: string + connectorType: string + deltasyncSchedule: + interval: 0 + intervalUnit: string + startDate: string + description: string + enabled: true + fullsyncSchedule: + interval: 0 + intervalUnit: string + startDate: string + protocol: string + skipCertificateValidations: true + url: + authenticationType: string + bulkUrl: string + incrementalUrl: string + password: string + userName: string + +- name: Delete by name + cisco.ise.px_grid_direct: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + connectorName: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "connector": { + "additionalProperties": {}, + "attributes": { + "attributeMapping": [ + { + "dictionaryAttribute": "string", + "includeInDictionary": true, + "jsonAttribute": "string" + } + ], + "correlationIdentifier": "string", + "topLevelObject": "string", + "uniqueIdentifier": "string", + "versionIdentifier": "string" + }, + "connectorName": "string", + "connectorType": "string", + "deltasyncSchedule": { + "interval": 0, + "intervalUnit": "string", + "startDate": "string" + }, + "description": "string", + "enabled": true, + "fullsyncSchedule": { + "interval": 0, + "intervalUnit": "string", + "startDate": "string" + }, + "protocol": "string", + "skipCertificateValidations": true, + "url": { + "authenticationType": "string", + "bulkUrl": "string", + "incrementalUrl": "string", + "password": "string", + "userName": "string" + } + } + } + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: str + sample: > + "'string'" +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_dictionary_info.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_dictionary_info.py new file mode 100644 index 000000000..c79b68fa4 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_dictionary_info.py @@ -0,0 +1,49 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: px_grid_direct_dictionary_info +short_description: Information module for Px Grid Direct Dictionary Info +description: +- Get all Px Grid Direct Dictionary Info. +- PxGrid Direct - Get a map of references to pxgrid-direct dictionaries. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: {} +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + px_grid_direct.PxGridDirect.getpxgrid_direct_dictionary_references, + + - Paths used are + get /api/v1/pxgrid-direct/dictionary-references, + +""" + +EXAMPLES = r""" +- name: Get all Px Grid Direct Dictionary Info + cisco.ise.px_grid_direct_dictionary_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + {} +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_info.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_info.py new file mode 100644 index 000000000..c9a65591c --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_info.py @@ -0,0 +1,106 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: px_grid_direct_info +short_description: Information module for Px Grid Direct Info +description: +- Get all Px Grid Direct Info. +- Get Px Grid Direct Info by name. +- PxGrid Direct - Get ALL connectorConfig information. +- PxGrid Direct - Get connectorConfig information based on ConnectorName. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + connectorName: + description: + - ConnectorName path parameter. Update or delete or retrieve the connector config. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + px_grid_direct.PxGridDirect.get_connector_config, + px_grid_direct.PxGridDirect.get_connector_config_by_connector_name, + + - Paths used are + get /api/v1/pxgrid-direct/connector-config, + get /api/v1/pxgrid-direct/connector-config/{connectorName}, + +""" + +EXAMPLES = r""" +- name: Get all Px Grid Direct Info + cisco.ise.px_grid_direct_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + register: result + +- name: Get Px Grid Direct Info by name + cisco.ise.px_grid_direct_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + connectorName: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "connector": { + "additionalProperties": {}, + "attributes": { + "attributeMapping": [ + { + "dictionaryAttribute": "string", + "includeInDictionary": true, + "jsonAttribute": "string" + } + ], + "correlationIdentifier": "string", + "topLevelObject": "string", + "uniqueIdentifier": "string", + "versionIdentifier": "string" + }, + "connectorName": "string", + "connectorType": "string", + "deltasyncSchedule": { + "interval": 0, + "intervalUnit": "string", + "startDate": "string" + }, + "description": "string", + "enabled": true, + "fullsyncSchedule": { + "interval": 0, + "intervalUnit": "string", + "startDate": "string" + }, + "protocol": "string", + "skipCertificateValidations": true, + "url": { + "authenticationType": "string", + "bulkUrl": "string", + "incrementalUrl": "string", + "password": "string", + "userName": "string" + } + } + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync.py new file mode 100644 index 000000000..932642039 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync.py @@ -0,0 +1,66 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: px_grid_direct_sync +short_description: Resource module for Px Grid Direct Sync +description: +- Manage operation create of the resource Px Grid Direct Sync. +- This syncNow is used on demand on a URLFetch Type connector only. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + SyncType: + description: Connector Type list. + type: str + connectorName: + description: ConnectorName. + type: str + description: + description: Description. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + px_grid_direct.PxGridDirect.sync_now_connector, + + - Paths used are + post /api/v1/pxgrid-direct/syncnow, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.px_grid_direct_sync: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + SyncType: string + connectorName: string + description: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "connector": { + "connectorName": "string", + "syncStatus": "string" + } + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync_info.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync_info.py new file mode 100644 index 000000000..1b99ee501 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_sync_info.py @@ -0,0 +1,59 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: px_grid_direct_sync_info +short_description: Information module for Px Grid Direct Sync +description: +- Get Px Grid Direct Sync by name. +- This API is used to get the status for SyncNow Status. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + connectorName: + description: + - ConnectorName path parameter. Retrieve the connector syncnow status. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + px_grid_direct.PxGridDirect.get_connector_config_sync_now_status, + + - Paths used are + get /api/v1/pxgrid-direct/syncNowStatus/{connectorName}, + +""" + +EXAMPLES = r""" +- name: Get Px Grid Direct Sync by name + cisco.ise.px_grid_direct_sync_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + connectorName: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "connector": { + "connectorName": "string", + "syncStatus": "string" + } + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_test_connector.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_test_connector.py new file mode 100644 index 000000000..7fc243fe3 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_direct_test_connector.py @@ -0,0 +1,92 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: px_grid_direct_test_connector +short_description: Resource module for Px Grid Direct Test Connector +description: +- Manage operation create of the resource Px Grid Direct Test Connector. +- PxGrid Direct - test the Connector. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + authType: + description: Authentication Type list. + type: str + authValues: + description: Request to test Connector. + suboptions: + password: + description: Password. + type: str + userName: + description: UserName. + type: str + type: dict + connectorName: + description: ConnectorName. + type: str + responseParsing: + description: Uniqueness to identify. + type: str + skipCertificateValidations: + description: SkipCertificateValidations. + type: bool + uniqueID: + description: Uniqueness to identify. + type: str + url: + description: BulkUrl. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + px_grid_direct.PxGridDirect.test_connector, + + - Paths used are + post /api/v1/pxgrid-direct/test-connector, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.px_grid_direct_test_connector: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + authType: string + authValues: + password: string + userName: string + connectorName: string + responseParsing: string + skipCertificateValidations: true + uniqueID: string + url: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "connectorName": "string", + "data": "string", + "error": "string", + "skipCertificateValidations": true, + "status": "string", + "uniqueID": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/px_grid_node_approve.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_node_approve.py index 8cb0c132b..1a2981c47 100644 --- a/ansible_collections/cisco/ise/plugins/modules/px_grid_node_approve.py +++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_node_approve.py @@ -20,7 +20,7 @@ options: description: Name path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/px_grid_node_delete.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_node_delete.py index bac63eb41..9774d8a51 100644 --- a/ansible_collections/cisco/ise/plugins/modules/px_grid_node_delete.py +++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_node_delete.py @@ -20,7 +20,7 @@ options: description: Name path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/px_grid_node_info.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_node_info.py index 7241dcd52..3d7639ba6 100644 --- a/ansible_collections/cisco/ise/plugins/modules/px_grid_node_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_node_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/px_grid_settings_auto_approve.py b/ansible_collections/cisco/ise/plugins/modules/px_grid_settings_auto_approve.py index e87b41303..5cf766342 100644 --- a/ansible_collections/cisco/ise/plugins/modules/px_grid_settings_auto_approve.py +++ b/ansible_collections/cisco/ise/plugins/modules/px_grid_settings_auto_approve.py @@ -23,7 +23,7 @@ options: description: Auto approve certificate based accounts when true. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_access_secret.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_access_secret.py index 358d777f0..b3f1c77aa 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_access_secret.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_access_secret.py @@ -19,7 +19,7 @@ options: description: pxGrid Access Secret's peerNodeName. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_account_activate.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_account_activate.py index bcb84e34a..c3ff43d1a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_account_activate.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_account_activate.py @@ -19,7 +19,7 @@ options: description: pxGrid Account Activate's description. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_account_create.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_account_create.py index 83a6b2f8a..c398f08ce 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_account_create.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_account_create.py @@ -19,7 +19,7 @@ options: description: pxGrid Account Create's nodeName. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_authorization.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_authorization.py index 13022cd27..9e57bc921 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_authorization.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_authorization.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_bindings_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_bindings_info.py index d7d05cf37..51ba7b0e6 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_bindings_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_bindings_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_egress_matrices_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_egress_matrices_info.py index 2e6450f32..fb8b42ddf 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_egress_matrices_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_egress_matrices_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_egress_policies_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_egress_policies_info.py index b2024371d..0175bb209 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_egress_policies_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_egress_policies_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoint_by_mac_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoint_by_mac_info.py index 55e255bc3..ca815db2d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoint_by_mac_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoint_by_mac_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_by_os_type_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_by_os_type_info.py index a9c6fa00f..36f5ce3f5 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_by_os_type_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_by_os_type_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_by_type_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_by_type_info.py index ef1ddf642..239709c8c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_by_type_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_by_type_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_info.py index 9224eb08e..98c4af38f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_endpoints_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_failures_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_failures_info.py index dc552be6d..97b460d29 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_failures_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_failures_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_healths_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_healths_info.py index f5963ddf2..a6f3e8e86 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_healths_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_healths_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_approve.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_approve.py index f808e5cc7..c8796201f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_approve.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_approve.py @@ -20,7 +20,7 @@ options: description: Name path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_delete.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_delete.py index 16c42889c..9b139f0a3 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_delete.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_delete.py @@ -20,7 +20,7 @@ options: description: Name path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_info.py index 5da12013d..ffef9a9ff 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_node_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_performances_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_performances_info.py index f9a4767c1..919b54ef5 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_performances_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_performances_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_profiles_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_profiles_info.py index 687581cea..fffed0df2 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_profiles_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_profiles_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_security_group_acls_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_security_group_acls_info.py index c41be5560..2fdb9987f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_security_group_acls_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_security_group_acls_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_security_groups_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_security_groups_info.py index 2abc51e1e..8b15b1d81 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_security_groups_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_security_groups_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_lookup.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_lookup.py index 755a1231f..0afbedcee 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_lookup.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_lookup.py @@ -19,7 +19,7 @@ options: description: pxGrid Service Lookup's name. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_register.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_register.py index 4484573af..378e6dd1c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_register.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_register.py @@ -19,7 +19,7 @@ options: description: pxGrid Service Register's name. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_reregister.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_reregister.py index b91798631..371b3ab85 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_reregister.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_reregister.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_unregister.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_unregister.py index 3926a9960..bdb51f3dd 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_unregister.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_service_unregister.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_by_ip_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_by_ip_info.py index df9720cb7..e0a416319 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_by_ip_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_by_ip_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_by_mac_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_by_mac_info.py index 56a5e9204..639c621d1 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_by_mac_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_by_mac_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_for_recovery_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_for_recovery_info.py index 6e3ca80eb..53b441508 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_for_recovery_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_session_for_recovery_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_sessions_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_sessions_info.py index 9f0305ab6..c2bcf5b7a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_sessions_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_sessions_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_settings_auto_approve.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_settings_auto_approve.py index 3203ed0b8..f287298de 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_settings_auto_approve.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_settings_auto_approve.py @@ -23,7 +23,7 @@ options: description: Auto approve certificate based accounts when true. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_user_group_by_username_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_user_group_by_username_info.py index e3b54fa92..f79717e8f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_user_group_by_username_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_user_group_by_username_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/pxgrid_user_groups_info.py b/ansible_collections/cisco/ise/plugins/modules/pxgrid_user_groups_info.py index 3add71347..3b7cdca5c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/pxgrid_user_groups_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/pxgrid_user_groups_info.py @@ -16,7 +16,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/radius_server_sequence.py b/ansible_collections/cisco/ise/plugins/modules/radius_server_sequence.py index 8031470a4..e5827e123 100644 --- a/ansible_collections/cisco/ise/plugins/modules/radius_server_sequence.py +++ b/ansible_collections/cisco/ise/plugins/modules/radius_server_sequence.py @@ -103,7 +103,7 @@ options: description: UseAttrSetOnRequest flag. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/radius_server_sequence_info.py b/ansible_collections/cisco/ise/plugins/modules/radius_server_sequence_info.py index 1073928ea..7c5f35e02 100644 --- a/ansible_collections/cisco/ise/plugins/modules/radius_server_sequence_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/radius_server_sequence_info.py @@ -31,7 +31,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/renew_certificate.py b/ansible_collections/cisco/ise/plugins/modules/renew_certificate.py index a4561a02b..b085f42e1 100644 --- a/ansible_collections/cisco/ise/plugins/modules/renew_certificate.py +++ b/ansible_collections/cisco/ise/plugins/modules/renew_certificate.py @@ -10,7 +10,7 @@ module: renew_certificate short_description: Resource module for Renew Certificate description: - Manage operation create of the resource Renew Certificate. -- This API initiates regeneration of certificates. Response contains ID which can be used to track the status. +- This API initiates regeneration of certificates. The response contains an ID which can be used to track the status. version_added: '1.0.0' extends_documentation_fragment: - cisco.ise.module @@ -20,7 +20,7 @@ options: description: Renew Certificate's certType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/repository.py b/ansible_collections/cisco/ise/plugins/modules/repository.py index 635d1d464..937b26a9c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/repository.py +++ b/ansible_collections/cisco/ise/plugins/modules/repository.py @@ -45,7 +45,7 @@ options: description: Username may contain alphanumeric and _-./@\\$ characters. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Repository diff --git a/ansible_collections/cisco/ise/plugins/modules/repository_files_info.py b/ansible_collections/cisco/ise/plugins/modules/repository_files_info.py index 32f628688..11d5454bd 100644 --- a/ansible_collections/cisco/ise/plugins/modules/repository_files_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/repository_files_info.py @@ -21,7 +21,7 @@ options: - RepositoryName path parameter. Unique name for a repository. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Repository diff --git a/ansible_collections/cisco/ise/plugins/modules/repository_info.py b/ansible_collections/cisco/ise/plugins/modules/repository_info.py index 6631f499b..5a0f9cae5 100644 --- a/ansible_collections/cisco/ise/plugins/modules/repository_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/repository_info.py @@ -23,7 +23,7 @@ options: - RepositoryName path parameter. Unique name for a repository. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Repository diff --git a/ansible_collections/cisco/ise/plugins/modules/reservation.py b/ansible_collections/cisco/ise/plugins/modules/reservation.py new file mode 100644 index 000000000..9682fcf3a --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/reservation.py @@ -0,0 +1,114 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: reservation +short_description: Resource module for Reservation +description: +- Manage operations create, update and delete of the resource Reservation. +- Reserve given number of SGTs in a continuous range for the given Client. +- Delete the reserved range of SGT for the given Client. +- Update the reserved ranges of a specific Client by giving the custom start and end index. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + clientID: + description: ClientID path parameter. Unique name for a Client. + type: str + clientId: + description: Unique ID of the given client. + type: str + clientName: + description: Name of the given client. + type: str + endIndex: + description: End index of the reserved range. + type: int + numberOfTags: + description: Nummber of tags required to be reserved in ISE. + type: int + startIndex: + description: Start index of the reserved range. + type: int +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + sgt_range_reservation.SgtRangeReservation.delete_sgt_reserve_range, + sgt_range_reservation.SgtRangeReservation.reserve_sgt_range, + sgt_range_reservation.SgtRangeReservation.update_reserved_range, + + - Paths used are + post /api/v1/sgt/reservation/reserveRange, + delete /api/v1/sgt/reservation/{clientID}, + put /api/v1/sgt/reservation/{clientID}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.reservation: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + clientName: string + numberOfTags: 0 + +- name: Update by id + cisco.ise.reservation: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + clientID: string + clientId: string + endIndex: 0 + startIndex: 0 + +- name: Delete by id + cisco.ise.reservation: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + clientID: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "clientId": "string", + "clientName": "string", + "endIndex": 0, + "startIndex": 0 + } + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: dict + sample: > + { + "success": { + "message": "string" + }, + "version": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/reservation_info.py b/ansible_collections/cisco/ise/plugins/modules/reservation_info.py new file mode 100644 index 000000000..dbbdc17a2 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/reservation_info.py @@ -0,0 +1,97 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: reservation_info +short_description: Information module for Reservation Info +description: +- Get all Reservation Info. +- Get Reservation Info by id. +- Get all the reserved Security Group tag ranges in ISE. +- Get the reserved range of SGT for the specific client which is passed in the URL. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + page: + description: + - Page query parameter. Page number. + type: int + size: + description: + - Size query parameter. Number of objects returned per page. + type: int + clientID: + description: + - ClientID path parameter. Unique name for a Client. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + sgt_range_reservation.SgtRangeReservation.get_sgt_reserved_range, + sgt_range_reservation.SgtRangeReservation.get_sgt_reserved_ranges_generator, + + - Paths used are + get /api/v1/sgt/reservation, + get /api/v1/sgt/reservation/{clientID}, + +""" + +EXAMPLES = r""" +- name: Get all Reservation Info + cisco.ise.reservation_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + page: 0 + size: 0 + register: result + +- name: Get Reservation Info by id + cisco.ise.reservation_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + clientID: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "clientId": "string", + "clientName": "string", + "endIndex": 0, + "startIndex": 0 + } + +ise_responses: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: list + elements: dict + sample: > + [ + { + "clientId": "string", + "clientName": "string", + "endIndex": 0, + "startIndex": 0 + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/resource_version_info.py b/ansible_collections/cisco/ise/plugins/modules/resource_version_info.py index 826afa9c8..53e684719 100644 --- a/ansible_collections/cisco/ise/plugins/modules/resource_version_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/resource_version_info.py @@ -21,7 +21,7 @@ options: - Resource path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/rest_id_store.py b/ansible_collections/cisco/ise/plugins/modules/rest_id_store.py index a91c0b4f8..a36b1ac58 100644 --- a/ansible_collections/cisco/ise/plugins/modules/rest_id_store.py +++ b/ansible_collections/cisco/ise/plugins/modules/rest_id_store.py @@ -63,7 +63,7 @@ options: description: REST Id Store's name. type: str requirements: -- ciscoisesdk >= 2.0.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/rest_id_store_info.py b/ansible_collections/cisco/ise/plugins/modules/rest_id_store_info.py index 07a3b19e2..0a71cc368 100644 --- a/ansible_collections/cisco/ise/plugins/modules/rest_id_store_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/rest_id_store_info.py @@ -71,7 +71,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/self_registered_portal.py b/ansible_collections/cisco/ise/plugins/modules/self_registered_portal.py index 81b396660..8c5e67603 100644 --- a/ansible_collections/cisco/ise/plugins/modules/self_registered_portal.py +++ b/ansible_collections/cisco/ise/plugins/modules/self_registered_portal.py @@ -682,7 +682,7 @@ options: type: dict type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SelfRegisteredPortal diff --git a/ansible_collections/cisco/ise/plugins/modules/self_registered_portal_info.py b/ansible_collections/cisco/ise/plugins/modules/self_registered_portal_info.py index 5d1952ed7..1924cf493 100644 --- a/ansible_collections/cisco/ise/plugins/modules/self_registered_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/self_registered_portal_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SelfRegisteredPortal diff --git a/ansible_collections/cisco/ise/plugins/modules/selfsigned_certificate_generate.py b/ansible_collections/cisco/ise/plugins/modules/selfsigned_certificate_generate.py index 84be20739..956a9aa2b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/selfsigned_certificate_generate.py +++ b/ansible_collections/cisco/ise/plugins/modules/selfsigned_certificate_generate.py @@ -119,7 +119,7 @@ options: description: Certificate state (ST). type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/session_service_node_info.py b/ansible_collections/cisco/ise/plugins/modules/session_service_node_info.py index 8d531833a..92d8c81e8 100644 --- a/ansible_collections/cisco/ise/plugins/modules/session_service_node_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/session_service_node_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for PsnNodeDetailsWithRadiusService diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_acl.py b/ansible_collections/cisco/ise/plugins/modules/sg_acl.py index 8f6d53354..9c511a188 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_acl.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_acl.py @@ -43,7 +43,7 @@ options: description: SGACL's name. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroupsACLs diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_acl_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/sg_acl_bulk_monitor_status_info.py index 814837559..b322a819c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_acl_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_acl_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroupsACLs diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_acl_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/sg_acl_bulk_request.py index 79dd73025..83455ae39 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_acl_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_acl_bulk_request.py @@ -23,7 +23,7 @@ options: description: SGACL Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroupsACLs diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_acl_info.py b/ansible_collections/cisco/ise/plugins/modules/sg_acl_info.py index b3c4cae7c..39b723dd9 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_acl_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_acl_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroupsACLs diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping.py index 9d27da3cb..d0ff397b4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping.py @@ -44,7 +44,7 @@ options: description: Mandatory unless mappingGroup is set. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMapping diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_bulk_monitor_status_info.py index c0988da7c..677867aa7 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMapping diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_bulk_request.py index c3298c551..3baac7d8d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_bulk_request.py @@ -23,7 +23,7 @@ options: description: SG Mapping Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMapping diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy.py index 97b9c2368..dc2059ac4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy.py @@ -20,7 +20,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMapping diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy_all.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy_all.py index 317037a5b..3e6169246 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy_all.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy_all.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMapping diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy_status_info.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy_status_info.py index 40a7adb84..97a80417c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_deploy_status_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMapping diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group.py index 6b6d7fcd0..cc40ba315 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group.py @@ -34,7 +34,7 @@ options: description: Mandatory unless mappingGroup is set. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMappingGroup diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_bulk_monitor_status_info.py index cd6af8a56..cafa582ed 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMappingGroup diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_bulk_request.py index 18ed1150d..dcdea3c60 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_bulk_request.py @@ -23,7 +23,7 @@ options: description: SG Mapping Group Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMappingGroup diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy.py index 1012ababc..3f8c47b6f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy.py @@ -20,7 +20,7 @@ options: description: Id path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMappingGroup diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy_all.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy_all.py index 08b7223e2..a5781f637 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy_all.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy_all.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMappingGroup diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy_status_info.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy_status_info.py index f02d6260a..745e6aa20 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_deploy_status_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMappingGroup diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_info.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_info.py index c05b582ff..c82308a61 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_group_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMappingGroup diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_info.py b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_info.py index cc46a2d6a..d0aaba2c9 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_mapping_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_mapping_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for IPToSGTMapping diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan.py b/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan.py index bba7eeb3a..9d5c53ed8 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan.py @@ -71,7 +71,7 @@ options: type: list type: list requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroupToVirtualNetwork diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_bulk_monitor_status_info.py index ceebe7245..d9bbb2176 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroupToVirtualNetwork diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_bulk_request.py index c466ec4a7..6b4b3dbe6 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_bulk_request.py @@ -23,7 +23,7 @@ options: description: SG To VN To VLAN Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroupToVirtualNetwork diff --git a/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_info.py b/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_info.py index 5759bcbdf..6e7527738 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sg_to_vn_to_vlan_info.py @@ -57,7 +57,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroupToVirtualNetwork diff --git a/ansible_collections/cisco/ise/plugins/modules/sgt.py b/ansible_collections/cisco/ise/plugins/modules/sgt.py index 7d65c2e9a..232e7bb59 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sgt.py +++ b/ansible_collections/cisco/ise/plugins/modules/sgt.py @@ -46,7 +46,7 @@ options: type: int required: true requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroups diff --git a/ansible_collections/cisco/ise/plugins/modules/sgt_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/sgt_bulk_monitor_status_info.py index 29ffa4038..d0d4d7dd3 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sgt_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sgt_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroups diff --git a/ansible_collections/cisco/ise/plugins/modules/sgt_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/sgt_bulk_request.py index 6afae3073..d87d53662 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sgt_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/sgt_bulk_request.py @@ -23,7 +23,7 @@ options: description: SGt Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroups diff --git a/ansible_collections/cisco/ise/plugins/modules/sgt_info.py b/ansible_collections/cisco/ise/plugins/modules/sgt_info.py index 98190f097..fd01585ef 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sgt_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sgt_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SecurityGroups diff --git a/ansible_collections/cisco/ise/plugins/modules/sms_provider_info.py b/ansible_collections/cisco/ise/plugins/modules/sms_provider_info.py index 38175a56e..71a768a5d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sms_provider_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sms_provider_info.py @@ -59,7 +59,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sponsor_group.py b/ansible_collections/cisco/ise/plugins/modules/sponsor_group.py index be39a7e2c..41c03eff7 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sponsor_group.py +++ b/ansible_collections/cisco/ise/plugins/modules/sponsor_group.py @@ -120,7 +120,7 @@ options: type: bool type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sponsor_group_info.py b/ansible_collections/cisco/ise/plugins/modules/sponsor_group_info.py index 88e4f9599..f482d97af 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sponsor_group_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sponsor_group_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sponsor_group_member_info.py b/ansible_collections/cisco/ise/plugins/modules/sponsor_group_member_info.py index 4d782aa71..1e8bf6704 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sponsor_group_member_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sponsor_group_member_info.py @@ -59,7 +59,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sponsor_portal.py b/ansible_collections/cisco/ise/plugins/modules/sponsor_portal.py index 6acb22f0f..be4ac95ed 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sponsor_portal.py +++ b/ansible_collections/cisco/ise/plugins/modules/sponsor_portal.py @@ -281,7 +281,7 @@ options: type: dict type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sponsor_portal_info.py b/ansible_collections/cisco/ise/plugins/modules/sponsor_portal_info.py index 9c51373f0..7f5edcd72 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sponsor_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sponsor_portal_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal.py b/ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal.py index e8f99c386..2ca0b2edf 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal.py +++ b/ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal.py @@ -385,7 +385,7 @@ options: type: dict type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal_info.py b/ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal_info.py index 017236454..87fe321a2 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sponsored_guest_portal_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/stop_replication.py b/ansible_collections/cisco/ise/plugins/modules/stop_replication.py new file mode 100644 index 000000000..6f52d3da8 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/stop_replication.py @@ -0,0 +1,68 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: stop_replication +short_description: Resource module for Stop Replication +description: +- Manage operation update of the resource Stop Replication. +- This API updates the status of Endpoint stop replication Service. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + isEnabled: + description: IsEnabled flag. + type: bool +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + endpoint_stop_replication_service.EndpointStopReplicationService.set_stop_replication_service, + + - Paths used are + put /api/v1/stop-replication, + +""" + +EXAMPLES = r""" +- name: Update all + cisco.ise.stop_replication: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + isEnabled: true + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "isEnabled": true + } + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: dict + sample: > + { + "success": { + "message": "string" + }, + "version": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/stop_replication_info.py b/ansible_collections/cisco/ise/plugins/modules/stop_replication_info.py new file mode 100644 index 000000000..8acb0474e --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/stop_replication_info.py @@ -0,0 +1,51 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: stop_replication_info +short_description: Information module for Stop Replication Info +description: +- Get all Stop Replication Info. +- This API retrieves the status of Endpoint stop replication Service. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: {} +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + endpoint_stop_replication_service.EndpointStopReplicationService.get_stop_replication_status, + + - Paths used are + get /api/v1/stop-replication, + +""" + +EXAMPLES = r""" +- name: Get all Stop Replication Info + cisco.ise.stop_replication_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "isEnabled": true + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/subscriber.py b/ansible_collections/cisco/ise/plugins/modules/subscriber.py index e62fe2c55..baeca3007 100644 --- a/ansible_collections/cisco/ise/plugins/modules/subscriber.py +++ b/ansible_collections/cisco/ise/plugins/modules/subscriber.py @@ -41,7 +41,7 @@ options: description: SubscriberId path parameter. Unique id for a subscriber object. type: str requirements: -- ciscoisesdk >= 2.0.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/subscriber_bulk.py b/ansible_collections/cisco/ise/plugins/modules/subscriber_bulk.py index 2b6547097..f7370752b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/subscriber_bulk.py +++ b/ansible_collections/cisco/ise/plugins/modules/subscriber_bulk.py @@ -49,7 +49,7 @@ options: description: Subscriber Bulk's operation. type: str requirements: -- ciscoisesdk >= 2.0.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/subscriber_imsi_info.py b/ansible_collections/cisco/ise/plugins/modules/subscriber_imsi_info.py index 4da62a78f..f2bf23c84 100644 --- a/ansible_collections/cisco/ise/plugins/modules/subscriber_imsi_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/subscriber_imsi_info.py @@ -20,7 +20,7 @@ options: - Imsi path parameter. IMSI parameter. type: str requirements: -- ciscoisesdk >= 2.0.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/subscriber_info.py b/ansible_collections/cisco/ise/plugins/modules/subscriber_info.py index 660937786..189befb9f 100644 --- a/ansible_collections/cisco/ise/plugins/modules/subscriber_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/subscriber_info.py @@ -62,7 +62,7 @@ options: - SubscriberId path parameter. Unique id for a subscriber object. type: str requirements: -- ciscoisesdk >= 2.0.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/support_bundle.py b/ansible_collections/cisco/ise/plugins/modules/support_bundle.py index cd29a5b31..dc00458ec 100644 --- a/ansible_collections/cisco/ise/plugins/modules/support_bundle.py +++ b/ansible_collections/cisco/ise/plugins/modules/support_bundle.py @@ -57,7 +57,7 @@ options: type: str type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for SupportBundleTriggerConfiguration diff --git a/ansible_collections/cisco/ise/plugins/modules/support_bundle_download.py b/ansible_collections/cisco/ise/plugins/modules/support_bundle_download.py index 952d9fcf3..3e668519a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/support_bundle_download.py +++ b/ansible_collections/cisco/ise/plugins/modules/support_bundle_download.py @@ -29,7 +29,7 @@ options: description: Enable or disable automatic file creation of raw response. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/support_bundle_status_info.py b/ansible_collections/cisco/ise/plugins/modules/support_bundle_status_info.py index 67fd177d2..9d4f1db9b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/support_bundle_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/support_bundle_status_info.py @@ -31,7 +31,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_connections.py b/ansible_collections/cisco/ise/plugins/modules/sxp_connections.py index 53a6ec262..a68eb2bdb 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_connections.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_connections.py @@ -46,7 +46,7 @@ options: description: SXP Connections's sxpVpn. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_connections_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/sxp_connections_bulk_monitor_status_info.py index dfcbb8eb2..36dc9c500 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_connections_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_connections_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_connections_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/sxp_connections_bulk_request.py index 3e62f2782..2f18d5528 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_connections_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_connections_bulk_request.py @@ -23,7 +23,7 @@ options: description: SXP Connections Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_connections_info.py b/ansible_collections/cisco/ise/plugins/modules/sxp_connections_info.py index 42e979779..8f9c8be41 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_connections_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_connections_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings.py b/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings.py index a403670fd..1197d063d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings.py @@ -42,7 +42,7 @@ options: or vns should be defined. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_bulk_monitor_status_info.py index f34f4741c..f50e1b818 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_bulk_request.py index 66b5e0ab1..71127a465 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_bulk_request.py @@ -23,7 +23,7 @@ options: description: SXP Local Bindings Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_info.py b/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_info.py index 15aeaf5e3..ffb26a276 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_local_bindings_info.py @@ -65,7 +65,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_vpns.py b/ansible_collections/cisco/ise/plugins/modules/sxp_vpns.py index abab51624..861608a2a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_vpns.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_vpns.py @@ -24,7 +24,7 @@ options: description: SXP VPNs's sxpVpnName. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_bulk_monitor_status_info.py b/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_bulk_monitor_status_info.py index d749941ab..9e1e061df 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_bulk_monitor_status_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_bulk_monitor_status_info.py @@ -21,7 +21,7 @@ options: - Bulkid path parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_bulk_request.py b/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_bulk_request.py index 0d24fbc94..537b4a2a0 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_bulk_request.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_bulk_request.py @@ -23,7 +23,7 @@ options: description: SXP VPNs Bulk Request's resourceMediaType. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_info.py b/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_info.py index 4fffbfc4a..3707fbb3c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/sxp_vpns_info.py @@ -65,7 +65,7 @@ options: - Sortdsc query parameter. Sort desc. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/system_certificate.py b/ansible_collections/cisco/ise/plugins/modules/system_certificate.py index f2dd7a73b..456efaf31 100644 --- a/ansible_collections/cisco/ise/plugins/modules/system_certificate.py +++ b/ansible_collections/cisco/ise/plugins/modules/system_certificate.py @@ -78,7 +78,7 @@ options: description: Use certificate for SAML Signing. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/system_certificate_create.py b/ansible_collections/cisco/ise/plugins/modules/system_certificate_create.py index 916142bb3..9c95376a6 100644 --- a/ansible_collections/cisco/ise/plugins/modules/system_certificate_create.py +++ b/ansible_collections/cisco/ise/plugins/modules/system_certificate_create.py @@ -88,7 +88,7 @@ options: description: NodeId of Cisco ISE application. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/system_certificate_export_info.py b/ansible_collections/cisco/ise/plugins/modules/system_certificate_export_info.py index e53c17a3a..16504a65d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/system_certificate_export_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/system_certificate_export_info.py @@ -25,6 +25,10 @@ options: filename: description: The filename used to save the download file. type: str + hostName: + description: Hostname of the Cisco ISE node in which self-signed certificate should + be generated. + type: str id: description: System Certificate Export Info's id. type: str @@ -35,7 +39,7 @@ options: description: Enable or disable automatic file creation of raw response. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates @@ -59,6 +63,7 @@ EXAMPLES = r""" dirPath: /tmp/downloads/ export: string filename: download_filename.extension + hostName: string id: string password: string saveFile: true @@ -69,7 +74,16 @@ RETURN = r""" ise_response: description: A dictionary or list with the response returned by the Cisco ISE Python SDK returned: always - type: str + type: dict sample: > - "'string'" + { + "description": "string", + "file": "string", + "filename": "string", + "inputStream": {}, + "open": true, + "readable": true, + "uri": "string", + "url": "string" + } """ diff --git a/ansible_collections/cisco/ise/plugins/modules/system_certificate_import.py b/ansible_collections/cisco/ise/plugins/modules/system_certificate_import.py index 72f69d078..a1ef8c87a 100644 --- a/ansible_collections/cisco/ise/plugins/modules/system_certificate_import.py +++ b/ansible_collections/cisco/ise/plugins/modules/system_certificate_import.py @@ -81,7 +81,7 @@ options: description: Validate certificate extensions. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/system_certificate_info.py b/ansible_collections/cisco/ise/plugins/modules/system_certificate_info.py index 7d90d10d4..66fcea6c9 100644 --- a/ansible_collections/cisco/ise/plugins/modules/system_certificate_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/system_certificate_info.py @@ -11,8 +11,8 @@ short_description: Information module for System Certificate description: - Get System Certificate by id. - Get System Certificate by name. -- This API provides details of a System Certificate of a particular node based on given HostName and ID. -- This API supports Filtering, Sorting and Pagination. +- This API provides details of a system certificate of a particular node based on given hostname and ID. +- This API supports filtering, sorting and pagination. version_added: '1.0.0' extends_documentation_fragment: - cisco.ise.module_info @@ -20,7 +20,7 @@ author: Rafael Campos (@racampos) options: hostName: description: - - HostName path parameter. Name of the host of which system certificates should be returned. + - HostName path parameter. Name of the host for which the system certificates should be returned. type: str page: description: @@ -56,8 +56,7 @@ options: - The 'NENDSW' operator describes 'Not Ends With'. - The 'CONTAINS' operator describes 'Contains'. - The 'NCONTAINS' operator describes 'Not Contains'. - elements: str - type: list + type: str filterType: description: - > @@ -69,7 +68,7 @@ options: - Id path parameter. ID of the system certificate. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates @@ -107,7 +106,7 @@ EXAMPLES = r""" size: 0 sort: string sortBy: string - filter: [] + filter: string filterType: string hostName: string register: result diff --git a/ansible_collections/cisco/ise/plugins/modules/system_config_version_info.py b/ansible_collections/cisco/ise/plugins/modules/system_config_version_info.py index 2213574f0..4f76508f1 100644 --- a/ansible_collections/cisco/ise/plugins/modules/system_config_version_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/system_config_version_info.py @@ -17,7 +17,7 @@ extends_documentation_fragment: author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for VersionAndPatch diff --git a/ansible_collections/cisco/ise/plugins/modules/tacacs_command_sets.py b/ansible_collections/cisco/ise/plugins/modules/tacacs_command_sets.py index af3075c13..061cb68e4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/tacacs_command_sets.py +++ b/ansible_collections/cisco/ise/plugins/modules/tacacs_command_sets.py @@ -49,7 +49,7 @@ options: description: PermitUnmatched flag. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/tacacs_command_sets_info.py b/ansible_collections/cisco/ise/plugins/modules/tacacs_command_sets_info.py index 4aa4f9be9..5fbf50064 100644 --- a/ansible_collections/cisco/ise/plugins/modules/tacacs_command_sets_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/tacacs_command_sets_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/tacacs_external_servers.py b/ansible_collections/cisco/ise/plugins/modules/tacacs_external_servers.py index 2d724e764..15dcb8ef4 100644 --- a/ansible_collections/cisco/ise/plugins/modules/tacacs_external_servers.py +++ b/ansible_collections/cisco/ise/plugins/modules/tacacs_external_servers.py @@ -43,7 +43,7 @@ options: description: The server timeout. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/tacacs_external_servers_info.py b/ansible_collections/cisco/ise/plugins/modules/tacacs_external_servers_info.py index d097fcf25..67d1339fb 100644 --- a/ansible_collections/cisco/ise/plugins/modules/tacacs_external_servers_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/tacacs_external_servers_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/tacacs_profile.py b/ansible_collections/cisco/ise/plugins/modules/tacacs_profile.py index 304caaabd..3d6885843 100644 --- a/ansible_collections/cisco/ise/plugins/modules/tacacs_profile.py +++ b/ansible_collections/cisco/ise/plugins/modules/tacacs_profile.py @@ -46,7 +46,7 @@ options: type: list type: dict requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/tacacs_profile_info.py b/ansible_collections/cisco/ise/plugins/modules/tacacs_profile_info.py index 59f1495f6..b5e6edb92 100644 --- a/ansible_collections/cisco/ise/plugins/modules/tacacs_profile_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/tacacs_profile_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence.py b/ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence.py index e26adf0ae..afd5bff12 100644 --- a/ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence.py +++ b/ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence.py @@ -50,7 +50,7 @@ options: description: Define if a delimiter will be used for suffix strip. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence_info.py b/ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence_info.py index 69d4424b0..a6247d2ae 100644 --- a/ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/tacacs_server_sequence_info.py @@ -37,7 +37,7 @@ options: - Size query parameter. Number of objects returned per page. type: int requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 notes: - SDK Method used are diff --git a/ansible_collections/cisco/ise/plugins/modules/tasks_info.py b/ansible_collections/cisco/ise/plugins/modules/tasks_info.py index b038c6e9d..c4278c530 100644 --- a/ansible_collections/cisco/ise/plugins/modules/tasks_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/tasks_info.py @@ -21,7 +21,7 @@ options: - TaskId path parameter. The id of the task executed before. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for tasks diff --git a/ansible_collections/cisco/ise/plugins/modules/telemetry_info.py b/ansible_collections/cisco/ise/plugins/modules/telemetry_info.py index 089d885d1..013b23a6c 100644 --- a/ansible_collections/cisco/ise/plugins/modules/telemetry_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/telemetry_info.py @@ -57,7 +57,7 @@ options: can be changed by using the parameter. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for TelemetryInformation diff --git a/ansible_collections/cisco/ise/plugins/modules/test_connector.py b/ansible_collections/cisco/ise/plugins/modules/test_connector.py deleted file mode 100644 index 4caaadc4b..000000000 --- a/ansible_collections/cisco/ise/plugins/modules/test_connector.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -# Copyright (c) 2021, Cisco Systems -# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) - -DOCUMENTATION = r""" ---- -module: test_connector -short_description: Resource module for Test Connector -description: -- Manage operation create of the resource Test Connector. -- EDDA - test the Connector. -version_added: '2.8.0' -extends_documentation_fragment: - - cisco.ise.module -author: Rafael Campos (@racampos) -options: - authType: - description: Authentication Type list. - type: str - authValues: - description: Request to test Connector. - suboptions: - password: - description: Password. - type: str - userName: - description: UserName. - type: str - type: dict - connectorName: - description: ConnectorName. - type: str - responseParsing: - description: Uniqueness to identify. - type: str - uniqueID: - description: Uniqueness to identify. - type: str - url: - description: BulkUrl. - type: str -requirements: -- ciscoisesdk >= 2.0.1 -- python >= 3.5 -notes: - - SDK Method used are - edda.Edda.test_connector, - - - Paths used are - post /api/v1/edda/test-connector, - -""" - -EXAMPLES = r""" -- name: Create - cisco.ise.test_connector: - ise_hostname: "{{ise_hostname}}" - ise_username: "{{ise_username}}" - ise_password: "{{ise_password}}" - ise_verify: "{{ise_verify}}" - authType: string - authValues: - password: string - userName: string - connectorName: string - responseParsing: string - uniqueID: string - url: string - -""" - -RETURN = r""" -ise_response: - description: A dictionary or list with the response returned by the Cisco ISE Python SDK - returned: always - type: dict - sample: > - { - "connectorName": "string", - "data": "string", - "error": "string", - "status": "string", - "uniqueID": "string" - } -""" diff --git a/ansible_collections/cisco/ise/plugins/modules/threat_vulnerabilities_clear.py b/ansible_collections/cisco/ise/plugins/modules/threat_vulnerabilities_clear.py index 6288b13c6..d18b33cbf 100644 --- a/ansible_collections/cisco/ise/plugins/modules/threat_vulnerabilities_clear.py +++ b/ansible_collections/cisco/ise/plugins/modules/threat_vulnerabilities_clear.py @@ -20,7 +20,7 @@ options: description: Threat Vulnerabilities Clear's macAddresses. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for ClearThreatsAndVulnerabilities diff --git a/ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings.py b/ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings.py index 9b7012f3b..3668f2f9b 100644 --- a/ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings.py +++ b/ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings.py @@ -10,7 +10,7 @@ module: transport_gateway_settings short_description: Resource module for Transport Gateway Settings description: - Manage operation update of the resource Transport Gateway Settings. -- Transport Gateway acts a proxy for the communication between the ISE servers in your network and the Telemetry servers in case of air-gapped network. +- Transport Gateway acts a proxy for the communication between the ISE servers in your network and the telemetry servers in case of air-gapped network. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module @@ -23,7 +23,7 @@ options: description: URL of transport gateway. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for telemetry diff --git a/ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings_info.py b/ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings_info.py index 404d01827..88c7b5159 100644 --- a/ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/transport_gateway_settings_info.py @@ -10,14 +10,14 @@ module: transport_gateway_settings_info short_description: Information module for Transport Gateway Settings description: - Get all Transport Gateway Settings. -- Transport Gateway acts a proxy for the communication between the ISE servers in your network and the Telemetry servers in case of air-gapped network. +- Transport Gateway acts a proxy for the communication between the ISE servers in your network and the telemetry servers in case of air-gapped network. version_added: '2.1.0' extends_documentation_fragment: - cisco.ise.module_info author: Rafael Campos (@racampos) options: {} requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for telemetry diff --git a/ansible_collections/cisco/ise/plugins/modules/trusted_certificate.py b/ansible_collections/cisco/ise/plugins/modules/trusted_certificate.py index abe3948a5..933652bb1 100644 --- a/ansible_collections/cisco/ise/plugins/modules/trusted_certificate.py +++ b/ansible_collections/cisco/ise/plugins/modules/trusted_certificate.py @@ -91,7 +91,7 @@ options: description: Trust for authentication within Cisco ISE. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_export_info.py b/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_export_info.py index 640dffb3b..b65e803f3 100644 --- a/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_export_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_export_info.py @@ -33,7 +33,7 @@ options: - The filename used to save the download file. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_import.py b/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_import.py index a03c7d41d..10947ddf0 100644 --- a/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_import.py +++ b/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_import.py @@ -50,7 +50,7 @@ options: description: Validate trust certificate extension. type: bool requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates diff --git a/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_info.py b/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_info.py index 198e0539b..12744d57d 100644 --- a/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_info.py +++ b/ansible_collections/cisco/ise/plugins/modules/trusted_certificate_info.py @@ -52,8 +52,7 @@ options: - The 'NENDSW' operator describes 'Not Ends With'. - The 'CONTAINS' operator describes 'Contains'. - The 'NCONTAINS' operator describes 'Not Contains'. - elements: str - type: list + type: str filterType: description: - > @@ -65,7 +64,7 @@ options: - Id path parameter. ID of the trust certificate. type: str requirements: -- ciscoisesdk >= 2.1.1 +- ciscoisesdk >= 2.2.1 - python >= 3.5 seealso: - name: Cisco ISE documentation for Certificates @@ -93,7 +92,7 @@ EXAMPLES = r""" size: 0 sort: string sortBy: string - filter: [] + filter: string filterType: string register: result diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app.py new file mode 100644 index 000000000..42ef74eb2 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app.py @@ -0,0 +1,141 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_nbar_app +short_description: Resource module for Trustsec NBAR App +description: +- Manage operations create, update and delete of the resource Trustsec NBAR App. +- Create NBAR application. +- Update NBAR Application. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + description: + description: Trustsec NBAR App's description. + type: str + id: + description: Trustsec NBAR App's id. + type: str + name: + description: Trustsec NBAR App's name. + type: str + networkIdentities: + description: Array of NIs. + elements: dict + suboptions: + ports: + description: Trustsec NBAR App's ports. + type: str + protocol: + description: Trustsec NBAR App's protocol. + type: str + type: list +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for nbarApp + description: Complete reference of the nbarApp API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + nbar_app.NbarApp.create_nbar_app, + nbar_app.NbarApp.delete_nbar_app_by_id, + nbar_app.NbarApp.update_nbar_app_by_id, + + - Paths used are + post /api/v1/trustsec/sgacl/nbarapp, + delete /api/v1/trustsec/sgacl/nbarapp/{id}, + put /api/v1/trustsec/sgacl/nbarapp/{id}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_nbar_app: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + description: string + id: string + name: string + networkIdentities: + - ports: string + protocol: string + +- name: Update by id + cisco.ise.trustsec_nbar_app: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + description: string + id: string + name: string + networkIdentities: + - ports: string + protocol: string + +- name: Delete by id + cisco.ise.trustsec_nbar_app: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + id: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "description": "string", + "id": "string", + "name": "string", + "networkIdentities": [ + { + "ports": "string", + "protocol": "string" + } + ] + } + ] + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "response": [ + { + "description": "string", + "id": "string", + "name": "string", + "networkIdentities": [ + { + "ports": "string", + "protocol": "string" + } + ] + } + ] + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app_info.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app_info.py new file mode 100644 index 000000000..e5d3a7ebe --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_nbar_app_info.py @@ -0,0 +1,150 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_nbar_app_info +short_description: Information module for Trustsec NBAR App +description: +- Get all Trustsec NBAR App. +- Get Trustsec NBAR App by id. +- Get NBAR Application by id. +- Get all NBAR Applications. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + page: + description: + - Page query parameter. Page number. + type: int + size: + description: + - Size query parameter. Number of objects returned per page. + type: int + sort: + description: + - Sort query parameter. Sort type - asc or desc. + type: str + sortBy: + description: + - SortBy query parameter. Sort column by which objects needs to be sorted. + type: str + filter: + description: + - > + Filter query parameter. .. Container **Simple filtering** should be available through the filter query + string parameter. The structure of a filter is a triplet of field operator and value separated with dots. + More than one filter can be sent. The logical operator common to ALL filter criteria will be by default AND, + and can be changed by using the *"filterType=or"* query string parameter. + - Each resource Data model description should specify if an attribute is a filtered field. + - The 'EQ' operator describes 'Equals'. + - The 'NEQ' operator describes 'Not Equals'. + - The 'GT' operator describes 'Greater Than'. + - The 'LT' operator describes 'Less Than'. + - The 'STARTSW' operator describes 'Starts With'. + - The 'NSTARTSW' operator describes 'Not Starts With'. + - The 'ENDSW' operator describes 'Ends With'. + - The 'NENDSW' operator describes 'Not Ends With'. + - The 'CONTAINS' operator describes 'Contains'. + - The 'NCONTAINS' operator describes 'Not Contains'. + type: str + filterType: + description: + - > + FilterType query parameter. The logical operator common to ALL filter criteria will be by default AND, and + can be changed by using the parameter. + type: str + id: + description: + - Id path parameter. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for nbarApp + description: Complete reference of the nbarApp API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + nbar_app.NbarApp.get_nbar_app_by_id, + nbar_app.NbarApp.get_nbar_apps_generator, + + - Paths used are + get /api/v1/trustsec/sgacl/nbarapp, + get /api/v1/trustsec/sgacl/nbarapp/{id}, + +""" + +EXAMPLES = r""" +- name: Get all Trustsec NBAR App + cisco.ise.trustsec_nbar_app_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + page: 0 + size: 0 + sort: string + sortBy: string + filter: string + filterType: string + register: result + +- name: Get Trustsec NBAR App by id + cisco.ise.trustsec_nbar_app_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + id: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "description": "string", + "id": "string", + "name": "string", + "networkIdentities": [ + { + "ports": "string", + "protocol": "string" + } + ] + } + ] + +ise_responses: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "description": "string", + "id": "string", + "name": "string", + "networkIdentities": [ + { + "ports": "string", + "protocol": "string" + } + ] + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping.py new file mode 100644 index 000000000..5aed74a06 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping.py @@ -0,0 +1,134 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_sg_vn_mapping +short_description: Resource module for Trustsec SG VN Mapping +description: +- Manage operations create, update and delete of the resource Trustsec SG VN Mapping. +- Create Security Group and Virtual Network mapping. +- Delete Security Group and Virtual Network mapping. +- Update Security Group and Virtual Network mapping. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + id: + description: Identifier of the SG-VN mapping. + type: str + lastUpdate: + description: Timestamp for the last update of the SG-VN mapping. + type: str + sgName: + description: Name of the associated Security Group to be used for identity if id + is not provided. + type: str + sgtId: + description: Identifier of the associated Security Group which is required unless + its name is provided. + type: str + vnId: + description: Identifier for the associated Virtual Network which is required unless + its name is provided. + type: str + vnName: + description: Name of the associated Virtual Network to be used for identity if id + is not provided. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for sgVnMapping + description: Complete reference of the sgVnMapping API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + sg_vn_mapping.SgVnMapping.create_sg_vn_mapping, + sg_vn_mapping.SgVnMapping.delete_sg_vn_mapping, + sg_vn_mapping.SgVnMapping.update_sg_vn_mapping, + + - Paths used are + post /api/v1/trustsec/sgvnmapping, + delete /api/v1/trustsec/sgvnmapping/{id}, + put /api/v1/trustsec/sgvnmapping/{id}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_sg_vn_mapping: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + id: string + lastUpdate: string + sgName: string + sgtId: string + vnId: string + vnName: string + +- name: Update by id + cisco.ise.trustsec_sg_vn_mapping: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + id: string + lastUpdate: string + sgName: string + sgtId: string + vnId: string + vnName: string + +- name: Delete by id + cisco.ise.trustsec_sg_vn_mapping: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + id: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "id": "string", + "lastUpdate": "string", + "sgName": "string", + "sgtId": "string", + "vnId": "string", + "vnName": "string" + } + ] + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string", + "lastUpdate": "string", + "sgName": "string", + "sgtId": "string", + "vnId": "string", + "vnName": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_create.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_create.py new file mode 100644 index 000000000..18b2ae711 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_create.py @@ -0,0 +1,87 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_sg_vn_mapping_bulk_create +short_description: Resource module for Trustsec SG VN Mapping Bulk Create +description: +- Manage operation create of the resource Trustsec SG VN Mapping Bulk Create. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + payload: + description: Trustsec SG VN Mapping Bulk Create's payload. + elements: dict + suboptions: + id: + description: Identifier of the SG-VN mapping. + type: str + lastUpdate: + description: Timestamp for the last update of the SG-VN mapping. + type: str + sgName: + description: Name of the associated Security Group to be used for identity if + id is not provided. + type: str + sgtId: + description: Identifier of the associated Security Group which is required unless + its name is provided. + type: str + vnId: + description: Identifier for the associated Virtual Network which is required + unless its name is provided. + type: str + vnName: + description: Name of the associated Virtual Network to be used for identity + if id is not provided. + type: str + type: list +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for sgVnMapping + description: Complete reference of the sgVnMapping API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + sg_vn_mapping.SgVnMapping.bulk_create_sg_vn_mappings, + + - Paths used are + post /api/v1/trustsec/sgvnmapping/bulk/create, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_sg_vn_mapping_bulk_create: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + payload: + - id: string + lastUpdate: string + sgName: string + sgtId: string + vnId: string + vnName: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_delete.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_delete.py new file mode 100644 index 000000000..5d1638c84 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_delete.py @@ -0,0 +1,59 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_sg_vn_mapping_bulk_delete +short_description: Resource module for Trustsec SG VN Mapping Bulk Delete +description: +- Manage operation create of the resource Trustsec SG VN Mapping Bulk Delete. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + payload: + description: Trustsec SG VN Mapping Bulk Delete's payload. + elements: str + type: list +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for sgVnMapping + description: Complete reference of the sgVnMapping API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + sg_vn_mapping.SgVnMapping.bulk_delete_sg_vn_mappings, + + - Paths used are + post /api/v1/trustsec/sgvnmapping/bulk/delete, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_sg_vn_mapping_bulk_delete: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + payload: + - string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_update.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_update.py new file mode 100644 index 000000000..4c91c767c --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_bulk_update.py @@ -0,0 +1,87 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_sg_vn_mapping_bulk_update +short_description: Resource module for Trustsec SG VN Mapping Bulk Update +description: +- Manage operation create of the resource Trustsec SG VN Mapping Bulk Update. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + payload: + description: Trustsec SG VN Mapping Bulk Update's payload. + elements: dict + suboptions: + id: + description: Identifier of the SG-VN mapping. + type: str + lastUpdate: + description: Timestamp for the last update of the SG-VN mapping. + type: str + sgName: + description: Name of the associated Security Group to be used for identity if + id is not provided. + type: str + sgtId: + description: Identifier of the associated Security Group which is required unless + its name is provided. + type: str + vnId: + description: Identifier for the associated Virtual Network which is required + unless its name is provided. + type: str + vnName: + description: Name of the associated Virtual Network to be used for identity + if id is not provided. + type: str + type: list +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for sgVnMapping + description: Complete reference of the sgVnMapping API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + sg_vn_mapping.SgVnMapping.bulk_update_sg_vn_mappings, + + - Paths used are + post /api/v1/trustsec/sgvnmapping/bulk/update, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_sg_vn_mapping_bulk_update: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + payload: + - id: string + lastUpdate: string + sgName: string + sgtId: string + vnId: string + vnName: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_info.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_info.py new file mode 100644 index 000000000..9a41af068 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_sg_vn_mapping_info.py @@ -0,0 +1,144 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_sg_vn_mapping_info +short_description: Information module for Trustsec SG VN Mapping +description: +- Get all Trustsec SG VN Mapping. +- Get Trustsec SG VN Mapping by id. +- Get Security Group and Virtual Network mapping by id. +- Get all Security Group and Virtual Network mappings. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + page: + description: + - Page query parameter. Page number. + type: int + size: + description: + - Size query parameter. Number of objects returned per page. + type: int + sort: + description: + - Sort query parameter. Sort type - asc or desc. + type: str + sortBy: + description: + - SortBy query parameter. Sort column by which objects needs to be sorted. + type: str + filter: + description: + - > + Filter query parameter. .. Container **Simple filtering** should be available through the filter query + string parameter. The structure of a filter is a triplet of field operator and value separated with dots. + More than one filter can be sent. The logical operator common to ALL filter criteria will be by default AND, + and can be changed by using the *"filterType=or"* query string parameter. + - Each resource Data model description should specify if an attribute is a filtered field. + - The 'EQ' operator describes 'Equals'. + - The 'NEQ' operator describes 'Not Equals'. + - The 'GT' operator describes 'Greater Than'. + - The 'LT' operator describes 'Less Than'. + - The 'STARTSW' operator describes 'Starts With'. + - The 'NSTARTSW' operator describes 'Not Starts With'. + - The 'ENDSW' operator describes 'Ends With'. + - The 'NENDSW' operator describes 'Not Ends With'. + - The 'CONTAINS' operator describes 'Contains'. + - The 'NCONTAINS' operator describes 'Not Contains'. + type: str + filterType: + description: + - > + FilterType query parameter. The logical operator common to ALL filter criteria will be by default AND, and + can be changed by using the parameter. + type: str + id: + description: + - Id path parameter. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for sgVnMapping + description: Complete reference of the sgVnMapping API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + sg_vn_mapping.SgVnMapping.get_sg_vn_mapping_by_id, + sg_vn_mapping.SgVnMapping.get_sg_vn_mapping_list_generator, + + - Paths used are + get /api/v1/trustsec/sgvnmapping, + get /api/v1/trustsec/sgvnmapping/{id}, + +""" + +EXAMPLES = r""" +- name: Get all Trustsec SG VN Mapping + cisco.ise.trustsec_sg_vn_mapping_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + page: 0 + size: 0 + sort: string + sortBy: string + filter: string + filterType: string + register: result + +- name: Get Trustsec SG VN Mapping by id + cisco.ise.trustsec_sg_vn_mapping_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + id: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "id": "string", + "lastUpdate": "string", + "sgName": "string", + "sgtId": "string", + "vnId": "string", + "vnName": "string" + } + ] + +ise_responses: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "id": "string", + "lastUpdate": "string", + "sgName": "string", + "sgtId": "string", + "vnId": "string", + "vnName": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_vn.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn.py new file mode 100644 index 000000000..3742bd146 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn.py @@ -0,0 +1,119 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_vn +short_description: Resource module for Trustsec VN +description: +- Manage operations create, update and delete of the resource Trustsec VN. +- Create Virtual Network. +- Update Virtual Network. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + additionalAttributes: + description: JSON String of additional attributes for the Virtual Network. + type: str + id: + description: Identifier of the Virtual Network. + type: str + lastUpdate: + description: Timestamp for the last update of the Virtual Network. + type: str + name: + description: Name of the Virtual Network. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for virtualNetwork + description: Complete reference of the virtualNetwork API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + virtual_network.VirtualNetwork.create_virtual_network, + virtual_network.VirtualNetwork.delete_virtual_network_by_id, + virtual_network.VirtualNetwork.update_virtual_network_by_id, + + - Paths used are + post /api/v1/trustsec/virtualnetwork, + delete /api/v1/trustsec/virtualnetwork/{id}, + put /api/v1/trustsec/virtualnetwork/{id}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_vn: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + additionalAttributes: string + id: string + lastUpdate: string + name: string + +- name: Update by id + cisco.ise.trustsec_vn: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + additionalAttributes: string + id: string + lastUpdate: string + name: string + +- name: Delete by id + cisco.ise.trustsec_vn: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + id: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "additionalAttributes": "string", + "id": "string", + "lastUpdate": "string", + "name": "string" + } + ] + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "response": [ + { + "additionalAttributes": "string", + "id": "string", + "lastUpdate": "string", + "name": "string" + } + ] + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_create.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_create.py new file mode 100644 index 000000000..17a41128f --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_create.py @@ -0,0 +1,75 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_vn_bulk_create +short_description: Resource module for Trustsec VN Bulk Create +description: +- Manage operation create of the resource Trustsec VN Bulk Create. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + payload: + description: Trustsec VN Bulk Create's payload. + elements: dict + suboptions: + additionalAttributes: + description: JSON String of additional attributes for the Virtual Network. + type: str + id: + description: Identifier of the Virtual Network. + type: str + lastUpdate: + description: Timestamp for the last update of the Virtual Network. + type: str + name: + description: Name of the Virtual Network. + type: str + type: list +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for virtualNetwork + description: Complete reference of the virtualNetwork API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + virtual_network.VirtualNetwork.bulk_create_virtual_networks, + + - Paths used are + post /api/v1/trustsec/virtualnetwork/bulk/create, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_vn_bulk_create: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + payload: + - additionalAttributes: string + id: string + lastUpdate: string + name: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_delete.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_delete.py new file mode 100644 index 000000000..d8ab682d9 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_delete.py @@ -0,0 +1,59 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_vn_bulk_delete +short_description: Resource module for Trustsec VN Bulk Delete +description: +- Manage operation create of the resource Trustsec VN Bulk Delete. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + payload: + description: Trustsec VN Bulk Delete's payload. + elements: str + type: list +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for virtualNetwork + description: Complete reference of the virtualNetwork API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + virtual_network.VirtualNetwork.bulk_delete_virtual_networks, + + - Paths used are + post /api/v1/trustsec/virtualnetwork/bulk/delete, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_vn_bulk_delete: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + payload: + - string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_update.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_update.py new file mode 100644 index 000000000..bf79b2c28 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_bulk_update.py @@ -0,0 +1,75 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_vn_bulk_update +short_description: Resource module for Trustsec VN Bulk Update +description: +- Manage operation create of the resource Trustsec VN Bulk Update. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + payload: + description: Trustsec VN Bulk Update's payload. + elements: dict + suboptions: + additionalAttributes: + description: JSON String of additional attributes for the Virtual Network. + type: str + id: + description: Identifier of the Virtual Network. + type: str + lastUpdate: + description: Timestamp for the last update of the Virtual Network. + type: str + name: + description: Name of the Virtual Network. + type: str + type: list +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for virtualNetwork + description: Complete reference of the virtualNetwork API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + virtual_network.VirtualNetwork.bulk_update_virtual_networks, + + - Paths used are + post /api/v1/trustsec/virtualnetwork/bulk/update, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_vn_bulk_update: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + payload: + - additionalAttributes: string + id: string + lastUpdate: string + name: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_info.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_info.py new file mode 100644 index 000000000..cb1bbd9f8 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_info.py @@ -0,0 +1,140 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_vn_info +short_description: Information module for Trustsec VN +description: +- Get all Trustsec VN. +- Get Trustsec VN by id. +- Get Virtual Network by id. +- Get all Virtual Networks. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + page: + description: + - Page query parameter. Page number. + type: int + size: + description: + - Size query parameter. Number of objects returned per page. + type: int + sort: + description: + - Sort query parameter. Sort type - asc or desc. + type: str + sortBy: + description: + - SortBy query parameter. Sort column by which objects needs to be sorted. + type: str + filter: + description: + - > + Filter query parameter. .. Container **Simple filtering** should be available through the filter query + string parameter. The structure of a filter is a triplet of field operator and value separated with dots. + More than one filter can be sent. The logical operator common to ALL filter criteria will be by default AND, + and can be changed by using the *"filterType=or"* query string parameter. + - Each resource Data model description should specify if an attribute is a filtered field. + - The 'EQ' operator describes 'Equals'. + - The 'NEQ' operator describes 'Not Equals'. + - The 'GT' operator describes 'Greater Than'. + - The 'LT' operator describes 'Less Than'. + - The 'STARTSW' operator describes 'Starts With'. + - The 'NSTARTSW' operator describes 'Not Starts With'. + - The 'ENDSW' operator describes 'Ends With'. + - The 'NENDSW' operator describes 'Not Ends With'. + - The 'CONTAINS' operator describes 'Contains'. + - The 'NCONTAINS' operator describes 'Not Contains'. + type: str + filterType: + description: + - > + FilterType query parameter. The logical operator common to ALL filter criteria will be by default AND, and + can be changed by using the parameter. + type: str + id: + description: + - Id path parameter. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for virtualNetwork + description: Complete reference of the virtualNetwork API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + virtual_network.VirtualNetwork.get_virtual_network_by_id, + virtual_network.VirtualNetwork.get_virtual_networks_generator, + + - Paths used are + get /api/v1/trustsec/virtualnetwork, + get /api/v1/trustsec/virtualnetwork/{id}, + +""" + +EXAMPLES = r""" +- name: Get all Trustsec VN + cisco.ise.trustsec_vn_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + page: 0 + size: 0 + sort: string + sortBy: string + filter: string + filterType: string + register: result + +- name: Get Trustsec VN by id + cisco.ise.trustsec_vn_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + id: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "additionalAttributes": "string", + "id": "string", + "lastUpdate": "string", + "name": "string" + } + ] + +ise_responses: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "additionalAttributes": "string", + "id": "string", + "lastUpdate": "string", + "name": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping.py new file mode 100644 index 000000000..fd8ced03d --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping.py @@ -0,0 +1,138 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_vn_vlan_mapping +short_description: Resource module for Trustsec VN VLAN Mapping +description: +- Manage operations create, update and delete of the resource Trustsec VN VLAN Mapping. +- Create VN-Vlan Mapping. +- Update VN-Vlan Mapping. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + id: + description: Identifier of the VN-VLAN Mapping. + type: str + isData: + description: Flag which indicates whether the VLAN is data or voice type. + type: bool + isDefaultVLAN: + description: Flag which indicates if the VLAN is default. + type: bool + lastUpdate: + description: Timestamp for the last update of the VN-VLAN Mapping. + type: str + maxValue: + description: Max value. + type: int + name: + description: Name of the VLAN. + type: str + vnId: + description: Identifier for the associated Virtual Network which is required unless + its name is provided. + type: str + vnName: + description: Name of the associated Virtual Network to be used for identity if id + is not provided. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for vnVlanMapping + description: Complete reference of the vnVlanMapping API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + vn_vlan_mapping.VnVlanMapping.create_vn_vlan_mapping, + vn_vlan_mapping.VnVlanMapping.delete_vn_vlan_mapping, + vn_vlan_mapping.VnVlanMapping.update_vn_vlan_mapping, + + - Paths used are + post /api/v1/trustsec/vnvlanmapping, + delete /api/v1/trustsec/vnvlanmapping/{id}, + put /api/v1/trustsec/vnvlanmapping/{id}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_vn_vlan_mapping: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + id: string + isData: true + isDefaultVlan: true + lastUpdate: string + maxValue: 0 + name: string + vnId: string + vnName: string + +- name: Update by id + cisco.ise.trustsec_vn_vlan_mapping: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + id: string + isData: true + isDefaultVlan: true + lastUpdate: string + maxValue: 0 + name: string + vnId: string + vnName: string + +- name: Delete by id + cisco.ise.trustsec_vn_vlan_mapping: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + id: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "id": "string", + "isData": true, + "isDefaultVlan": true, + "lastUpdate": "string", + "maxValue": 0, + "name": "string", + "vnId": "string", + "vnName": "string" + } + ] + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "message": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_create.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_create.py new file mode 100644 index 000000000..d2e819c33 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_create.py @@ -0,0 +1,93 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_vn_vlan_mapping_bulk_create +short_description: Resource module for Trustsec VN VLAN Mapping Bulk Create +description: +- Manage operation create of the resource Trustsec VN VLAN Mapping Bulk Create. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + payload: + description: Trustsec VN VLAN Mapping Bulk Create's payload. + elements: dict + suboptions: + id: + description: Identifier of the VN-VLAN Mapping. + type: str + isData: + description: Flag which indicates whether the VLAN is data or voice type. + type: bool + isDefaultVLAN: + description: Flag which indicates if the VLAN is default. + type: bool + lastUpdate: + description: Timestamp for the last update of the VN-VLAN Mapping. + type: str + maxValue: + description: Max value. + type: int + name: + description: Name of the VLAN. + type: str + vnId: + description: Identifier for the associated Virtual Network which is required + unless its name is provided. + type: str + vnName: + description: Name of the associated Virtual Network to be used for identity + if id is not provided. + type: str + type: list +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for vnVlanMapping + description: Complete reference of the vnVlanMapping API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + vn_vlan_mapping.VnVlanMapping.bulk_create_vn_vlan_mappings, + + - Paths used are + post /api/v1/trustsec/vnvlanmapping/bulk/create, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_vn_vlan_mapping_bulk_create: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + payload: + - id: string + isData: true + isDefaultVlan: true + lastUpdate: string + maxValue: 0 + name: string + vnId: string + vnName: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_delete.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_delete.py new file mode 100644 index 000000000..4431bf32e --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_delete.py @@ -0,0 +1,59 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_vn_vlan_mapping_bulk_delete +short_description: Resource module for Trustsec VN VLAN Mapping Bulk Delete +description: +- Manage operation create of the resource Trustsec VN VLAN Mapping Bulk Delete. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + payload: + description: Trustsec VN VLAN Mapping Bulk Delete's payload. + elements: str + type: list +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for vnVlanMapping + description: Complete reference of the vnVlanMapping API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + vn_vlan_mapping.VnVlanMapping.bulk_delete_vn_vlan_mappings, + + - Paths used are + post /api/v1/trustsec/vnvlanmapping/bulk/delete, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_vn_vlan_mapping_bulk_delete: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + payload: + - string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_update.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_update.py new file mode 100644 index 000000000..531296199 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_bulk_update.py @@ -0,0 +1,93 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_vn_vlan_mapping_bulk_update +short_description: Resource module for Trustsec VN VLAN Mapping Bulk Update +description: +- Manage operation create of the resource Trustsec VN VLAN Mapping Bulk Update. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + payload: + description: Trustsec VN VLAN Mapping Bulk Update's payload. + elements: dict + suboptions: + id: + description: Identifier of the VN-VLAN Mapping. + type: str + isData: + description: Flag which indicates whether the VLAN is data or voice type. + type: bool + isDefaultVLAN: + description: Flag which indicates if the VLAN is default. + type: bool + lastUpdate: + description: Timestamp for the last update of the VN-VLAN Mapping. + type: str + maxValue: + description: Max value. + type: int + name: + description: Name of the VLAN. + type: str + vnId: + description: Identifier for the associated Virtual Network which is required + unless its name is provided. + type: str + vnName: + description: Name of the associated Virtual Network to be used for identity + if id is not provided. + type: str + type: list +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for vnVlanMapping + description: Complete reference of the vnVlanMapping API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + vn_vlan_mapping.VnVlanMapping.bulk_update_vn_vlan_mappings, + + - Paths used are + post /api/v1/trustsec/vnvlanmapping/bulk/update, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.trustsec_vn_vlan_mapping_bulk_update: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + payload: + - id: string + isData: true + isDefaultVlan: true + lastUpdate: string + maxValue: 0 + name: string + vnId: string + vnName: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_info.py b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_info.py new file mode 100644 index 000000000..5e9c19413 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/trustsec_vn_vlan_mapping_info.py @@ -0,0 +1,148 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: trustsec_vn_vlan_mapping_info +short_description: Information module for Trustsec VN VLAN Mapping +description: +- Get all Trustsec VN VLAN Mapping. +- Get Trustsec VN VLAN Mapping by id. +- Get VN-Vlan Mapping by id. +- Get all VN-Vlan Mappings. +version_added: '2.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + page: + description: + - Page query parameter. Page number. + type: int + size: + description: + - Size query parameter. Number of objects returned per page. + type: int + sort: + description: + - Sort query parameter. Sort type - asc or desc. + type: str + sortBy: + description: + - SortBy query parameter. Sort column by which objects needs to be sorted. + type: str + filter: + description: + - > + Filter query parameter. .. Container **Simple filtering** should be available through the filter query + string parameter. The structure of a filter is a triplet of field operator and value separated with dots. + More than one filter can be sent. The logical operator common to ALL filter criteria will be by default AND, + and can be changed by using the *"filterType=or"* query string parameter. + - Each resource Data model description should specify if an attribute is a filtered field. + - The 'EQ' operator describes 'Equals'. + - The 'NEQ' operator describes 'Not Equals'. + - The 'GT' operator describes 'Greater Than'. + - The 'LT' operator describes 'Less Than'. + - The 'STARTSW' operator describes 'Starts With'. + - The 'NSTARTSW' operator describes 'Not Starts With'. + - The 'ENDSW' operator describes 'Ends With'. + - The 'NENDSW' operator describes 'Not Ends With'. + - The 'CONTAINS' operator describes 'Contains'. + - The 'NCONTAINS' operator describes 'Not Contains'. + type: str + filterType: + description: + - > + FilterType query parameter. The logical operator common to ALL filter criteria will be by default AND, and + can be changed by using the parameter. + type: str + id: + description: + - Id path parameter. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +seealso: +- name: Cisco ISE documentation for vnVlanMapping + description: Complete reference of the vnVlanMapping API. + link: https://developer.cisco.com/docs/identity-services-engine/v1/#!trustsec-openapi +notes: + - SDK Method used are + vn_vlan_mapping.VnVlanMapping.get_vn_vlan_mapping_by_id, + vn_vlan_mapping.VnVlanMapping.get_vn_vlan_mapping_list_generator, + + - Paths used are + get /api/v1/trustsec/vnvlanmapping, + get /api/v1/trustsec/vnvlanmapping/{id}, + +""" + +EXAMPLES = r""" +- name: Get all Trustsec VN VLAN Mapping + cisco.ise.trustsec_vn_vlan_mapping_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + page: 0 + size: 0 + sort: string + sortBy: string + filter: string + filterType: string + register: result + +- name: Get Trustsec VN VLAN Mapping by id + cisco.ise.trustsec_vn_vlan_mapping_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + id: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "id": "string", + "isData": true, + "isDefaultVlan": true, + "lastUpdate": "string", + "maxValue": 0, + "name": "string", + "vnId": "string", + "vnName": "string" + } + ] + +ise_responses: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "id": "string", + "isData": true, + "isDefaultVlan": true, + "lastUpdate": "string", + "maxValue": 0, + "name": "string", + "vnId": "string", + "vnName": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/upgrade_proceed.py b/ansible_collections/cisco/ise/plugins/modules/upgrade_proceed.py new file mode 100644 index 000000000..c53223cad --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/upgrade_proceed.py @@ -0,0 +1,69 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: upgrade_proceed +short_description: Resource module for Upgrade Proceed +description: +- Manage operation create of the resource Upgrade Proceed. +- API's purpose would be to orchestrate upgrade execution on PPAN. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + hostnames: + description: Upgrade Proceed's hostnames. + elements: str + type: list + preCheckReportID: + description: Upgrade Proceed's preCheckReportID. + type: str + upgradeType: + description: Upgrade Proceed's upgradeType. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + fullupgrade.Fullupgrade.initiate_upgrade_on_p_p_a_n, + + - Paths used are + post /api/v1/upgrade/proceed/initiate-upgrade, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.upgrade_proceed: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + hostnames: + - string + preCheckReportID: string + upgradeType: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "response": { + "message": "string", + "preCheckReportID": "string" + }, + "version": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/upgrade_proceed_info.py b/ansible_collections/cisco/ise/plugins/modules/upgrade_proceed_info.py new file mode 100644 index 000000000..df27e55ef --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/upgrade_proceed_info.py @@ -0,0 +1,53 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: upgrade_proceed_info +short_description: Information module for Upgrade Proceed +description: +- Get the status of upgrade process for the requested nodes +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + preCheckReportID: + description: preCheckReportID. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + full_upgrade.FullUpgrade.proceed_status, + - Paths used are + get /api/v1/upgrade/proceed/get-status, + +""" + +EXAMPLES = r""" +- name: Get status of upgrade process for the requested nodes + cisco.ise.upgrade_proceed_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + preCheckReportID: string + register: result +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "message": "string", + "preCheckReportID": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel.py b/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel.py new file mode 100644 index 000000000..8399cfb38 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel.py @@ -0,0 +1,73 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: upgrade_stage_cancel +short_description: Resource module for Upgrade Stage Cancel +description: +- Manage operation create of the resource Upgrade Stage Cancel. +- API to cancel staging process of specified nodes from PPAN. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + hostnames: + description: Upgrade Stage Cancel's hostnames. + elements: str + type: list + preCheckReportID: + description: Upgrade Stage Cancel's preCheckReportID. + type: str + upgradeType: + description: Upgrade Stage Cancel's upgradeType. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + fullupgrade.Fullupgrade.cancel_staging_on_p_p_a_n, + + - Paths used are + post /api/v1/upgrade/stage/cancel-stage, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.upgrade_stage_cancel: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + hostnames: + - string + preCheckReportID: string + upgradeType: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "dbStatus": "string", + "message": "string", + "node": "string", + "percentage": 0, + "progressMsg": "string", + "status": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel_info.py b/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel_info.py new file mode 100644 index 000000000..13e83e709 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_cancel_info.py @@ -0,0 +1,64 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: upgrade_stage_cancel_info +short_description: Information module for Upgrade Stage Cancel +description: +- Get all Upgrade Stage Cancel. +- Get the status of upgrade stage process for the requested nodes. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + preCheckReportID: + description: + - PreCheckReportID query parameter. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + fullupgrade.Fullupgrade.stage_status, + + - Paths used are + get /api/v1/upgrade/stage/get-status, + +""" + +EXAMPLES = r""" +- name: Get all Upgrade Stage Cancel + cisco.ise.upgrade_stage_cancel_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + preCheckReportID: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "dbStatus": "string", + "message": "string", + "node": "string", + "percentage": 0, + "progressMsg": "string", + "status": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start.py b/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start.py new file mode 100644 index 000000000..5d6b248eb --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start.py @@ -0,0 +1,77 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: upgrade_stage_start +short_description: Resource module for Upgrade Stage Start +description: +- Manage operation create of the resource Upgrade Stage Start. +- API to initiate staging orcheastration from PPAN. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + hostnames: + description: Upgrade Stage Start's hostnames. + elements: str + type: list + preCheckReportID: + description: Upgrade Stage Start's preCheckReportID. + type: str + reTrigger: + description: ReTrigger flag. + type: bool + upgradeType: + description: Upgrade Stage Start's upgradeType. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + fullupgrade.Fullupgrade.initiate_staging_on_p_p_a_n, + + - Paths used are + post /api/v1/upgrade/stage/start-stage, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.upgrade_stage_start: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + hostnames: + - string + preCheckReportID: string + reTrigger: true + upgradeType: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "dbStatus": "string", + "message": "string", + "node": "string", + "percentage": 0, + "progressMsg": "string", + "status": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start_info.py b/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start_info.py new file mode 100644 index 000000000..2d7f92cf3 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/upgrade_stage_start_info.py @@ -0,0 +1,64 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: upgrade_stage_start_info +short_description: Information module for Upgrade Stage Start +description: +- Get all Upgrade Stage Start. +- Get the status of upgrade stage process for the requested nodes. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + preCheckReportID: + description: + - PreCheckReportID query parameter. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + fullupgrade.Fullupgrade.stage_status, + + - Paths used are + get /api/v1/upgrade/stage/get-status, + +""" + +EXAMPLES = r""" +- name: Get all Upgrade Stage Start + cisco.ise.upgrade_stage_start_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + preCheckReportID: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "dbStatus": "string", + "message": "string", + "node": "string", + "percentage": 0, + "progressMsg": "string", + "status": "string" + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/user_equipment.py b/ansible_collections/cisco/ise/plugins/modules/user_equipment.py new file mode 100644 index 000000000..ff7f4c971 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/user_equipment.py @@ -0,0 +1,98 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: user_equipment +short_description: Resource module for User Equipment +description: +- Manage operations create, update and delete of the resource User Equipment. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + description: + description: Description for User Equipment. + type: str + deviceGroup: + description: Device or Endpoint Group. + type: str + imei: + description: IMEI for User Equipment. + type: str + userEquipmentId: + description: UserEquipmentId path parameter. Unique ID for a user equipment object. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + user_equipment.UserEquipment.create_user_equipment, + user_equipment.UserEquipment.delete_user_equipment, + user_equipment.UserEquipment.update_user_equipment, + + - Paths used are + post /api/v1/fiveg/user-equipment, + delete /api/v1/fiveg/user-equipment/{userEquipmentId}, + put /api/v1/fiveg/user-equipment/{userEquipmentId}, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.user_equipment: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + description: string + deviceGroup: string + imei: string + +- name: Update by id + cisco.ise.user_equipment: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: present + description: string + deviceGroup: string + userEquipmentId: 7c9484cf-0ebc-47ad-a9ef-bc12729ed73b + +- name: Delete by id + cisco.ise.user_equipment: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + state: absent + userEquipmentId: 7c9484cf-0ebc-47ad-a9ef-bc12729ed73b + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + {} + +ise_update_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: dict + sample: > + { + "response": {}, + "version": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/user_equipment_bulk.py b/ansible_collections/cisco/ise/plugins/modules/user_equipment_bulk.py new file mode 100644 index 000000000..240bad6e9 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/user_equipment_bulk.py @@ -0,0 +1,75 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: user_equipment_bulk +short_description: Resource module for User Equipment Bulk +description: +- Manage operation create of the resource User Equipment Bulk. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: + ItemList: + description: User Equipment Bulk's ItemList. + elements: dict + suboptions: + description: + description: User Equipment Bulk's description. + type: str + deviceGroup: + description: Device or Endpoint Group. + type: str + id: + description: User Equipment Bulk's id. + type: str + imei: + description: User Equipment Bulk's imei. + type: str + type: list + operation: + description: User Equipment Bulk's operation. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + user_equipment.UserEquipment.bulk_user_equipment_operation, + + - Paths used are + post /api/v1/fiveg/user-equipment/bulk, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.user_equipment_bulk: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + ItemList: + - description: string + deviceGroup: string + id: string + imei: string + operation: string + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/user_equipment_csv.py b/ansible_collections/cisco/ise/plugins/modules/user_equipment_csv.py new file mode 100644 index 000000000..5a80cdac8 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/user_equipment_csv.py @@ -0,0 +1,49 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: user_equipment_csv +short_description: Resource module for User Equipment Csv +description: +- Manage operation create of the resource User Equipment Csv. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module +author: Rafael Campos (@racampos) +options: {} +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + user_equipment.UserEquipment.create_user_equipments_from_c_s_v, + + - Paths used are + post /api/v1/fiveg/user-equipment/csv, + +""" + +EXAMPLES = r""" +- name: Create + cisco.ise.user_equipment_csv: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + { + "id": "string" + } +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/user_equipment_imei_info.py b/ansible_collections/cisco/ise/plugins/modules/user_equipment_imei_info.py new file mode 100644 index 000000000..cd74da4e2 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/user_equipment_imei_info.py @@ -0,0 +1,53 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: user_equipment_imei_info +short_description: Information module for User Equipment Imei Info +description: +- Get User Equipment Imei Info by id. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + imei: + description: + - Imei path parameter. IMEI for the user equipment object. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + user_equipment.UserEquipment.get_user_equipment_by_i_m_e_i, + + - Paths used are + get /api/v1/fiveg/user-equipment/imei/{imei}, + +""" + +EXAMPLES = r""" +- name: Get User Equipment Imei Info by id + cisco.ise.user_equipment_imei_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + imei: string + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + {} +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/user_equipment_info.py b/ansible_collections/cisco/ise/plugins/modules/user_equipment_info.py new file mode 100644 index 000000000..89c951e57 --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/user_equipment_info.py @@ -0,0 +1,122 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: user_equipment_info +short_description: Information module for User Equipment Info +description: +- Get all User Equipment Info. +- Get User Equipment Info by id. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + page: + description: + - Page query parameter. Page number. + type: int + size: + description: + - Size query parameter. Number of objects returned per page. + type: int + filter: + description: + - > + Filter query parameter. .. Container **Simple filtering** should be available through the filter query + string parameter. The structure of a filter is a triplet of field operator and value separated with dots. + More than one filter can be sent. The logical operator common to ALL filter criteria will be by default AND, + and can be changed by using the *"filterType=or"* query string parameter. + - Each resource Data model description should specify if an attribute is a filtered field. + - The 'EQ' operator describes 'Equals'. + - The 'NEQ' operator describes 'Not Equals'. + - The 'GT' operator describes 'Greater Than'. + - The 'LT' operator describes 'Less Than'. + - The 'STARTSW' operator describes 'Starts With'. + - The 'NSTARTSW' operator describes 'Not Starts With'. + - The 'ENDSW' operator describes 'Ends With'. + - The 'NENDSW' operator describes 'Not Ends With'. + - The 'CONTAINS' operator describes 'Contains'. + - The 'NCONTAINS' operator describes 'Not Contains'. + type: str + filterType: + description: + - > + FilterType query parameter. The logical operator common to ALL filter criteria will be by default AND, and + can be changed by using the parameter. + type: str + sort: + description: + - Sort query parameter. Sort type - asc or desc. + type: str + sortBy: + description: + - SortBy query parameter. Sort column by which objects needs to be sorted. + type: str + userEquipmentId: + description: + - UserEquipmentId path parameter. Unique ID for a user equipment object. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + user_equipment.UserEquipment.get_user_equipment_by_id, + user_equipment.UserEquipment.get_user_equipments_generator, + + - Paths used are + get /api/v1/fiveg/user-equipment, + get /api/v1/fiveg/user-equipment/{userEquipmentId}, + +""" + +EXAMPLES = r""" +- name: Get all User Equipment Info + cisco.ise.user_equipment_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + page: 0 + size: 0 + filter: string + filterType: string + sort: string + sortBy: string + register: result + +- name: Get User Equipment Info by id + cisco.ise.user_equipment_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + userEquipmentId: 7c9484cf-0ebc-47ad-a9ef-bc12729ed73b + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: dict + sample: > + {} + +ise_responses: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + version_added: '1.1.0' + type: list + elements: dict + sample: > + [ + {} + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/modules/user_equipment_subscriber_info.py b/ansible_collections/cisco/ise/plugins/modules/user_equipment_subscriber_info.py new file mode 100644 index 000000000..48b40dd5d --- /dev/null +++ b/ansible_collections/cisco/ise/plugins/modules/user_equipment_subscriber_info.py @@ -0,0 +1,68 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) 2021, Cisco Systems +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) + +DOCUMENTATION = r""" +--- +module: user_equipment_subscriber_info +short_description: Information module for User Equipment Subscriber Info +description: +- Get User Equipment Subscriber Info by id. +version_added: '1.0.0' +extends_documentation_fragment: + - cisco.ise.module_info +author: Rafael Campos (@racampos) +options: + subscriberId: + description: + - SubscriberId path parameter. Unique ID for a subscriber object. + type: str +requirements: +- ciscoisesdk >= 2.2.1 +- python >= 3.5 +notes: + - SDK Method used are + user_equipment.UserEquipment.get_user_equipments_by_subscriber_id, + + - Paths used are + get /api/v1/fiveg/user-equipment/subscriber/{subscriberId}, + +""" + +EXAMPLES = r""" +- name: Get User Equipment Subscriber Info by id + cisco.ise.user_equipment_subscriber_info: + ise_hostname: "{{ise_hostname}}" + ise_username: "{{ise_username}}" + ise_password: "{{ise_password}}" + ise_verify: "{{ise_verify}}" + subscriberId: 7c9484cf-0ebc-47ad-a9ef-bc12729ed73d + register: result + +""" + +RETURN = r""" +ise_response: + description: A dictionary or list with the response returned by the Cisco ISE Python SDK + returned: always + type: list + elements: dict + sample: > + [ + { + "description": "string", + "deviceGroup": "string", + "imei": "string", + "createTime": "string", + "updateTime": "string", + "id": "string", + "link": { + "rel": "string", + "href": "string", + "type": "string" + } + } + ] +""" diff --git a/ansible_collections/cisco/ise/plugins/plugin_utils/ise.py b/ansible_collections/cisco/ise/plugins/plugin_utils/ise.py index fbb0843c2..85d6889f2 100644 --- a/ansible_collections/cisco/ise/plugins/plugin_utils/ise.py +++ b/ansible_collections/cisco/ise/plugins/plugin_utils/ise.py @@ -133,7 +133,7 @@ def ise_argument_spec(): ise_username=dict(type="str", fallback=(env_fallback, ['ISE_USERNAME']), required=True), ise_password=dict(type="str", fallback=(env_fallback, ['ISE_PASSWORD']), required=True, no_log=True), ise_verify=dict(type="bool", default=True, fallback=(env_fallback, ['ISE_VERIFY'])), - ise_version=dict(type="str", default="3.2_beta", fallback=(env_fallback, ['ISE_VERSION'])), + ise_version=dict(type="str", default="3.3_patch_1", fallback=(env_fallback, ['ISE_VERSION'])), ise_wait_on_rate_limit=dict(type="bool", default=True, fallback=(env_fallback, ['ISE_WAIT_ON_RATE_LIMIT'])), ise_uses_api_gateway=dict(type="bool", default=True, fallback=(env_fallback, ['ISE_USES_API_GATEWAY'])), ise_uses_csrf_token=dict(type="bool", default=False, fallback=(env_fallback, ['ISE_USES_CSRF_TOKEN'])), diff --git a/ansible_collections/cisco/ise/requirements.txt b/ansible_collections/cisco/ise/requirements.txt index 010de3983..5e460438f 100644 --- a/ansible_collections/cisco/ise/requirements.txt +++ b/ansible_collections/cisco/ise/requirements.txt @@ -1,2 +1,2 @@ -ciscoisesdk >= 2.1.1 +ciscoisesdk >= 2.2.1 requests >= 2.25.1 diff --git a/ansible_collections/cisco/meraki/FILES.json b/ansible_collections/cisco/meraki/FILES.json index b254fc063..e0143a1f1 100644 --- a/ansible_collections/cisco/meraki/FILES.json +++ b/ansible_collections/cisco/meraki/FILES.json @@ -305,7 +305,7 @@ "name": "plugins/action/networks_appliance_vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c761dfdb7567afd656b5788e4370d50eb72b6a9e94932379a1042f357ca249d5", + "chksum_sha256": "0d8f2a124c247958c603f6a8f0bde35c5e4047f23c4be0a0931b67e3ffec3949", "format": 1 }, { @@ -641,7 +641,7 @@ "name": "plugins/action/organizations_appliance_vpn_third_party_vpnpeers_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26a5eaec32372b94e348f2e83550f5456bbe018acd3d5ef53ec7b9277e30cdf5", + "chksum_sha256": "777e5c3045b12fc29d855220bed36084b8a05a6f9fdf843776f82d91ff687d0f", "format": 1 }, { @@ -5170,7 +5170,7 @@ "name": "plugins/modules/networks_syslog_servers.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb9294dd8a2398513d14d99fedbf113df49b86739bd9d93d9b90a7cac30ce370", + "chksum_sha256": "fc6ac1af61bd50fa834a4f99b5a2b49e8bbb58c85f46e1e02bc183b6e4b75f4a", "format": 1 }, { @@ -8267,6 +8267,13 @@ "chksum_sha256": null, "format": 1 }, + { + "name": "tests/sanity/ignore-2.18.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8913c618635181041c024588594a4fe41a65b0f2e1bf06f1cb43c160b88a5187", + "format": 1 + }, { "name": "tests/sanity/ignore-2.17.txt", "ftype": "file", @@ -8488,7 +8495,7 @@ "name": "playbooks/test.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bfd74f470da9b4f7431ca97e36246467d19b4f1b13fcf8b1a12b04efc2d51c7e", + "chksum_sha256": "378a7452fdcf625029889a302a2a5af10836ef09d7174da3e9566aca32b567bd", "format": 1 }, { @@ -8831,14 +8838,14 @@ "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0edb9769be2615fbd836b0e2163b3f1ac4a6a5a5c1d26e21d073a68e3a3121cb", + "chksum_sha256": "1060f4303d8c5c24a55241cf88e050652c4343127a884d63f451ebe3268a62bb", "format": 1 }, { "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1783cef0d9bf0bc424d1cb9bf05cc3e6ead14b99c48a5cde79efdf46c11546e3", + "chksum_sha256": "d96640c4c076a573e682d98147f5b7355482761ec5723d5a9f987ee74a96ec25", "format": 1 }, { diff --git a/ansible_collections/cisco/meraki/MANIFEST.json b/ansible_collections/cisco/meraki/MANIFEST.json index 6f671e250..30201ab43 100644 --- a/ansible_collections/cisco/meraki/MANIFEST.json +++ b/ansible_collections/cisco/meraki/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "cisco", "name": "meraki", - "version": "2.18.0", + "version": "2.18.1", "authors": [ "Francisco Mu\u00f1oz ", "Bryan Vargas ", @@ -33,7 +33,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c5636d16b861bfa135c614ab136a32cfe5ca9b0d639f5743d9136b2c3454ca8", + "chksum_sha256": "d71c0f2bceacc791dc8fe1c7b8612d934a800e2a8287300af76e6fa546d42a4b", "format": 1 }, "format": 1 diff --git a/ansible_collections/cisco/meraki/README.md b/ansible_collections/cisco/meraki/README.md index f7dc05f6a..ef5fd1179 100644 --- a/ansible_collections/cisco/meraki/README.md +++ b/ansible_collections/cisco/meraki/README.md @@ -65,7 +65,7 @@ Other versions of this collection have support for previous Cisco Meraki version | Cisco Meraki version | Ansible "cisco.meraki" version | Python "DashboardAPI" version | |--------------------------|------------------------------|-------------------------------| | 1.33.0 | 2.17.0 |1.33.0 | -| 1.44.1 | 2.18.0 |1.44.1 | +| 1.44.1 | 2.18.1 |1.44.1 | *Notes*: diff --git a/ansible_collections/cisco/meraki/changelogs/changelog.yaml b/ansible_collections/cisco/meraki/changelogs/changelog.yaml index 9909009fc..31f7c73bd 100644 --- a/ansible_collections/cisco/meraki/changelogs/changelog.yaml +++ b/ansible_collections/cisco/meraki/changelogs/changelog.yaml @@ -1063,4 +1063,11 @@ releases: - organizations_wireless_devices_channel_utilization_history_by_network_by_interval_info - new plugin. - organizations_wireless_devices_packet_loss_by_client_info - new plugin. - organizations_wireless_devices_packet_loss_by_device_info - new plugin. - - organizations_wireless_devices_packet_loss_by_network_info - new plugin. \ No newline at end of file + - organizations_wireless_devices_packet_loss_by_network_info - new plugin. + 2.18.1: + changes: + minor_changes: + - The `id` parameter is now required for `networks_appliance_vlans` module. + - The `id` parameter is change type to an `integer` in `networks_appliance_vlans` module. + - Fixing problem of naming in `organizations_appliance_vpn_third_party_vpnpeers_info`. + - Removing `state` from allowed parameters for `networks_syslog_servers` module. \ No newline at end of file diff --git a/ansible_collections/cisco/meraki/playbooks/test.yml b/ansible_collections/cisco/meraki/playbooks/test.yml index 02e2c7cd9..f2b0a4dcb 100644 --- a/ansible_collections/cisco/meraki/playbooks/test.yml +++ b/ansible_collections/cisco/meraki/playbooks/test.yml @@ -127,9 +127,97 @@ # state: present # meraki_suppress_logging: false - - name: onboard order - cisco.meraki.organizations_inventory_claim: - # meraki_api_key: "{{ meraki_api }}" - # meraki_simulate: "{{ testpolicy }}" - organizationId: "{{ org_id }}" - orders: "1" \ No newline at end of file + # - name: onboard order + # cisco.meraki.organizations_inventory_claim: + # # meraki_api_key: "{{ meraki_api }}" + # # meraki_simulate: "{{ testpolicy }}" + # organizationId: "{{ org_id }}" + # orders: "1" + + + # - name: Enable Vlans on the MX + # cisco.meraki.networks_appliance_vlans_settings: + # state: present + # networkId: "{{network_id}}" + # vlansEnabled: true + + # - name: Create appliance Vlan 100 + # cisco.meraki.networks_appliance_vlans: + # state: present + # applianceIp: 192.168.1.2 + # cidr: 192.168.1.0/24 + # id: '100' + # name: My VLAN + # networkId: "{{network_id}}" + # subnet: 192.168.1.0/24 + + # - name: Create appliance Vlan 200 + # cisco.meraki.networks_appliance_vlans: + # state: present + # applianceIp: 192.168.2.2 + # cidr: 192.168.2.0/24 + # id: '200' + # name: My VLAN + # networkId: "{{network_id}}" + # subnet: 192.168.2.0/24 + + # - name: Create appliance Vlan 300 + # cisco.meraki.networks_appliance_vlans: + # state: present + # applianceIp: 192.168.3.2 + # cidr: 192.168.3.0/24 + # id: '300' + # name: My VLAN + # networkId: "{{network_id}}" + # subnet: 192.168.3.0/24 + + + # - name: Enable Vlans on the MX + # cisco.meraki.networks_appliance_vlans_settings: + # state: present + # networkId: "{{network_id}}" + # vlansEnabled: true + + # - name: Create appliance Vlan 100 + # cisco.meraki.networks_appliance_vlans: + # state: present + # meraki_suppress_logging: false + # applianceIp: 10.1.0.2 + # cidr: 10.1.0.0/17 + # id: '100' + # name: My VLAN + # networkId: "{{network_id}}" + # subnet: 10.1.0.0/17 + + # - name: Create appliance Vlan 200 + # cisco.meraki.networks_appliance_vlans: + # state: present + # meraki_suppress_logging: false + # applianceIp: 172.200.0.2 + # cidr: 172.200.0.0/20 + # id: '200' + # name: My VLAN + # networkId: "{{network_id}}" + # subnet: 172.200.0.0/20 + + # - name: Create appliance Vlan 300 + # cisco.meraki.networks_appliance_vlans: + # state: present + # meraki_suppress_logging: false + # applianceIp: 172.16.0.2 + # cidr: 172.16.0.0/24 + # id: 300 + # name: My VLAN 2 + # networkId: "{{network_id}}" + # subnet: 172.16.0.0/24 + + + # - name: Get all organizations _appliance _vpn _thirdpartyvpnpeers + # cisco.meraki.organizations_appliance_vpn_third_party_vpnpeers_info: + # meraki_suppress_logging: false + # organizationId: "828099381482762270" + # register: result + + # - name: Show result + # ansible.builtin.debug: + # msg: "{{ result }}" \ No newline at end of file diff --git a/ansible_collections/cisco/meraki/plugins/action/networks_appliance_vlans.py b/ansible_collections/cisco/meraki/plugins/action/networks_appliance_vlans.py index 48ebdb4ca..2842327c9 100644 --- a/ansible_collections/cisco/meraki/plugins/action/networks_appliance_vlans.py +++ b/ansible_collections/cisco/meraki/plugins/action/networks_appliance_vlans.py @@ -35,7 +35,7 @@ argument_spec.update(dict( applianceIp=dict(type="str"), cidr=dict(type="str"), groupPolicyId=dict(type="str"), - id=dict(type="str"), + id=dict(type="int"), ipv6=dict(type="dict"), mandatoryDhcp=dict(type="dict"), mask=dict(type="int"), @@ -43,7 +43,7 @@ argument_spec.update(dict( subnet=dict(type="str"), templateVlanType=dict(type="str"), networkId=dict(type="str"), - vlanId=dict(type="str"), + # vlanId=dict(type="str"), dhcpBootFilename=dict(type="str"), dhcpBootNextServer=dict(type="str"), dhcpBootOptionsEnabled=dict(type="bool"), @@ -58,8 +58,8 @@ argument_spec.update(dict( )) required_if = [ - ("state", "present", ["name", "networkId", "vlanId"], True), - ("state", "absent", ["name", "networkId", "vlanId"], True), + ("state", "present", ["name", "networkId", "id"], True), + ("state", "absent", ["name", "networkId", "id"], True), ] required_one_of = [] mutually_exclusive = [] @@ -107,9 +107,10 @@ class NetworksApplianceVlans(object): if self.new_object.get('networkId') is not None or self.new_object.get('network_id') is not None: new_object_params['networkId'] = self.new_object.get('networkId') or \ self.new_object.get('network_id') - if self.new_object.get('vlanId') is not None or self.new_object.get('vlan_id') is not None: - new_object_params['vlanId'] = self.new_object.get('vlanId') or \ - self.new_object.get('vlan_id') + if self.new_object.get('vlanId') is not None or self.new_object.get('vlan_id') is not None or \ + self.new_object.get('id') is not None: + new_object_params['vlanId'] = self.new_object.get('id') or \ + self.new_object.get('id') return new_object_params def create_params(self): @@ -154,9 +155,10 @@ class NetworksApplianceVlans(object): if self.new_object.get('networkId') is not None or self.new_object.get('network_id') is not None: new_object_params['networkId'] = self.new_object.get('networkId') or \ self.new_object.get('network_id') - if self.new_object.get('vlanId') is not None or self.new_object.get('vlan_id') is not None: - new_object_params['vlanId'] = self.new_object.get('vlanId') or \ - self.new_object.get('vlan_id') + if self.new_object.get('vlanId') is not None or self.new_object.get('vlan_id') is not None or \ + self.new_object.get('id') is not None: + new_object_params['vlanId'] = self.new_object.get('id') or \ + self.new_object.get('id') return new_object_params def update_by_id_params(self): @@ -174,7 +176,8 @@ class NetworksApplianceVlans(object): new_object_params['dhcpBootNextServer'] = self.new_object.get('dhcpBootNextServer') or \ self.new_object.get('dhcp_boot_next_server') if self.new_object.get('dhcpBootOptionsEnabled') is not None or self.new_object.get('dhcp_boot_options_enabled') is not None: - new_object_params['dhcpBootOptionsEnabled'] = self.new_object.get('dhcpBootOptionsEnabled') + new_object_params['dhcpBootOptionsEnabled'] = self.new_object.get( + 'dhcpBootOptionsEnabled') if self.new_object.get('dhcpHandling') is not None or self.new_object.get('dhcp_handling') is not None: new_object_params['dhcpHandling'] = self.new_object.get('dhcpHandling') or \ self.new_object.get('dhcp_handling') @@ -223,9 +226,10 @@ class NetworksApplianceVlans(object): if self.new_object.get('networkId') is not None or self.new_object.get('network_id') is not None: new_object_params['networkId'] = self.new_object.get('networkId') or \ self.new_object.get('network_id') - if self.new_object.get('vlanId') is not None or self.new_object.get('vlan_id') is not None: - new_object_params['vlanId'] = self.new_object.get('vlanId') or \ - self.new_object.get('vlan_id') + if self.new_object.get('vlanId') is not None or self.new_object.get('vlan_id') is not None or \ + self.new_object.get('id') is not None: + new_object_params['vlanId'] = self.new_object.get('id') or \ + self.new_object.get('id') return new_object_params def get_object_by_name(self, name): @@ -272,7 +276,7 @@ class NetworksApplianceVlans(object): o_id = self.new_object.get("id") o_id = o_id or self.new_object.get( "vlan_id") or self.new_object.get("vlanId") - name = self.new_object.get("name") + name = None if o_id: prev_obj = self.get_object_by_id(o_id) id_exists = prev_obj is not None and isinstance(prev_obj, dict) @@ -298,7 +302,6 @@ class NetworksApplianceVlans(object): obj_params = [ ("applianceIp", "applianceIp"), - ("cidr", "cidr"), ("groupPolicyId", "groupPolicyId"), ("id", "id"), ("ipv6", "ipv6"), @@ -308,7 +311,6 @@ class NetworksApplianceVlans(object): ("subnet", "subnet"), ("templateVlanType", "templateVlanType"), ("networkId", "networkId"), - ("vlanId", "vlanId"), ("dhcpBootFilename", "dhcpBootFilename"), ("dhcpBootNextServer", "dhcpBootNextServer"), ("dhcpBootOptionsEnabled", "dhcpBootOptionsEnabled"), diff --git a/ansible_collections/cisco/meraki/plugins/action/organizations_appliance_vpn_third_party_vpnpeers_info.py b/ansible_collections/cisco/meraki/plugins/action/organizations_appliance_vpn_third_party_vpnpeers_info.py index 69f7bd061..195a9138c 100644 --- a/ansible_collections/cisco/meraki/plugins/action/organizations_appliance_vpn_third_party_vpnpeers_info.py +++ b/ansible_collections/cisco/meraki/plugins/action/organizations_appliance_vpn_third_party_vpnpeers_info.py @@ -82,7 +82,7 @@ class ActionModule(ActionBase): response = meraki.exec_meraki( family="appliance", - function='getOrganizationApplianceVpnThirdPartyVpnpeers', + function='getOrganizationApplianceVpnThirdPartyVPNPeers', params=self.get_all(self._task.args), ) self._result.update(dict(meraki_response=response)) diff --git a/ansible_collections/cisco/meraki/plugins/modules/networks_syslog_servers.py b/ansible_collections/cisco/meraki/plugins/modules/networks_syslog_servers.py index 77cede8de..ebc85c17e 100644 --- a/ansible_collections/cisco/meraki/plugins/modules/networks_syslog_servers.py +++ b/ansible_collections/cisco/meraki/plugins/modules/networks_syslog_servers.py @@ -74,7 +74,6 @@ EXAMPLES = r""" meraki_be_geo_id: "{{meraki_be_geo_id}}" meraki_use_iterator_for_get_pages: "{{meraki_use_iterator_for_get_pages}}" meraki_inherit_logging_config: "{{meraki_inherit_logging_config}}" - state: present networkId: string servers: - host: 1.2.3.4 diff --git a/ansible_collections/cisco/meraki/tests/sanity/ignore-2.18.txt b/ansible_collections/cisco/meraki/tests/sanity/ignore-2.18.txt new file mode 100644 index 000000000..dce1be5cb --- /dev/null +++ b/ansible_collections/cisco/meraki/tests/sanity/ignore-2.18.txt @@ -0,0 +1 @@ +plugins/modules/meraki_mx_intrusion_prevention.py validate-modules:invalid-argument-name \ No newline at end of file diff --git a/ansible_collections/cisco/nxos/.flake8 b/ansible_collections/cisco/nxos/.flake8 new file mode 100644 index 000000000..9a7fc1251 --- /dev/null +++ b/ansible_collections/cisco/nxos/.flake8 @@ -0,0 +1,67 @@ +[flake8] + +builtins = _ + +# Print the total number of errors: +count = true + +# Don't even try to analyze these: +extend-exclude = + # No need to traverse egg info dir + *.egg-info, + # tool cache dirs + *_cache + # project env vars + .env, + # GitHub configs + .github, + # Cache files of MyPy + .mypy_cache, + # Cache files of pytest + .pytest_cache, + # Temp dir of pytest-testmon + .tmontmp, + # Occasional virtualenv dir + .venv + # VS Code + .vscode, + # Temporary build dir + build, + # This contains sdists and wheels of ansible-navigator that we don't want to check + dist, + # Metadata of `pip wheel` cmd is autogenerated + pip-wheel-metadata, + # adjacent venv + venv + # ansible won't let me + __init__.py + +# IMPORTANT: avoid using ignore option, always use extend-ignore instead +# Completely and unconditionally ignore the following errors: +extend-ignore = + F841, + # line-length + E501, + # module level import not at top of file + E402 + +# Accessibility/large fonts and PEP8 unfriendly: +max-line-length = 120 + +# Allow certain violations in certain files: +# Please keep both sections of this list sorted, as it will be easier for others to find and add entries in the future +per-file-ignores = + # The following ignores have been researched and should be considered permanent + # each should be preceeded with an explanation of each of the error codes + # If other ignores are added for a specific file in the section following this, + # these will need to be added to that line as well. + + + # S101: Allow the use of assert within the tests directory, since tests require it. + tests/**.py: S101 + + # The following were present during the initial implementation. + # They are expected to be fixed and unignored over time. + +# Count the number of occurrences of each error/warning code and print a report: +statistics = true diff --git a/ansible_collections/cisco/nxos/.github/workflows/ack.yml b/ansible_collections/cisco/nxos/.github/workflows/ack.yml deleted file mode 100644 index fda595dc5..000000000 --- a/ansible_collections/cisco/nxos/.github/workflows/ack.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml -name: ack - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - pull_request_target: - types: [opened, labeled, unlabeled, synchronize] - -jobs: - ack: - uses: ansible/devtools/.github/workflows/ack.yml@main diff --git a/ansible_collections/cisco/nxos/.github/workflows/check_label.yml b/ansible_collections/cisco/nxos/.github/workflows/check_label.yml new file mode 100644 index 000000000..b120bfa32 --- /dev/null +++ b/ansible_collections/cisco/nxos/.github/workflows/check_label.yml @@ -0,0 +1,11 @@ +--- +name: "Check label" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + pull_request_target: + types: [opened, labeled, unlabeled, synchronize] +jobs: + check_label: + uses: ansible/ansible-content-actions/.github/workflows/check_label.yaml@main diff --git a/ansible_collections/cisco/nxos/.github/workflows/codecoverage.yml b/ansible_collections/cisco/nxos/.github/workflows/codecoverage.yml index be2018590..034589bc1 100644 --- a/ansible_collections/cisco/nxos/.github/workflows/codecoverage.yml +++ b/ansible_collections/cisco/nxos/.github/workflows/codecoverage.yml @@ -1,8 +1,9 @@ --- -name: Code Coverage +name: "Code coverage" on: # yamllint disable-line rule:truthy push: + branches: [main] pull_request: branches: [main] diff --git a/ansible_collections/cisco/nxos/.github/workflows/draft_release.yml b/ansible_collections/cisco/nxos/.github/workflows/draft_release.yml new file mode 100644 index 000000000..618f8a379 --- /dev/null +++ b/ansible_collections/cisco/nxos/.github/workflows/draft_release.yml @@ -0,0 +1,18 @@ +--- +name: "Draft release" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + workflow_dispatch: +env: + NAMESPACE: ${{ github.repository_owner }} + COLLECTION_NAME: nxos + ANSIBLE_COLLECTIONS_PATHS: ./ +jobs: + update_release_draft: + uses: ansible/ansible-content-actions/.github/workflows/draft_release.yaml@main + with: + repo: ${{ github.event.pull_request.head.repo.full_name }} + secrets: + BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/cisco/nxos/.github/workflows/integration-test.yml b/ansible_collections/cisco/nxos/.github/workflows/integration-test.yml new file mode 100644 index 000000000..31375e1ca --- /dev/null +++ b/ansible_collections/cisco/nxos/.github/workflows/integration-test.yml @@ -0,0 +1,38 @@ +name: Integration +on: + pull_request_target: + branches: [main] + types: + - labeled + - opened + - reopened + - synchronize + paths: + - "plugins/**" + - "tests/integration/**" + workflow_dispatch: + +jobs: + safe-to-test: + if: >- + github.event.label.name == 'safe to test' || + github.event.action != 'labeled' + uses: ansible-network/github_actions/.github/workflows/safe-to-test.yml@main + secrets: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + integration: + uses: ansible-network/github_actions/.github/workflows/integration.yml@main + needs: + - safe-to-test + with: + lab_title: cisco_nxos + network_os: cisco.nxos.nxos + pytest_addopts: "--color=yes -n 2 --log-level WARNING -vvv --role-excludes=snmp_server" + collection_pre_install: >- + git+https://github.com/ansible-collections/ansible.utils.git + git+https://github.com/ansible-collections/ansible.netcommon.git + secrets: + cml_ssh_password: ${{ secrets.CML_SSH_PASSWORD }} + virl_host: ${{ secrets.VIRL_HOST }} + virl_password: ${{ secrets.VIRL_PASSWORD }} diff --git a/ansible_collections/cisco/nxos/.github/workflows/push.yml b/ansible_collections/cisco/nxos/.github/workflows/push.yml deleted file mode 100644 index 771dd857a..000000000 --- a/ansible_collections/cisco/nxos/.github/workflows/push.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -# push workflow is shared and expected to perform actions after a merge happens -# on a maintenance branch (default or release). For example updating the -# draft release-notes. -# based on great work from -# https://github.com/T-Systems-MMS/ansible-collection-icinga-director -name: push - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - workflow_dispatch: - -env: - NAMESPACE: cisco - COLLECTION_NAME: nxos - ANSIBLE_COLLECTIONS_PATHS: ./ - -jobs: - update_release_draft: - uses: ansible/devtools/.github/workflows/push_network.yml@main - with: - repo: ansible-collections/cisco.nxos - secrets: - BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/cisco/nxos/.github/workflows/release.yml b/ansible_collections/cisco/nxos/.github/workflows/release.yml index eb04259d1..6dbb1aa39 100644 --- a/ansible_collections/cisco/nxos/.github/workflows/release.yml +++ b/ansible_collections/cisco/nxos/.github/workflows/release.yml @@ -1,12 +1,12 @@ --- -name: release +name: "Release collection" on: # yamllint disable-line rule:truthy release: types: [published] jobs: release: - uses: ansible/devtools/.github/workflows/release_collection.yml@main + uses: ansible/ansible-content-actions/.github/workflows/release.yaml@main with: environment: release secrets: diff --git a/ansible_collections/cisco/nxos/.github/workflows/tests.yml b/ansible_collections/cisco/nxos/.github/workflows/tests.yml index e9f92a2a0..5e8d914d4 100644 --- a/ansible_collections/cisco/nxos/.github/workflows/tests.yml +++ b/ansible_collections/cisco/nxos/.github/workflows/tests.yml @@ -1,5 +1,5 @@ --- -name: CI +name: "CI" concurrency: group: ${{ github.head_ref || github.run_id }} @@ -12,17 +12,18 @@ on: # yamllint disable-line rule:truthy schedule: - cron: '0 0 * * *' - jobs: - ansible-lint: - uses: ansible-network/github_actions/.github/workflows/ansible-lint.yml@main changelog: - uses: ansible-network/github_actions/.github/workflows/changelog.yml@main + uses: ansible/ansible-content-actions/.github/workflows/changelog.yaml@main if: github.event_name == 'pull_request' + build-import: + uses: ansible/ansible-content-actions/.github/workflows/build_import.yaml@main + ansible-lint: + uses: ansible/ansible-content-actions/.github/workflows/ansible_lint.yaml@main sanity: - uses: ansible-network/github_actions/.github/workflows/sanity.yml@main + uses: ansible/ansible-content-actions/.github/workflows/sanity.yaml@main unit-galaxy: - uses: ansible-network/github_actions/.github/workflows/unit_galaxy.yml@main + uses: ansible/ansible-content-actions/.github/workflows/unit.yaml@main unit-source: uses: ansible-network/github_actions/.github/workflows/unit_source.yml@main with: @@ -32,19 +33,20 @@ jobs: all_green: if: ${{ always() }} needs: - - ansible-lint - changelog + - build-import - sanity - unit-galaxy - unit-source + - ansible-lint runs-on: ubuntu-latest steps: - run: >- python -c "assert 'failure' not in set([ - '${{ needs.ansible-lint.result }}', '${{ needs.changelog.result }}', '${{ needs.sanity.result }}', - '${{ needs.unit-galaxy.result }}', + '${{ needs.unit-galaxy.result }}' + '${{ needs.ansible-lint.result }}' '${{ needs.unit-source.result }}' ])" diff --git a/ansible_collections/cisco/nxos/.pre-commit-config.yaml b/ansible_collections/cisco/nxos/.pre-commit-config.yaml index ac716f311..6db6f7ece 100644 --- a/ansible_collections/cisco/nxos/.pre-commit-config.yaml +++ b/ansible_collections/cisco/nxos/.pre-commit-config.yaml @@ -22,7 +22,7 @@ repos: - id: add-trailing-comma - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.1.0" + rev: "v4.0.0-alpha.8" hooks: - id: prettier entry: env CI=1 bash -c "prettier --list-different . || ec=$? && prettier --loglevel=error --write . && exit $ec" @@ -33,13 +33,18 @@ repos: - prettier-plugin-toml - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort name: Sort import statements using isort args: ["--filter-files"] - repo: https://github.com/psf/black - rev: 23.11.0 + rev: 23.12.1 hooks: - id: black + + - repo: https://github.com/pycqa/flake8 + rev: 7.0.0 + hooks: + - id: flake8 diff --git a/ansible_collections/cisco/nxos/CHANGELOG.rst b/ansible_collections/cisco/nxos/CHANGELOG.rst index a23f4bf80..7f8bda1e5 100644 --- a/ansible_collections/cisco/nxos/CHANGELOG.rst +++ b/ansible_collections/cisco/nxos/CHANGELOG.rst @@ -4,6 +4,79 @@ Cisco Nxos Collection Release Notes .. contents:: Topics +v8.0.0 +====== + +Major Changes +------------- + +- Updated the minimum required ansible.netcommon version to 6.1.0 to support the cli_restore module. + +Minor Changes +------------- + +- Add support for cli_restore functionality. +- Please refer the PR to know more about core changes (https://github.com/ansible-collections/ansible.netcommon/pull/618). + The cli_restore module is a part of ansible.netcommon. + +Bugfixes +-------- + +- nxos_facts - correct parse JSON output when multiple interfaces have IPv6 address assigned (https://github.com/ansible-collections/cisco.nxos/issues/771). + +v7.0.0 +====== + +Major Changes +------------- + +- This release removes four previously deprecated modules from this collection. Please refer to the **Removed Features** section for details. + +Removed Features (previously deprecated) +---------------------------------------- + +- The nxos_logging module has been removed with this release. +- The nxos_ntp module has been removed with this release. +- The nxos_ntp_auth module has been removed with this release. +- The nxos_ntp_options module has been removed with this release. + +v6.0.3 +====== + +Bugfixes +-------- + +- nxos_acls - Fix parsing of ace entries with range in it. (https://github.com/ansible-collections/cisco.nxos/issues/788) + +v6.0.2 +====== + +Bugfixes +-------- + +- nxos_interfaces - Correctly enable L3 interfaces on supported N3K platforms (https://github.com/ansible-collections/cisco.nxos/issues/749). + +v6.0.1 +====== + +Bugfixes +-------- + +- Prevents module_defaults from were being incorrectly applied to the platform action, instead of the concerned module. +- nxos_file_copy - correctly set file_pull_timeout/persistent_command_timeout value. + +v6.0.0 +====== + +Release Summary +--------------- + +Starting from this release, the minimum `ansible-core` version this collection requires is `2.14.0`. The last known version compatible with ansible-core<2.14 is `v5.3.0`. + +Major Changes +------------- + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. v5.3.0 ====== diff --git a/ansible_collections/cisco/nxos/FILES.json b/ansible_collections/cisco/nxos/FILES.json index 4f62ba841..b7d4211ca 100644 --- a/ansible_collections/cisco/nxos/FILES.json +++ b/ansible_collections/cisco/nxos/FILES.json @@ -8,1725 +8,1781 @@ "format": 1 }, { - "name": "codecov.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2", + "name": "docs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "LICENSE", + "name": "docs/cisco.nxos.nxos_snmp_location_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "chksum_sha256": "321530eb77aa27eecab0eb6090a189eee7b9a7431cc94750c1f0f38718058d4d", "format": 1 }, { - "name": "requirements.txt", + "name": "docs/cisco.nxos.nxos_user_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70053744bf8f5b698f82ad59a6daec106188d9b63c6d1246f860f21ab8cb6ac5", + "chksum_sha256": "5987398411ee888f2b8e148be96c318e831a7b712b0de344d456fba46825197f", "format": 1 }, { - "name": "meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.nxos.nxos_ping_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "74122faa018ba84c3628abadef990f3888d58a72897d4b56ec41882348a12141", "format": 1 }, { - "name": "meta/runtime.yml", + "name": "docs/cisco.nxos.nxos_igmp_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "022e45d02e5b6967bacc2ff1a60c93012a7df35561c44404c9835128e9134aeb", + "chksum_sha256": "9f12f1c5cb360aa1634964c6343e14141cfce7fc49e37e0062c2957b20459399", "format": 1 }, { - "name": "meta/__init__.py", + "name": "docs/cisco.nxos.nxos_prefix_lists_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e411c76a91d77aac63c31c51864f7247f91fb48226b134bbb1b2cbc29029bfa3", "format": 1 }, { - "name": "README.md", + "name": "docs/cisco.nxos.nxos_vrf_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea385f1a3bb47260949ad5a2ba1421a0c068d3a91574b9cce468fd4b49e48c0c", + "chksum_sha256": "33c9e1a06961e0785265c7b132c9caf7fa33c4cff00f15ef479787531d56f122", "format": 1 }, { - "name": "plugins", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.nxos.nxos_banner_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f33242bd0d3b632cb5e97dc9ce3e6a9029060e204c87a3554aff1ed36a7d19f0", "format": 1 }, { - "name": "plugins/terminal", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.nxos.nxos_aaa_server_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ae7d06f89fb79b0ff5b7dbb41b289db70e8c602a08c1baac5b059adc72775665", "format": 1 }, { - "name": "plugins/terminal/__init__.py", + "name": "docs/cisco.nxos.nxos_overlay_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c8362ed52554894dd979a332e946ede7fa0834c17d8980a08a282320a2a18391", "format": 1 }, { - "name": "plugins/terminal/nxos.py", + "name": "docs/cisco.nxos.nxos_install_os_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e49e9c495e05b71317fa3d2c462cb085ce5827874235484d735f470e7afa5059", + "chksum_sha256": "a2ad6d9178006558a46f6ef8038621cebd25eb937493f76503fbde8f65f9a6c6", "format": 1 }, { - "name": "plugins/inventory", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.nxos.nxos_feature_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e31d99494f87afad1ecdce42d483a32e523e8e978f42b1955de1f3b0033bcf80", "format": 1 }, { - "name": "plugins/inventory/__init__.py", + "name": "docs/cisco.nxos.nxos_hsrp_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "41fd5b3b6c57a33c8ce81d03798b35d598496b89d13327c18dfe27dedaf99ae4", "format": 1 }, { - "name": "plugins/netconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.nxos.nxos_command_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8414812954c669abeb7370516fd50ea893bccd1a5e804d81d3174cafc441aad6", "format": 1 }, { - "name": "plugins/netconf/__init__.py", + "name": "docs/cisco.nxos.nxos_ospfv2_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d2704aec625f078e9b8c03b949dec0b6ce33ee85efc5e495b37f0c27339b20c8", "format": 1 }, { - "name": "plugins/netconf/nxos.py", + "name": "docs/cisco.nxos.nxos_vlans_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c00660150bfe527dd71eeeb961c9e08da9ac65faa7e1852f4737a47305e723bc", + "chksum_sha256": "e60a339f8dbb48eaed5188761be6c6b375f5f6641ff322d3904e45f199f5ee0f", "format": 1 }, { - "name": "plugins/httpapi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.nxos.nxos_config_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d4ad6ef9b747b454824d16ca0cd7c56fdde289a6cc8c93c9ecf3bf1d23db5f84", "format": 1 }, { - "name": "plugins/httpapi/__init__.py", + "name": "docs/cisco.nxos.nxos_logging_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "7794e28520082d477a17b1e52ac8feeacf092bd98b7e4c11e832cfb67aa49b3b", "format": 1 }, { - "name": "plugins/httpapi/nxos.py", + "name": "docs/cisco.nxos.nxos_vtp_version_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "acfbda7df81189f8211a3d8af3d7e567bc719328e075531c154671cd97bd92be", + "chksum_sha256": "c27cc4c99dbad288216a917b46c9949f1cc2ed72a4268e79ef61e708d6a1edff", "format": 1 }, { - "name": "plugins/cliconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.nxos.nxos_snmp_user_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0ebfbf6a1bdda73a9f3e5943dc33bbb38d636865ab213c2e79501baca180a6ef", "format": 1 }, { - "name": "plugins/cliconf/__init__.py", + "name": "docs/cisco.nxos.nxos_lldp_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b14e490bedd8b115c8beebe5ec81fda4a7db93457f546fbca91fe2bce3887e76", "format": 1 }, { - "name": "plugins/cliconf/nxos.py", + "name": "docs/cisco.nxos.nxos_devicealias_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d4f94f69919d7d494652e191f1a5074a1022c120da62d68eb992c4879f9b505", + "chksum_sha256": "ff0660c7a4fa99aabb1c0c1d59d33fc923d3cdc50d2be391fc79bdeef13ae66b", "format": 1 }, { - "name": "plugins/modules", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.nxos.nxos_snmp_host_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "738d6be19ec9aea9158035e6f1a2302d3484500ee9b3148e2d01628bf2f9fcdc", "format": 1 }, { - "name": "plugins/modules/nxos_vpc.py", + "name": "docs/cisco.nxos.nxos_evpn_vni_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "edd715fc9e823dbf37a31a16de8f680132e0cc9b2feea46ab073d34f8098acf5", + "chksum_sha256": "1d69d440ff1844c0ffcf234f50c4cbaccafd2a5dd56481e14aeecac6c80e94a1", "format": 1 }, { - "name": "plugins/modules/nxos_reboot.py", + "name": "docs/cisco.nxos.nxos_snmp_traps_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "826e076559d7143fc03a3de9f0e5ec125241fd3196037f2a1a524e033e75b8de", + "chksum_sha256": "25326502a9e485b1bfe99093b316af67686f797fb8ce8d972c9ae914d8e9da27", "format": 1 }, { - "name": "plugins/modules/nxos_lag_interfaces.py", + "name": "docs/cisco.nxos.nxos_pim_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d74c13af260252c75c2fce4b20ac3e8d85c14d45bec8a7ea04016a448b3a8b48", + "chksum_sha256": "f974bc3ca8293d0e60b7dd26ef3babfc02003702ea5632feee97fbba59fc59a0", "format": 1 }, { - "name": "plugins/modules/nxos_nxapi.py", + "name": "docs/cisco.nxos.nxos_ntp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cf44a3e80959a805238202c49a5a639d6a1ecf5f6d8191b93b3f6db314a80c15", + "chksum_sha256": "07810bf5a6fb659d294c956436bb3527b4506c7a07642997af02f1cf717d97d9", "format": 1 }, { - "name": "plugins/modules/nxos_logging.py", + "name": "docs/cisco.nxos.nxos_vsan_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3a99d36431853d5cf83e4dcc3602302c2a48415123ff93066ac0fd54ed079538", + "chksum_sha256": "f7557df9a0b6bef895a8f935bd24979b7e279cc0768e8109973a7dc3b9c5dc29", "format": 1 }, { - "name": "plugins/modules/nxos_zone_zoneset.py", + "name": "docs/cisco.nxos.nxos_aaa_server_host_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "34d94bcc1af5752a00ada15b62428af97cd8ea28fe48a8b0760b90105a93ff31", + "chksum_sha256": "e8d1dc8303a82ca59e70c37d6852f8dd1ba6b002e896a9f4f2182148a6944ef7", "format": 1 }, { - "name": "plugins/modules/nxos_snmp_server.py", + "name": "docs/cisco.nxos.nxos_snmp_community_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fee45cc5653eb0c0148e2213a8d2de129410f2a001496d684b2538c3a8e294f9", + "chksum_sha256": "273905bc36e919c6f348d146018b77d4b028457714b0f3b4b2fad6a078680fe7", "format": 1 }, { - "name": "plugins/modules/nxos_vlans.py", + "name": "docs/cisco.nxos.nxos_bgp_templates_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d37e3cbddfb07ede884e014bcd1edaa6fb20366953c3e8de40c2872d63ea8cf", + "chksum_sha256": "00bb83305a1e55e1fa99e7008ff4131123f6702514a66409c524e6ca1374c00e", "format": 1 }, { - "name": "plugins/modules/nxos_snmp_host.py", + "name": "docs/cisco.nxos.nxos_udld_interface_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae6e69d2c2af158c70e81aed0f2a6dbccca2c69033861bd697af4dba0c5183c7", + "chksum_sha256": "7786920d50729a8a8a73a20bcd0d4296af8095f52590076177511dc0c696dda5", "format": 1 }, { - "name": "plugins/modules/nxos_igmp_snooping.py", + "name": "docs/cisco.nxos.nxos_bfd_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ee94035d9f4a71393a16670f8e269064476b6da5d99071a4f23cfc253da13703", + "chksum_sha256": "1ff1d376f71be1de3dc5e97bfae1ea331e92430adb9e31b61e6fdde8da710538", "format": 1 }, { - "name": "plugins/modules/nxos_vtp_password.py", + "name": "docs/cisco.nxos.nxos_static_routes_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6cb79ae92bdf1ab82291e4b331dfeb53b42f004a416908268380813905b8215", + "chksum_sha256": "744ec8723ea44a3b9514b823ad0d2803bc153654f4e831d33e2fad5522f4d3a9", "format": 1 }, { - "name": "plugins/modules/nxos_snmp_location.py", + "name": "docs/cisco.nxos.nxos_vxlan_vtep_vni_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a11d2a363173b645bdf9c8cd1cdb80e77b94d4c169069614deae90a441a1de22", + "chksum_sha256": "7aebad3ad5c1c53036df468c782c366a17fea865b15a189f99aff17c171e464b", "format": 1 }, { - "name": "plugins/modules/nxos_snmp_contact.py", + "name": "docs/cisco.nxos.nxos_vrf_interface_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "936a5e9b00d8c46ed39a8818f5806971f16fc8cebd3f5106e6909b7ed8395ac1", + "chksum_sha256": "64296c4de9145ceec2a49e4f09b2573fd163bbe33247b395769cb6833cdd16ba", "format": 1 }, { - "name": "plugins/modules/nxos_vtp_domain.py", + "name": "docs/cisco.nxos.nxos_gir_profile_management_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e76836b4b68b3c32d5a146bcb6738009872e3e69d3afffe269e50846d4a84058", + "chksum_sha256": "63332c56149477772d1571d4884f3dd7d99c11f8119942426c1b22898d63dcc8", "format": 1 }, { - "name": "plugins/modules/nxos_snapshot.py", + "name": "docs/cisco.nxos.nxos_snapshot_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5cf9eab5ad1ae6953579860b7365ce6e6d604f69fe00389f656c63f99cb3b24f", + "chksum_sha256": "a0e3fad000d677b7f24bf64090f02742004a9cf100306a97f51aff9594fe8d9f", "format": 1 }, { - "name": "plugins/modules/nxos_bfd_interfaces.py", + "name": "docs/cisco.nxos.nxos_rollback_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87e8b096568e3d9be77c6a3b26c865f06dd2f842ddef22a8ac7edd095482f664", + "chksum_sha256": "04cf041066c5d09e1a5317b7cb7cc1eb2504f0d1faeb9a28d3d59f3ae98c783f", "format": 1 }, { - "name": "plugins/modules/nxos_vrf_af.py", + "name": "docs/cisco.nxos.nxos_rpm_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c2029b042fc0e83b5b6298dcd6242aa7f5b014653eed4e703860ba6baddb3155", + "chksum_sha256": "e928284ecee7ed27ef75a660db2e02900d8de4cf0d255bfd31a819f4e2abe036", "format": 1 }, { - "name": "plugins/modules/nxos_ntp_auth.py", + "name": "docs/cisco.nxos.nxos_vtp_password_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ebfe534e67975d2e35170269fefaadc7b9327c3d4b2c754e09bf9d61b0a744e", + "chksum_sha256": "aba8c49ea83acf4e1ad8de779ebc06e21940537ce459b53bcfbdabdf72dacd06", "format": 1 }, { - "name": "plugins/modules/nxos_install_os.py", + "name": "docs/cisco.nxos.nxos_vrrp_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c750b05a78eefb2b014b339ef86a02de8a1cf8daa31bc7c8e68ccdd7be589c4", + "chksum_sha256": "26a52da59610c540242b40091c3fc689cf5b1672a4f36084202ebba38f5589e0", "format": 1 }, { - "name": "plugins/modules/nxos_vrrp.py", + "name": "docs/cisco.nxos.nxos_igmp_interface_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a261501d6200ac9685d544c2dd29f284377da8592864f7ad26e74ef4e55d5567", + "chksum_sha256": "1e5c432e7e272efb56ee80dda73b66a13b1a74e16f14bd48d38681023f710b7f", "format": 1 }, { - "name": "plugins/modules/nxos_vpc_interface.py", + "name": "docs/cisco.nxos.nxos_facts_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7361c2f7afeaedada1c42037a5f54d16b934ef5993f155819e0edb731c21de1f", + "chksum_sha256": "6ef51706f5729ece09bdcce4c7e1ab04ec7d58d4ae6c3a7e12ebf275b5d792ad", "format": 1 }, { - "name": "plugins/modules/nxos_user.py", + "name": "docs/cisco.nxos.nxos_lldp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f4dfc0cd9bc2a5d54075d68829c8129792633525fae273a4185710584b563981", + "chksum_sha256": "6994ab2f365796541f268d6d3051e4a192e2b911495e12342d6d3cad12016f2b", "format": 1 }, { - "name": "plugins/modules/nxos_command.py", + "name": "docs/cisco.nxos.nxos_cliconf.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5fd4119bed0074064b1158cbb231f3e2277576902d6fa9fb5bc42cc6ffd09d48", + "chksum_sha256": "546fc754b81109404a33285c90c3bba565b1a2529e00b7284609b62bb25b4d8b", "format": 1 }, { - "name": "plugins/modules/nxos_hsrp_interfaces.py", + "name": "docs/cisco.nxos.nxos_ospf_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9dd94e0d4d52a8ac424b30ec631b550f2438af36e3109c2da875d89a74f65d9e", + "chksum_sha256": "808523316e7aa23425653e4c2caed8ea2732ebb51fb3aa0f15dddd416d049725", "format": 1 }, { - "name": "plugins/modules/nxos_aaa_server.py", + "name": "docs/cisco.nxos.nxos_zone_zoneset_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7d0ba90c00bef7d014ca922ce5e66ea10fe116bb9af88bfdf671402527b404b", + "chksum_sha256": "2b25696dcecfa3f12cf9a899132d4b220dcc774df51e1aea5fdecd422ca3a36a", "format": 1 }, { - "name": "plugins/modules/nxos_ospfv2.py", + "name": "docs/cisco.nxos.nxos_vpc_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "889e9341133658eadea7cf2516361d1de0998baa8b2c08d203ea157977482530", + "chksum_sha256": "0aeb5a090773bcf219cb3ab181424bde284e9669ccc3ace93175b739fec4f81a", "format": 1 }, { - "name": "plugins/modules/nxos_lldp_global.py", + "name": "docs/cisco.nxos.nxos_gir_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "485b35aeac40cd9d3dfaf18a7f5481fc14796ce054387af3dca72160677f6dd7", + "chksum_sha256": "2969b2a880bc98f5272720086059bc55d861fc1ce00c8854c75aa061ba3aa8bf", "format": 1 }, { - "name": "plugins/modules/nxos_banner.py", + "name": "docs/cisco.nxos.nxos_bfd_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a98cf0828178ff3233b836f7a1d1478ad4f5020143b0a6435630737a82b4110e", + "chksum_sha256": "bcc5883c369f37ac683991364855f247f77299f2decc72a5e5c794e681a92fbc", "format": 1 }, { - "name": "plugins/modules/nxos_pim_interface.py", + "name": "docs/cisco.nxos.nxos_pim_rp_address_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "62a33fbb98411f4b017a3d884645f48f8e79049f27e0f3d87698b3bcb7f0c48c", + "chksum_sha256": "94630c630affe8dedd940b41d0fcdab02712ade527964334956ca5698280d13d", "format": 1 }, { - "name": "plugins/modules/nxos_overlay_global.py", + "name": "docs/cisco.nxos.nxos_lacp_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f2e7bc1eff3259825c6eae134d87e92ee922cc3fd423b63fac821c659ea891d8", + "chksum_sha256": "81829e369c84802f5cc2fdbf88d380007da8d326106cafaacb981d86f38be6e1", "format": 1 }, { - "name": "plugins/modules/__init__.py", + "name": "docs/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/nxos_pim.py", + "name": "docs/cisco.nxos.nxos_vxlan_vtep_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a06919bdfbaab64ef58295c408def23dc36336b630e12d80a2a80e3a31a53a85", + "chksum_sha256": "920cbc7cf6b2d9736bbeacbf6751674c6b8985af13183432f027070235ed745e", "format": 1 }, { - "name": "plugins/modules/nxos_snmp_traps.py", + "name": "docs/cisco.nxos.nxos_acl_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73ef124bdd93a1b8d6d7d55870e04c99bb29cde93c0c400884f06c4972057f75", + "chksum_sha256": "03a8274fb4992504f056b15b84a7c7f98b08a9d3160a12ea038a1a700039e04a", "format": 1 }, { - "name": "plugins/modules/nxos_file_copy.py", + "name": "docs/cisco.nxos.nxos_system_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8418e53de9a83561d6c4b60b2d5d8115863d210376acbebf4f4c41a6489cd2a5", + "chksum_sha256": "7701830b6698de0515fb009aa9b2c01256f3144d62909b760ccf23e749ec7422", "format": 1 }, { - "name": "plugins/modules/nxos_ospf_interfaces.py", + "name": "docs/cisco.nxos.nxos_snmp_server_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "07b1a4fda6c81b24e016828d5a21d49cb141cd969e32e18e7713e31206eb5afb", + "chksum_sha256": "2c41210552496035bd6ba8eed6ec9d37ad4445b724438207a50bb4ce9e8fb6bb", "format": 1 }, { - "name": "plugins/modules/nxos_vsan.py", + "name": "docs/cisco.nxos.nxos_bgp_neighbor_address_family_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ffc52ffc10befe666ce3cc43cac66a47a5b76ed5465cb691c888f5847a1b3468", + "chksum_sha256": "1fe6fe7be307fe262e49165038677e55a79be75ce8a1eaa0edf1617aa0b8c4e9", "format": 1 }, { - "name": "plugins/modules/nxos_facts.py", + "name": "docs/cisco.nxos.nxos_httpapi.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb1ae146c9df5aac3b721750a8074dd112b0397bb50ada4cc8d7629af8e52e1c", + "chksum_sha256": "eb7f6fd0b46ad4b478746f0518b8d443e541f44ba8d77f999a42a760671ea015", "format": 1 }, { - "name": "plugins/modules/nxos_hsrp.py", + "name": "docs/cisco.nxos.nxos_reboot_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e0bccf6fb0aa7ce0cbacacb8acf9821015472213a2319df618e7eef4d03a52f", + "chksum_sha256": "194778e502ec450e673e2562baf84d459a9d844c3c3f281cd6ed2f2bc2618087", "format": 1 }, { - "name": "plugins/modules/nxos_interfaces.py", + "name": "docs/cisco.nxos.nxos_vpc_interface_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e748cfa29b6be827349f09c36e08c66c5e13d53ace6aff9412ebbc49b7218234", + "chksum_sha256": "941e607951f2fe1347329a6f68d9303ff04fcebedfd0792fe5ab181625e120d3", "format": 1 }, { - "name": "plugins/modules/nxos_ospfv3.py", + "name": "docs/cisco.nxos.nxos_hsrp_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0eee52b5452442a4a30eb75456593d85eb35c58e80b603bd94d43951f3fec0d8", + "chksum_sha256": "6cbf7b6611599b267ed05be736c19303ecc74c696750ea3b7b27bf97f942644f", "format": 1 }, { - "name": "plugins/modules/nxos_lacp.py", + "name": "docs/cisco.nxos.nxos_igmp_snooping_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf38b4169e3605546f6f4d7138529c1ba3effb60f74ea844f205ef2160e800c1", + "chksum_sha256": "a31b9e7cac6c66069bc1b9a46fbf4f3e778fec3cdbdb55f4b6d672abeaf7d795", "format": 1 }, { - "name": "plugins/modules/nxos_gir_profile_management.py", + "name": "docs/cisco.nxos.nxos_udld_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "38cc5881a72e0809fd023188435ecae1085b0e568f06865359e65bdd49853ef8", + "chksum_sha256": "26d0773b5cbd658f39b2c08b9949e45ae5aa8a94405c4f1ef9ed0708c682c4a3", "format": 1 }, { - "name": "plugins/modules/nxos_config.py", + "name": "docs/cisco.nxos.nxos_l3_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ffbbb1233a6cd3811690832fdffc2ebbdea61c291f168b04995e3ed1f8dab62", + "chksum_sha256": "01adb1dc48dfbe1a73cf269060e1f83310d5e05b813dd109770e5e335abcb436", "format": 1 }, { - "name": "plugins/modules/nxos_ping.py", + "name": "docs/cisco.nxos.nxos_route_maps_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d2648ff85a7fee59b9b0b099afde09e1f7f11c7e5d9f033d27a2af0953e854e", + "chksum_sha256": "2041055670405961112eb26ef06db6afda07055ef02a81026f1f0293144c7331", "format": 1 }, { - "name": "plugins/modules/nxos_telemetry.py", + "name": "docs/cisco.nxos.nxos_acls_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e518a2c46e0bd074881b5dc60092154d8a1438a26a979dae60d98411288a5247", + "chksum_sha256": "2869249548f0b1aaf9f1d7c8b3d24a5301a7ffa88fadb82dda595aca2374ccb2", "format": 1 }, { - "name": "plugins/modules/nxos_snmp_user.py", + "name": "docs/cisco.nxos.nxos_ospfv3_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d16699e2fd607da804183e1fe29c6981095303d22b836f865f2046dc2c50ecf0", + "chksum_sha256": "041dd0262265b58cbe0bf6e505a7f676eb6b2d4a5fc59681f1e4b5e6c463de56", "format": 1 }, { - "name": "plugins/modules/nxos_vxlan_vtep_vni.py", + "name": "docs/cisco.nxos.nxos_netconf.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "00cc8a5f8826d10b27cbea4c1523a5dc48a57d174ae7ecfd918e02d506902b80", + "chksum_sha256": "da11bd9904bba75e1ca0484cf6ddc0ebcd0a2ffc12b1e9132d60f8a0bc54705c", "format": 1 }, { - "name": "plugins/modules/nxos_udld_interface.py", + "name": "docs/cisco.nxos.nxos_fc_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2346b5a0aec6682e11c7ee21cf5f77fd1b53bd4839d11a7da4e23e8378049aaa", + "chksum_sha256": "865bcbc040c3370de4f47a6b8e68c1339f8ba54dbbaa362b0ceeae8cecd86cc8", "format": 1 }, { - "name": "plugins/modules/nxos_l3_interfaces.py", + "name": "docs/cisco.nxos.nxos_lag_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "38db1135b557e314d88cdba25450ecf71c91d2269f2d2da9cf37d1f1229b688c", + "chksum_sha256": "4980199790b302fc46982df8e0c2fa5f5d81ef50ebae4d9961ebbfe6cb62eb0c", "format": 1 }, { - "name": "plugins/modules/nxos_fc_interfaces.py", + "name": "docs/cisco.nxos.nxos_bgp_address_family_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a746fdd004b73000fb8f37565758330710a9b3012f5a4e46362a33434bcec9e7", + "chksum_sha256": "9706519c8d06db723b98f3c2ed78ffda4ca604b08215be80461fad2defd9507c", "format": 1 }, { - "name": "plugins/modules/nxos_igmp.py", + "name": "docs/cisco.nxos.nxos_hostname_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec8870d4fb6ecf6089717936138d43fc5fe54381994a0a7d5e8299a94f9ade67", + "chksum_sha256": "2cc61e3ea5053c4ee1bb14f41a85e67e4790010b7142e21bb72fcc88a5e715aa", "format": 1 }, { - "name": "plugins/modules/nxos_devicealias.py", + "name": "docs/cisco.nxos.nxos_telemetry_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24e26ab14bb905ab26db440ceec24bad795a13186ad2af2eec0325637dd3814b", + "chksum_sha256": "70e0841739f0a1ab237624a5f5f6fbbebbeb61244a9fe00e9ae6a6af936d94a9", "format": 1 }, { - "name": "plugins/modules/nxos_rollback.py", + "name": "docs/cisco.nxos.nxos_evpn_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fec43544c7cb26eb84d9cdd22e74a4f042de04943e5896fcd45a1020f003e82", + "chksum_sha256": "993ea85ff1bf02311f55646f0c5dcadc2d216a2819b7902f43470a645d1b90d7", "format": 1 }, { - "name": "plugins/modules/nxos_acls.py", + "name": "docs/cisco.nxos.nxos_lacp_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb0a7f4add18a48fd542770f1d96e02ccfc64653a6b99f765969419c3abdd177", + "chksum_sha256": "bf3920fe2dbbd42f322d4a0f4dd23c875d01f6a5545dbc648ae5ae3aa62320de", "format": 1 }, { - "name": "plugins/modules/nxos_vrf_interface.py", + "name": "docs/cisco.nxos.nxos_vtp_domain_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2876512450aa2920f88a2d408eb72cd7976ec4124a95b058d57427d0f939fb1", + "chksum_sha256": "18a52103976ba1d930a98e0e7fa45de34d95a86ca222e59b0ffc9629585cdf6a", "format": 1 }, { - "name": "plugins/modules/nxos_lldp_interfaces.py", + "name": "docs/cisco.nxos.nxos_l2_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b7bfa2021d5f29528789e26074483fdc4b98187dd3a618dcbe38e14a06439e88", + "chksum_sha256": "8b94e0fc5aeaa2d80e755b774c097970fead1ddb156eb018bc852516de3ca877", "format": 1 }, { - "name": "plugins/modules/nxos_l2_interfaces.py", + "name": "docs/cisco.nxos.nxos_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0e3ec947b751771f318eccdf3b086fad8ae9615deee632f00055081f594a3318", + "chksum_sha256": "ab3f38f88a8fbc5884c3694784ba4991c29c7690f21725706603dfe83c35e6e4", "format": 1 }, { - "name": "plugins/modules/nxos_hostname.py", + "name": "docs/cisco.nxos.nxos_snmp_contact_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5e7ce46e1d1143211af0f5747253b429eaa78c68993852703861cf469ccad10", + "chksum_sha256": "cbb715723ead144ae09062bf77f7f4a73e4a5035a81a7ecec925b00410e8579b", "format": 1 }, { - "name": "plugins/modules/nxos_system.py", + "name": "docs/cisco.nxos.nxos_nxapi_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6797e5f93cb99da4c135b809da1eea5e9b8363caa5c49b830cd70ffbd66c1db", + "chksum_sha256": "7e1d3a6d1f0ab8c170068321f77ab36c1161892773c9efa90dfff711664bfdb3", "format": 1 }, { - "name": "plugins/modules/nxos_vrf.py", + "name": "docs/cisco.nxos.nxos_file_copy_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "118fd73f988199e74b0e6d5924fe9fd2ad995da9f9c6024485b4042f234aeab8", + "chksum_sha256": "c38e717848ddfc093b17245d08c45e6beda5d7b1c263453ef0a43171d5008f47", "format": 1 }, { - "name": "plugins/modules/nxos_lacp_interfaces.py", + "name": "docs/cisco.nxos.nxos_bgp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "efe09b0a78ee09528820134c160e70776659f1eae9aaf8cfd713d91011cccf4b", + "chksum_sha256": "83bf0acc036ccd3a7508746b650720220d208e5c8ff4894fff982b151af3689f", "format": 1 }, { - "name": "plugins/modules/nxos_aaa_server_host.py", + "name": "docs/cisco.nxos.nxos_vrf_af_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d59827f8eb3a10657b2dab79a121d44e976b207ed70c9b39f1fa343d67f1e328", + "chksum_sha256": "3719fa178c08c4d172a9a0307f402b45434931b395cc57f2451cc810bd45a786", "format": 1 }, { - "name": "plugins/modules/nxos_bgp_address_family.py", + "name": "docs/cisco.nxos.nxos_pim_interface_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9155dc8d46358457d800c604aa29fa38137af884caf9839e5139d5cc53d69015", + "chksum_sha256": "b7fa1c8e28a128af94059b3d66e3e40c97e7d748a858ff74e77a0e313641c3ff", "format": 1 }, { - "name": "plugins/modules/nxos_vxlan_vtep.py", + "name": "LICENSE", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9aefbaf9557a93bafc8de522a59e3246967964e658c9ee7631fa202e0b5215fa", + "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", "format": 1 }, { - "name": "plugins/modules/nxos_prefix_lists.py", + "name": ".github", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".github/release-drafter.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fbc6db3871917b6239c2e37caede67c3a6f69e2c578357f5831bf74173c09bd5", + "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", "format": 1 }, { - "name": "plugins/modules/nxos_udld.py", + "name": ".github/workflows", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".github/workflows/integration-test.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f9d531c20f551d644be87cf218c7bf8175f531a3190c60c7a20ae281203fbe8d", + "chksum_sha256": "84eed17fdcd3b69533dc7f9f6400611d3bd9fd59bc91eb4a4db491d0361c0020", "format": 1 }, { - "name": "plugins/modules/nxos_ntp_global.py", + "name": ".github/workflows/check_label.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6159f7b3f74c36fdae3eff740202f9db87d92eaae9ecd0bcc69d790312daacb9", + "chksum_sha256": "9eb6abad2038b10cd6ea70310aa88d163f10c374d1728df29bb553eff2acfaba", "format": 1 }, { - "name": "plugins/modules/nxos_acl_interfaces.py", + "name": ".github/workflows/codecoverage.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "721b0093fc696b7208b679f9c640e9828874f9cf049e0fc7799d12f3c4a29786", + "chksum_sha256": "9f229f5c0dd8649678fef5a0fcb616d83c26579b541b772de4b2832172678f06", "format": 1 }, { - "name": "plugins/modules/nxos_logging_global.py", + "name": ".github/workflows/release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ddff9047c280d4e9d13643386551dc85c161dfd3f356a486e28930d7cae28477", + "chksum_sha256": "2e3f90a3147d93b97347d8418352f23e201417e05539a466399dd258a65d699c", "format": 1 }, { - "name": "plugins/modules/nxos_feature.py", + "name": ".github/workflows/draft_release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b8a6deea08ebeae462e2fefbcc4762dd67b71bc5a5d0f51e3ea3595375888da", + "chksum_sha256": "b582d81b8bbcfb8d0f077f40ff65463c0803c2a2713664aa9f28ff167c48e483", "format": 1 }, { - "name": "plugins/modules/nxos_static_routes.py", + "name": ".github/workflows/tests.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af380095fd7d243c8f9509b1abd065097b0e0e0df449d9d6da4e932987992550", + "chksum_sha256": "5e5d8797ac2c34af1b5cf6e9dd3c760655623bb9d7c40cff83958202066f69f6", "format": 1 }, { - "name": "plugins/modules/nxos_bfd_global.py", + "name": ".github/dependabot.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2121178e29e5e34ca77f7ed2dc78e7fdcf6ddbe7a9ab16545c39c11dc00f7ce", + "chksum_sha256": "c4d7b4c429faafe0eb46a070eafcd3d8d84d9083b5fe72943d627b5f4ccf0dd8", "format": 1 }, { - "name": "plugins/modules/nxos_evpn_global.py", + "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3cb0c7e66e32783f346744b3b08edd63f2d3ac82b67addb55597a19b48db7e9c", + "chksum_sha256": "95f172f0a54c78871ccb1230fb692ef79368765c2cc63d7d86c3a3f781e0f5ff", "format": 1 }, { - "name": "plugins/modules/nxos_vtp_version.py", + "name": "bindep.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c822abea7b871b5781dcf46856c07f0214793bc3768743d45966ae5a0b6e779", + "chksum_sha256": "f0e2709e0a523d84f824ccfb6883f62e9d27f70bd7a38be0d18506223ccfe60e", "format": 1 }, { - "name": "plugins/modules/nxos_evpn_vni.py", + "name": "plugins", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/modules/nxos_bgp_neighbor_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d4efeefbc3a4324d2b692ece1149289d2f249c8f338fc9e15d8adabf15ab71e8", + "chksum_sha256": "f2861a072c7f54bdf90fa0fca06b8ce0af964f3073e27a4ac00940a7fdfeb26a", "format": 1 }, { - "name": "plugins/modules/nxos_ntp.py", + "name": "plugins/modules/nxos_vrrp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d68b52173945d37cf18fa5253ab87d00efc2f77374821e8e22c82260fa04b38", + "chksum_sha256": "a261501d6200ac9685d544c2dd29f284377da8592864f7ad26e74ef4e55d5567", "format": 1 }, { - "name": "plugins/modules/nxos_route_maps.py", + "name": "plugins/modules/nxos_zone_zoneset.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f9206f344d091d6c3bc996ee2b961b2f52611be676b3d790a257e513faad2838", + "chksum_sha256": "44ead6bd11cb8112b667ecc6f7d1fd0751941737d6fc1154c73501e4abdd42a0", "format": 1 }, { - "name": "plugins/modules/nxos_bgp_templates.py", + "name": "plugins/modules/nxos_l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "955e3860781eef5083a0fa88e80d95803645ca485edd357b5867d3706bbc45bb", + "chksum_sha256": "06d0406435fadc33d78bdc5dc2b541d3cdb08b972497a7fd86357354638056a7", "format": 1 }, { - "name": "plugins/modules/nxos_igmp_interface.py", + "name": "plugins/modules/nxos_gir.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e971debe6199b397fefb3ebdb296851c2200f444d11bc1aec9e705e3f142dd40", + "chksum_sha256": "05675c570b78691538eaa20c62f548b41885b8db20018e5805a6ced813eaff40", "format": 1 }, { - "name": "plugins/modules/nxos_bgp_global.py", + "name": "plugins/modules/nxos_igmp_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f5f28fab53dae03299c208d2e851fdd0ef1baa1deda374ea26043722c0aedd6", + "chksum_sha256": "c8cbb9aec6383daa0e4a82c2c4c3d29ef313c078404d70413301abdd98513c17", "format": 1 }, { - "name": "plugins/modules/nxos_rpm.py", + "name": "plugins/modules/nxos_lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2ba7d2ec024a075a96be051996d4eba6f6e370058c6df454b89ac7c36759f58", + "chksum_sha256": "bf38b4169e3605546f6f4d7138529c1ba3effb60f74ea844f205ef2160e800c1", "format": 1 }, { - "name": "plugins/modules/nxos_gir.py", + "name": "plugins/modules/nxos_vrf_af.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05675c570b78691538eaa20c62f548b41885b8db20018e5805a6ced813eaff40", + "chksum_sha256": "bcddf538b58de6ee3355af3f5af10af8b95268b4a2bdd7166d2c451a7484228d", "format": 1 }, { - "name": "plugins/modules/nxos_bgp_neighbor_address_family.py", + "name": "plugins/modules/nxos_overlay_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a3641e84afc1182c7e1aaf3ea229317ec8e4901fdc54ffbe4bb446bb2297f50e", + "chksum_sha256": "f2e7bc1eff3259825c6eae134d87e92ee922cc3fd423b63fac821c659ea891d8", "format": 1 }, { - "name": "plugins/modules/nxos_ntp_options.py", + "name": "plugins/modules/nxos_bfd_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d569feceac1e9a09090b5e039d89cee9be55d3d3f60e8c1e63bf963c80655be7", + "chksum_sha256": "dd7b49293300983b1bfe085206f30ad341bf3af6ee17aad238186ad5d1bec86a", "format": 1 }, { - "name": "plugins/modules/nxos_pim_rp_address.py", + "name": "plugins/modules/nxos_ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "048f2a6e71622db905600dbc6f0862564275c438ac0a401aca0b2c792605d10f", + "chksum_sha256": "9d2648ff85a7fee59b9b0b099afde09e1f7f11c7e5d9f033d27a2af0953e854e", "format": 1 }, { - "name": "plugins/modules/nxos_snmp_community.py", + "name": "plugins/modules/nxos_vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4225f8c4053ec681cb9fadb841f3b0660771879e740d13858c459fedbfc5aa3c", + "chksum_sha256": "d603737717f0b6a697fac057acf07a763f002aa641026cd6436b2bc3e4611d3b", "format": 1 }, { - "name": "plugins/doc_fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_gir_profile_management.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e5c49276a499ef2988a7047ec75a5464f13e5b458f0a7d6af46c8fd8e3f71c89", "format": 1 }, { - "name": "plugins/doc_fragments/__init__.py", + "name": "plugins/modules/nxos_udld_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "2346b5a0aec6682e11c7ee21cf5f77fd1b53bd4839d11a7da4e23e8378049aaa", "format": 1 }, { - "name": "plugins/doc_fragments/nxos.py", + "name": "plugins/modules/nxos_vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b71c234b0886b9a8c7cb54e9b1a2de2e433f8a19608a3ba45e67037c942943", + "chksum_sha256": "9aefbaf9557a93bafc8de522a59e3246967964e658c9ee7631fa202e0b5215fa", "format": 1 }, { - "name": "plugins/filter", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_config.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "160aa4af3ddc22a3a35d277eded9a0bf54df4a0b7b44a11fa2c077b5cca71db5", "format": 1 }, { - "name": "plugins/filter/__init__.py", + "name": "plugins/modules/nxos_lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "dc1a726578647a2b3f08a76ca542daa557960de383812b9b4067af37a49359d1", "format": 1 }, { - "name": "plugins/module_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_route_maps.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3daed656349f74ca544cca0df90fe653384af61e5109235c2a0643e67593ddbf", "format": 1 }, { - "name": "plugins/module_utils/__init__.py", + "name": "plugins/modules/nxos_devicealias.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8fcfa22b50abdddab25a9235c03d8ef41055a7f98dfa6ab1af4a4e86fa6c1e10", "format": 1 }, { - "name": "plugins/module_utils/network", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_pim_rp_address.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "048f2a6e71622db905600dbc6f0862564275c438ac0a401aca0b2c792605d10f", "format": 1 }, { - "name": "plugins/module_utils/network/nxos", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_bgp_templates.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "955e3860781eef5083a0fa88e80d95803645ca485edd357b5867d3706bbc45bb", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_file_copy.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8418e53de9a83561d6c4b60b2d5d8115863d210376acbebf4f4c41a6489cd2a5", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/bgp_global.py", + "name": "plugins/modules/nxos_snmp_community.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed671f6023709bf21f4a311d5b4d0d691d80ff73705eb81c6d20e7770da771f1", + "chksum_sha256": "4225f8c4053ec681cb9fadb841f3b0660771879e740d13858c459fedbfc5aa3c", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/fc_interfaces.py", + "name": "plugins/modules/nxos_acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f64b8a82076d44e2d84bb8e519e867de1be52eea91daa677a5e542f0a0d3429b", + "chksum_sha256": "283955d63ab51126d854605578e07115bb252047205fe90749563bf343bdb00a", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/bgp_address_family.py", + "name": "plugins/modules/nxos_snmp_location.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "13f0286247895225a98082e385e0024eb4b177acc5d8fcadb26e3ae4df75bd25", + "chksum_sha256": "a11d2a363173b645bdf9c8cd1cdb80e77b94d4c169069614deae90a441a1de22", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/bgp_neighbor_address_family.py", + "name": "plugins/modules/nxos_vrf_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c67e25a48908cf9c5567c09db909e2fb0223acd6cca1a737bb18101f0a6d2de", + "chksum_sha256": "a2876512450aa2920f88a2d408eb72cd7976ec4124a95b058d57427d0f939fb1", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/static_routes.py", + "name": "plugins/modules/nxos_vpc.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ccf265de0d70717436fd47a40647609558cba7a1d6407849f1b3e2577bd115b3", + "chksum_sha256": "edd715fc9e823dbf37a31a16de8f680132e0cc9b2feea46ab073d34f8098acf5", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/hostname.py", + "name": "plugins/modules/nxos_hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd7353433ed688982b69d5f12378ff56bb0b399f0734e27b1571a86a14384253", + "chksum_sha256": "c6e80d807e983caef125de3683283634a0fb850861b4c240a7446c36660b8a22", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/ntp_global.py", + "name": "plugins/modules/nxos_logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c68f8b3e3e2fbe7a95f3520b0b2b785c4b88f706bfd12ed7f57d8d8e0747861", + "chksum_sha256": "1493bf17b72bd52b2f045a3d3c8767b2e414600762fadf79c065dda1b99e47d2", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/snmp_server.py", + "name": "plugins/modules/nxos_aaa_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "32cba948b16c3a3f53d2340958523c4b62de76300df58506c094fdf244d9cda6", + "chksum_sha256": "c7d0ba90c00bef7d014ca922ce5e66ea10fe116bb9af88bfdf671402527b404b", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/__init__.py", + "name": "plugins/modules/nxos_igmp_snooping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ee94035d9f4a71393a16670f8e269064476b6da5d99071a4f23cfc253da13703", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/ospfv3.py", + "name": "plugins/modules/nxos_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f1d51e9d1880df627d5d8c3f2cb483c1d6acb9e71919fd88ee7d0d2dc79e0682", + "chksum_sha256": "5535b8856eb027aabcd9885c29602a14a92c40554ca777b553879ae1bd8b18b6", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/route_maps.py", + "name": "plugins/modules/nxos_rollback.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e4d7751215f3d2c175f957ec2f8f667f547b3f59c4c4eb6b0e52559740a060a", + "chksum_sha256": "7fec43544c7cb26eb84d9cdd22e74a4f042de04943e5896fcd45a1020f003e82", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/bgp_templates.py", + "name": "plugins/modules/nxos_vtp_password.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "539774203fdf45d1b73fc4e4acfdfe38e86c43f285c18b873c03238c2bba01fc", + "chksum_sha256": "e6cb79ae92bdf1ab82291e4b331dfeb53b42f004a416908268380813905b8215", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/ospfv2.py", + "name": "plugins/modules/nxos_lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "743e72c4c99c023a2a4feee6c57cb7af7f8cd67643738af5ebedbb7ffa2aa2b7", + "chksum_sha256": "b444c878e0d7289fb705e56985724155c15dd9f5b8de4ad2fa581ddc77b29e0e", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/ospf_interfaces.py", + "name": "plugins/modules/nxos_prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "619993ad1e730c0263a72547114d501d22cad1cc30a1ea614ad10f463ec3292c", + "chksum_sha256": "fbc6db3871917b6239c2e37caede67c3a6f69e2c578357f5831bf74173c09bd5", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/logging_global.py", + "name": "plugins/modules/nxos_bfd_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f67d7522c05494210bc06984c76e11b9053b9c3e6c13aa10bafcafa527de814", + "chksum_sha256": "e2121178e29e5e34ca77f7ed2dc78e7fdcf6ddbe7a9ab16545c39c11dc00f7ce", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/rm_templates/prefix_lists.py", + "name": "plugins/modules/nxos_rpm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c61c5caf3fd680763a367ee1d24dd318c773a6e390ab26a28eb28aff0176a1b2", + "chksum_sha256": "e2ba7d2ec024a075a96be051996d4eba6f6e370058c6df454b89ac7c36759f58", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/__init__.py", + "name": "plugins/modules/nxos_vtp_version.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "2c822abea7b871b5781dcf46856c07f0214793bc3768743d45966ae5a0b6e779", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_nxapi.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cf44a3e80959a805238202c49a5a639d6a1ecf5f6d8191b93b3f6db314a80c15", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_address_family", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_command.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "19c20fdbf3d421a6a487cb76e85904fcfc62dfe26569000e370e6d829c0fb838", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_address_family/bgp_address_family.py", + "name": "plugins/modules/nxos_snmp_contact.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9dceb9b1618124325de42f3625419e16b34dfa1b118f41d24742d16d188bd952", + "chksum_sha256": "936a5e9b00d8c46ed39a8818f5806971f16fc8cebd3f5106e6909b7ed8395ac1", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_address_family/__init__.py", + "name": "plugins/modules/nxos_aaa_server_host.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b7560a2b37d9b93af17d9d0241db8cc701778ff974fcc4f16204fcaa991c1f2a", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/static_routes", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_ntp_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "48f03d894a18905e2934f7f22c43b8b78e66e8f3b2a39770e94b45907977a0a0", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/static_routes/static_routes.py", + "name": "plugins/modules/nxos_feature.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d158d7985a673c37a6a92d24c32f7fac372f8082b7aebc0f95215760c2891c8f", + "chksum_sha256": "8b8a6deea08ebeae462e2fefbcc4762dd67b71bc5a5d0f51e3ea3595375888da", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/static_routes/__init__.py", + "name": "plugins/modules/nxos_vxlan_vtep_vni.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "00cc8a5f8826d10b27cbea4c1523a5dc48a57d174ae7ecfd918e02d506902b80", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/prefix_lists", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/prefix_lists/__init__.py", + "name": "plugins/modules/nxos_pim_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "62a33fbb98411f4b017a3d884645f48f8e79049f27e0f3d87698b3bcb7f0c48c", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/prefix_lists/prefix_lists.py", + "name": "plugins/modules/nxos_snmp_traps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bdd9700bbce8280fc77f1fe6c2cb02ae15fd4680ab4076c50bb53c7ea0b35a69", + "chksum_sha256": "73ef124bdd93a1b8d6d7d55870e04c99bb29cde93c0c400884f06c4972057f75", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/hostname", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_reboot.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "826e076559d7143fc03a3de9f0e5ec125241fd3196037f2a1a524e033e75b8de", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/hostname/hostname.py", + "name": "plugins/modules/nxos_vsan.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c3330ec64341ba82a3d65827a9f33c088b95f64fd79f859db5b16334be443d9", + "chksum_sha256": "7a775ad1dba4b6997070b43beb0eff5a71f94cf0d7462c64d7761710663cb865", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/hostname/__init__.py", + "name": "plugins/modules/nxos_pim.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a06919bdfbaab64ef58295c408def23dc36336b630e12d80a2a80e3a31a53a85", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lldp_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_banner.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a98cf0828178ff3233b836f7a1d1478ad4f5020143b0a6435630737a82b4110e", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lldp_interfaces/__init__.py", + "name": "plugins/modules/nxos_vpc_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "7361c2f7afeaedada1c42037a5f54d16b934ef5993f155819e0edb731c21de1f", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/modules/nxos_system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26ea3b86085c974b67392b30142f605fd5efcace1c13044ba38a32c1b77d3069", + "chksum_sha256": "34a51f70bb99431fadc63a66270533d88d97d3a6eb422578a78c1f59da7c89e8", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lacp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_hsrp_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5b9cea1b4a4a770fdf3b6dad829247384c19aefeaf5d300f8730ebbeb8c7bc0d", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lacp/lacp.py", + "name": "plugins/modules/nxos_vrf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b0f05127c1e721158123ed8ef3ddd6259eebdb4226a2b289ee70a8237d167c8a", + "chksum_sha256": "6145ff3c78f13d4bcd3d338da62805a3a1e594b80c8a72de7ff83059d3d5eb04", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lacp/__init__.py", + "name": "plugins/modules/nxos_vtp_domain.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e76836b4b68b3c32d5a146bcb6738009872e3e69d3afffe269e50846d4a84058", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ospfv2", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_snmp_host.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ae6e69d2c2af158c70e81aed0f2a6dbccca2c69033861bd697af4dba0c5183c7", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ospfv2/__init__.py", + "name": "plugins/modules/nxos_fc_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "2b7cb927469f1aab619f06daa2442fd6c4267898dfd7f9f471d58b9970eb5b27", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ospfv2/ospfv2.py", + "name": "plugins/modules/nxos_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52b55a9bc2c837c33f85f0d3a20c5a392fc26a589b7c8d61e433d173fee934cc", + "chksum_sha256": "3421c84ad96b685dce41814131c5e17d336d58fdaac332ea01b72606ffdae07c", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/telemetry", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_evpn_vni.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cccbafbd724df1855a60cebf93e8429be7edc59582827b0ed6c5af84a877565a", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/telemetry/__init__.py", + "name": "plugins/modules/nxos_install_os.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5a8d563421835390e3d46ff4cf4feadd2ff33a43d58a6f8d828a8c9f1f79d951", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/telemetry/telemetry.py", + "name": "plugins/modules/nxos_evpn_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b34d0128aee2e7a33355d4132f4a5ba31a0d5ac90ccc69d786c7bc2abec568c", + "chksum_sha256": "3cb0c7e66e32783f346744b3b08edd63f2d3ac82b67addb55597a19b48db7e9c", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/logging_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_static_routes.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2ef2625e9e8c20f8012c57596cf06ac0ac8b28662ee78e98e2911354dfea6f32", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/logging_global/__init__.py", + "name": "plugins/modules/nxos_facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "3d47e0e98adf0b507c6e725efcb94b573d9100679336c3beaf8193ee0247f24b", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/logging_global/logging_global.py", + "name": "plugins/modules/nxos_acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a5b8bd957449018ead97c56ab6c4c7b3945f6a176a9a6be0dee1bfaa02878939", + "chksum_sha256": "7d3aa83fa072e36c33233e8244b6d7f4b6b28eb355d5045dbffbb7ebd2cfbf8b", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ospfv3", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_telemetry.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5bf9c2cfa138af73b7d1e47a1d5345049dd93a00933eeb94e39a66d94ec759d0", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ospfv3/__init__.py", + "name": "plugins/modules/nxos_ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ceba0e4676fb124fe23e8c0e3e9358e247f6cf34f4af0c2e09db648692b03262", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ospfv3/ospfv3.py", + "name": "plugins/modules/nxos_lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39f79531c9741bae023e8c9db926a5463c311093057a49422bd7e25536e6cab9", + "chksum_sha256": "485b35aeac40cd9d3dfaf18a7f5481fc14796ce054387af3dca72160677f6dd7", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_neighbor_address_family", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_hsrp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e0bccf6fb0aa7ce0cbacacb8acf9821015472213a2319df618e7eef4d03a52f", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_neighbor_address_family/bgp_neighbor_address_family.py", + "name": "plugins/modules/nxos_l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8658e63caa17970c687a6b260d8067ec1a83acc322b1efa0608ca9711b6a598", + "chksum_sha256": "b95b46e32c56259e36e705a3249140c51028bc43376257ef0913e93149918c1e", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_neighbor_address_family/__init__.py", + "name": "plugins/modules/nxos_ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5f7553546e438131fb6a81fb5c994270b900e30349f675a9f9ac77cb20b4a218", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/legacy", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_igmp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ec8870d4fb6ecf6089717936138d43fc5fe54381994a0a7d5e8299a94f9ade67", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/legacy/base.py", + "name": "plugins/modules/nxos_bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "71495bdb43fae534b7a23edf9ec4d932386e4b19320014664203482f9a42de99", + "chksum_sha256": "66c33d7e478c4d39b8899962fc8f152cab6651220069cc2a89cef2e299d1547e", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/legacy/__init__.py", + "name": "plugins/modules/nxos_snmp_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d16699e2fd607da804183e1fe29c6981095303d22b836f865f2046dc2c50ecf0", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/l2_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_bgp_address_family.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "98ba4c208cb7259d49b76f7b48cd1baa8b6f049cac2e9f64142c5011e12c2eee", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/l2_interfaces/__init__.py", + "name": "plugins/modules/nxos_ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8ccbbc24a2038b70b2486f92b33ceaecf1932dbc2316167526855312dc6c599d", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/l2_interfaces/l2_interfaces.py", + "name": "plugins/modules/nxos_snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "16e09269f14c79c8b4ec91aa5eccc89af3d385dd779dd37dc1434933d9e9bc72", + "chksum_sha256": "9ad2b68c98c78ad1082727d1997b52f29f03c4d8c9ee734ee40f7151bec58fd5", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/hsrp_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/nxos_udld.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f9d531c20f551d644be87cf218c7bf8175f531a3190c60c7a20ae281203fbe8d", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/hsrp_interfaces/hsrp_interfaces.py", + "name": "plugins/modules/nxos_lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0024b419e2bca58180d26c864588f59ce5941f5f5420c9df5ed7063e672f391a", + "chksum_sha256": "8aa8104d1be201ba069a75576473610d9a3d5e6e9778687b8f83121557d20a73", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/hsrp_interfaces/__init__.py", + "name": "plugins/modules/nxos_snapshot.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5cf9eab5ad1ae6953579860b7365ce6e6d604f69fe00389f656c63f99cb3b24f", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ospf_interfaces", + "name": "plugins/terminal", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ospf_interfaces/__init__.py", + "name": "plugins/terminal/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/terminal/nxos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6df58dfe3eba436f0b43a2f4f089d58de078ca53907811f49c6ff9295a36e7b5", + "chksum_sha256": "e49e9c495e05b71317fa3d2c462cb085ce5827874235484d735f470e7afa5059", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/route_maps", + "name": "plugins/module_utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/route_maps/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "plugins/module_utils/network", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/route_maps/route_maps.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f15891603e1c71bcfee05df6fa749fc807f756b6a7413ac545b673ba76f57543", + "name": "plugins/module_utils/network/nxos", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/acl_interfaces", + "name": "plugins/module_utils/network/nxos/argspec", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/l3_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/nxos/argspec/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "7082768644e0745bf790852b29aa7c0a05a1aa73e1038bbd65b115085ed981f6", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/nxos/argspec/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac2e8ca4571619843fbe700e40af12f2205ba37dcae4e3ac8fc9552ab3f39c7f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lldp_global", + "name": "plugins/module_utils/network/nxos/argspec/telemetry", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lldp_global/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/telemetry/telemetry.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "735fed6cdb3cf9f532186ddcbd9caeceae6c66e803344bacfba16aae44312018", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lldp_global/lldp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5a4c38941c0836cfcbe5870de76c13b5e991772d2514d919b52a0eb8861b1b8b", - "format": 1 - }, - { - "name": "plugins/module_utils/network/nxos/facts/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/telemetry/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/snmp_server", + "name": "plugins/module_utils/network/nxos/argspec/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/nxos/argspec/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40b58f658b1b04583ed22216cb79b87040e113511d55c523c6dc17c8b1b9b103", + "chksum_sha256": "0a7bd0a029361af8e3f6355af52f8bbffdd6f6f31cb376a09574cbc248c63e4f", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/snmp_server/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/fc_interfaces", + "name": "plugins/module_utils/network/nxos/argspec/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/fc_interfaces/fc_interfaces.py", + "name": "plugins/module_utils/network/nxos/argspec/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cfe4284974d9e939b38db93c36988c773a5c75743b2754e734ad1a814617f232", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/fc_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/lldp_interfaces/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "6dca4e69682508b76a0992a7ea9be015da7ecd322898e1a7f303ed45478586bc", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lacp_interfaces", + "name": "plugins/module_utils/network/nxos/argspec/ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/nxos/argspec/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "023062f4e902d13603541dfa4ed7556aaf55c9f7e09624e82404ad99b375e1d3", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e6e093df4df247e1c4aa45fc6bfcdd4a5abbc8c2af26bfe0e3b4b7298be76081", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/acls", + "name": "plugins/module_utils/network/nxos/argspec/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/acls/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/acls/acls.py", + "name": "plugins/module_utils/network/nxos/argspec/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e24890d18962cbd1e2170a036f3628d3c8686243e641f865d66f52e90f3d9835", + "chksum_sha256": "62a096743b254ad70713007700d5c44ea26a00d69ff7fb8106e640ba4e25fced", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ntp_global", + "name": "plugins/module_utils/network/nxos/argspec/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ntp_global/ntp_global.py", + "name": "plugins/module_utils/network/nxos/argspec/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a0e41e513e3e657d058c758de0f4f107cb10c35c806968552c6b0f42fea7377", + "chksum_sha256": "05b2c2b1670e7b5c0685f81d73c6a4f6176e9b659869554b51144e8311c62e56", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/ntp_global/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lag_interfaces", + "name": "plugins/module_utils/network/nxos/argspec/vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/nxos/argspec/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59a72ebb6ded18c885dc7716f707873e9b2e4819c1f1af38d43d2f60d3ebb436", + "chksum_sha256": "1b23ecaded6b2b8fbcf578fd9bc5997cc3184037a70957a1dd17a772ab212f15", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bfd_interfaces", + "name": "plugins/module_utils/network/nxos/argspec/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bfd_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bfd_interfaces/bfd_interfaces.py", + "name": "plugins/module_utils/network/nxos/argspec/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85a308e34d42cc8d6a01e307d61f80aad2d3ebd4144654514b9855f96a1608f4", + "chksum_sha256": "37b88e6b28e3fae84e9403565021cf2bdcb54fb8c282b38a4ec095b1c25fcb4a", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_templates", + "name": "plugins/module_utils/network/nxos/argspec/ntp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_templates/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/ntp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_templates/bgp_templates.py", + "name": "plugins/module_utils/network/nxos/argspec/ntp_global/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "019a61c240a5cc8c2177c4402ffecbfd035248efa3426db05f91d8c94da57246", + "chksum_sha256": "783602fd75a5c0ae5e6e5d966c292366b63a1b8c5806e5fe76163067f1442777", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/vlans", + "name": "plugins/module_utils/network/nxos/argspec/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/vlans/vlans.py", + "name": "plugins/module_utils/network/nxos/argspec/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02438c1af2fd68b76f7f368fcf8e1199bb61922c892a467ba78eb73dd081631a", + "chksum_sha256": "571184731dbbe433772733ec8f703954ad6b17777b20251a7ed12a6f7ab441a7", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/vlans/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/interfaces", + "name": "plugins/module_utils/network/nxos/argspec/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/interfaces/interfaces.py", + "name": "plugins/module_utils/network/nxos/argspec/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c4a7320158d21677a5bfa159a9c2138ffec2ce98996ed5573c061b163b8daad", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "70978913c9daeedc0fccb8b5f374e2a32bac7d5954841226aed6ff30aa6b3588", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/l3_interfaces", + "name": "plugins/module_utils/network/nxos/argspec/bgp_neighbor_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/bgp_neighbor_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/nxos/argspec/bgp_neighbor_address_family/bgp_neighbor_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd91ce2d24a35f39f37f8275196584b199f99d885a0f915fd32a02e70a1bac02", + "chksum_sha256": "8ca222317640163b92905c69d00da5f3cba1788125facfb63e3166e4a6ff4036", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_global", + "name": "plugins/module_utils/network/nxos/argspec/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_global/bgp_global.py", + "name": "plugins/module_utils/network/nxos/argspec/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef399135879accd85c0495e76be7c6fbf1a1141c57fe10ed98666d1f2cd174e4", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/bgp_global/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/lldp_global/lldp_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c9b7fb9ecb6060e51efd1eb61649c055657aabac60fb4b28e20d8d8b12ea363c", + "format": 1 + }, + { + "name": "plugins/module_utils/network/nxos/argspec/acl_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/nxos/argspec/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/facts/facts.py", + "name": "plugins/module_utils/network/nxos/argspec/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ca5196b5ac6835d5840ea9cbd58e2ed4b4554cd0b3f5a6625f30cde5ce03033", + "chksum_sha256": "bb0d056e85549d5ce2c3bbd3bc5330a3bd8ffb7562123dc8452d07a7999f1701", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/nxos.py", + "name": "plugins/module_utils/network/nxos/argspec/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "571d3839f5fdab7ee6046ccb1b7e3753877b862f7efd51d43973513910d60201", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec", + "name": "plugins/module_utils/network/nxos/argspec/ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_address_family", + "name": "plugins/module_utils/network/nxos/argspec/ospf_interfaces/ospf_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bf40cbc988c8bfd85f8f96409bc3a4246540e933527340e72cf19dfee0bca77b", + "format": 1 + }, + { + "name": "plugins/module_utils/network/nxos/argspec/ospf_interfaces/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "plugins/module_utils/network/nxos/argspec/facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/nxos/argspec/facts/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37b88e6b28e3fae84e9403565021cf2bdcb54fb8c282b38a4ec095b1c25fcb4a", + "chksum_sha256": "3dbe3771e03c68a3144d8b70df7b0d5895c69dbec69a7f47e67f0396f18ae879", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/static_routes", + "name": "plugins/module_utils/network/nxos/argspec/bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/static_routes/static_routes.py", + "name": "plugins/module_utils/network/nxos/argspec/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "01739405af9cd744f8a995dcad803834647bb933b5b65f238fe5d93fd35167f6", + "chksum_sha256": "4fbafd074800875e6855205cdc9797c6e9ede1d525aab97014a6aa60e59b3900", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/static_routes/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/prefix_lists", + "name": "plugins/module_utils/network/nxos/argspec/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "01739405af9cd744f8a995dcad803834647bb933b5b65f238fe5d93fd35167f6", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/nxos/argspec/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "979b5710687e9fd4d0001ee92d070b9a24e5b22b4c622bb47ab6aa3da657c613", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/hostname", + "name": "plugins/module_utils/network/nxos/argspec/fc_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/hostname/hostname.py", + "name": "plugins/module_utils/network/nxos/argspec/fc_interfaces/fc_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05b2c2b1670e7b5c0685f81d73c6a4f6176e9b659869554b51144e8311c62e56", + "chksum_sha256": "cde20eb7e720bd76c623eb69a11dccee251365a5c8c7b8b934d83f61338c2784", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/hostname/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/fc_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lldp_interfaces", + "name": "plugins/module_utils/network/nxos/argspec/route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/route_maps/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "fc5a7ea360233ab48021b6513bca2b38467e94960b29c63945028e82e624702a", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/nxos/argspec/route_maps/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6dca4e69682508b76a0992a7ea9be015da7ecd322898e1a7f303ed45478586bc", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { @@ -1751,105 +1807,105 @@ "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ospfv2", + "name": "plugins/module_utils/network/nxos/argspec/hsrp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ospfv2/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/hsrp_interfaces/hsrp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "78bff7e6897df616065eb94dab6e2aedf4cdef6106783c80c68e3a44b3641c30", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/nxos/argspec/hsrp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a7bd0a029361af8e3f6355af52f8bbffdd6f6f31cb376a09574cbc248c63e4f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/telemetry", + "name": "plugins/module_utils/network/nxos/argspec/bgp_templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/telemetry/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/bgp_templates/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/telemetry/telemetry.py", + "name": "plugins/module_utils/network/nxos/argspec/bgp_templates/bgp_templates.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "735fed6cdb3cf9f532186ddcbd9caeceae6c66e803344bacfba16aae44312018", + "chksum_sha256": "186b8ce90e4f21c9b9ec38647e9d34bb5665c667b6b88fe042b7eede91d27bf3", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/logging_global", + "name": "plugins/module_utils/network/nxos/argspec/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/logging_global/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "979b5710687e9fd4d0001ee92d070b9a24e5b22b4c622bb47ab6aa3da657c613", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/logging_global/logging_global.py", + "name": "plugins/module_utils/network/nxos/argspec/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70978913c9daeedc0fccb8b5f374e2a32bac7d5954841226aed6ff30aa6b3588", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ospfv3", + "name": "plugins/module_utils/network/nxos/argspec/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ospfv3/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9ae7bf54bcbbd71a2eeec9fd2db8c3fdefa34af8162df5d5941c2e322c1c040d", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/nxos/argspec/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6e093df4df247e1c4aa45fc6bfcdd4a5abbc8c2af26bfe0e3b4b7298be76081", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_neighbor_address_family", + "name": "plugins/module_utils/network/nxos/argspec/lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_neighbor_address_family/bgp_neighbor_address_family.py", + "name": "plugins/module_utils/network/nxos/argspec/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ca222317640163b92905c69d00da5f3cba1788125facfb63e3166e4a6ff4036", + "chksum_sha256": "ea53f8bfaffe46e9c184854c68f071da028b3e073d94c939438f5e66f0a9a5be", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_neighbor_address_family/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", @@ -1863,3027 +1919,2985 @@ "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ceeb10c6125b3efda9d04ac4d324e8025b291277400266b651c8b9e3b4f3f960", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/nxos/argspec/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ceeb10c6125b3efda9d04ac4d324e8025b291277400266b651c8b9e3b4f3f960", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/hsrp_interfaces", + "name": "plugins/module_utils/network/nxos/argspec/bfd_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/hsrp_interfaces/hsrp_interfaces.py", + "name": "plugins/module_utils/network/nxos/argspec/bfd_interfaces/bfd_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78bff7e6897df616065eb94dab6e2aedf4cdef6106783c80c68e3a44b3641c30", + "chksum_sha256": "bf82cfc30230fa91de7fbfc2e5dd98a765f17ce3b123cfb8dc78668d3934523a", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/hsrp_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/bfd_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ospf_interfaces", + "name": "plugins/module_utils/network/nxos/argspec/lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/argspec/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "73c1cb0cdb2fe7ddee5372b2ab1d2b9936248389c55e59ba3641a3cd7fd3a790", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/nxos/argspec/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf40cbc988c8bfd85f8f96409bc3a4246540e933527340e72cf19dfee0bca77b", - "format": 1 - }, - { - "name": "plugins/module_utils/network/nxos/argspec/route_maps", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/route_maps/__init__.py", + "name": "plugins/module_utils/network/nxos/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/route_maps/route_maps.py", + "name": "plugins/module_utils/network/nxos/nxos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc5a7ea360233ab48021b6513bca2b38467e94960b29c63945028e82e624702a", + "chksum_sha256": "571d3839f5fdab7ee6046ccb1b7e3753877b862f7efd51d43973513910d60201", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/acl_interfaces", + "name": "plugins/module_utils/network/nxos/rm_templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/rm_templates/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ed671f6023709bf21f4a311d5b4d0d691d80ff73705eb81c6d20e7770da771f1", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/nxos/rm_templates/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb0d056e85549d5ce2c3bbd3bc5330a3bd8ffb7562123dc8452d07a7999f1701", + "chksum_sha256": "ccf265de0d70717436fd47a40647609558cba7a1d6407849f1b3e2577bd115b3", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lldp_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/nxos/rm_templates/ospfv2.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f049139f75676305c98743a0efc940ea8a5fe481a0a9d37e99d5b7da9f5f6cb1", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lldp_global/__init__.py", + "name": "plugins/module_utils/network/nxos/rm_templates/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "1e4d7751215f3d2c175f957ec2f8f667f547b3f59c4c4eb6b0e52559740a060a", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lldp_global/lldp_global.py", + "name": "plugins/module_utils/network/nxos/rm_templates/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9b7fb9ecb6060e51efd1eb61649c055657aabac60fb4b28e20d8d8b12ea363c", + "chksum_sha256": "dd7353433ed688982b69d5f12378ff56bb0b399f0734e27b1571a86a14384253", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/__init__.py", + "name": "plugins/module_utils/network/nxos/rm_templates/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c61c5caf3fd680763a367ee1d24dd318c773a6e390ab26a28eb28aff0176a1b2", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/snmp_server", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/nxos/rm_templates/fc_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f64b8a82076d44e2d84bb8e519e867de1be52eea91daa677a5e542f0a0d3429b", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/nxos/rm_templates/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ae7bf54bcbbd71a2eeec9fd2db8c3fdefa34af8162df5d5941c2e322c1c040d", + "chksum_sha256": "32cba948b16c3a3f53d2340958523c4b62de76300df58506c094fdf244d9cda6", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/snmp_server/__init__.py", + "name": "plugins/module_utils/network/nxos/rm_templates/ospf_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "619993ad1e730c0263a72547114d501d22cad1cc30a1ea614ad10f463ec3292c", + "format": 1 + }, + { + "name": "plugins/module_utils/network/nxos/rm_templates/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/fc_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/nxos/rm_templates/logging_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2f67d7522c05494210bc06984c76e11b9053b9c3e6c13aa10bafcafa527de814", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/fc_interfaces/fc_interfaces.py", + "name": "plugins/module_utils/network/nxos/rm_templates/bgp_templates.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde20eb7e720bd76c623eb69a11dccee251365a5c8c7b8b934d83f61338c2784", + "chksum_sha256": "539774203fdf45d1b73fc4e4acfdfe38e86c43f285c18b873c03238c2bba01fc", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/fc_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/rm_templates/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "13f0286247895225a98082e385e0024eb4b177acc5d8fcadb26e3ae4df75bd25", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/facts", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/nxos/rm_templates/bgp_neighbor_address_family.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4c67e25a48908cf9c5567c09db909e2fb0223acd6cca1a737bb18101f0a6d2de", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/facts/__init__.py", + "name": "plugins/module_utils/network/nxos/rm_templates/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9c68f8b3e3e2fbe7a95f3520b0b2b785c4b88f706bfd12ed7f57d8d8e0747861", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/facts/facts.py", + "name": "plugins/module_utils/network/nxos/rm_templates/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3dbe3771e03c68a3144d8b70df7b0d5895c69dbec69a7f47e67f0396f18ae879", + "chksum_sha256": "f1d51e9d1880df627d5d8c3f2cb483c1d6acb9e71919fd88ee7d0d2dc79e0682", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lacp_interfaces", + "name": "plugins/module_utils/network/nxos/facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/l3_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/nxos/facts/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73c1cb0cdb2fe7ddee5372b2ab1d2b9936248389c55e59ba3641a3cd7fd3a790", + "chksum_sha256": "cd91ce2d24a35f39f37f8275196584b199f99d885a0f915fd32a02e70a1bac02", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/acls", + "name": "plugins/module_utils/network/nxos/facts/telemetry", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/acls/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/telemetry/telemetry.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9b34d0128aee2e7a33355d4132f4a5ba31a0d5ac90ccc69d786c7bc2abec568c", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/acls/acls.py", + "name": "plugins/module_utils/network/nxos/facts/telemetry/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "62a096743b254ad70713007700d5c44ea26a00d69ff7fb8106e640ba4e25fced", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ntp_global", + "name": "plugins/module_utils/network/nxos/facts/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ntp_global/ntp_global.py", + "name": "plugins/module_utils/network/nxos/facts/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "783602fd75a5c0ae5e6e5d966c292366b63a1b8c5806e5fe76163067f1442777", + "chksum_sha256": "52b55a9bc2c837c33f85f0d3a20c5a392fc26a589b7c8d61e433d173fee934cc", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/ntp_global/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lag_interfaces", + "name": "plugins/module_utils/network/nxos/facts/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea53f8bfaffe46e9c184854c68f071da028b3e073d94c939438f5e66f0a9a5be", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/lldp_interfaces/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "6a9af0b059926122015f40536c839c8dc3fbb14d14cfc6a6ae02d85d0de14a7a", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bfd_interfaces", + "name": "plugins/module_utils/network/nxos/facts/ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bfd_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bfd_interfaces/bfd_interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf82cfc30230fa91de7fbfc2e5dd98a765f17ce3b123cfb8dc78668d3934523a", + "chksum_sha256": "39f79531c9741bae023e8c9db926a5463c311093057a49422bd7e25536e6cab9", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_templates", + "name": "plugins/module_utils/network/nxos/facts/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_templates/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_templates/bgp_templates.py", + "name": "plugins/module_utils/network/nxos/facts/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "186b8ce90e4f21c9b9ec38647e9d34bb5665c667b6b88fe042b7eede91d27bf3", + "chksum_sha256": "d3bbdfc94cda205574023cea71125acc6b9511f3dcac5eb89aa9b6001c503c85", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/vlans", + "name": "plugins/module_utils/network/nxos/facts/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/vlans/vlans.py", + "name": "plugins/module_utils/network/nxos/facts/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b23ecaded6b2b8fbcf578fd9bc5997cc3184037a70957a1dd17a772ab212f15", + "chksum_sha256": "3c3330ec64341ba82a3d65827a9f33c088b95f64fd79f859db5b16334be443d9", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/vlans/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/interfaces", + "name": "plugins/module_utils/network/nxos/facts/facts.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0ca5196b5ac6835d5840ea9cbd58e2ed4b4554cd0b3f5a6625f30cde5ce03033", + "format": 1 + }, + { + "name": "plugins/module_utils/network/nxos/facts/vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/interfaces/interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "571184731dbbe433772733ec8f703954ad6b17777b20251a7ed12a6f7ab441a7", + "chksum_sha256": "02438c1af2fd68b76f7f368fcf8e1199bb61922c892a467ba78eb73dd081631a", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/l3_interfaces", + "name": "plugins/module_utils/network/nxos/facts/legacy", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/legacy/base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "31d68732e6e3dccbb6ce2dacba8a4497cfe827638587bcd5aa6a4f6418a34a93", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/legacy/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7082768644e0745bf790852b29aa7c0a05a1aa73e1038bbd65b115085ed981f6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_global", + "name": "plugins/module_utils/network/nxos/facts/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_global/bgp_global.py", + "name": "plugins/module_utils/network/nxos/facts/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4fbafd074800875e6855205cdc9797c6e9ede1d525aab97014a6aa60e59b3900", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/argspec/bgp_global/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/nxos/config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "9dceb9b1618124325de42f3625419e16b34dfa1b118f41d24742d16d188bd952", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_address_family", + "name": "plugins/module_utils/network/nxos/facts/ntp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/nxos/facts/ntp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab2d098a5e4d9f5dfccc95ec69210831e191ce526eb08fb55029517f27bca8f2", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/ntp_global/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "7a0e41e513e3e657d058c758de0f4f107cb10c35c806968552c6b0f42fea7377", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/static_routes", + "name": "plugins/module_utils/network/nxos/facts/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/static_routes/static_routes.py", + "name": "plugins/module_utils/network/nxos/facts/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "329e8b628dae287612efa80e2ca7b5aaeefd530c19ddd8bd37a5b7774eb26aef", + "chksum_sha256": "3c4a7320158d21677a5bfa159a9c2138ffec2ce98996ed5573c061b163b8daad", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/static_routes/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/prefix_lists", + "name": "plugins/module_utils/network/nxos/facts/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/nxos/facts/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "445f9a55c8fd372fdbad1834ed7598d9281a376fd5de5e749218995310ccea81", + "chksum_sha256": "a5b8bd957449018ead97c56ab6c4c7b3945f6a176a9a6be0dee1bfaa02878939", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/hostname", + "name": "plugins/module_utils/network/nxos/facts/bgp_neighbor_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/hostname/hostname.py", + "name": "plugins/module_utils/network/nxos/facts/bgp_neighbor_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab919426e1bd33f667ae875af49ed837d5f3f1e3598b878a290c3bc35004765d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/hostname/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/bgp_neighbor_address_family/bgp_neighbor_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a8658e63caa17970c687a6b260d8067ec1a83acc322b1efa0608ca9711b6a598", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lldp_interfaces", + "name": "plugins/module_utils/network/nxos/facts/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c15204ad386b15117fcb44a6e62be71db4eb03b7f9aac53f7bbdd29020a4690", + "chksum_sha256": "5a4c38941c0836cfcbe5870de76c13b5e991772d2514d919b52a0eb8861b1b8b", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lacp", + "name": "plugins/module_utils/network/nxos/facts/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lacp/lacp.py", + "name": "plugins/module_utils/network/nxos/facts/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9612ac4a62de771ca9cef65d733373105e180a060227fff8330bc814d5cdde96", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lacp/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/acl_interfaces/acl_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dcde32d987bef1d67842179d8e8dad0077899c8009893fbef7ef89ab1b09ed05", + "format": 1 + }, + { + "name": "plugins/module_utils/network/nxos/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ospfv2", + "name": "plugins/module_utils/network/nxos/facts/ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ospfv2/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "6df58dfe3eba436f0b43a2f4f089d58de078ca53907811f49c6ff9295a36e7b5", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/nxos/facts/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9294a53417222ea7bd4cf1b003780c5774924a288309b70bb353b0c64e74bd7e", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/telemetry", + "name": "plugins/module_utils/network/nxos/facts/bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/telemetry/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ef399135879accd85c0495e76be7c6fbf1a1141c57fe10ed98666d1f2cd174e4", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/telemetry/telemetry.py", + "name": "plugins/module_utils/network/nxos/facts/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "727e58c53e65e0803777cc288930ceb07f415e2202e6cf5a8b58ebbdffbd46d8", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/logging_global", + "name": "plugins/module_utils/network/nxos/facts/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/logging_global/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d158d7985a673c37a6a92d24c32f7fac372f8082b7aebc0f95215760c2891c8f", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/logging_global/logging_global.py", + "name": "plugins/module_utils/network/nxos/facts/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7d1de04722e657bd71a3131e7bba17bc0178031c1c91cfa87df16e0eccc6878", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ospfv3", + "name": "plugins/module_utils/network/nxos/facts/fc_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ospfv3/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/fc_interfaces/fc_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cfe4284974d9e939b38db93c36988c773a5c75743b2754e734ad1a814617f232", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/nxos/facts/fc_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ee78999cd1450377200ffd92fa3e925ecf413b3c1cb1a4f11e084facf5844d9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_neighbor_address_family", + "name": "plugins/module_utils/network/nxos/facts/route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py", + "name": "plugins/module_utils/network/nxos/facts/route_maps/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d8a658ac17e3b61cc0105d4567c8793adf8b2bd0cc0bcd68cf86353ac3116db3", + "chksum_sha256": "f15891603e1c71bcfee05df6fa749fc807f756b6a7413ac545b673ba76f57543", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/route_maps/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/l2_interfaces", + "name": "plugins/module_utils/network/nxos/facts/lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b0f05127c1e721158123ed8ef3ddd6259eebdb4226a2b289ee70a8237d167c8a", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44bae3bfcc74ec9e0328439391b1081d3fe54e6f3d3de17ff960c06b5e16e50c", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/hsrp_interfaces", + "name": "plugins/module_utils/network/nxos/facts/hsrp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/hsrp_interfaces/hsrp_interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/hsrp_interfaces/hsrp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d5eb7ab8b3ff9d4c90321a6372a73f5087712b5d269eb1351380b93e5f1e207", + "chksum_sha256": "0024b419e2bca58180d26c864588f59ce5941f5f5420c9df5ed7063e672f391a", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/hsrp_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/hsrp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ospf_interfaces", + "name": "plugins/module_utils/network/nxos/facts/bgp_templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/bgp_templates/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/bgp_templates/bgp_templates.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6a12a9c127ce960b84820ac79286672f458ab56934903abbfb52e74e2e9c98b6", + "chksum_sha256": "019a61c240a5cc8c2177c4402ffecbfd035248efa3426db05f91d8c94da57246", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/route_maps", + "name": "plugins/module_utils/network/nxos/facts/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/route_maps/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "bdd9700bbce8280fc77f1fe6c2cb02ae15fd4680ab4076c50bb53c7ea0b35a69", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/route_maps/route_maps.py", + "name": "plugins/module_utils/network/nxos/facts/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3f4b8b99ca2c2ad045886e77c5f0e412dd9d906cd801daf0e462b02e719e6d47", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/acl_interfaces", + "name": "plugins/module_utils/network/nxos/facts/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "40b58f658b1b04583ed22216cb79b87040e113511d55c523c6dc17c8b1b9b103", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0da4ca8f06addf22f010bdcfbc5d8f5c26b9caad3a4f0d0653f9bf1b56511a7", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lldp_global", + "name": "plugins/module_utils/network/nxos/facts/lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lldp_global/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/nxos/config/lldp_global/lldp_global.py", + "name": "plugins/module_utils/network/nxos/facts/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1804e5abcd0b77a8b5c675c3bb4b90731e8932bf882f8445f01e839013660845", + "chksum_sha256": "59a72ebb6ded18c885dc7716f707873e9b2e4819c1f1af38d43d2f60d3ebb436", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/snmp_server", + "name": "plugins/module_utils/network/nxos/facts/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/nxos/facts/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "213fd101832e7b149113afc178eac76dbff00448cec80e65c6c3e6e0d434e914", + "chksum_sha256": "16e09269f14c79c8b4ec91aa5eccc89af3d385dd779dd37dc1434933d9e9bc72", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/snmp_server/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/fc_interfaces", + "name": "plugins/module_utils/network/nxos/facts/bfd_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/fc_interfaces/fc_interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/bfd_interfaces/bfd_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0438d7d1f23bc654fa0488e35002d8aff313dcf8afbef7412b0c68ee4e128f73", + "chksum_sha256": "85a308e34d42cc8d6a01e307d61f80aad2d3ebd4144654514b9855f96a1608f4", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/fc_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/bfd_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lacp_interfaces", + "name": "plugins/module_utils/network/nxos/facts/lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/nxos/facts/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a3ca5d6369f95058d8133277cfda2b0f04b6465bebce78756e6a4b45adf1d20", + "chksum_sha256": "023062f4e902d13603541dfa4ed7556aaf55c9f7e09624e82404ad99b375e1d3", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/facts/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/acls", + "name": "plugins/module_utils/network/nxos/utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/acls/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "plugins/module_utils/network/nxos/utils/telemetry", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/acls/acls.py", + "name": "plugins/module_utils/network/nxos/utils/telemetry/telemetry.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b04b56fe6b5f62801329741e2707a9c0d2030ba1963590ad4608fb28eba36706", + "chksum_sha256": "15cbafc9ce0f497e532fd5f677ac7fc847d0d94081f71d7538517699dcd59e30", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ntp_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/nxos/utils/telemetry/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ntp_global/ntp_global.py", + "name": "plugins/module_utils/network/nxos/utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6936bf5deb7b2708e4a6373b325c3155a14bbc454419ed7f516999e92946415c", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/ntp_global/__init__.py", + "name": "plugins/module_utils/network/nxos/utils/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "061a3ad9eb413c3b48d2c4a77c060e11d499b21fa1830ab4a236f35d7f184fc9", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lag_interfaces", + "name": "plugins/module_utils/network/nxos/cmdref", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lag_interfaces/lag_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cb71721dc87b58474b79a72e3ef13d436c3cc5c65ddf79383e6a2a849c94bad9", + "name": "plugins/module_utils/network/nxos/cmdref/telemetry", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/cmdref/telemetry/telemetry.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8da77084260edf236893c1758664c60ed4aa2a53f45d259db357712fb902c5cd", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bfd_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/nxos/cmdref/telemetry/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bfd_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/cmdref/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bfd_interfaces/bfd_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "149dfe5bc61c80053e6fc498e2b98b70d1482ef8dd51ebb8ae7f84776e3b69b6", + "name": "plugins/module_utils/network/nxos/config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_templates", + "name": "plugins/module_utils/network/nxos/config/l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_templates/__init__.py", + "name": "plugins/module_utils/network/nxos/config/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e63f600eb2827bdd4a6fd5d16a728fe5a179a1bb8e29baa6da806e21bcf9cac9", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_templates/bgp_templates.py", + "name": "plugins/module_utils/network/nxos/config/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd3eb3ca52063455c3cbbb0fba6bdace21254000f3bd662466950098f82f72c1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/vlans", + "name": "plugins/module_utils/network/nxos/config/telemetry", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/vlans/vlans.py", + "name": "plugins/module_utils/network/nxos/config/telemetry/telemetry.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd731a6f5a475a54f70cfc7f872737ebdc7b06e5a6b5f612ce2e92c0cc6bbfdc", + "chksum_sha256": "727e58c53e65e0803777cc288930ceb07f415e2202e6cf5a8b58ebbdffbd46d8", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/vlans/__init__.py", + "name": "plugins/module_utils/network/nxos/config/telemetry/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/interfaces", + "name": "plugins/module_utils/network/nxos/config/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/interfaces/interfaces.py", + "name": "plugins/module_utils/network/nxos/config/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bc036b0cfa2f0993c0a313334e3c849ef731671d917c75a9b0e5c2381bdbe5b4", + "chksum_sha256": "9294a53417222ea7bd4cf1b003780c5774924a288309b70bb353b0c64e74bd7e", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/config/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/l3_interfaces", + "name": "plugins/module_utils/network/nxos/config/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/nxos/config/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/nxos/config/lldp_interfaces/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e63f600eb2827bdd4a6fd5d16a728fe5a179a1bb8e29baa6da806e21bcf9cac9", + "chksum_sha256": "6c15204ad386b15117fcb44a6e62be71db4eb03b7f9aac53f7bbdd29020a4690", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_global", + "name": "plugins/module_utils/network/nxos/config/ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_global/bgp_global.py", + "name": "plugins/module_utils/network/nxos/config/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0d590ee1bf37a813910101a74b0d52709cfb6e174828990d34125a06a2ae570", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/config/bgp_global/__init__.py", + "name": "plugins/module_utils/network/nxos/config/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/nxos/cmdref", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "0ee78999cd1450377200ffd92fa3e925ecf413b3c1cb1a4f11e084facf5844d9", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/cmdref/telemetry", + "name": "plugins/module_utils/network/nxos/config/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/cmdref/telemetry/__init__.py", + "name": "plugins/module_utils/network/nxos/config/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/cmdref/telemetry/telemetry.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8da77084260edf236893c1758664c60ed4aa2a53f45d259db357712fb902c5cd", - "format": 1 - }, - { - "name": "plugins/module_utils/network/nxos/cmdref/__init__.py", + "name": "plugins/module_utils/network/nxos/config/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/nxos/utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "b04b56fe6b5f62801329741e2707a9c0d2030ba1963590ad4608fb28eba36706", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/utils/telemetry", + "name": "plugins/module_utils/network/nxos/config/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/utils/telemetry/__init__.py", + "name": "plugins/module_utils/network/nxos/config/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ab919426e1bd33f667ae875af49ed837d5f3f1e3598b878a290c3bc35004765d", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/utils/telemetry/telemetry.py", + "name": "plugins/module_utils/network/nxos/config/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f684bba2373a2a665e1b9ac34aa2822d33ab1a7f1e2919dd686a4395d07cab9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/nxos/utils/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "plugins/module_utils/network/nxos/config/vlans", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/nxos/utils/utils.py", + "name": "plugins/module_utils/network/nxos/config/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "061a3ad9eb413c3b48d2c4a77c060e11d499b21fa1830ab4a236f35d7f184fc9", + "chksum_sha256": "dd731a6f5a475a54f70cfc7f872737ebdc7b06e5a6b5f612ce2e92c0cc6bbfdc", "format": 1 }, { - "name": "plugins/module_utils/network/__init__.py", + "name": "plugins/module_utils/network/nxos/config/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action", + "name": "plugins/module_utils/network/nxos/config/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/feature.py", + "name": "plugins/module_utils/network/nxos/config/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/udld_interface.py", + "name": "plugins/module_utils/network/nxos/config/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "ab2d098a5e4d9f5dfccc95ec69210831e191ce526eb08fb55029517f27bca8f2", "format": 1 }, { - "name": "plugins/action/bgp_af.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/ntp_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/bgp_global.py", + "name": "plugins/module_utils/network/nxos/config/ntp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/evpn_global.py", + "name": "plugins/module_utils/network/nxos/config/ntp_global/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "6936bf5deb7b2708e4a6373b325c3155a14bbc454419ed7f516999e92946415c", "format": 1 }, { - "name": "plugins/action/vxlan_vtep_vni.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/lacp.py", + "name": "plugins/module_utils/network/nxos/config/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "32368a2909b02f1b25206c7ee67e5e8da1ecfdc80800905a260decb71b2b873f", "format": 1 }, { - "name": "plugins/action/vlans.py", + "name": "plugins/module_utils/network/nxos/config/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/pim.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/logging_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/lag_interfaces.py", + "name": "plugins/module_utils/network/nxos/config/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/snmp_contact.py", + "name": "plugins/module_utils/network/nxos/config/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e7d1de04722e657bd71a3131e7bba17bc0178031c1c91cfa87df16e0eccc6878", "format": 1 }, { - "name": "plugins/action/l2_interface.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/bgp_neighbor_address_family", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/user.py", + "name": "plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/interfaces.py", + "name": "plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "d8a658ac17e3b61cc0105d4567c8793adf8b2bd0cc0bcd68cf86353ac3116db3", "format": 1 }, { - "name": "plugins/action/snapshot.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/lldp_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/nxapi.py", + "name": "plugins/module_utils/network/nxos/config/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/linkagg.py", + "name": "plugins/module_utils/network/nxos/config/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "1804e5abcd0b77a8b5c675c3bb4b90731e8932bf882f8445f01e839013660845", "format": 1 }, { - "name": "plugins/action/hsrp_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/acl_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/vsan.py", + "name": "plugins/module_utils/network/nxos/config/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/snmp_user.py", + "name": "plugins/module_utils/network/nxos/config/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "0fe0d6c19ce427a02332486d5c2b3d3905634d7eadc1f76b37ca21799e018bde", "format": 1 }, { - "name": "plugins/action/bgp_address_family.py", + "name": "plugins/module_utils/network/nxos/config/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/bgp_neighbor_address_family.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/ospf_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/system.py", + "name": "plugins/module_utils/network/nxos/config/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "6a12a9c127ce960b84820ac79286672f458ab56934903abbfb52e74e2e9c98b6", "format": 1 }, { - "name": "plugins/action/static_routes.py", + "name": "plugins/module_utils/network/nxos/config/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/gir_profile_management.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/bgp_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/l3_interface.py", + "name": "plugins/module_utils/network/nxos/config/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e0d590ee1bf37a813910101a74b0d52709cfb6e174828990d34125a06a2ae570", "format": 1 }, { - "name": "plugins/action/install_os.py", + "name": "plugins/module_utils/network/nxos/config/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/hostname.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/static_routes", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/vxlan_vtep.py", + "name": "plugins/module_utils/network/nxos/config/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "329e8b628dae287612efa80e2ca7b5aaeefd530c19ddd8bd37a5b7774eb26aef", "format": 1 }, { - "name": "plugins/action/lacp_interfaces.py", + "name": "plugins/module_utils/network/nxos/config/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/ospf.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/fc_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/vtp_version.py", + "name": "plugins/module_utils/network/nxos/config/fc_interfaces/fc_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "0438d7d1f23bc654fa0488e35002d8aff313dcf8afbef7412b0c68ee4e128f73", "format": 1 }, { - "name": "plugins/action/snmp_community.py", + "name": "plugins/module_utils/network/nxos/config/fc_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/logging.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/route_maps", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/ntp_global.py", + "name": "plugins/module_utils/network/nxos/config/route_maps/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "3f4b8b99ca2c2ad045886e77c5f0e412dd9d906cd801daf0e462b02e719e6d47", "format": 1 }, { - "name": "plugins/action/hsrp.py", + "name": "plugins/module_utils/network/nxos/config/route_maps/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/interface_ospf.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/lacp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/ntp.py", + "name": "plugins/module_utils/network/nxos/config/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "9612ac4a62de771ca9cef65d733373105e180a060227fff8330bc814d5cdde96", "format": 1 }, { - "name": "plugins/action/smu.py", + "name": "plugins/module_utils/network/nxos/config/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/snmp_server.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/hsrp_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/vpc.py", + "name": "plugins/module_utils/network/nxos/config/hsrp_interfaces/hsrp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "5d5eb7ab8b3ff9d4c90321a6372a73f5087712b5d269eb1351380b93e5f1e207", "format": 1 }, { - "name": "plugins/action/__init__.py", + "name": "plugins/module_utils/network/nxos/config/hsrp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/interface.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/bgp_templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/ospfv3.py", + "name": "plugins/module_utils/network/nxos/config/bgp_templates/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/devicealias.py", + "name": "plugins/module_utils/network/nxos/config/bgp_templates/bgp_templates.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "dd3eb3ca52063455c3cbbb0fba6bdace21254000f3bd662466950098f82f72c1", "format": 1 }, { - "name": "plugins/action/file_copy.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/prefix_lists", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/telemetry.py", + "name": "plugins/module_utils/network/nxos/config/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "445f9a55c8fd372fdbad1834ed7598d9281a376fd5de5e749218995310ccea81", "format": 1 }, { - "name": "plugins/action/nxos.py", + "name": "plugins/module_utils/network/nxos/config/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/route_maps.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/snmp_server", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/aaa_server_host.py", + "name": "plugins/module_utils/network/nxos/config/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "213fd101832e7b149113afc178eac76dbff00448cec80e65c6c3e6e0d434e914", "format": 1 }, { - "name": "plugins/action/igmp_interface.py", + "name": "plugins/module_utils/network/nxos/config/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/zone_zoneset.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/lag_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/igmp_snooping.py", + "name": "plugins/module_utils/network/nxos/config/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "cb71721dc87b58474b79a72e3ef13d436c3cc5c65ddf79383e6a2a849c94bad9", "format": 1 }, { - "name": "plugins/action/pim_interface.py", + "name": "plugins/module_utils/network/nxos/config/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/bgp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/l2_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/reboot.py", + "name": "plugins/module_utils/network/nxos/config/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "30afeab2a5eff47a83411b870b078040d11cb84a5b0c094b5b7814bb69d2e831", "format": 1 }, { - "name": "plugins/action/l2_interfaces.py", + "name": "plugins/module_utils/network/nxos/config/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/gir.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/bfd_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/command.py", + "name": "plugins/module_utils/network/nxos/config/bfd_interfaces/bfd_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "149dfe5bc61c80053e6fc498e2b98b70d1482ef8dd51ebb8ae7f84776e3b69b6", "format": 1 }, { - "name": "plugins/action/rpm.py", + "name": "plugins/module_utils/network/nxos/config/bfd_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/snmp_location.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/module_utils/network/nxos/config/lacp_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/ntp_options.py", + "name": "plugins/module_utils/network/nxos/config/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "4a3ca5d6369f95058d8133277cfda2b0f04b6465bebce78756e6a4b45adf1d20", "format": 1 }, { - "name": "plugins/action/bfd_global.py", + "name": "plugins/module_utils/network/nxos/config/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/ospf_vrf.py", + "name": "plugins/module_utils/network/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/igmp.py", + "name": "plugins/module_utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/pim_rp_address.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/cliconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/acl_interfaces.py", + "name": "plugins/cliconf/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/ospfv2.py", + "name": "plugins/cliconf/nxos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "13c8aee982db809a18709e985a54757e2390122a5a27461c2fbfbcde1286c926", "format": 1 }, { - "name": "plugins/action/config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "name": "plugins/action", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/vpc_interface.py", + "name": "plugins/action/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/acls.py", + "name": "plugins/action/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/udld.py", + "name": "plugins/action/feature.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/static_route.py", + "name": "plugins/action/vxlan_vtep_vni.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/lldp.py", + "name": "plugins/action/smu.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/l3_interfaces.py", + "name": "plugins/action/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/vrf_af.py", + "name": "plugins/action/evpn_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/vrrp.py", + "name": "plugins/action/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/ping.py", + "name": "plugins/action/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/ospf_interfaces.py", + "name": "plugins/action/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/lldp_interfaces.py", + "name": "plugins/action/snmp_contact.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/logging_global.py", + "name": "plugins/action/devicealias.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/vtp_domain.py", + "name": "plugins/action/ntp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/ntp_auth.py", + "name": "plugins/action/pim.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/prefix_lists.py", + "name": "plugins/action/acl.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/evpn_vni.py", + "name": "plugins/action/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/bgp_neighbor.py", + "name": "plugins/action/vrf_af.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/vrf_interface.py", + "name": "plugins/action/bfd_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/vlan.py", + "name": "plugins/action/bgp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/bfd_interfaces.py", + "name": "plugins/action/logging.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/bgp_neighbor_af.py", + "name": "plugins/action/igmp_snooping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/banner.py", + "name": "plugins/action/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { "name": "plugins/action/vrf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/rollback.py", + "name": "plugins/action/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/acl.py", + "name": "plugins/action/snapshot.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/aaa_server.py", + "name": "plugins/action/vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/facts.py", + "name": "plugins/action/ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/snmp_traps.py", + "name": "plugins/action/zone_zoneset.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/overlay_global.py", + "name": "plugins/action/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/vtp_password.py", + "name": "plugins/action/gir.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/lldp_global.py", + "name": "plugins/action/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/acl_interface.py", + "name": "plugins/action/system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "plugins/action/snmp_host.py", + "name": "plugins/action/vpc.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75b42907b60d3bdcdfb868b4d2b6af3e99b7a3339dcc59d36f5bfb07d4f24661", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": ".ansible-lint", + "name": "plugins/action/telemetry.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "test-requirements.txt", + "name": "plugins/action/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef11b7e31c53ed88a2352faacda33806dda00f45d4e9cce540a40e6a47ccbe73", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/bgp_af.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/sanity", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/ospf_vrf.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/sanity/ignore-2.9.txt", + "name": "plugins/action/aaa_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5aed10757064babb8aa6dafee78f2c9f9aac004c2188c70ea3c0f018db82cbae", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/sanity/ignore-2.13.txt", + "name": "plugins/action/linkagg.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/sanity/ignore-2.11.txt", + "name": "plugins/action/snmp_community.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dffc0e474e545fd47798cbc252ee5836ff87b5f4eb0c7dfed83e78c29101d622", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/sanity/ignore-2.10.txt", + "name": "plugins/action/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dffc0e474e545fd47798cbc252ee5836ff87b5f4eb0c7dfed83e78c29101d622", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/sanity/ignore-2.14.txt", + "name": "plugins/action/lldp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/sanity/ignore-2.17.txt", + "name": "plugins/action/snmp_location.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/sanity/ignore-2.16.txt", + "name": "plugins/action/snmp_host.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/sanity/ignore-2.12.txt", + "name": "plugins/action/overlay_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f183c744ea1c27c189e2d0da7a45ae3fb50f69e4c658e4aa55b023061181518", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/sanity/ignore-2.15.txt", + "name": "plugins/action/pim_rp_address.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/config.yml", + "name": "plugins/action/snmp_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "de5087316490411841c67aa3307cfdd3acaea09875c9b4dee6852bca7c120764", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/bgp_neighbor_af.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/requirements.txt", + "name": "plugins/action/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/__init__.py", + "name": "plugins/action/vtp_version.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/mock", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/hsrp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/mock/vault_helper.py", + "name": "plugins/action/bgp_neighbor.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/mock/__init__.py", + "name": "plugins/action/evpn_vni.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/mock/procenv.py", + "name": "plugins/action/igmp_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a1e05e3b412bb02d16ec786919f6395c813a4e10d73ca7ca4d0ffcf5066e6947", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/mock/loader.py", + "name": "plugins/action/vtp_domain.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/mock/yaml_helper.py", + "name": "plugins/action/file_copy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc4f4d5d2968ced8e3a04653354945d720e7c6369aad67ba7724c5981c82b6ea", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/mock/path.py", + "name": "plugins/action/vrrp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6daa1376aa9b171f37dbe2fed6cd37d7b4bacea09e4646953dbe77a7e65ee7c", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/install_os.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/__init__.py", + "name": "plugins/action/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/conftest.py", + "name": "plugins/action/rollback.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "354440d86f684a9641f329807a687fe71fc66ab901207f7a166ecfa648935488", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/utils.py", + "name": "plugins/action/rpm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a0cf9489868d4ed6f549bf4133f50fd4f594850a6458e6c07a913078355c1385", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/lacp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/action/vsan.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_evpn_vni.py", + "name": "plugins/action/ospf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a9dd476a29066efedb3611a768c18208a1cbaa9fb7b6664c1d3496e8b12033db", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_ospf_interfaces.py", + "name": "plugins/action/config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a849b007bba2a9b83e993c51bae94cc56679256b94c0602d0f4dcebb09c2dacc", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos.py", + "name": "plugins/action/hsrp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37e6224e4f77205d58782bae0080a5af3da05610062f7b378f38554ee7514de1", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_static_routes.py", + "name": "plugins/action/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8f6e383e73a654e461b447f8b5721c4d7ba491da63c1c9d6aa0ee4a25d402af0", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_lacp_interfaces.py", + "name": "plugins/action/nxapi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8205f7e7b9840ded74d3476e1ed972bdfa75125b45024ffc1725e057690f120", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_lldp_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "32d30a2580844412a612a3a35fc32bfa5c6f5231f841a16574cc125bc856e02d", - "format": 1 - }, - { - "name": "tests/unit/modules/network/nxos/test_nxos_hostname.py", + "name": "plugins/action/nxos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b7cc39cad57438bf866e079c7efe0a9e0bd05ad2cbc7e1fdc4dd6016f7d7736", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_vrf_af.py", + "name": "plugins/action/l3_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e420b96864806c431d47822e92410c0e12443ee856412e88037d83c7d8e7ec14", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_vpc_interface.py", + "name": "plugins/action/pim_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3abcf4a8badf2045283c90df190db8eb47d82df2be679b1318ac53ecb3cc42c7", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_feature.py", + "name": "plugins/action/vtp_password.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04347076b23abb7bbb9225d1793e9c6faacea6e990f45cd6a3b2d8b0b3355eba", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_evpn_global.py", + "name": "plugins/action/bfd_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08fa4dafb774bcb34b593281550fa175b775bfa4e5c61befe0238b1bf9687179", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_command.py", + "name": "plugins/action/vpc_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "339e1cb26b204a937d7ea377d020cf220ba8a7fb5cedcde9a6e5c20ff9d26087", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_hsrp.py", + "name": "plugins/action/command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "32da41a469c83575c4db2f6b208286f9cf33df071d5a67c76a324ae8a1cb4f3d", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_interfaces.py", + "name": "plugins/action/banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "decd7046f084f6472878cf81e7978691ad4cdca125dfebf5cc1ea7a8769a941d", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_vpc.py", + "name": "plugins/action/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d75391e6c222c6569a0aa77d2c7d531add9a16ea060e03f0f81a6352786ef0cc", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_bgp_global.py", + "name": "plugins/action/user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "726870e1bca5d80d7ffbc8f09e803e1444eafe633b8e2e32f1ef194666fb5200", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_ospfv3.py", + "name": "plugins/action/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e707825398974684fd4a51ba79bdb1b5a75eb4ba93ceccbbd063af538c4ed149", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_zone_zoneset.py", + "name": "plugins/action/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81675e55caa8a49026cd49db7ec69583a61553498db1b68b86596f491fa426d8", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_vrf.py", + "name": "plugins/action/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "897434515383d004c4de31606091235b2186d690bc28315959de42b1d11dc02e", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/__init__.py", + "name": "plugins/action/interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_bgp_neighbor_address_family.py", + "name": "plugins/action/ntp_options.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "843eafd7ab9575c2f407e91f663efb88fa44c736c6724fead0c94438bee6e76d", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_bgp_templates.py", + "name": "plugins/action/aaa_server_host.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52063ec8838ba2d979b0df01dcbd4e66204a33e553ddf2bff9fdb1efafbae8cc", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_ospfv2.py", + "name": "plugins/action/bgp_neighbor_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0edb9f7af075021504b7fa5c4ef73d7057c2edfe1aa4d3b773484e862555cf8", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_devicealias.py", + "name": "plugins/action/static_route.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61bdff16bffda8f4f31b03f02fd0047d1aac07af0898f9c60b41469b1e192622", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_nxapi.py", + "name": "plugins/action/vlan.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ba8a07fd21828a268fdb90aa0921cdfe7b487de827db4c746228be2cc016e8c", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/nxos_module.py", + "name": "plugins/action/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0d1a4eadc6d91ab91db07ea6ac3a5576e417f1339c1520079de065451b87fd3c", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_acl_interfaces.py", + "name": "plugins/action/vrf_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3682b5a6e62c35584ca486d95f112ad99c2551e3fb5913ee3509f4682397566", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_telemetry.py", + "name": "plugins/action/ntp_auth.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b3e8bf396743daed1d752588f7fadafcb1d9cc3cc562c2a40f36629f68b6f10", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_banner.py", + "name": "plugins/action/udld.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5e68392d403e4440a3e85556a968abce1e85ae58dfadf487bbd25f9c26c6095", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_prefix_lists.py", + "name": "plugins/action/acl_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9c1c9c9d867611ee162f172041539ee6af3f8825af52cd2888c1623ed012603", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_ping.py", + "name": "plugins/action/udld_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8eeed1361334dd9a92549debd17027fab40c293dbec6307cdc460b69cb448ee9", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_overlay_global.py", + "name": "plugins/action/interface_ospf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a59fd945009509ca8eec7fb78bc6000d692230ef505bcadf48e8b843904987af", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_vsan.py", + "name": "plugins/action/igmp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5912485637b9720e5f61c4364e65aa9c52fe1f5f3c9f06516bde908bd4d28f1c", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_system.py", + "name": "plugins/action/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bbd7e38463b30523fee2bda727e81518950dc70a423c0e8d4a26bfc96f3cf600", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_user.py", + "name": "plugins/action/l2_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8bdccd30ccc686e727cb486c80e3868097a43faeb27bc0d1b674acf77411c577", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_hsrp_interfaces.py", + "name": "plugins/action/snmp_traps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da3a8f5c346182514bae4d4447628462c9b3271f1e36b27dd4b1372d44d6c46c", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_route_maps.py", + "name": "plugins/action/gir_profile_management.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "007fc4813c28fa488eea78d446db221cba0d12b5bd80ef34160ee799acc85f70", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_ntp_global.py", + "name": "plugins/action/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "03208457ac4c50b9400c38c3ab8ee060254142d253743a71666b182f087ade8b", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_bfd_interfaces.py", + "name": "plugins/action/reboot.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dcb920f198f159f4c9c043913dcbb346ee07cc5c5524f747f064b09c5d25f1eb", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_vxlan_vtep_vni.py", + "name": "plugins/action/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bc31efebfb5c1f6c256006c77678efef031c5b1d289e8873460b998db795318c", + "chksum_sha256": "be7c78254555923b2a83bccadc6d71c48d5a84c1a67941ee3666222b163fc7a4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures", + "name": "plugins/doc_fragments", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/doc_fragments/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/show_interface_eth2_1", + "name": "plugins/doc_fragments/nxos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "de922c7abca31dbb4d597cc485a02b9affe0c85fbaf1d268b15d38d8fe6ba069", + "chksum_sha256": "75b71c234b0886b9a8c7cb54e9b1a2de2e433f8a19608a3ba45e67037c942943", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/show_ip_pim_interface_eth2_1", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "88ad9b709dae48e373fcf04c158d6714de1f94e808fa033204d3b7b4e48bf8bb", + "name": "plugins/filter", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/config.cfg", + "name": "plugins/filter/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25600ba56e8e7066889af660ff87eb22aec3ce587ad60c1a7eca25c627064a5c", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/__init__.py", + "name": "plugins/netconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/netconf/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/sh_run_interface_eth2_1_all", + "name": "plugins/netconf/nxos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "3dceb9254be3c61b493715b4d993f42ab9c088dd103eb6b59563832aec26c22e", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interface", + "name": "plugins/httpapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interface/show_running-config_aclmgr.txt", + "name": "plugins/httpapi/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "606d5b49ef095558924b32c6faa4e06f128f4655dddd57595e945cd33a4dbe72", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interface/__init__.py", + "name": "plugins/httpapi/nxos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "acfbda7df81189f8211a3d8af3d7e567bc719328e075531c154671cd97bd92be", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan", + "name": "plugins/inventory", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/config.cfg", + "name": "plugins/inventory/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4cd4cba4fba8bd0ceca02c0cea325b38c65d82a1b01633f59776902dfc00010c", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/__init__.py", + "name": ".flake8", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "f357bc604a44fe8a5912ec2b9067b734a88d1026da98d5993905d7b34ab44357", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/show_vlan_brief.txt", + "name": "pyproject.toml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c60b1775765492c72f6cf744aa56574aeea9b6c57ac19c974ebc73146cf4920a", + "chksum_sha256": "82a737e4c91699b90905fc2d347acaf5c3eb4567cc0750cf122c859d0eed78ed", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/agg_show_vlan_brief.txt", + "name": ".isort.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a6ad270b50167f7b13c3e7f40f83ebc812ceb7ef7d3455c0ce7b404ede9d6238", + "chksum_sha256": "3fc5fcc23727e7c5b9f1a7035303990229f796a171a84e21051dd1d242b90c52", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_interface", + "name": "meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_interface/__init__.py", + "name": "meta/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_interface/show_vpc_brief", + "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1901ac7c063992cfcebb4ba110637bc241aa0fb122959d9af40be8957b47bf54", + "chksum_sha256": "40c6ab1595d2252393db7e834d0de46f776beddd1bd701a49a29a9d7b1a7c876", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_interface/show_port-channel_summary", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bc24581fc9c635989ae2926270c03c4c85c642b768f6685cff7cfdcd924e70f6", + "name": "changelogs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry", + "name": "changelogs/fragments", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry/N9K_SGs.cfg", + "name": "changelogs/fragments/.keep", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af042e9ae8d0a2e6b6ddc28f13ce438e7b49050385ca546bdb5f1a1b51c1da1e", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry/__init__.py", + "name": "changelogs/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "54c802c2ade537e8b71ba45d10c73a422778a62aab0093bc6805c75ab8c7f448", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry/N9K.cfg", + "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d4c2bff81ce036402bf1bfc5a01191ead2507ea6deb7e7d4930ceb35965b1e5", + "chksum_sha256": "679e0f7cfe3b1161eb8979912c5997848b879a8b3fa353578f61d866b1b9490e", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".pre-commit-config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "395482dc9117c2fbc52da3a2d5b78a06f526834f5959ff6091229f4e2d0035b2", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n7k", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "CHANGELOG.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "138c9116b2e12a0f7804969ae129d2281aa64a30a36003593458731678e35da7", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n7k/__init__.py", + "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "70053744bf8f5b698f82ad59a6daec106188d9b63c6d1246f860f21ab8cb6ac5", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n7k/show_run_all", + "name": ".prettierignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0f487063d9698ed988f461a0f1d90be2406db893a1881d162720dd0587a0ddd9", + "chksum_sha256": "fe21cf5ca4606d16ccedb1bccc85ef06771ee697924ca50ecd8ca4c98acce5cc", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/__init__.py", + "name": "platform_guide.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "48467b2534cf719f3925b1b62e10a587eb68c1afbc19bf69d801dbec119a9277", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n3k", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".gitignore", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "179a6d0780422c32653a71b9395a3ecb8b3859346ffa3e38ca3c8d90f8063fd2", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n3k/__init__.py", + "name": "test-requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cf0a6736e79a79f5ea107f0b74c38957ece4a6e4b5c00b01d2c1ea679d876089", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n3k/show_run_all", + "name": ".ansible-lint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db42fd8881e10bf436a6712d228152f2ca6e627e0aa07531751009df2153fc3d", + "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_system", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "codecov.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_system/vrf_only", + "name": "tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_system/vrf_only/config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "78c6c60ac86950ccc102c733222dc40ca42ae78622fecbee3af27f61bb015adb", - "format": 1 - }, - { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_system/config.cfg", + "name": "tests/config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c65fd0fea85d4421908dcb50a8778a562d62c2723ccb10520cb9c62c57f32977", + "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_rp_address", + "name": "tests/sanity", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_rp_address/config.cfg", + "name": "tests/sanity/ignore-2.15.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "358b10ada00b4a323c671eaa193bc4c62bfa6e6600042382003a8efe5708bddf", + "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_rp_address/__init__.py", + "name": "tests/sanity/ignore-2.17.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/sanity/ignore-2.18.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/__init__.py", + "name": "tests/sanity/ignore-2.16.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_vlan", + "name": "tests/sanity/ignore-2.14.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "864e06b1e9befc20919e723ee5f9bcb2f51a88e524e8ce8e112ac9ec12bf38fc", + "chksum_sha256": "935199601f3c767ca623e1a8c6f73032f3cfee0536e4aed1cf5842b157956671", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_interface_ethernet_switchport", + "name": "tests/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b266354ff8d44bc8987e97565cba41afedb2fbe282c577c8d371516e84d01bc", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_interface_ethernet", + "name": "tests/.gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3eba930c712f346d62428fc829d411a3c7f3b32d00ac0b54bee3e25f5a239876", + "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp", + "name": "tests/unit", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp/config_32_bits_as.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "deed874c21f6472915657eed44c550ff438995b132d365fedb8b94deb510c856", + "name": "tests/unit/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp/config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f971230c61be923533c3ea1eb63e9938cdf701f3884d511105d551d7ee531554", + "name": "tests/unit/modules/network", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp/__init__.py", + "name": "tests/unit/modules/network/nxos", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/modules/network/nxos/test_nxos_acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5a7acd1fa7f58e389510c0b12262c3ccad13fdbfa263a052df7ced07b51ae4a0", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/__init__.py", + "name": "tests/unit/modules/network/nxos/test_nxos_snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "894022761947d303c8f275cdd907dd987a18b092589e069a7719332f9efc3180", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf_af", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_overlay_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84c43269ad7e4c30ec87b50598018aa176ecc5fa6a5cf83c04163549df700c11", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf_af/config.cfg", + "name": "tests/unit/modules/network/nxos/test_nxos_vrf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a11a202b4b688d09c6b7cb78a74d139f2b599c85973dd068b1ec18892926cbf4", + "chksum_sha256": "ce6b30fdf5ea958858abea77348d845b53c2430333dbd879d9d8dbcf3f438432", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf_af/__init__.py", + "name": "tests/unit/modules/network/nxos/test_nxos_bfd_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5c791a5a862edc717ae75ce62fcd53f8f2f2c629f267194482909a8350946457", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset", + "name": "tests/unit/modules/network/nxos/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_3.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3fee2a63052400d50f93de5abc0dfd7897a48269d71af99f53182139461c3bb0", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zone_vsan.out", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74aee6c5327fabe2de027ca0907e76be2628510e125976c8918575bbf09ea703", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_0.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_running-config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "010172dc57589c93d51b95aa50feecbda06ee706fd623422a088de23ccc9e723", + "chksum_sha256": "6b793f9fc0770084b8babcdd914c4c42b2d1d3256be53d0cba3a78c19a616dec", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_1.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_vlan", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "abb9d2504120327f0b55c36a6c130c9180a0f455ae397737ecfaaa4e6f891ef5", + "chksum_sha256": "6ac358cca25afd3bbc1aa11515f5e31ea9d548abdbcdf0563949e446d76f0c3c", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_0.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_vlan_no_facts", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cae1aca46b8d82f44a8f728182fafd1030040360725fb7367040392c1d52c018", + "chksum_sha256": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_1.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_running-config_no_facts", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "46c16cd03a600d15085abf2052ed33830fed61424a02004021ce4dd82f0086e2", + "chksum_sha256": "783b64a65f752ecfbf2ab084cb164df5d5a818d3dc9980856037a47853bcbfd8", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_2.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e109ddbe7ad8d251edbe3ebe5bf960c055ac9a1d3d5bc3865596bf0d65d83a5", + "chksum_sha256": "cea4ee76cbd062bd53302a5c1f37bc78584c8677950c99eb145c106a8852b278", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_1.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bcdd326b9710f2b1f56ac59ed3bdccaa6e853cfb24af1445743d3254ce458166", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_bug339.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6c45bdddc81417a51bdb8256cc024efef8d8cf432083297902ef8fcda9850703", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zoneset_active_vsan.out", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_run_all", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eef09bfcfaae85faa6c0b10f2ac4207c73947496c77783c7aa6bac45a9d02d3a", + "chksum_sha256": "f2a24625313932312f1d5e1c1d2c3935f99e5ab28880315c7dd39698df72daf8", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_2.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_default_interface", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08f7f3dc2d44ed61e7002bc417cea69f8407d7f4b0a62634c1f449f5338f7384", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_2.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_management_interface", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "171f743817a7ffe74398b6d78a0600ec0126dc2fe0890694a62eb6db89225a58", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zoneset_vsan.out", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_management", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc71e64aa30f5e4da11b419ac36c9b36cae8057bd8bef47b2da5bc293ebaaebb", + "chksum_sha256": "ca2359ed30a431281f356f0bb15f8bc2abb7169e21a6022034d8a4411fc413f6", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_0.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_ntc", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "13fa7bba46e2967e5c1bc2254620c4cd5337daab92a23d8aa6d6dec1ea7905ae", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zone_status_vsan.out", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42ca86dc445e87a4cba4d08cbd217173af42f60181eb44017d852837c17e9a47", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_4.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_default", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5005380753639cd3afd7e1b4ed90452d5d9492bb05c0852563009949e285db0e", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonesetactive_0.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_ntc_interface", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1836db8862dd990ea4008e3c10d16d7a5563561ac27a8f846f2d2bfee8d805f0", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_global", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_global/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "25600ba56e8e7066889af660ff87eb22aec3ce587ad60c1a7eca25c627064a5c", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_global/unconfigured.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84f47e5f6bde50931928544ec35970db216f2bffd80cff2d7b7350903d86a5c1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_global/configured.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/show_interface_eth2_1", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53ca3e78de8cd1b9ec6e040ece7bec23ea29663d1eebd1aed66a2980e832dc19", - "format": 1 - }, - { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep_vni", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "de922c7abca31dbb4d597cc485a02b9affe0c85fbaf1d268b15d38d8fe6ba069", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep_vni/config.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/sh_run_interface_eth2_1_all", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9676910539593a9a50989e688d7848de6074092a58e720ebbb437fa02859bd5f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep_vni/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_interface/show_ip_pim_interface_eth2_1", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "88ad9b709dae48e373fcf04c158d6714de1f94e808fa033204d3b7b4e48bf8bb", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_command", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_command/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_interface_loopback0", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_command/show_version.txt", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_interface_Ethernet2_1", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c45a343dc5192f50ef68b6bebee3da8cb980be9ec3cd5b75b00a20658fde6748", + "chksum_sha256": "de922c7abca31dbb4d597cc485a02b9affe0c85fbaf1d268b15d38d8fe6ba069", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_run_interface_Ethernet2_1", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6fda3eb0c249234e367f3e6d981a9957902f3443ff892ee35c3fbb87f8b2760b", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global/N7K.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_run_interface_loopback0", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "406c13868678145de8fa80ab6540d805084b62c191a928a466fd44e6e59ccd78", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global/N9K.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_interface", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9089fae22c9d5b25f815c43f8de1b95041c2fd012d721e29e009e47f64fa66ff", + "chksum_sha256": "3152065a242771a7e158ce7a8a6da2f5e62f0a35807389d62d0b927830d2ab04", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_interface", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/show_vrf_all", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a690233a51aeef35190bd4fd440a65fd819bc0153ea20b1b362c25392329e04c", - "format": 1 - }, - { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_inventory", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_interface/show_port-channel_summary", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d501010723eb3675a96a954862a0210ac023095947f8e09ea951e15faa96545", + "chksum_sha256": "bc24581fc9c635989ae2926270c03c4c85c642b768f6685cff7cfdcd924e70f6", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_interface/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_vpc_config", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f68fa10ece2a3162e69d8bc6ae207437f76b07a956782d6637214ae088346557", - "format": 1 - }, - { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_vpc", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc_interface/show_vpc_brief", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5e079e4fa7499d1ee8e1f0ef98ba4908b5abe9bb146f2d07909c5e139940ff7", + "chksum_sha256": "1901ac7c063992cfcebb4ba110637bc241aa0fb122959d9af40be8957b47bf54", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_vrf_all", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f9b34cc87b238b789fa2c54dd008597f37aa0a859cf06c25e5ce60aefdd0ed12", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_hardware", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cf21f74cb2df54e19dae270c2b973eea492c3d9925ad7a1b8b59ff9f0e575287", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/show_vpc", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl/show_ip_access-list.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4876569ce50a9bb5a00412d9e0e3bd17aed2d739613b28796c3224ae5397b705", + "chksum_sha256": "61de402089db40d19ac51c2e8a52894c45d9002156027c09ab17d0cc3fea635d", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/cliconf", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_system", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/cliconf/nxos", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_system/vrf_only", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/cliconf/nxos/show_version", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_system/vrf_only/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "12c7c1c28fcd05fced589995a39f0a1389d970f6199fadcbf95543da330feb22", + "chksum_sha256": "78c6c60ac86950ccc102c733222dc40ca42ae78622fecbee3af27f61bb015adb", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/cliconf/nxos/show_inventory", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_system/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb14576378ab0f2fd25d13dd4c4dbc31c3940d65ecb5f2fa29b39eba7e04d7ee", + "chksum_sha256": "c65fd0fea85d4421908dcb50a8778a562d62c2723ccb10520cb9c62c57f32977", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/cliconf/mds", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_feature", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/cliconf/mds/show_version", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_feature/show_feature.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "33cb951f7e55bfc24ba68026e55c250973d49113340d4c86ec5f52d2dfb32198", + "chksum_sha256": "d7be73f626f2d19d384bda2c214b58505da78232c84a1b5c971495510e950db8", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/cliconf/mds/show_inventory", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_feature/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e57d9cdf30356d92715fcd45fc9fc5e6fd0dc07298682343aef0f9c1c6231d5", - "format": 1 - }, - { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_feature", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { @@ -4894,3132 +4908,3083 @@ "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_feature/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_feature/show_feature.txt", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_overlay_global_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7be73f626f2d19d384bda2c214b58505da78232c84a1b5c971495510e950db8", + "chksum_sha256": "aeb566110f15e114259185610a7e1a17ba8a4a8380f590120292eceab885bccd", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf_af", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan/shvsanmem.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf_af/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91b604b4bdd22922dfbfb776dc40a760428806a2f845e8c9e76d42beef14bbb8", + "chksum_sha256": "a11a202b4b688d09c6b7cb78a74d139f2b599c85973dd068b1ec18892926cbf4", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan/shvsan.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf_af/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "63e5ef2ff7dfbb786b21f77d0e047b16a5af1477901433189032c59f0d2e4988", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_config", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_config/config.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global/N9K.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "03abdcaedc2f739a12fd1c31f37164f02ed471aff024ad8e654a0d7ec3e611e6", + "chksum_sha256": "9089fae22c9d5b25f815c43f8de1b95041c2fd012d721e29e009e47f64fa66ff", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_config/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_config/candidate.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_bfd_global/N7K.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3352c8002ead9454c96fa97e82bc2bf245ac57a69edbf8a934bed4ef809de3de", + "chksum_sha256": "406c13868678145de8fa80ab6540d805084b62c191a928a466fd44e6e59ccd78", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_command", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep/config.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_command/show_version.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cea4ee76cbd062bd53302a5c1f37bc78584c8677950c99eb145c106a8852b278", + "chksum_sha256": "c45a343dc5192f50ef68b6bebee3da8cb980be9ec3cd5b75b00a20658fde6748", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_command/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface", + "name": "tests/unit/modules/network/nxos/fixtures/cliconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_run_interface_Ethernet2_1", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6fda3eb0c249234e367f3e6d981a9957902f3443ff892ee35c3fbb87f8b2760b", + "name": "tests/unit/modules/network/nxos/fixtures/cliconf/nxos", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_run_interface_loopback0", + "name": "tests/unit/modules/network/nxos/fixtures/cliconf/nxos/show_version", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "12c7c1c28fcd05fced589995a39f0a1389d970f6199fadcbf95543da330feb22", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_interface_Ethernet2_1", + "name": "tests/unit/modules/network/nxos/fixtures/cliconf/nxos/show_inventory", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "de922c7abca31dbb4d597cc485a02b9affe0c85fbaf1d268b15d38d8fe6ba069", + "chksum_sha256": "cb14576378ab0f2fd25d13dd4c4dbc31c3940d65ecb5f2fa29b39eba7e04d7ee", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/cliconf/mds", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/modules/network/nxos/fixtures/cliconf/mds/show_version", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "33cb951f7e55bfc24ba68026e55c250973d49113340d4c86ec5f52d2dfb32198", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_interface", + "name": "tests/unit/modules/network/nxos/fixtures/cliconf/mds/show_inventory", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3152065a242771a7e158ce7a8a6da2f5e62f0a35807389d62d0b927830d2ab04", + "chksum_sha256": "6e57d9cdf30356d92715fcd45fc9fc5e6fd0dc07298682343aef0f9c1c6231d5", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface/show_interface_loopback0", + "name": "tests/unit/modules/network/nxos/fixtures/_nxos_ip_interface.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ce28d8e36e6ed0776c23f9d57050b68a3dd4cace82f8d3909de89bf98c2b3401", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface_ospf", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interface", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface_ospf/config.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interface/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5251c622e0f68d8c94e0215bd6a9f8c5d7ab755fc8879ceff8a9cac9b09caf9c", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface_ospf/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interface/show_running-config_aclmgr.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "606d5b49ef095558924b32c6faa4e06f128f4655dddd57595e945cd33a4dbe72", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_vni_config.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_static_route.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f12c0f2a38e284dde284dd4042cda86d71671289619456a3438a58f88ab929e7", + "chksum_sha256": "8787db2297394f70dfa9ea3550d604fcaef84c40d973c498b147d346422b8585", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep_vni", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_ntc", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep_vni/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9676910539593a9a50989e688d7848de6074092a58e720ebbb437fa02859bd5f", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_management_interface", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vxlan_vtep_vni/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_rp_address", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_management", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_rp_address/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca2359ed30a431281f356f0bb15f8bc2abb7169e21a6022034d8a4411fc413f6", + "chksum_sha256": "358b10ada00b4a323c671eaa193bc4c62bfa6e6600042382003a8efe5708bddf", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_default_interface", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim_rp_address/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_default", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_vni_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "f12c0f2a38e284dde284dd4042cda86d71671289619456a3438a58f88ab929e7", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_run_all", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f2a24625313932312f1d5e1c1d2c3935f99e5ab28880315c7dd39698df72daf8", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vrf/show_vrf_ntc_interface", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "f971230c61be923533c3ea1eb63e9938cdf701f3884d511105d551d7ee531554", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_static_route.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8787db2297394f70dfa9ea3550d604fcaef84c40d973c498b147d346422b8585", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/_nxos_ip_interface.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_bgp/config_32_bits_as.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce28d8e36e6ed0776c23f9d57050b68a3dd4cace82f8d3909de89bf98c2b3401", + "chksum_sha256": "deed874c21f6472915657eed44c550ff438995b132d365fedb8b94deb510c856", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdastatus_mansi.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut_multiple_ipv6", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b47fe27d3b8f630988803930db4eb009b8ef93e5f7838e4d3a49adf1859d43f5", + "chksum_sha256": "93f0654869c15b0670ae97f78615662b35f5f3aefccfb3c1e2e463ae3759a6d0", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdastatus.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5426bfb2d55edf2003ff250d0730cf4ea9ace4f44da02ce6664ed3bc77c7867d", + "chksum_sha256": "96a17611067db53f8bdee41ec48055b8ec808b2968d4f3dd784dfae1d6d85d4e", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdastatuslock.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut_ipv4_ipv6", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba24a69173bd06b6a025d176427b5619878da807c2a2b8a42aced27ac16d607c", + "chksum_sha256": "9b65b76df737c6da986a8850a5874d6f6733c26b8209c778d7d861ce0b5cb894", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdadatabse.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e912812c9084c8676a32afd1e2522f00bfd75d164fbb86113f01a88f164ebb8", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim/config.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_vpc_config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0c10e6761048c3f05f7143dc844703c76c41ed38e9f0175479874c183cef2ac", + "chksum_sha256": "f68fa10ece2a3162e69d8bc6ae207437f76b07a956782d6637214ae088346557", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/show_vrf_all", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "a690233a51aeef35190bd4fd440a65fd819bc0153ea20b1b362c25392329e04c", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_vpc", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d5e079e4fa7499d1ee8e1f0ef98ba4908b5abe9bb146f2d07909c5e139940ff7", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_vrf_all", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96a17611067db53f8bdee41ec48055b8ec808b2968d4f3dd784dfae1d6d85d4e", + "chksum_sha256": "f9b34cc87b238b789fa2c54dd008597f37aa0a859cf06c25e5ce60aefdd0ed12", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut_ipv4_ipv6", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/show_vpc", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b65b76df737c6da986a8850a5874d6f6733c26b8209c778d7d861ce0b5cb894", + "chksum_sha256": "4876569ce50a9bb5a00412d9e0e3bd17aed2d739613b28796c3224ae5397b705", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_l3_interface/ethernet_noshut_multiple_ipv6", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93f0654869c15b0670ae97f78615662b35f5f3aefccfb3c1e2e463ae3759a6d0", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_inventory", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3d501010723eb3675a96a954862a0210ac023095947f8e09ea951e15faa96545", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vpc/vrf_test_show_hardware", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cf21f74cb2df54e19dae270c2b973eea492c3d9925ad7a1b8b59ff9f0e575287", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_running-config", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6b793f9fc0770084b8babcdd914c4c42b2d1d3256be53d0cba3a78c19a616dec", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_running-config_no_facts", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_global/configured.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "783b64a65f752ecfbf2ab084cb164df5d5a818d3dc9980856037a47853bcbfd8", + "chksum_sha256": "53ca3e78de8cd1b9ec6e040ece7bec23ea29663d1eebd1aed66a2980e832dc19", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_vlan", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ac358cca25afd3bbc1aa11515f5e31ea9d548abdbcdf0563949e446d76f0c3c", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlans/show_vlan_no_facts", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_evpn_global/unconfigured.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356", + "chksum_sha256": "84f47e5f6bde50931928544ec35970db216f2bffd80cff2d7b7350903d86a5c1", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c0c10e6761048c3f05f7143dc844703c76c41ed38e9f0175479874c183cef2ac", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces/nxos_acl_interfaces.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_pim/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "764024b1837b2491a2e87e60ba305df48bc64541f6caf244fe4eea63653ee340", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n3k", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl/show_ip_access-list.txt", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n3k/show_run_all", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61de402089db40d19ac51c2e8a52894c45d9002156027c09ab17d0cc3fea635d", + "chksum_sha256": "db42fd8881e10bf436a6712d228152f2ca6e627e0aa07531751009df2153fc3d", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/fixtures/nxos_overlay_global_config.cfg", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n3k/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aeb566110f15e114259185610a7e1a17ba8a4a8380f590120292eceab885bccd", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_pim_interface.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c5937f68440ccc096dd950939c41e9dd41a824489a76043b332c1cf7be3e35f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_l3_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "92733ffae6656acc3fe5a549f92b8380cef8870e0cc1c8048dda5d10da856fbb", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n7k", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_vlans.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n7k/show_run_all", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5bbc41cc6074ab22083413658f1ff7b3e1880add6b03be2d0ef30dc2a85bf163", + "chksum_sha256": "0f487063d9698ed988f461a0f1d90be2406db893a1881d162720dd0587a0ddd9", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_pim.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_nxapi/n7k/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe1f59aa59b32a791b714b6ba94f5db95d63ecb36919a976fece5768c620de26", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_vxlan_vtep.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1fb26930f7397caf4e73360e986af9a6bdce38f9109603afa5688907b2a46719", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface_ospf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_acls.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface_ospf/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3a022041902a02465149c84cdd3bdee33f6d54a5d161a9e1a7aca79e49c43ba2", + "chksum_sha256": "5251c622e0f68d8c94e0215bd6a9f8c5d7ab755fc8879ceff8a9cac9b09caf9c", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_fc_interfaces.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_interface_ospf/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f50d2c6c59efc438903a2064d09bdd734468f6e001a1ca31a460268bcff5e8bf", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_config.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "31ba29ac58679593dc02bb181382bee8b76f4728eb007ba2291681b64dfb783e", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_logging_global.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry/N9K_SGs.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba671c099009dae25cf68d105fcada6f520d1c1becf042270df92a2b42e17218", + "chksum_sha256": "af042e9ae8d0a2e6b6ddc28f13ce438e7b49050385ca546bdb5f1a1b51c1da1e", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_pim_rp_address.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry/N9K.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e451350df730941297d3a8b19b3464a5dc0f1a6265e9528fff50165972eca894", + "chksum_sha256": "8d4c2bff81ce036402bf1bfc5a01191ead2507ea6deb7e7d4930ceb35965b1e5", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_bfd_global.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_telemetry/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6810dbdbe6eca1cb36fe8b377e9a51e7d4604a019db7ec3f1d7c44f8ad53bceb", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_snmp_server.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/modules/network/nxos/fixtures/nxos_config/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "762a88d4f3946c107d8dc3738799fefa5d6e1647531aedfc7ce27ab01122838b", + "chksum_sha256": "03abdcaedc2f739a12fd1c31f37164f02ed471aff024ad8e654a0d7ec3e611e6", "format": 1 }, { - "name": "tests/unit/modules/network/nxos/test_nxos_bgp_address_family.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_config/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7060edef96542abbf9e9eefd25477e5599dfb63c1e5360e6c8eeb9d3cda9bb6", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/unit/modules/network/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_config/candidate.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "3352c8002ead9454c96fa97e82bc2bf245ac57a69edbf8a934bed4ef809de3de", "format": 1 }, { - "name": "tests/unit/compat", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/compat/unittest.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_interface_ethernet", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81", + "chksum_sha256": "3eba930c712f346d62428fc829d411a3c7f3b32d00ac0b54bee3e25f5a239876", "format": 1 }, { - "name": "tests/unit/compat/__init__.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_interface_ethernet_switchport", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8b266354ff8d44bc8987e97565cba41afedb2fbe282c577c8d371516e84d01bc", "format": 1 }, { - "name": "tests/unit/compat/mock.py", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d000c79c38a69b736cdc65ac48952cbb7ec574ab2e3b13f81bb213b8381b8f8c", - "format": 1 - }, - { - "name": "tests/integration", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/network-integration.requirements.txt", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_switchport/show_vlan", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "234d0353684f5a41c84eabb03e13539abf602dc0de061a90e129618976b3c106", - "format": 1 - }, - { - "name": "tests/integration/targets", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_static_routes", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "864e06b1e9befc20919e723ee5f9bcb2f51a88e524e8ce8e112ac9ec12bf38fc", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tasks", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tasks/main.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_2.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40fe4fe85031868241ac9845115f925a1c7be1ad8c4f932f4896fdaad51da36c", + "chksum_sha256": "08f7f3dc2d44ed61e7002bc417cea69f8407d7f4b0a62634c1f449f5338f7384", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tasks/cli.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zoneset_vsan.out", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2eacf5012e1fb8a88bd7663844178dc5f6b617535d4bc2ddf0037ce474a33b1e", + "chksum_sha256": "fc71e64aa30f5e4da11b419ac36c9b36cae8057bd8bef47b2da5bc293ebaaebb", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zoneset_active_vsan.out", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eef09bfcfaae85faa6c0b10f2ac4207c73947496c77783c7aa6bac45a9d02d3a", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/meta/main.yml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_1.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "46c16cd03a600d15085abf2052ed33830fed61424a02004021ce4dd82f0086e2", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zone_vsan.out", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "74aee6c5327fabe2de027ca0907e76be2628510e125976c8918575bbf09ea703", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/defaults/main.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_0.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "cae1aca46b8d82f44a8f728182fafd1030040360725fb7367040392c1d52c018", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_2.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6e109ddbe7ad8d251edbe3ebe5bf960c055ac9a1d3d5bc3865596bf0d65d83a5", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_4.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5005380753639cd3afd7e1b4ed90452d5d9492bb05c0852563009949e285db0e", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests/common/_remove_config.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonesetactive_0.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "244c13d831c6419ec7e7a46e3e00e82fc1be5a476e5204561deae0efce659d93", + "chksum_sha256": "1836db8862dd990ea4008e3c10d16d7a5563561ac27a8f846f2d2bfee8d805f0", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests/common/parsed.yml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_0.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a2cd09da60d6b0bc0904e3f313e959fc3efbba7979d14309764e11aaefab96d", + "chksum_sha256": "010172dc57589c93d51b95aa50feecbda06ee706fd623422a088de23ccc9e723", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests/common/gathered.yml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f58a5e229e9cb4a2cd367d9bd3d36dfc7b8a03598bd35d77c19ea701e70b8976", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests/common/merged.yml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/show_zone_status_vsan.out", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d8a7a44814c334c50589139d3473b014a953fda361f2d88075fe1538f65a580e", + "chksum_sha256": "42ca86dc445e87a4cba4d08cbd217173af42f60181eb44017d852837c17e9a47", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests/common/replaced.yml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_2.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c23e4c252c1cd1583fd56550d8d702f0b09b867eb03c50886e83f3c24197690", + "chksum_sha256": "171f743817a7ffe74398b6d78a0600ec0126dc2fe0890694a62eb6db89225a58", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests/common/deleted.yml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_0.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10271b66076c4d1659a13c85ae4ba02c903ba2eb771ba8a2e31f0910c46de739", + "chksum_sha256": "13fa7bba46e2967e5c1bc2254620c4cd5337daab92a23d8aa6d6dec1ea7905ae", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests/common/rtt.yml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_1.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac26dd65c91afd1fd0e3734c2d3b9c361904f6af8fed0fbce8ee7746c96b64bf", + "chksum_sha256": "abb9d2504120327f0b55c36a6c130c9180a0f455ae397737ecfaaa4e6f891ef5", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests/common/overridden.yml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzonestatus_3.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff14829c4bb5758e9c2bcce36a6a134e5fd2d02af7586147e25ce45f5d3c6197", + "chksum_sha256": "3fee2a63052400d50f93de5abc0dfd7897a48269d71af99f53182139461c3bb0", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests/common/_populate_config.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzoneset_1.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d486bec06fd92b15f491fc77298d00447520a955e2dbf3d84a5a739d1a2703c2", + "chksum_sha256": "bcdd326b9710f2b1f56ac59ed3bdccaa6e853cfb24af1445743d3254ce458166", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/tests/common/rendered.yml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_zone_zoneset/shzone_bug339.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b9734f5468d080e059ad191471f78497c2ce42fa6d87de56f9f2e273bc0d8e28", + "chksum_sha256": "6c45bdddc81417a51bdb8256cc024efef8d8cf432083297902ef8fcda9850703", "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/vars", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_static_routes/vars/main.yml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces/nxos_acl_interfaces.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3eda3cf170b296ca5e5f4996c8b03c030d87a4e3e6197f7770e2b14e739e4ab3", + "chksum_sha256": "764024b1837b2491a2e87e60ba305df48bc64541f6caf244fe4eea63653ee340", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_interface", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/fixtures/nxos_acl_interfaces/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_interface/tasks", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_interface/tasks/nxapi.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdastatus_mansi.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "b47fe27d3b8f630988803930db4eb009b8ef93e5f7838e4d3a49adf1859d43f5", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_interface/tasks/main.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdastatus.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "5426bfb2d55edf2003ff250d0730cf4ea9ace4f44da02ce6664ed3bc77c7867d", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_interface/tasks/cli.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_interface/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdastatuslock.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ba24a69173bd06b6a025d176427b5619878da807c2a2b8a42aced27ac16d607c", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_interface/meta/main.yml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_devicealias/shdadatabse.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "2e912812c9084c8676a32afd1e2522f00bfd75d164fbb86113f01a88f164ebb8", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_interface/defaults", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_interface/defaults/main.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan/shvsan.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_pim_interface/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "63e5ef2ff7dfbb786b21f77d0e047b16a5af1477901433189032c59f0d2e4988", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_interface/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_interface/tests/common/sanity.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vsan/shvsanmem.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "acc020ce7729ff57e637de9f3cd1f3aae98af404b208386a852c6c804d0006fd", + "chksum_sha256": "91b604b4bdd22922dfbfb776dc40a760428806a2f845e8c9e76d42beef14bbb8", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/show_vlan_brief.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c60b1775765492c72f6cf744aa56574aeea9b6c57ac19c974ebc73146cf4920a", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/tasks/nxapi.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/agg_show_vlan_brief.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "a6ad270b50167f7b13c3e7f40f83ebc812ceb7ef7d3455c0ce7b404ede9d6238", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/tasks/main.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "4cd4cba4fba8bd0ceca02c0cea325b38c65d82a1b01633f59776902dfc00010c", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/tasks/cli.yaml", + "name": "tests/unit/modules/network/nxos/fixtures/nxos_vlan/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/tasks/platform", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_bgp_templates.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9ef2f97c111f9f0a6155a7353fde97cf4cbea592f715578a4df20893bad2e7ff", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/tasks/platform/n7k", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_ntp_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "21b73c3764e98cb997bfd28ed8b5ce52bd4b3fa3f499feab3802ca37e5de012f", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/tasks/platform/n7k/cleanup.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6fe5dccac28d950d4f93db2d5dd8d2d53f974b51a0c07a9371165a7fd9b20585", + "chksum_sha256": "fae6c56a4916171573a12ad3ab0071c82488062af9e6562078262a50c699b83f", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/tasks/platform/n7k/setup.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1f41e716a6ee3d52141e15b1cf8d8a62a6656066f9761e5438f18b03b64148ba", + "chksum_sha256": "d61028deb5268fdf63e8cfa7bcfa10f99738fb475e42f31911e3e264360eda34", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_nxapi.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c79a89af6839dbb8a41461dd0c68ff33e88b2d8ed3447f3b4fc7fd1be0419394", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/meta/main.yml", + "name": "tests/unit/modules/network/nxos/test_nxos_hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "0c65ec8fcd4ddd139ae9947a00ec54a04c2c4da5a5376b0d106d903c2f37a9a1", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_telemetry.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d5a38ca859e81c05061d9ee2f6cceefe3beccaa0587eb427a040be3c1e7e00f3", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/defaults/main.yaml", + "name": "tests/unit/modules/network/nxos/nxos_module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "0d1a4eadc6d91ab91db07ea6ac3a5576e417f1339c1520079de065451b87fd3c", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_feature.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "62fc7da4353d2dd07ee8ec9822b06cd244ef12c93c65a7e53b12b9f57105a7b2", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_vlans.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "320bd35df7abc52ebbb1a9cbb5286dcaed02a736d1051666fe5adcdf1a57a043", "format": 1 }, { - "name": "tests/integration/targets/nxos_overlay_global/tests/common/sanity.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_pim_interface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10d3d02705dac2e31ab7424914f1dc74d20c5cf799141c26ac2e47ec2c68e1b4", + "chksum_sha256": "caa9723150e6b388c6ac57ac58e581317fe3b31757c2da99e00b1695d362358a", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_vpc.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fd868cf29e78bcc57d8d983ff6fcd4bbfcd1d0e34c63ab99737878827ec83d7c", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_devicealias.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "213ce495ad35b863cf252fa9bf4362db85fa8f2ab2916dfa76da754661d37e4d", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community/tasks/nxapi.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "e983acf04cb96f85df2b16c5ad63601cb4b87de6e74f5003751d4090e5350ced", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community/tasks/main.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "4ac86722ca4d5b62b0d586b4df8c59a207c76932b7b0596003de9722359d7872", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community/tasks/cli.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_vxlan_vtep_vni.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "eb233dc0fead25086cf7310ea386b8e51b17bf00468ab2a1dbb08f44a1aa03b7", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_zone_zoneset.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f746132b73f02acee61de5e52f37e03ee6591a3410d6ec01948416009d36e441", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community/meta/main.yml", + "name": "tests/unit/modules/network/nxos/test_nxos_evpn_vni.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "71aa392dfc446e9f3fe0af4c32cba761151a0bae41be4831d6b560e332b2bea9", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_bgp_address_family.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b94c2ad86ce7c380e6080a791526f868016e43350612dfd321a92964c8f9a04a", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community/defaults/main.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "491dacb2d554279466c694b6c0266fcc0dc9be308b3bfe338cb1312ea0f2488c", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_hsrp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cd0ecfc4be320078a8b5b73873598f3311e9d5b5848092a1b24b41029dde5dff", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_vpc_interface.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d6e27d691e0dc50b4659403bb76593fef84cfa193d36933dd299a1e486525fe0", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_community/tests/common/sanity.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_hsrp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a31444a04409e8b5f9d58864e5405ec3ded7ec744e6e731b3ca0d22ec1a6ee0", + "chksum_sha256": "c9bd24f31dec735e5b7f5862c3e9cd48d692b6b528dcfa0114830aedcad227e5", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_ospfv3.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2759b15fdeec5305cbf7fb599142511bd89e5af0c772b3739c39c28880a49e1b", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tasks/nxapi.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_fc_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666", + "chksum_sha256": "320e6449e95a55c156623eaaeeb69f81a2c66c66ec1d8a5c06702040595ec95e", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tasks/main.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_pim_rp_address.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc2e669d7f6ccc6f6bd958fc52376105ef28a808ec084c11f2dfcecf1471760a", + "chksum_sha256": "aba5914ef5c9e367924aaafd1b555e2200d2f6c0aeaad5d5a2170880bd8f2cdf", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tasks/cli.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724", + "chksum_sha256": "8b284eb5232ddef43ad1619acb13d73a7c48f20d736372b212a4d7352bd1e420", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_bgp_neighbor_address_family.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f23808fbf9f008c689f4e1c02b7916bd261d6118037deb6fa58977cf805cee8f", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/meta/main.yml", + "name": "tests/unit/modules/network/nxos/test_nxos_prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "123c5209374533c41d593eba1f82b63089145ea660be4c913f197a43a434c342", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_ping.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3fd816ad49427c17166246df05ec36c188e3caead4e04285d11815d31daa9999", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/defaults/main.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "92d1ef64dfcf0ea45c5294814d45a84bebce3070c429a57bda7f8f428a82f44b", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_l3_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9dd8c9037bd8ec303989a242280805dd82718f3a12b91f8ea34d323c819137a8", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_bgp_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "df17a538471e85b869a2d0fb40789d01afdf232e7dd781977d34d1e062120268", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests/common/remove_config.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_vsan.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6b36b668815324ab75f641e80f9341c4f7b4f264585d07409b01704c5f8a018d", + "chksum_sha256": "8af4c5d2ddc4255350bdeea291e5661e3b5f07f5fd6cb755c9151cd8751394c5", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests/common/populate_config.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea179f0b4974165f1ad36daff838b34a663eb136543c6a908df7b8fe73027eaa", + "chksum_sha256": "2d93cfe3962b0a2c9ba309e973bf3db9087727c2459fa64f1c2fe0c4dfe61627", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests/common/parsed.yml", + "name": "tests/unit/modules/network/nxos/test_nxos_ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c6e2f1a0b9c9d9dc2c33b7906490f5acde968592b9257f095b4cfc38eee3dd9", + "chksum_sha256": "19c4359cb20e2df0f649d97f3207a5861ebcdc6a2430db3ff94019ba14a38c73", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests/common/gathered.yml", + "name": "tests/unit/modules/network/nxos/test_nxos_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c6126ef877c72fdb6e19f6499e4c3ac4219a5fb4cde44f4529306aac3fd7966", + "chksum_sha256": "d2a3122d72313abb8ad6da5ba19c9070e95def315019bcc16cbc8ff835428411", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests/common/merged.yml", + "name": "tests/unit/modules/network/nxos/test_nxos_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc2db360c49a4f960de158645c43115dec175da832363eeaba86a8ea97d1e62b", + "chksum_sha256": "1e084a512bff94fcf880a610ec5dd779c64ad7a3feea58bbc10e141e5eaf282c", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests/common/replaced.yml", + "name": "tests/unit/modules/network/nxos/test_nxos_system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b9ce3eb07fb30eb390fc555830b61b4118c485523bf85538a805feb06ea0fb0", + "chksum_sha256": "a7ea6f26526b9e4ead960a1c161b83de2581ca9d8a90d95925340e2fa8e17c8b", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests/common/deleted.yml", + "name": "tests/unit/modules/network/nxos/test_nxos_pim.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14f12dadd4d09d23feee07007209b1eae18bc9c013a50f79ed39ae022e652226", + "chksum_sha256": "7e108bcc18c5b82ce1cb4cd46d8996147683f30a2f18d2a9eab8367dddb07bb1", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests/common/rtt.yml", + "name": "tests/unit/modules/network/nxos/test_nxos_logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4912e31a951706d32e6682e65095ad1794df0cdedeeeec3d5e9ba139e14a0409", + "chksum_sha256": "569405484ee944ef07a45c205f8588b8a00e4b626f64ad52c2da5f13d1d599b3", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests/common/overridden.yml", + "name": "tests/unit/modules/network/nxos/test_nxos_bfd_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e261e0e1a8b1778739d5bb1c17c75a378186c5c2efd72a351d604e0d7560318", + "chksum_sha256": "642bb2c06d13b8c2354bd9e46c01bef3beccde28fdbe5efa8af16cef2dc2a21f", "format": 1 }, { - "name": "tests/integration/targets/nxos_acls/tests/common/rendered.yml", + "name": "tests/unit/modules/network/nxos/test_nxos_vrf_af.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa791c7d2f4a1989dd888e3880d230146cee3a448116cb224c31066a7f7573fe", + "chksum_sha256": "25bca3233974b76c3830c4d3b603c73dcb0032036a1752e0804c8cbc473a9973", "format": 1 }, { - "name": "tests/integration/targets/nxos_user", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_config.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f1acec58b3eaf968e8273380ab7d9170e37605cf1a1b5f66e08e568bf7d94e04", "format": 1 }, { - "name": "tests/integration/targets/nxos_user/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/nxos/test_nxos_acl_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6c9f9ef53093b66901ca6deaacd5cb8eeb43f20bf80782d5ce721a57290a7288", "format": 1 }, { - "name": "tests/integration/targets/nxos_user/tasks/nxapi.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "319d8c2d4417de66f5a808ab30acbe1e9edf6cbe6d9c3a26c78f891031d2a233", "format": 1 }, { - "name": "tests/integration/targets/nxos_user/tasks/main.yaml", + "name": "tests/unit/modules/network/nxos/test_nxos_evpn_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "7cb868c9311b9810788e13862c9b74c809e19a9f9b57ad9e46ff4124fef884dd", "format": 1 }, { - "name": "tests/integration/targets/nxos_user/tasks/cli.yaml", + "name": "tests/unit/modules/network/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/nxos_user/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_user/meta/main.yaml", + "name": "tests/unit/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_user/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/nxos_user/defaults/main.yaml", + "name": "tests/unit/modules/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "414c272e9a403bb6009460ec9502c5acfaa9c80b2159c742f6cb2e225938be3e", "format": 1 }, { - "name": "tests/integration/targets/nxos_user/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/conftest.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "354440d86f684a9641f329807a687fe71fc66ab901207f7a166ecfa648935488", "format": 1 }, { - "name": "tests/integration/targets/nxos_user/tests/common", + "name": "tests/unit/mock", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_user/tests/common/auth.yaml", + "name": "tests/unit/mock/loader.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db7a57ed2e804cae9aea360123df898848cc2e772fcab84d843aac01ca0b6b61", + "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b", "format": 1 }, { - "name": "tests/integration/targets/nxos_user/tests/common/sanity.yaml", + "name": "tests/unit/mock/path.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bd39b32f02401670bfda98c14839d0da9c76ae8446c151dc7f10131c9531ded6", + "chksum_sha256": "5561a16a302e55ea79227591afefc3a93f33001fc80155dd29b068b90502a446", "format": 1 }, { - "name": "tests/integration/targets/nxos_user/tests/common/basic.yaml", + "name": "tests/unit/mock/vault_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba9e801ff2ad1ae02085f83753b4f2e51565888a0fa5822ea0f671ee8a54229f", + "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir_profile_management", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/mock/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir_profile_management/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/mock/yaml_helper.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fc4f4d5d2968ced8e3a04653354945d720e7c6369aad67ba7724c5981c82b6ea", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir_profile_management/tasks/nxapi.yaml", + "name": "tests/unit/mock/procenv.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "3ff983479d7aa4b90efe73337f723c14224edabcdfde4efe49f24cd905f45f1a", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir_profile_management/tasks/main.yaml", + "name": "tests/unit/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir_profile_management/tasks/cli.yaml", + "name": "tests/unit/requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir_profile_management/meta", + "name": "tests/integration", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_gir_profile_management/meta/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_gir_profile_management/defaults", + "name": "tests/integration/labs", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_gir_profile_management/defaults/main.yaml", + "name": "tests/integration/labs/single.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "fe76aae4b59ac2c628191394f5cfce79e8564ecb72be6157e14f32c7e8a97093", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir_profile_management/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/network-integration.requirements.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "234d0353684f5a41c84eabb03e13539abf602dc0de061a90e129618976b3c106", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir_profile_management/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir_profile_management/tests/common/sanity.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d0237be40a79468b006b7bc99f59a3b8b9227b61b780adcd94fef59ea697e6fb", + "name": "tests/integration/targets", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp", + "name": "tests/integration/targets/nxos_vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp/tasks", + "name": "tests/integration/targets/nxos_vlans/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_vlans/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp/tasks/main.yaml", + "name": "tests/integration/targets/nxos_vlans/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_vlans/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp/meta", + "name": "tests/integration/targets/nxos_vlans/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp/meta/main.yml", + "name": "tests/integration/targets/nxos_vlans/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "9d00aff551522b3a0a61d5ba2b38944de36985bd3353dc67987d76d650ccbea3", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp/defaults", + "name": "tests/integration/targets/nxos_vlans/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp/defaults/main.yaml", + "name": "tests/integration/targets/nxos_vlans/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp/tests", + "name": "tests/integration/targets/nxos_vlans/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp/tests/common", + "name": "tests/integration/targets/nxos_vlans/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_vlans/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_vlans/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e73dcd5a6b36e1b9d5a9dccbe433f93ed19375686c161e0045ca92ccf2ca7053", + "chksum_sha256": "fd3723c027909807b1d6ef73222d5bfc96f98c680a9f86f3e89c0366bdd22116", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global", + "name": "tests/integration/targets/nxos_vlans/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tasks", + "name": "tests/integration/targets/nxos_vlans/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_vlans/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "fe16be9cd5316c7526ea489bad81d693f40c2f2351c01f60a4074802f208164e", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tasks/main.yaml", + "name": "tests/integration/targets/nxos_vlans/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e", + "chksum_sha256": "6f9623efb3904d185246e618c1cb0726553a5556941e5c2e91b7c9025de0e89c", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_vlans/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_ntp_global/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e2964f468cfe2c92dbee0504a71845636d76ff4e079dd07ad7f8656cba328221", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/meta/main.yml", + "name": "tests/integration/targets/nxos_vlans/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "1f1efb47f41f82d4be94cca66acf388791ed71b63f1f3897f769f7e4110f1be6", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_vlans/tests/common/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c70b2b7642402aeef4772a4a8cc7b7abde208bfedd65fbdcf95231b2ab5a74db", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/defaults/main.yaml", + "name": "tests/integration/targets/nxos_vlans/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "9d0b9b581e3e45b412907eecbc4ba5ad1632595e8cb58f397365287ce091bee0", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_vlans/tests/common/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "65b9276bee903c86af57ed5a6afee1d84461bf6c7bf3a3cf95aa8369e0c7df57", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_vlans/tests/common/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "87888ec93930b5630192fd9f60d931700a43910cfe6a3d092b04099ac88eb612", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_vlans/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a828ee760fb0dfc1ce2906e7498216901248da978df3b7a90ce842c1041a157", + "chksum_sha256": "69cfb989d7be0b980e8fc3eb9d33154c66e2cde5df1a9f8b17b1ea0894879212", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/deleted.yaml", + "name": "tests/integration/targets/nxos_vlans/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e4c2d740371ba62f8ce9a298147acad6ef15cb6b851a8ea32e7682934e5c4294", + "chksum_sha256": "5745013bf8f6e23f513cea1bb8878e4ca80ba61a331a5a5d2a7097673b786ed2", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_vlans/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "060aecc4cf5c2f2c7d5785001728b97f6913dd3900aa2dcb0c37436509d9d92e", + "chksum_sha256": "0fef283f3a139da74d869920dfc1b12b127b20e505c060d30b893d457ea980bc", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f836d5207479f29e09d0669ff7c58dd23bde729eda06dce4649cdc3e60be53a9", + "name": "tests/integration/targets/nxos_vxlan_vtep", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "159d739b15a17d8f62cbb4c9dfcd2fa3b7ede51f02fa6e9ac2bde196643b60fd", + "name": "tests/integration/targets/nxos_vxlan_vtep/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1581f91ffd8c1c23bb4676eab5c8b75109777725856083ae7e8f3f2e0993b3be", + "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08e70b7bf07e9f6621e1389be04c654a23a2f975aa49fc4aabc7ecb593bc5cfa", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/fixtures", + "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/fixtures/parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f7771e974db6ccc58fcb0a69ff17e00e208d57c09d96c7b8dfe8f5ecae8c879b", + "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform/n7k", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform/n7k/cleanup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6b602368f7b9b4aba2e9a3e88b73abf107d658eb335fe4ce1a4cd4c0dca3a4c6", + "chksum_sha256": "6fe5dccac28d950d4f93db2d5dd8d2d53f974b51a0c07a9371165a7fd9b20585", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform/n7k/setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9bcba4c729094da821fbbcce077fce21c817d1f560df1dc97ede6c6ff9cc4565", + "chksum_sha256": "b569f1de86c96331c196b935a58a716b5314f80ebd5b9130aeaa56f44c45f047", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb766ac5e824552d743eb36cfc738ad9abd7985d945bdea3d22a0d9130f839ca", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/vars", + "name": "tests/integration/targets/nxos_vxlan_vtep/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_global/vars/main.yml", + "name": "tests/integration/targets/nxos_vxlan_vtep/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c37457ec8af62c1519304e787a4e2ca6be4c156f8cf7bc2293106f38aaa2957", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_user", + "name": "tests/integration/targets/nxos_vxlan_vtep/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_user/tasks", + "name": "tests/integration/targets/nxos_vxlan_vtep/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_vxlan_vtep/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_user/tasks/nxapi.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_snmp_user/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_snmp_user/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_snmp_user/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_snmp_user/meta/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_snmp_user/defaults", + "name": "tests/integration/targets/nxos_vxlan_vtep/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_user/defaults/main.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_snmp_user/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_snmp_user/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "6f5876cdb7e7636f06c87e462e6002cd2694520079c83f7103450520ff14b3b9", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_user/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep/tests/common/multisite.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc18bce3cf7f8a257784f7d4e432ef00b535bfe73b057d661756f364bcc9d176", + "chksum_sha256": "6e9df57ea06843b691dc030437dd9190193ddb70664dd0254133417e3a8b5cdc", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp", + "name": "tests/integration/targets/nxos_vrf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp/tasks", + "name": "tests/integration/targets/nxos_vrf/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_vrf/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp/tasks/main.yaml", + "name": "tests/integration/targets/nxos_vrf/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_vrf/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp/meta", + "name": "tests/integration/targets/nxos_vrf/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp/meta/main.yml", + "name": "tests/integration/targets/nxos_vrf/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp/defaults", + "name": "tests/integration/targets/nxos_vrf/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp/defaults/main.yaml", + "name": "tests/integration/targets/nxos_vrf/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp/tests", + "name": "tests/integration/targets/nxos_vrf/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp/tests/common", + "name": "tests/integration/targets/nxos_vrf/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_vrf/tests/common/intent.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3f3aa30512b55460b5e6c82887f66d7642c56b86c7eabd5801148a945ce2ef4", + "chksum_sha256": "b49015c20a19ae1f270a3b5e69d370744549a23915fb03c23f6e84ad40f8ef74", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces", + "name": "tests/integration/targets/nxos_vrf/tests/common/sanity.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b8fb2d6249a8d9311ec67a31c87ad94a8184c7351dbf190d833bb1d7bafd4e7a", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_banner", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tasks", + "name": "tests/integration/targets/nxos_banner/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_banner/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/nxos_banner/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b", + "chksum_sha256": "c35d2ac52b14846e9fb2bba91ef7ba5f946b1cd2e47ed10c0b30941d6f9de766", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_banner/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/meta", + "name": "tests/integration/targets/nxos_banner/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/meta/main.yml", + "name": "tests/integration/targets/nxos_banner/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/defaults", + "name": "tests/integration/targets/nxos_banner/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/nxos_banner/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests", + "name": "tests/integration/targets/nxos_banner/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common", + "name": "tests/integration/targets/nxos_banner/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_banner/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3644170fb7b4322fa4d272cd5d5e351480018b485a065fa7131fb3f6f5e2f353", + "chksum_sha256": "dcccaebec31acf1f9adfe71c2e5067fcb6c1416a7c63b077490beedfff6078ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c58134a7c574f9d19d3012c238b2be0d4983d6d856a11e9f6ee089c3df5ec6b4", + "name": "tests/integration/targets/nxos_snmp_location", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6c1ffa21ffa7a57ae8edbb0a72820f4ec4e7947ba1ee5a1548473e81efec8724", + "name": "tests/integration/targets/nxos_snmp_location/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_snmp_location/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2a0ff901006be504934a514a2f337a699091eef58ab871fb32e426af1d6f6fa", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/rtt.yaml", + "name": "tests/integration/targets/nxos_snmp_location/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "148ed76eb41828c2417439c0b443097a6f2f9d1fa88a4abad48bd8e62de30c4e", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_snmp_location/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6d84fa1c22c5e2d37b017a18ed59903fab43314717b4d632a46200d745318c0", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "aeb7c65908e1aee314df87a9afe8c2f4dc1e1b21e41ca8a03f2991597dfd0685", + "name": "tests/integration/targets/nxos_snmp_location/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_snmp_location/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b9322c7dd05de65b972eb0bb02c699c4368fc68bb97dd155a05ed98dd304448f", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9e1b2b7044a678c22cccca3dcc5c677fccf40a509764b7ecf5c8dfeecf4781d8", + "name": "tests/integration/targets/nxos_snmp_location/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_snmp_location/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c30f97c6ae729fd7b3d88a3e7b6671c761ea07061ead87487979c013835b99c", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f018dcb8d9a42d8930b0d10f62ed931546d66f2998aa42ce95f655d299dbb35b", + "name": "tests/integration/targets/nxos_snmp_location/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/vars", + "name": "tests/integration/targets/nxos_snmp_location/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l2_interfaces/vars/main.yml", + "name": "tests/integration/targets/nxos_snmp_location/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80f38875da077b4094678a1b0d5fa1dbb55a586037c541d4daec3b3b8adca944", + "chksum_sha256": "3e00a1c43687d39e22e8835b039f398d7bdebbcc45399d8cd01d6ca7d4ef6e96", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface", + "name": "tests/integration/targets/nxos_pim_interface", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface/tasks", + "name": "tests/integration/targets/nxos_pim_interface/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_pim_interface/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface/tasks/main.yaml", + "name": "tests/integration/targets/nxos_pim_interface/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_pim_interface/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d37308cf2225418b5fab604f2b171a1aafbaa84be0c933a48ec0f153d7119ad", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface/meta", + "name": "tests/integration/targets/nxos_pim_interface/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface/meta/main.yml", + "name": "tests/integration/targets/nxos_pim_interface/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface/defaults", + "name": "tests/integration/targets/nxos_pim_interface/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface/defaults/main.yaml", + "name": "tests/integration/targets/nxos_pim_interface/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface/tests", + "name": "tests/integration/targets/nxos_pim_interface/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface/tests/common", + "name": "tests/integration/targets/nxos_pim_interface/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc_interface/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_pim_interface/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "03b61d6df7de21547cead303ca85a6e4139660eb2df5e5e2af81ddfefc206951", + "chksum_sha256": "acc020ce7729ff57e637de9f3cd1f3aae98af404b208386a852c6c804d0006fd", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options", + "name": "tests/integration/targets/nxos_ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options/tasks", + "name": "tests/integration/targets/nxos_ospf_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_ospf_interfaces/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options/tasks/main.yaml", + "name": "tests/integration/targets/nxos_ospf_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "e9eff3b2082e2a94e384711077fcb0a67b0410a72a0d7425367798c7fe1c4c75", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_ospf_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options/meta", + "name": "tests/integration/targets/nxos_ospf_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options/meta/main.yml", + "name": "tests/integration/targets/nxos_ospf_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options/defaults", + "name": "tests/integration/targets/nxos_ospf_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options/defaults/main.yaml", + "name": "tests/integration/targets/nxos_ospf_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options/tests", + "name": "tests/integration/targets/nxos_ospf_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospf_interfaces/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "254903ea468078a13337c27e4ffbfe0aad84710a36cdfeca8027eba5a16b48bf", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_options/tests/common/sanity.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "21d676594b169612943330f80f0fc7f0caafca537c991d9671fee07e9639a30d", + "name": "tests/integration/targets/nxos_ospf_interfaces/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp", + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp/tasks", + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "77f5af82eeb76922d66d564b1b3b713644b5154cd160ed32686613453f6ffb08", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp/tasks/main.yaml", + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "aa4d4d9ae4687f27e044a7c2ba6c6ffe31491031d9cfb724c69a54e4a1248b2e", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "6563a046c325a1872e9c20c3a80658c02bc684d828e1d8c0dbfbfb23ede1da1c", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3e19f34c70b0982c9c03cc96e3fcf57b88c084597eae9036b3e4c6bbd0860dc1", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp/meta/main.yml", + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "22709a3fdba9d6c94de7e53132bf6178989f0ea494f7779069913fc918ffa131", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_setup.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5153443ed073b0cc035110ac96d297361e22abe390c84014d0a7dbc83ede74e4", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp/defaults/main.yaml", + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "f4d88bbce44a9ca14508aebf3a495f3ced56b859aa74951b92922d613d0addbd", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b76239c8dec85299b177fa8a11a790932f64db53e155a64222321eff524af8b7", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "772abaa4b30e45bb3a3e0b168b9b50f62e75e5db9d1ee54915707631af8bc3a9", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrrp/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a7766c42cc22f1bb7cc7fa396978f2db1df0d1c744e3241f371f55912f3cd610", + "chksum_sha256": "b880b29ecb1b59489b0d82bfaf1ebecc35e47cc4ae7d860d616a0e1c4c17b8f6", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces", + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "df5bdd37b5f9ceac0c9cba9185dfd3c1c3d13d839447eca07daca2717b7261f0", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_populate_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "947100dd1e56c9ebd17cb32e1caa66f7c5a540d038dd36f4d0482271627ffa10", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bfd_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tasks", + "name": "tests/integration/targets/nxos_bfd_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e9eff3b2082e2a94e384711077fcb0a67b0410a72a0d7425367798c7fe1c4c75", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/meta", + "name": "tests/integration/targets/nxos_bfd_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/meta/main.yml", + "name": "tests/integration/targets/nxos_bfd_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/defaults", + "name": "tests/integration/targets/nxos_bfd_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests", + "name": "tests/integration/targets/nxos_bfd_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common", + "name": "tests/integration/targets/nxos_bfd_interfaces/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ab74ba6b07626a0723ca4ba193159ba14bc7011f11acd94ca9b5f13f817def19", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bfd_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b76239c8dec85299b177fa8a11a790932f64db53e155a64222321eff524af8b7", + "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/deleted.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e19f34c70b0982c9c03cc96e3fcf57b88c084597eae9036b3e4c6bbd0860dc1", + "chksum_sha256": "c7ce5887a89b7e2b67eb2b4bae794a1e0a77c77c2c98c1fbd123bca9ecbf78f3", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "772abaa4b30e45bb3a3e0b168b9b50f62e75e5db9d1ee54915707631af8bc3a9", + "chksum_sha256": "b7125a5bf2a88b3a35ff6aa0d06f3afd1474431c753306f1390613c7892f8217", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b880b29ecb1b59489b0d82bfaf1ebecc35e47cc4ae7d860d616a0e1c4c17b8f6", + "chksum_sha256": "1ef608de6174de4a28060255b4f85b5c00beb4bf2c8c4083a85d4132fe06341f", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6563a046c325a1872e9c20c3a80658c02bc684d828e1d8c0dbfbfb23ede1da1c", + "chksum_sha256": "57b05a37ab33678d00ceac9fa16256aa5ce862265fb330cf2045a6f06bd40331", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f4d88bbce44a9ca14508aebf3a495f3ced56b859aa74951b92922d613d0addbd", + "chksum_sha256": "903605fdce930f7ab623ddda18bc721d07632ae35cede2608f93d0178fffff86", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "947100dd1e56c9ebd17cb32e1caa66f7c5a540d038dd36f4d0482271627ffa10", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "35032ab6b2376156d9cc4386e0c3ae950aeea92146c89106e92963e5d9f30abd", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/fixtures/parsed.cfg", + "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "77f5af82eeb76922d66d564b1b3b713644b5154cd160ed32686613453f6ffb08", + "chksum_sha256": "e8b8f05c67f53717f791d5fa39768a09589083927c1b288181a9a2b28d3f19fd", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/_setup.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5153443ed073b0cc035110ac96d297361e22abe390c84014d0a7dbc83ede74e4", + "chksum_sha256": "a07b5658b8543fad6adbc03cc3dedf24b925d6c15ab96cba887e4057adde9af4", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "22709a3fdba9d6c94de7e53132bf6178989f0ea494f7779069913fc918ffa131", + "chksum_sha256": "879575bd8531da7b1f7752bc36e8b1d92d654dadebf3ac9e372c71ead2cd75d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa4d4d9ae4687f27e044a7c2ba6c6ffe31491031d9cfb724c69a54e4a1248b2e", + "chksum_sha256": "febb1078f232f6b64f4600db4e81e08b293f9c1b5959937b92458ea3228ac8ce", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/tests/common/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "df5bdd37b5f9ceac0c9cba9185dfd3c1c3d13d839447eca07daca2717b7261f0", + "name": "tests/integration/targets/nxos_install_os", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/vars", + "name": "tests/integration/targets/nxos_install_os/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospf_interfaces/vars/main.yml", + "name": "tests/integration/targets/nxos_install_os/tasks/httpapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "254903ea468078a13337c27e4ffbfe0aad84710a36cdfeca8027eba5a16b48bf", + "chksum_sha256": "1c9ccfa8d43479520eb4cffae188c452027a694dd86a02bd92d31b5843301ad5", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact", + "name": "tests/integration/targets/nxos_install_os/tasks/upgrade", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/install_os.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d774b3f202b5780184d96cdb5ac41b3db3540d09f575f0c8b0840a3509fd75bb", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/delete_files.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "f770f6c4e52488ddd7b0c1dd5c61ef6f7f2dfb329cbae4337e0845567fa3e113", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact/tasks/main.yaml", + "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/clear_persistent_sockets.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "2fcf3f5178da21851bf3cd61610f645b242d841bb553acc94fa88c003c8849e5", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/main_os_install.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "bc3281050236443452b55b83c4c3f32be752eb802c09c730e36e06ee7ef7ca31", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/install_with_kick.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bf39d3606053aeface47d66b776a0f8ed281c130cf0258ac09e8a0a759076df4", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact/meta/main.yml", + "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/enable_scp_server.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "2f94537521756c0171b570da8d8012aa47441ed01f2085c5e0c4ce1c80d6dbf3", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/copy_kick_system_images.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "71f8a18402f8b4c95d4bdcb1f4fc6542ce6b9671ea246c44fe9acac70bbd562d", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact/defaults/main.yaml", + "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/install_system.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "d7225266ebf0be4737420a6d63a5cd3c77d3b6cfde7bd0f1c7eded1ebfad70b7", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact/tests", + "name": "tests/integration/targets/nxos_install_os/tasks/network_cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "29b863033e05757e739075e995a668f9bcc014a0e214ac894ffa9af68bd781ce", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_install_os/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5a0047c8f02776d1bffe8d2ced68ea4c0f823708554f48419af32b1b7172a1a9", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_install_os/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact/tests/common", + "name": "tests/integration/targets/nxos_install_os/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "efb275d54a7c21fd007e1d1c8b10b65d148a9121af425a4e7fbd60abacd23fc8", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_install_os/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_contact/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_install_os/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21c997106ed806dbad5a3cdba01f5e201161020b6498a5d92ac003b702fa579a", + "chksum_sha256": "a79b77c93a1982c2682c177681bfcef5f3fb3421e3ef10be452fc81dc3ce8871", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry", + "name": "tests/integration/targets/nxos_install_os/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tasks", + "name": "tests/integration/targets/nxos_install_os/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n7k_helsinki.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "c023ec2f8677adcd41bd418bb5e35d3c82dc0636d9d41c45a2074b32891214be", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tasks/main.yaml", + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n5k_730_N11.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4fe8ec88364fed45512b5f8e5687038986edd9b03ab1962afa6476aed1ab2f5a", + "chksum_sha256": "744e3327618fd03cced8667aa2dee9cd691c358777ecb1dc741abf3c8dc18484", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n7k_atherton.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "f72c407c1bedf043f2a763f9db8de4c28cb40cd3f55a99180c0b54f46bc9910c", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n9k_greensboro.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7a09f37097e9dbedf717f83715339eb5397073ac3909bfd0cae6f874d3cd6342", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/meta/main.yml", + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u61a.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "147279cb89618d50352ab1e86d4e939a3f3e0594cf28aec862eb867e1bdfc307", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n9k_hamilton.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "669ba59d9d909f0d42d6e69ae0ef3e6e1d4c33995a4658761f0b2884113cc041", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/defaults/main.yaml", + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n35_greensboro.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "bf8414d8d1327c0db9056739e1b39b673abe37e939356efd1ef96ade985ccffc", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u63a.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c37931cb7c45570fe30f100fb278e26b7b94b7848d59ad8b6dbdda0670534452", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u62a.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9ee1eb9e5b4f1fea2c930c8a7c48eaf4708576b9af88c29f280f3dabcec163fb", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tests/common/deleted.yaml", + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n35_62a88.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d231b07bd5ab608ddebbdbbdbbcbed5e4648ac7ad05dfbbf1df4e2a21c063389", + "chksum_sha256": "c041886e29ede3a58d17f0e6d281d5dd458095369130bed0e617ffb200824743", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n5k_733_N11.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0f66a09ea372c1fa2c05027c0a2097da33a0912daf4355ff6cab34a77e057acd", + "chksum_sha256": "7efa46e2021391e0fc9114f1b132861cd3614b7ec0064425b46ed876c81ea0f1", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_greensboro.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b1ac88fec698b51b1f358987e65b5793cd9488ea085606963409a7b9d9b2b4cc", + "chksum_sha256": "f26347411b88b126bce20f80dca17f5726cc830996a1d8bd6119b73647bea681", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tests/common/fixtures", + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n9k_greensboro_force.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "13e87f23b456e285da0593775bfe2b876d167922ce61a4ba47a668cb0b0d82bb", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ee3909a9cbc7c9f42f3b146f122a61bdc2adada843b80ee111fe024dfa5c0d33", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_hsrp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tests/common/fixtures/new_server.crt", + "name": "tests/integration/targets/nxos_hsrp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_hsrp/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d761bf530e78d0752a7d9f05dfd5084e106245c7cecac49ca75c0c76ba495fc1", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tests/common/fixtures/local_server.crt", + "name": "tests/integration/targets/nxos_hsrp/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29437b8420b999138ca0947aef901533fd9affbc7ae98a39b13fb6bfa0ae29cd", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tests/common/fixtures/server.crt", + "name": "tests/integration/targets/nxos_hsrp/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9248b8354ba01bd1fecb1d24494a6098ee9547fa34a9d8840068abbb9a80fd92", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_hsrp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_hsrp/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "00736c9321f59eb87d3655075f655cf2244ba30caed17b3175c3f0171c94bd9f", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/vars", + "name": "tests/integration/targets/nxos_hsrp/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/vars/main.yaml", + "name": "tests/integration/targets/nxos_hsrp/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "90ee74a6d8158f5b1a5e92b16e0e044a5fae636e2742931b542355cb71ed2da4", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/templates", + "name": "tests/integration/targets/nxos_hsrp/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_telemetry/templates/populate_config.cfg", + "name": "tests/integration/targets/nxos_hsrp/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_hsrp/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "160c96e0f5f10f0cd536d1fcd93fad3b60a8eac159a64755ac8617a702f032b7", + "chksum_sha256": "a9c0076bb37472ad1bcf0815ed5845032be77683ffc6e967f2577c29cc28f8a8", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global", + "name": "tests/integration/targets/nxos_igmp_interface", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tasks", + "name": "tests/integration/targets/nxos_igmp_interface/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_igmp_interface/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tasks/main.yaml", + "name": "tests/integration/targets/nxos_igmp_interface/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05625917ea950a0b177ebb25c692ba215e247b2f17a15309a86430a5871f5672", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_igmp_interface/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/meta", + "name": "tests/integration/targets/nxos_igmp_interface/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/meta/main.yml", + "name": "tests/integration/targets/nxos_igmp_interface/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/defaults", + "name": "tests/integration/targets/nxos_igmp_interface/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/defaults/main.yaml", + "name": "tests/integration/targets/nxos_igmp_interface/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests", + "name": "tests/integration/targets/nxos_igmp_interface/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common", + "name": "tests/integration/targets/nxos_igmp_interface/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_igmp_interface/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5", + "chksum_sha256": "3f1f412736c7af33d14c2be45d461f6f96778bc221e6abdabdc579247c32d72d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bf494eb0d9629da4381465012ca762ab8ec270ac5b9270f7b2206f6e50eb2df6", + "name": "tests/integration/targets/nxos_vpc_interface", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d96baf5dc0a51ac1a75147a0591b62dd0d0429b6f48ed375f6e41e73d43a21ed", + "name": "tests/integration/targets/nxos_vpc_interface/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_vpc_interface/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b605ca79e5cc2cdb7f664f1aec94711594f2f485adfc760cbcea01b01e2b25f9", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/replaced_af.yaml", + "name": "tests/integration/targets/nxos_vpc_interface/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf31728c79fcf0b446ffd43fe431bc399513af80a6e363931a9f16fc611bf921", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_vpc_interface/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6dc32ce625064b12bbb4bf361b4b9a56df6792af52c16d6bcda508de05bea6f", + "chksum_sha256": "8d37308cf2225418b5fab604f2b171a1aafbaa84be0c933a48ec0f153d7119ad", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "35205173a9b4c2cdbf46f89706c24e10a7db1671892f25e7598957b6cd5424c2", + "name": "tests/integration/targets/nxos_vpc_interface/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_vpc_interface/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "acd7172ee28b6a88b6f7a8a95548988e2c6ed27804288daec18676481280cb08", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/fixtures", + "name": "tests/integration/targets/nxos_vpc_interface/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/fixtures/parsed.cfg", + "name": "tests/integration/targets/nxos_vpc_interface/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52efea9c016168ecd2fcd4012748fdd81f2753c77b4cd322e5628278cf36a227", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "73a38ab49a6c4f73b8e5d6b5ff301846e40a8d55b18fe61d0647b6c54cac5688", + "name": "tests/integration/targets/nxos_vpc_interface/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_vpc_interface/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_vpc_interface/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5ad0de011701b4094ceef2432d855f96f3441d92e71e69dcd959cb05e86ba9ef", + "chksum_sha256": "03b61d6df7de21547cead303ca85a6e4139660eb2df5e5e2af81ddfefc206951", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/purged.yaml", + "name": "tests/integration/targets/nxos_prefix_lists", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_prefix_lists/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_prefix_lists/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43b3e83056042eb41ac0a74dc11eca0c07bec178548807f56d79e5d211f75360", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff3eb25121425c6e970238566923eca969ba8f67f60e6fa8ef5c1516ca5757bd", + "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/tests/common/deleted_af.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef14541859231625e08fe2b53fbf4b8f6e64bcea02d4bb987038b915725abeab", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/vars", + "name": "tests/integration/targets/nxos_prefix_lists/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_global/vars/main.yml", + "name": "tests/integration/targets/nxos_prefix_lists/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5664e0d1a4c541d53f188ff988aafdf4f1802b97ff08c51fc128574ae38ce63b", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi", + "name": "tests/integration/targets/nxos_prefix_lists/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_nxapi/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7022927c86a437ced8d1f9058b25af83150ab1d87223183b1c61bbf4c0d6523f", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "name": "tests/integration/targets/nxos_prefix_lists/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "f869515b8a1ec55c8346c13f87eff1b4bef627722f02ba89f143fec41ea52254", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k", + "name": "tests/integration/targets/nxos_prefix_lists/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_https.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d826b7762b3ab39ad7d294ca171272d1ff3213c35f8040c3657228f259d331d5", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_https_http.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/.DS_Store", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97089a108cc1eac9afae028c6da9bf6f7017afcfc3f1a85776cfe6af31f2c6af", + "chksum_sha256": "af891bb95ebcc39dfd38131bf64fba6eb7bb8e84f59a428b6af5477588fbc6b6", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_http.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "35222b27a54a701db0042dd5fb6069d48d9e27a70821a1707a4aad0d19bc227f", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_https_http_ports.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/.DS_Store", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d5a7bc39789b15cf95dd49af7ab1636f3a4589a2be3ee5ca341dbb4414eb95b", + "chksum_sha256": "5b8c3589c79b71429938a827331899d13ac16c156374f8c45ec59068bd2d2060", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_https.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4f99598e0507cfb4e0e625a4075deabb91c5de5e1c0e5531846b9467a6faeaa9", + "chksum_sha256": "f7f1e53d17acf3059197aa476e1715028d571930c8cff8eabada2af3da2e7819", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_https_http.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "79ee713da7a48ad0b493f6e07690138be3eb4d04d890126aec488e2242e7a442", + "chksum_sha256": "53a49d08552e563da400b6c13475d9e2a020cc039eee9985b1c5a3e930fb3843", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_http.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed763ee2de2c730ea2783225dc132f5c28f22ea272213a36b9b3bb4471492e08", + "chksum_sha256": "b63842b6c47d71229bd8ad567bce61e119a9da6f44fb987d22a5348d9b67f1e7", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_https_http_ports.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3cef9d277e717f6956a9d5136862c72616d866eb04d8f8c0da44c0777739c92c", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "8c7dfc255e4fdc2e873e375b7b4a24b1098f63ebc6f80b18ddaf4bb4e62a9a46", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bfae052c7df36024a59df89f314dc7e03019ad1649f4132cb34bb2a8f50fe903", + "chksum_sha256": "7bf73d5bf1f98884b2c8dedfcdc762af1c6542276fc649a04bf360fe10400cff", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https_http.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b055af4a4779d412640cee585ef493e52c3937782e095218164d2719d5223d29", + "chksum_sha256": "56599df6259a9ed56f2794f1171dba7cd811995b228ee29610d679201d7094f0", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_http.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db4865169c3dc97c5ca5e24083550b243b685cfaeaaba16333b1f55754dd265a", + "chksum_sha256": "b94ddd8f6e3aef1be0b00d88c934c971a436d3595b760e10dd388b6dacfac7d3", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https_http_ports.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04e8b8ae8842f40c777282e979ea824c7c886f3e8ae1d9e2710ff466d1fc2ae0", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_nxapi/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "c10395ec2b03209c79681dd09690cb615195b8adaae1cdfa3fabc0fd68ef0565", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/meta/main.yml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "56b14e2fd373b2211c65f09454a4c39137bb1f1a06ad96f007e377d8b2b51851", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "742244e5eb090968dbbab6b3bce1d5d52404f476371439bf2404e4467534b488", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/defaults/main.yaml", + "name": "tests/integration/targets/nxos_prefix_lists/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "2233813d83a2cf367f99e9348cfb36ea295efcebe61d310a4580abbab8836d5c", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tests", + "name": "tests/integration/targets/prepare_nxos_tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tests/cli", + "name": "tests/integration/targets/prepare_nxos_tests/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tests/cli/nxapi_ssl.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dae84b45affca730b7c9158216bf18dc9ab9c92bbce4701b6ba881f192ae47f4", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_nxapi/tests/cli/enable.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "abdd34478d7db89533c9d3d8cc0fb2f26a5324ab85212086aa1fecc220e7d1c8", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_nxapi/tests/cli/configure.yaml", + "name": "tests/integration/targets/prepare_nxos_tests/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4853e02af108065809baebdb1f8e957bc48184f9a24e3510826d28f734d17a6", + "chksum_sha256": "8d49ed36175f83090c361ca918f66c751d9a55d3e57ed4097366dda3f04434ff", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tests/cli/disable.yaml", + "name": "tests/integration/targets/prepare_nxos_tests/tasks/prepare.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "94889efb465f8b55120a28becc23705cd11dc1bc9aebc91204105ba9f8207302", + "chksum_sha256": "6dc1745aa3d09766233e4522d935898ecfdf07caf0b7d2a3ab7e20e40bbdc4a5", "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tests/nxapi", + "name": "tests/integration/targets/prepare_nxos_tests/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_nxapi/tests/nxapi/badtransport.yaml", + "name": "tests/integration/targets/prepare_nxos_tests/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "28a2dfdf7ba13f8dd757c8d9095797a0b91437b5bfd9d9c1c8bfe65508e15901", + "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92", "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot", + "name": "tests/integration/targets/nxos_rollback", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot/tasks", + "name": "tests/integration/targets/nxos_rollback/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_rollback/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b93ca9bd41e9b2ddb1e47c5782c7104ad85b67441154a82ac8954fdaebc62cfc", + "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94", "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot/tasks/main.yaml", + "name": "tests/integration/targets/nxos_rollback/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0789afb380e4ee3da221b8e5904d1fc0309acaaf7afce7e63c9ba4c75c34ef57", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_rollback/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot/meta", + "name": "tests/integration/targets/nxos_rollback/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot/meta/main.yml", + "name": "tests/integration/targets/nxos_rollback/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot/defaults", + "name": "tests/integration/targets/nxos_rollback/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot/defaults/main.yaml", + "name": "tests/integration/targets/nxos_rollback/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot/tests", + "name": "tests/integration/targets/nxos_rollback/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot/tests/common", + "name": "tests/integration/targets/nxos_rollback/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_reboot/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_rollback/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4c67bb49d21e284b5a0589f01582abe664f16d3361279b26463e6db76fd2425", + "chksum_sha256": "394570f3e6f1edf503b6782dd89ffa589499a778fc5336c8c610b01d473a7bb8", "format": 1 }, { @@ -8093,1851 +8058,1431 @@ "format": 1 }, { - "name": "tests/integration/targets/nxos_system/tests/cli", + "name": "tests/integration/targets/nxos_system/tests/nxapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_system/tests/cli/set_domain_name.yaml", + "name": "tests/integration/targets/nxos_system/tests/nxapi/set_domain_name.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fa3289fe04fe5f8a8259ca69cee34e575e690589e3c4b5a1e8ade6a724c81246", + "chksum_sha256": "c3c9fe4f41326a05c53fb03a14ab15d9aca59b0cd5276ca5e28b7c7b7e24e1a5", "format": 1 }, { - "name": "tests/integration/targets/nxos_system/tests/cli/set_name_servers.yaml", + "name": "tests/integration/targets/nxos_system/tests/nxapi/set_domain_list.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "634ccd651c5a3aff45209b99a311b488422098e96df88ca31e1f1f6e5fcc0e2f", + "chksum_sha256": "4f58661081e4b16a1b96f55d176abaa163d8eeb2d530a96420da6d15de4bb0ac", "format": 1 }, { - "name": "tests/integration/targets/nxos_system/tests/cli/set_domain_list.yaml", + "name": "tests/integration/targets/nxos_system/tests/nxapi/set_name_servers.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "494d4bd1f0afc278a5422adec3684980a21807274f3887cc64743335104fc95f", + "chksum_sha256": "bbee414220275ff9a13a61bb40c3f4aa127cf63ebb07221abf01f8995b22b252", "format": 1 }, { - "name": "tests/integration/targets/nxos_system/tests/common", + "name": "tests/integration/targets/nxos_system/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_system/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_system/tests/cli/set_domain_name.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e76a24280e763ab2423dbd4062e39dd0c4b54131b361582bc4de92183c9fe32f", + "chksum_sha256": "fa3289fe04fe5f8a8259ca69cee34e575e690589e3c4b5a1e8ade6a724c81246", "format": 1 }, { - "name": "tests/integration/targets/nxos_system/tests/common/set_hostname.yaml", + "name": "tests/integration/targets/nxos_system/tests/cli/set_domain_list.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1f80d47b8482b052d64571ffd74d3e08219c8180e0bdfd38785cbdcb80b4dc01", + "chksum_sha256": "494d4bd1f0afc278a5422adec3684980a21807274f3887cc64743335104fc95f", "format": 1 }, { - "name": "tests/integration/targets/nxos_system/tests/nxapi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_system/tests/cli/set_name_servers.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "634ccd651c5a3aff45209b99a311b488422098e96df88ca31e1f1f6e5fcc0e2f", "format": 1 }, { - "name": "tests/integration/targets/nxos_system/tests/nxapi/set_domain_name.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c3c9fe4f41326a05c53fb03a14ab15d9aca59b0cd5276ca5e28b7c7b7e24e1a5", + "name": "tests/integration/targets/nxos_system/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_system/tests/nxapi/set_name_servers.yaml", + "name": "tests/integration/targets/nxos_system/tests/common/set_hostname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bbee414220275ff9a13a61bb40c3f4aa127cf63ebb07221abf01f8995b22b252", + "chksum_sha256": "1f80d47b8482b052d64571ffd74d3e08219c8180e0bdfd38785cbdcb80b4dc01", "format": 1 }, { - "name": "tests/integration/targets/nxos_system/tests/nxapi/set_domain_list.yaml", + "name": "tests/integration/targets/nxos_system/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4f58661081e4b16a1b96f55d176abaa163d8eeb2d530a96420da6d15de4bb0ac", + "chksum_sha256": "e76a24280e763ab2423dbd4062e39dd0c4b54131b361582bc4de92183c9fe32f", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces", + "name": "tests/integration/targets/nxos_feature", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tasks", + "name": "tests/integration/targets/nxos_feature/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_feature/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/nxos_feature/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64ca5b4de950cd0d788bdd92389f7741e663d949ee6b0e343f1038c573564b64", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_feature/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/meta", + "name": "tests/integration/targets/nxos_feature/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/meta/main.yml", + "name": "tests/integration/targets/nxos_feature/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/defaults", + "name": "tests/integration/targets/nxos_feature/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/nxos_feature/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests", + "name": "tests/integration/targets/nxos_feature/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common", + "name": "tests/integration/targets/nxos_feature/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_feature/tests/common/invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a639b04de3b8a2a70660b4034c291526f9e1f4bee9e24e4e543bd719a4f65a50", + "chksum_sha256": "9876fc00630984bf3f7c6a0ce6e7a75b67d4c2dc198fe91c2d4dcaef40fec816", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/deleted.yaml", + "name": "tests/integration/targets/nxos_feature/tests/common/configure.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d5ba532156bd9771e2ec35bb085d404ed049b88e1da827ab9eb6d4dd38a3c871", + "chksum_sha256": "89d6028b9ede5f5589b6786b029044d9cdf739f164d0a593ecacb564588acfe5", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3f875bd8877a898338a0402b34179ad17f45b84d1623c72741490f52913eb064", + "name": "tests/integration/targets/nxos_vrf_interface", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c5a2d4d2fa3245673307a06eb29fd3b751fad50fde2dac24f84aaff5498a5af7", + "name": "tests/integration/targets/nxos_vrf_interface/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/rtt.yaml", + "name": "tests/integration/targets/nxos_vrf_interface/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0eb7659a55ab72845d72bf76bcac9618bf84c8d5d55c6fa8f04ff9c15c68a92a", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_vrf_interface/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49898e976fb440f5b1ebc404e489b6e2511049c950c8c0d8fe75e251dc5c3671", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_vrf_interface/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "52f0f66116a7b07a9bfd39bcc2cdabc5a2db68ed24d92751f3f53f08332f0ed0", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/_populate_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "eb7918401f281cb2d25ccebc214ac1fd9ae10975f3ca4f77f56a53f3cc485a40", + "name": "tests/integration/targets/nxos_vrf_interface/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_vrf_interface/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8d1e0d8e50dd46dc84c73912990ffca760b0f5e1a8ad8ab2f10a90bce902369", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e26569250511575d31ea2338e2abede7fda11240bd583ac7896adccb24abd7f2", + "name": "tests/integration/targets/nxos_vrf_interface/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/purged.yaml", + "name": "tests/integration/targets/nxos_vrf_interface/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "832b01df3053b44b5e69f7b1e62fede8df0291af913f7b4abd1d4545439ef718", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/tests/common/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "454396b9f57fd4895a1d8063b565bde8a053291bc6f6e5f934397c75e99ac6cb", + "name": "tests/integration/targets/nxos_vrf_interface/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/vars", + "name": "tests/integration/targets/nxos_vrf_interface/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_interfaces/vars/main.yml", + "name": "tests/integration/targets/nxos_vrf_interface/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7aa68e2e8b3bb1d6b4258ed279670b1a8e5fc5e6a63b446eab511c3963db1c1", + "chksum_sha256": "7f97e455b1bd40d8c37f4c473ba8a86d18cb742022dface71269898bcf9d6594", "format": 1 }, { - "name": "tests/integration/targets/prepare_nxos_tests", + "name": "tests/integration/targets/nxos_bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_nxos_tests/tasks", + "name": "tests/integration/targets/nxos_bgp_address_family/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_nxos_tests/tasks/main.yml", + "name": "tests/integration/targets/nxos_bgp_address_family/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d49ed36175f83090c361ca918f66c751d9a55d3e57ed4097366dda3f04434ff", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/prepare_nxos_tests/tasks/prepare.yml", + "name": "tests/integration/targets/nxos_bgp_address_family/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6dc1745aa3d09766233e4522d935898ecfdf07caf0b7d2a3ab7e20e40bbdc4a5", - "format": 1 - }, - { - "name": "tests/integration/targets/prepare_nxos_tests/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "918e266fd84500fc8a9d7958437789683bd47b7875371afaf4941b60f4594bc7", "format": 1 }, { - "name": "tests/integration/targets/prepare_nxos_tests/meta/main.yaml", + "name": "tests/integration/targets/nxos_bgp_address_family/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_aaa_server_host", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server_host/tasks", + "name": "tests/integration/targets/nxos_bgp_address_family/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server_host/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_bgp_address_family/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server_host/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "name": "tests/integration/targets/nxos_bgp_address_family/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server_host/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_bgp_address_family/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server_host/meta", + "name": "tests/integration/targets/nxos_bgp_address_family/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server_host/meta/main.yml", + "name": "tests/integration/targets/nxos_bgp_address_family/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "528513c35a708d559281b5758e5c998565f110acf10803504b3cdbf2accf1988", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server_host/defaults", + "name": "tests/integration/targets/nxos_bgp_address_family/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server_host/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_aaa_server_host/tests", + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server_host/tests/common", + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server_host/tests/common/tacacs.yaml", + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b669c11c0bee9b899cb3075b446411bac7b4fd7c79396e5add683a2d5ab8b725", + "chksum_sha256": "f6189829f4b10872e4553b8c55db04c742cca9c7598d067ddb3eea05e0ab2f0d", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server_host/tests/common/radius.yaml", + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10dec61711d8e2e9660491a3ac36bda92ef57264b44ce2fafd5c0512b2ecfd13", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_udld_interface", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_udld_interface/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "29d4c709454554edeef9e3a0e394a93ff71200d5ae09e04d855d8edcedc24549", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld_interface/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "a6f21fe892ff7e532f40e0d7ecb6bba83f26bb1765ac4177b453d85f896dc633", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld_interface/tasks/main.yaml", + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "e76deb0ccd6d015af64ec4b54fc1da88ccf401b0aa373bda8d4cfabd23b9b1d9", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld_interface/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_udld_interface/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "0a2cbefd9d104a0f9e0370a13ed7e87feb1e74175d922f33d786e604e775a498", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld_interface/meta/main.yml", + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "ba2591fcb1bd54b023d7d45818463cb4d7efb6c7a918133129505ab24d3c9b7d", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld_interface/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld_interface/defaults/main.yaml", + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "0aefe84d03b67ec239027816ac3522c7b7cfabac56bd979c781c74cab4b01955", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld_interface/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fed0782bb5669d310ba18f8a49c51be3b1c8b16b0951f388e2280ed4a1769b50", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld_interface/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7121942f388ee7ab8d2484101d1a980b1d666be25f8388c6f00438f36a99736d", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld_interface/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3cd8d7eab5171ab6ad59ea7fd737a7de66bff01398491e83f7d3904da0c5e451", + "chksum_sha256": "4ad5b3d3c16b81ea4fcf40639099f5191577136f0cf3ff4970ed630d8248ec66", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address", + "name": "tests/integration/targets/nxos_lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address/tasks", + "name": "tests/integration/targets/nxos_lacp_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address/tasks/main.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address/meta", + "name": "tests/integration/targets/nxos_lacp_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address/meta/main.yml", + "name": "tests/integration/targets/nxos_lacp_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address/defaults", + "name": "tests/integration/targets/nxos_lacp_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address/defaults/main.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address/tests", + "name": "tests/integration/targets/nxos_lacp_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address/tests/common", + "name": "tests/integration/targets/nxos_lacp_interfaces/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "adb8824233c88430d3737a53e2cf1a939138f4f56b1aee31f730895793eb72b2", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_lacp_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim_rp_address/tests/common/configure.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5860ed215f27147987c62a8541f96530427cfadc64b6ce13e849a6785275c8ca", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain/tasks/nxapi.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain/meta/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_domain/tests/common/sanity.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d5ce98107789e4105c99fef3d305b6b7099cf14b564000fe960cc6861772e803", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/network_cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "29b863033e05757e739075e995a668f9bcc014a0e214ac894ffa9af68bd781ce", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5a0047c8f02776d1bffe8d2ced68ea4c0f823708554f48419af32b1b7172a1a9", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/upgrade", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/main_os_install.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bc3281050236443452b55b83c4c3f32be752eb802c09c730e36e06ee7ef7ca31", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/install_os.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d774b3f202b5780184d96cdb5ac41b3db3540d09f575f0c8b0840a3509fd75bb", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/copy_kick_system_images.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "71f8a18402f8b4c95d4bdcb1f4fc6542ce6b9671ea246c44fe9acac70bbd562d", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/enable_scp_server.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2f94537521756c0171b570da8d8012aa47441ed01f2085c5e0c4ce1c80d6dbf3", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/delete_files.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f770f6c4e52488ddd7b0c1dd5c61ef6f7f2dfb329cbae4337e0845567fa3e113", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/install_with_kick.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bf39d3606053aeface47d66b776a0f8ed281c130cf0258ac09e8a0a759076df4", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/install_system.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d7225266ebf0be4737420a6d63a5cd3c77d3b6cfde7bd0f1c7eded1ebfad70b7", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/upgrade/clear_persistent_sockets.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2fcf3f5178da21851bf3cd61610f645b242d841bb553acc94fa88c003c8849e5", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tasks/httpapi.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1c9ccfa8d43479520eb4cffae188c452027a694dd86a02bd92d31b5843301ad5", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/meta/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "efb275d54a7c21fd007e1d1c8b10b65d148a9121af425a4e7fbd60abacd23fc8", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a79b77c93a1982c2682c177681bfcef5f3fb3421e3ef10be452fc81dc3ce8871", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common", + "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_greensboro.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f26347411b88b126bce20f80dca17f5726cc830996a1d8bd6119b73647bea681", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n9k_greensboro.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7a09f37097e9dbedf717f83715339eb5397073ac3909bfd0cae6f874d3cd6342", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n7k_atherton.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f72c407c1bedf043f2a763f9db8de4c28cb40cd3f55a99180c0b54f46bc9910c", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n5k_730_N11.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "744e3327618fd03cced8667aa2dee9cd691c358777ecb1dc741abf3c8dc18484", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u63a.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c37931cb7c45570fe30f100fb278e26b7b94b7848d59ad8b6dbdda0670534452", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n9k_hamilton.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "669ba59d9d909f0d42d6e69ae0ef3e6e1d4c33995a4658761f0b2884113cc041", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n35_greensboro.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bf8414d8d1327c0db9056739e1b39b673abe37e939356efd1ef96ade985ccffc", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n9k_greensboro_force.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "13e87f23b456e285da0593775bfe2b876d167922ce61a4ba47a668cb0b0d82bb", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ee3909a9cbc7c9f42f3b146f122a61bdc2adada843b80ee111fe024dfa5c0d33", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n35_62a88.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c041886e29ede3a58d17f0e6d281d5dd458095369130bed0e617ffb200824743", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n7k_helsinki.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c023ec2f8677adcd41bd418bb5e35d3c82dc0636d9d41c45a2074b32891214be", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u61a.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "147279cb89618d50352ab1e86d4e939a3f3e0594cf28aec862eb867e1bdfc307", + "chksum_sha256": "3e5be532a772bae7c777ccff5a0bd7873f6d67fd9cfc19ee1148d34381a7e6a7", "format": 1 }, { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n3172_u62a.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ee1eb9e5b4f1fea2c930c8a7c48eaf4708576b9af88c29f280f3dabcec163fb", + "chksum_sha256": "7619a726b4e64d1bd47dadee8ec75a16d3b2bdc44b6d82d82bd56e38ada9c86b", "format": 1 }, { - "name": "tests/integration/targets/nxos_install_os/tests/common/upgrade_n5k_733_N11.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7efa46e2021391e0fc9114f1b132861cd3614b7ec0064425b46ed876c81ea0f1", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_aaa_server", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_aaa_server/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "62ca1f227ad278d7c4554e39d7368212b7004426b9c43bcc2bf1456f27e6ab98", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "7fba7cbbd3ce552b4dbe95b0929f2264f20fca017fd8d49dcbfcf704234fee03", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server/tasks/main.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "0f9f2f61c2ed959758be49bd3a688b41c8a536d857d83e57cded8dbf1b1a72b2", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_aaa_server/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "5ae69e8c5e516df2c81671c0360b711f53a426f7e2a4b1f7a24b422257f304a4", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server/meta/main.yml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_aaa_server/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "ea101ba2a00ebe731b075245fdac99f96d8536a8dbd4b1f3f41aa0bf3863713e", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server/defaults/main.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_aaa_server/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_aaa_server/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "c290a62babd394680c978ea09017b67507be0351b51e46c746a874320362e8ec", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server/tests/common/tacacs.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "309cf43dacad631085bfede9a52ee2e7bdb4763488463bfb96dde11184bbe0fc", + "chksum_sha256": "d3e63a62df68b89bd619c1bd5632735df0c735ed4fa2cd9201bd1ba31faf87e7", "format": 1 }, { - "name": "tests/integration/targets/nxos_aaa_server/tests/common/radius.yaml", + "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08fe50e81078371eff5d9482f9b7721eb6fd1288ccc88f11b8b42f94270df4ef", + "chksum_sha256": "d8f3f3ddd194db7f9b22519fac0e45a4c3529b3beaf85c2f15780daaa1cac4a0", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth", + "name": "tests/integration/targets/nxos_vrf_af", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth/tasks", + "name": "tests/integration/targets/nxos_vrf_af/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_vrf_af/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth/tasks/main.yaml", + "name": "tests/integration/targets/nxos_vrf_af/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_vrf_af/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "8d37308cf2225418b5fab604f2b171a1aafbaa84be0c933a48ec0f153d7119ad", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth/meta", + "name": "tests/integration/targets/nxos_vrf_af/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth/meta/main.yml", + "name": "tests/integration/targets/nxos_vrf_af/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth/defaults", + "name": "tests/integration/targets/nxos_vrf_af/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth/defaults/main.yaml", + "name": "tests/integration/targets/nxos_vrf_af/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth/tests", + "name": "tests/integration/targets/nxos_vrf_af/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth/tests/common", + "name": "tests/integration/targets/nxos_vrf_af/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ntp_auth/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_vrf_af/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e17189f259b91c17e7264d272ac181275b6b550180c1703b6c97e7dd4ed5b46", + "chksum_sha256": "df6d2b3a3d7a67ce3759464bf144b6a71d61afa348cfda6faea7707ab93acf21", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces", + "name": "tests/integration/targets/nxos_snmp_user", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tasks", + "name": "tests/integration/targets/nxos_snmp_user/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_snmp_user/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/nxos_snmp_user/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_snmp_user/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/meta", + "name": "tests/integration/targets/nxos_snmp_user/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/meta/main.yml", + "name": "tests/integration/targets/nxos_snmp_user/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/defaults", + "name": "tests/integration/targets/nxos_snmp_user/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/nxos_snmp_user/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests", + "name": "tests/integration/targets/nxos_snmp_user/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common", + "name": "tests/integration/targets/nxos_snmp_user/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5ae69e8c5e516df2c81671c0360b711f53a426f7e2a4b1f7a24b422257f304a4", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "62ca1f227ad278d7c4554e39d7368212b7004426b9c43bcc2bf1456f27e6ab98", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ea101ba2a00ebe731b075245fdac99f96d8536a8dbd4b1f3f41aa0bf3863713e", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c290a62babd394680c978ea09017b67507be0351b51e46c746a874320362e8ec", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_snmp_user/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7619a726b4e64d1bd47dadee8ec75a16d3b2bdc44b6d82d82bd56e38ada9c86b", + "chksum_sha256": "cc18bce3cf7f8a257784f7d4e432ef00b535bfe73b057d661756f364bcc9d176", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0f9f2f61c2ed959758be49bd3a688b41c8a536d857d83e57cded8dbf1b1a72b2", + "name": "tests/integration/targets/nxos_evpn_vni", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/_populate_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d8f3f3ddd194db7f9b22519fac0e45a4c3529b3beaf85c2f15780daaa1cac4a0", + "name": "tests/integration/targets/nxos_evpn_vni/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_evpn_vni/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fba7cbbd3ce552b4dbe95b0929f2264f20fca017fd8d49dcbfcf704234fee03", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_evpn_vni/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e5be532a772bae7c777ccff5a0bd7873f6d67fd9cfc19ee1148d34381a7e6a7", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_evpn_vni/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3e63a62df68b89bd619c1bd5632735df0c735ed4fa2cd9201bd1ba31faf87e7", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/vars", + "name": "tests/integration/targets/nxos_evpn_vni/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp_interfaces/vars/main.yml", + "name": "tests/integration/targets/nxos_evpn_vni/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adb8824233c88430d3737a53e2cf1a939138f4f56b1aee31f730895793eb72b2", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_lag_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tasks", + "name": "tests/integration/targets/nxos_evpn_vni/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tasks/nxapi.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_lag_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b9647339f89f9eeca01a09cd4f31da21e0c0c2f10793ea3ea06c24fd8664046e", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_lag_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_evpn_vni/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/meta", + "name": "tests/integration/targets/nxos_evpn_vni/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/meta/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_lag_interfaces/defaults", + "name": "tests/integration/targets/nxos_evpn_vni/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/nxos_evpn_vni/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "feb636a1cf337d091e427267dc9639d6fd2a5a481a9fd73cc830618990dc12af", "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tests", + "name": "tests/integration/targets/nxos_vtp_version", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tests/common", + "name": "tests/integration/targets/nxos_vtp_version/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d6daa4d3b2cb43c7b62b7606b80b4f212348ecb1e28a516d16ac90e02f459266", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4af7dc65128b02d59c3c12d5f94cfc4a77c266e867b79b172fc6425c871f9ffd", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_vtp_version/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e4441e52874693cf2caa332a4639c23ad59350a6eda4e9c5109a9792a306447", + "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94", "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_vtp_version/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96cae582141397682d092a6b5d6de9651b6203157e891342063c439ffb130a4d", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_vtp_version/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53c3cd45c91dd6078cf71ea7a9973d65069a61eaef47c49a51c7b66355970a63", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "96e1c7636b178b2ae705ac0d7dd2ea67a4d4c1aaf29122900549bde0da43b4de", + "name": "tests/integration/targets/nxos_vtp_version/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_vtp_version/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "76ea0558de38d30dd8813738f9d92fba9867c7d37fcb2a104acaaf5aeebb12af", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "08e830f9373a4a360949e7c56cf2c374dad94a559adbde314f3b66daa642a0c8", + "name": "tests/integration/targets/nxos_vtp_version/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_vtp_version/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c10b8ab6302c0df3b5d8c99d1f67a9d92b80b518250c11e650dde96bc8f6b886", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6eb88f454c810cee9cf1be9fc56eb6a574516fc49bddc50e81f329dc98cfb9eb", + "name": "tests/integration/targets/nxos_vtp_version/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/vars", + "name": "tests/integration/targets/nxos_vtp_version/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lag_interfaces/vars/main.yml", + "name": "tests/integration/targets/nxos_vtp_version/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05455a29f1db6e4d3602a83b356d9d7353037b1ef0627d2d2943b43520af76e6", + "chksum_sha256": "e33039720ba0e6ccc73fe5d38aaa4c2d1284afbb89058f6fe98c1a09d2a30638", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_af", + "name": "tests/integration/targets/nxos_ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_af/tasks", + "name": "tests/integration/targets/nxos_ospfv2/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_af/tasks/nxapi.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vrf_af/tasks/main.yaml", + "name": "tests/integration/targets/nxos_ospfv2/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_af/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_ospfv2/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d37308cf2225418b5fab604f2b171a1aafbaa84be0c933a48ec0f153d7119ad", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vrf_af/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "7826463ba77fb2f0f2bb32a0e02ce314ce3a06762e189598970cc26dd17828b1", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_af/meta/main.yml", + "name": "tests/integration/targets/nxos_ospfv2/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_af/defaults", + "name": "tests/integration/targets/nxos_ospfv2/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_af/defaults/main.yaml", + "name": "tests/integration/targets/nxos_ospfv2/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_af/tests", + "name": "tests/integration/targets/nxos_ospfv2/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_af/tests/common", + "name": "tests/integration/targets/nxos_ospfv2/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_ospfv2/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_af/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_ospfv2/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "df6d2b3a3d7a67ce3759464bf144b6a71d61afa348cfda6faea7707ab93acf21", + "chksum_sha256": "61311d9ddd2174a10efead34de8526412e4c4d438600cf5a3ff852ec8692c4f6", "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset", + "name": "tests/integration/targets/nxos_ospfv2/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/tasks", + "name": "tests/integration/targets/nxos_ospfv2/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f47853340600c1c9b76ed00695079b203ae45896e40acfac2f48e28f2ad98b40", + "name": "tests/integration/targets/nxos_ospfv2/tests/common/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_ospfv2/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "4ad11ae9e094b6bc2d4286b05967979551104857b314aa8af9afee18cdec2d4a", "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospfv2/tests/common/parsed.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b1738278980bd3d3426805bcd85053668078a6b992627d9119043bc29161ea8e", "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/meta/main.yml", + "name": "tests/integration/targets/nxos_ospfv2/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", + "chksum_sha256": "ddfff25fc88c57f108a7ed89d11d6df5c2233b27eac626512dc63709325fcf85", "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospfv2/tests/common/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "69ef5f767607840c90b3cb9b80ca6eae206df8ec8a48b850dc47adbcf4b11aa5", "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/defaults/main.yaml", + "name": "tests/integration/targets/nxos_ospfv2/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "7a00b8609854d6a88cc33f870793ec8972cd5d81ae8dcfed33fbbca19938ce69", "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospfv2/tests/common/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "de58bef72adb70191cc8d212367d3332359130dbaf399807962787d1df375915", "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospfv2/tests/common/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c5bb202379b75e7aaffb216dd2e42b234acf1ab4fc0679f470fc01c67b309b27", "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_ospfv2/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "781a480d71c224fb90d67eba3072492ff3f2d263df13ec8c735cabec41956751", + "chksum_sha256": "b8b689385d369d30980492e63bb16f13719d27452d738494899f85539130b2b5", "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospfv2/tests/common/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "77ed312700fb0471e6e108949f8b983d6c418f0187b84b569551ce3c8205ce0c", "format": 1 }, { - "name": "tests/integration/targets/nxos_zone_zoneset/vars/main.yml", + "name": "tests/integration/targets/nxos_ospfv2/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97b10ee26b05c01b328d79887c41479bd2bf559184fb1df4af53645db6e109ba", + "chksum_sha256": "0a3077084e8ed39aae3bc10055bbff711e7d40af65e514c7ecd99bffaad96bfc", "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy", + "name": "tests/integration/targets/nxos_bfd_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/tasks", + "name": "tests/integration/targets/nxos_bfd_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_bfd_global/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/tasks/main.yaml", + "name": "tests/integration/targets/nxos_bfd_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6bf1e5e97ebdee9d3da5227017b650cf6de337ae6ce68cee739acf39a32ec81", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_bfd_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/meta", + "name": "tests/integration/targets/nxos_bfd_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/meta/main.yml", + "name": "tests/integration/targets/nxos_bfd_global/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/defaults", + "name": "tests/integration/targets/nxos_bfd_global/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/defaults/main.yaml", + "name": "tests/integration/targets/nxos_bfd_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/tests", + "name": "tests/integration/targets/nxos_bfd_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/tests/cli", + "name": "tests/integration/targets/nxos_bfd_global/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/tests/cli/input_validation.yaml", + "name": "tests/integration/targets/nxos_bfd_global/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86642c6a7b15cbac85986a618de3eea6d741cb9819a4b7896570ab07e6033a8c", + "chksum_sha256": "302caab98adbe8644dc6652426b6e9300fc4d8fbc1a479ee7aeaf54d6a23da59", "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/tests/cli/negative.yaml", + "name": "tests/integration/targets/nxos_l2_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_l2_interfaces/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_l2_interfaces/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a918d9c6433c61aea340e1c0c94ef62d409893bfe7fd1858386da4422c5e208", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/tests/cli/sanity.yaml", + "name": "tests/integration/targets/nxos_l2_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "021893730c6fa627193f1b0189476630b88aef49449b7b7e2b0516acc288231d", + "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b", "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/tests/nxapi", + "name": "tests/integration/targets/nxos_l2_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_l2_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/tests/nxapi/badtransport.yaml", + "name": "tests/integration/targets/nxos_l2_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21427f41984508b9839c2f35a72d67fd2cf22fcd68d619118a5b5515d2268668", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/fixtures", + "name": "tests/integration/targets/nxos_l2_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_file_copy/fixtures/data.cfg", + "name": "tests/integration/targets/nxos_l2_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef43c9adc8aeec6910b4373ba0d9fbf28048ed53ec631ab9fd6fa8ad00a8a3a0", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global", + "name": "tests/integration/targets/nxos_l2_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global/tasks", + "name": "tests/integration/targets/nxos_l2_interfaces/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "80f38875da077b4094678a1b0d5fa1dbb55a586037c541d4daec3b3b8adca944", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_l2_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "3c30f97c6ae729fd7b3d88a3e7b6671c761ea07061ead87487979c013835b99c", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global/tasks/main.yaml", + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "b6d84fa1c22c5e2d37b017a18ed59903fab43314717b4d632a46200d745318c0", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "c58134a7c574f9d19d3012c238b2be0d4983d6d856a11e9f6ee089c3df5ec6b4", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9e1b2b7044a678c22cccca3dcc5c677fccf40a509764b7ecf5c8dfeecf4781d8", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global/meta/main.yml", + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "aeb7c65908e1aee314df87a9afe8c2f4dc1e1b21e41ca8a03f2991597dfd0685", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3644170fb7b4322fa4d272cd5d5e351480018b485a065fa7131fb3f6f5e2f353", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global/defaults/main.yaml", + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "148ed76eb41828c2417439c0b443097a6f2f9d1fa88a4abad48bd8e62de30c4e", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6c1ffa21ffa7a57ae8edbb0a72820f4ec4e7947ba1ee5a1548473e81efec8724", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a2a0ff901006be504934a514a2f337a699091eef58ab871fb32e426af1d6f6fa", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_global/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9190f2d0dae47c3b29ebe68f89ec9e3b88f0af56af489b15624cf99c86415d9f", + "chksum_sha256": "f018dcb8d9a42d8930b0d10f62ed931546d66f2998aa42ce95f655d299dbb35b", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni", + "name": "tests/integration/targets/nxos_l2_interfaces/tests/common/_populate_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b9322c7dd05de65b972eb0bb02c699c4368fc68bb97dd155a05ed98dd304448f", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_snapshot", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tasks", + "name": "tests/integration/targets/nxos_snapshot/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_snapshot/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6fa74ca9eef193774b0257522c64344fa2c8851398dc0acd94e161192cc0015d", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tasks/main.yaml", + "name": "tests/integration/targets/nxos_snapshot/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_snapshot/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/meta", + "name": "tests/integration/targets/nxos_snapshot/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/meta/main.yml", + "name": "tests/integration/targets/nxos_snapshot/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/defaults", + "name": "tests/integration/targets/nxos_snapshot/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/defaults/main.yaml", + "name": "tests/integration/targets/nxos_snapshot/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests", + "name": "tests/integration/targets/nxos_snapshot/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests/common", + "name": "tests/integration/targets/nxos_snapshot/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests/common/sanity.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "81ba6bdc57dba2f0adc0b293862db415cb6aea44ae3793cbb0c755ea01c073a9", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests/common/multisite.yaml", + "name": "tests/integration/targets/nxos_snapshot/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7127fe8481d55865ca7043a159fb4c4a6e02423899c7143bbb548aff0f3728e4", + "chksum_sha256": "171022870f501d3dcb8c73978ee34038cb5e65c32786bbabc9f638c9ae04be4d", "format": 1 }, { @@ -10011,66 +9556,66 @@ "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/cli", + "name": "tests/integration/targets/nxos_command/tests/nxapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/cli/contains.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ac46a36b0b073fcb691e33c0602443a2bef31fac538dd68d2c9d78edce98f1d4", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_command/tests/cli/sanity.yaml", + "name": "tests/integration/targets/nxos_command/tests/nxapi/contains.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41b22e35084ef1e82fe5fbe12cb7eec0591d256af60a6acdea4c26138a4b4b97", + "chksum_sha256": "5e366cc4b346ae49a4b6ffc53630caa1c99a8e85cd28c8adaf7b1bf4cdc0cf9c", "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/cli/cli_command.yaml", + "name": "tests/integration/targets/nxos_command/tests/nxapi/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8dc21d11e5f13aacc82d1a8872ad62b00551edff6284a36a02eea970b73a9d2", + "chksum_sha256": "54d18e3242c76aa88bc82a7a916bbdb6beff7ce3b5b70a651a821cf6c7942e79", "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/common", + "name": "tests/integration/targets/nxos_command/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/common/lessthan.yaml", + "name": "tests/integration/targets/nxos_command/tests/cli/contains.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb9067d3cfdd75f94ac2748f0742c1c61717a3798292cba7042c806fc0488fb3", + "chksum_sha256": "ac46a36b0b073fcb691e33c0602443a2bef31fac538dd68d2c9d78edce98f1d4", "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/common/invalid.yaml", + "name": "tests/integration/targets/nxos_command/tests/cli/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8d3206de3a49dfbf253bca6957a915f6fb10c3f0411f102de10841ff6094d90", + "chksum_sha256": "41b22e35084ef1e82fe5fbe12cb7eec0591d256af60a6acdea4c26138a4b4b97", "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/common/greaterthanorequal.yaml", + "name": "tests/integration/targets/nxos_command/tests/cli/cli_command.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6f816b5c0dcbe205f7d8e6f1a773d71276fcb9874a1c4b8a0d10e4804632301", + "chksum_sha256": "c8dc21d11e5f13aacc82d1a8872ad62b00551edff6284a36a02eea970b73a9d2", "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/common/equal.yaml", + "name": "tests/integration/targets/nxos_command/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_command/tests/common/output.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78ffc32b0c96adc09c9321e1d12fbb5c91908419e857e25e4a4ac7839cc0610c", + "chksum_sha256": "afc13fd26c10d41c29bd89f7b874d6c06a2636cbb434069506a9f30cb9da907a", "format": 1 }, { @@ -10081,38 +9626,38 @@ "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/common/lessthanorequal.yaml", + "name": "tests/integration/targets/nxos_command/tests/common/lessthan.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c90dcce9d2d647a50d1c9db4248293535b7d75352ecffd152e877ab13940787", + "chksum_sha256": "eb9067d3cfdd75f94ac2748f0742c1c61717a3798292cba7042c806fc0488fb3", "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/common/output.yaml", + "name": "tests/integration/targets/nxos_command/tests/common/equal.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "afc13fd26c10d41c29bd89f7b874d6c06a2636cbb434069506a9f30cb9da907a", + "chksum_sha256": "78ffc32b0c96adc09c9321e1d12fbb5c91908419e857e25e4a4ac7839cc0610c", "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/common/greaterthan.yaml", + "name": "tests/integration/targets/nxos_command/tests/common/greaterthanorequal.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3dde04a006eb5b001ed0f80589e92b4fdaa9a939dd4ae904cd63af915bd938f5", + "chksum_sha256": "d6f816b5c0dcbe205f7d8e6f1a773d71276fcb9874a1c4b8a0d10e4804632301", "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/common/timeout.yaml", + "name": "tests/integration/targets/nxos_command/tests/common/invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c859bb27d5fc01d07c00c6ce3125c74666663ccd7a9b08d9cf1a1b7385115f0e", + "chksum_sha256": "f8d3206de3a49dfbf253bca6957a915f6fb10c3f0411f102de10841ff6094d90", "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/common/notequal.yaml", + "name": "tests/integration/targets/nxos_command/tests/common/greaterthan.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b12ffe1eb63e9b2854d5c509145508207bb471df7e881218c014a7fab0f41bb5", + "chksum_sha256": "3dde04a006eb5b001ed0f80589e92b4fdaa9a939dd4ae904cd63af915bd938f5", "format": 1 }, { @@ -10123,6793 +9668,6856 @@ "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/nxapi", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_command/tests/common/timeout.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c859bb27d5fc01d07c00c6ce3125c74666663ccd7a9b08d9cf1a1b7385115f0e", "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/nxapi/contains.yaml", + "name": "tests/integration/targets/nxos_command/tests/common/lessthanorequal.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e366cc4b346ae49a4b6ffc53630caa1c99a8e85cd28c8adaf7b1bf4cdc0cf9c", + "chksum_sha256": "5c90dcce9d2d647a50d1c9db4248293535b7d75352ecffd152e877ab13940787", "format": 1 }, { - "name": "tests/integration/targets/nxos_command/tests/nxapi/sanity.yaml", + "name": "tests/integration/targets/nxos_command/tests/common/notequal.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54d18e3242c76aa88bc82a7a916bbdb6beff7ce3b5b70a651a821cf6c7942e79", + "chksum_sha256": "b12ffe1eb63e9b2854d5c509145508207bb471df7e881218c014a7fab0f41bb5", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global", + "name": "tests/integration/targets/nxos_vtp_domain", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tasks", + "name": "tests/integration/targets/nxos_vtp_domain/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_vtp_domain/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666", + "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tasks/main.yaml", + "name": "tests/integration/targets/nxos_vtp_domain/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_vtp_domain/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe84894e2a9ff992a755f52f856ff23c23dd249fb9fe14dc4f264cd1a6070e12", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/meta", + "name": "tests/integration/targets/nxos_vtp_domain/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/meta/main.yml", + "name": "tests/integration/targets/nxos_vtp_domain/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/defaults", + "name": "tests/integration/targets/nxos_vtp_domain/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/defaults/main.yaml", + "name": "tests/integration/targets/nxos_vtp_domain/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tests", + "name": "tests/integration/targets/nxos_vtp_domain/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tests/common", + "name": "tests/integration/targets/nxos_vtp_domain/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tests/common/parsed.yml", + "name": "tests/integration/targets/nxos_vtp_domain/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca1cd52e0c16bb7a97f9e1aa4eb9c49600b25854f35a93b0bcfeaf3ead1e7c07", + "chksum_sha256": "d5ce98107789e4105c99fef3d305b6b7099cf14b564000fe960cc6861772e803", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tests/common/_remove_config.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "339639545338297ee483c8e1370eeefc88356fceb240523dbbc6d8c237444982", + "name": "tests/integration/targets/nxos_udld_interface", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tests/common/gathered.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e5f9f21d8529dd8144e8259391a04642355d3f3c9063db5a27472a5180d6b7dd", + "name": "tests/integration/targets/nxos_udld_interface/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tests/common/merged.yml", + "name": "tests/integration/targets/nxos_udld_interface/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e82eb173fbdc3209c167bc096bf1665240e72b24a34f75c19ec1a3b7c5d4c8d1", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tests/common/replaced.yml", + "name": "tests/integration/targets/nxos_udld_interface/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a62a8ac1f40b48c56dbd06eb543897331236925608b859a758f1c91037f17455", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tests/common/deleted.yml", + "name": "tests/integration/targets/nxos_udld_interface/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ffe0021fbc8bd39a7990267dc791d78f2571f3285efd5fd1244c68159ffca98f", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tests/common/overridden.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8aeec5521c22e513a4e736c9b51461285abce953173508ae28fb02ecef95952a", + "name": "tests/integration/targets/nxos_udld_interface/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tests/common/_populate_config.yml", + "name": "tests/integration/targets/nxos_udld_interface/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7bacd3b7cb077dc6895ecf350711c1bf39e18739a361f6cf514e9dd4d6355f3", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/tests/common/rendered.yml", + "name": "tests/integration/targets/nxos_udld_interface/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_udld_interface/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18c1848ef28d20fffd52045955b5a54ca72aea45d5c2ff9060d8856aeeb7162a", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/vars", + "name": "tests/integration/targets/nxos_udld_interface/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_global/vars/main.yml", + "name": "tests/integration/targets/nxos_udld_interface/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_udld_interface/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac136582618b2844cd5bb84e0aaf52f6b4e7a6ea581a0fa0ec5466e9c9c3bd68", + "chksum_sha256": "3cd8d7eab5171ab6ad59ea7fd737a7de66bff01398491e83f7d3904da0c5e451", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global", + "name": "tests/integration/targets/nxos_aaa_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global/tasks", + "name": "tests/integration/targets/nxos_aaa_server/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_aaa_server/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global/tasks/main.yaml", + "name": "tests/integration/targets/nxos_aaa_server/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_aaa_server/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global/meta", + "name": "tests/integration/targets/nxos_aaa_server/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global/meta/main.yml", + "name": "tests/integration/targets/nxos_aaa_server/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global/defaults", + "name": "tests/integration/targets/nxos_aaa_server/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global/defaults/main.yaml", + "name": "tests/integration/targets/nxos_aaa_server/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global/tests", + "name": "tests/integration/targets/nxos_aaa_server/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global/tests/common", + "name": "tests/integration/targets/nxos_aaa_server/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_global/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_aaa_server/tests/common/tacacs.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "302caab98adbe8644dc6652426b6e9300fc4d8fbc1a479ee7aeaf54d6a23da59", + "chksum_sha256": "309cf43dacad631085bfede9a52ee2e7bdb4763488463bfb96dde11184bbe0fc", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global", + "name": "tests/integration/targets/nxos_aaa_server/tests/common/radius.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "08fe50e81078371eff5d9482f9b7721eb6fd1288ccc88f11b8b42f94270df4ef", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tasks", + "name": "tests/integration/targets/nxos_l3_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tasks/main.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e", + "chksum_sha256": "2418a2ada8700c06969324411c9be328b4d4ad913c6eb93fb824dff96900ff8f", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_l3_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_l3_interfaces/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/meta", + "name": "tests/integration/targets/nxos_l3_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/meta/main.yml", + "name": "tests/integration/targets/nxos_l3_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/defaults", + "name": "tests/integration/targets/nxos_l3_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/defaults/main.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "24e5a4f2e7330b185775678aa68b4645786e83617b90d5a32fb4ff4b77b345ad", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests", + "name": "tests/integration/targets/nxos_l3_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "619954ad3ae24e83760fb7b9f09daaf010f96020056398fe49a04001326f72c8", + "chksum_sha256": "5e2abf21e437435b96d94e3a1c900ac1284a39092f3b0b1d19e8d5d7544a8424", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/deleted.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "926b1b20a7babe989cc2f1b3e34a16d08368817d3ef38d6903650a294a42cc3a", + "chksum_sha256": "e7555ee3d0322003861d6c2d810ec490027b8d792e8800c7e9a46fab869b1c92", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c13b226487605fb6b6c73406c97a1972ed4c1995825124cb426d64eaac1a2ec", + "chksum_sha256": "1676a953c0e740cc280155ea76e6368fd5628556cdc0acae19e1834b40721681", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b1658713d71b118aec3c1e27ae2d2453c239d56b32e3c6d816f5187796b40c7c", + "chksum_sha256": "ef91b776e8c9627a55cc9759549aaa7482e0f7da4385079443b8e8f1d8d40b8c", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/multisite.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82ec13620a0c096e01a22d68b13c59798667ca68d3ddbbc1be802ff3f415a562", + "chksum_sha256": "b0b3ebe6d2d7db422ec1a046818ce06ddf83ef9f32a9178691d732b0824b4da1", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04822e2f3237fcae131842012a520b5fde51c1fd4b381ab86aa055d7c076f867", + "chksum_sha256": "c670083adeabaa18419eea52a2297aeea81b1a5635718b95aebf3d1955f78385", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd0584d7e6d6a3aa5942acda6002b2e13a2bd64d59ee04dc5122274268676cc8", + "chksum_sha256": "9dbc4efa7c9e6843b987aa6286ba0de836129c75b66249ab846fee2012fc2394", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d660e4e5717467104076599f04b44aca40bbe45b79eb5e5554cb1ff390feb405", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/fixtures/parsed.cfg", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3a97c562338de257e93908f409c770a5439d362fcddcdb8d939dc7ff2e7002c6", + "chksum_sha256": "4c8ea6a0bd93a5ae1092362c88b1eb6ed13a086968841b5d68654677741714dc", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dadff9821e586c3a062c7ac4b2936903359a8fc4b2f4cceeb466f558c82b52d1", + "chksum_sha256": "858bc39fea4f9cedff070a248b5119124852eeb9237388ef833c414510dbf24c", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d952ab3ac507f65ff98eb58e380db0abe1583198f653d77beaa4e384929ad698", + "chksum_sha256": "f274f91771b34f2246ee4fa58bae6acd7fafb0ea1f1efb04ffb362cfd1678de3", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4a5f8a10bd86d7609cb6688523bc611e052260c4a06bf9cf202f33eee40a1f5", + "chksum_sha256": "3a640fd87c6717d5876b64797f7d0092fd6673272fc5a674bde3cf5ed78e8b79", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/vars", + "name": "tests/integration/targets/nxos_overlay_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging_global/vars/main.yml", + "name": "tests/integration/targets/nxos_overlay_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_overlay_global/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "15f80d89c3629bea0c669753c52136268f11e94a83ba6e69411fc96ab8449457", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc", + "name": "tests/integration/targets/nxos_overlay_global/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_overlay_global/tasks/platform", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc/tasks", + "name": "tests/integration/targets/nxos_overlay_global/tasks/platform/n7k", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_overlay_global/tasks/platform/n7k/cleanup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "6fe5dccac28d950d4f93db2d5dd8d2d53f974b51a0c07a9371165a7fd9b20585", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc/tasks/main.yaml", + "name": "tests/integration/targets/nxos_overlay_global/tasks/platform/n7k/setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "1f41e716a6ee3d52141e15b1cf8d8a62a6656066f9761e5438f18b03b64148ba", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_overlay_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc/meta", + "name": "tests/integration/targets/nxos_overlay_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc/meta/main.yml", + "name": "tests/integration/targets/nxos_overlay_global/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc/defaults", + "name": "tests/integration/targets/nxos_overlay_global/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc/defaults/main.yaml", + "name": "tests/integration/targets/nxos_overlay_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc/tests", + "name": "tests/integration/targets/nxos_overlay_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc/tests/common", + "name": "tests/integration/targets/nxos_overlay_global/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vpc/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_overlay_global/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2df57c902caed23947093482590483584784db8850c51e6efe545b314895eaed", + "chksum_sha256": "10d3d02705dac2e31ab7424914f1dc74d20c5cf799141c26ac2e47ec2c68e1b4", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp", + "name": "tests/integration/targets/nxos_bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tasks", + "name": "tests/integration/targets/nxos_bgp_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tasks/main.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b", + "chksum_sha256": "05625917ea950a0b177ebb25c692ba215e247b2f17a15309a86430a5871f5672", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/meta", + "name": "tests/integration/targets/nxos_bgp_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/meta/main.yml", + "name": "tests/integration/targets/nxos_bgp_global/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/defaults", + "name": "tests/integration/targets/nxos_bgp_global/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/defaults/main.yaml", + "name": "tests/integration/targets/nxos_bgp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests", + "name": "tests/integration/targets/nxos_bgp_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests/common", + "name": "tests/integration/targets/nxos_bgp_global/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5664e0d1a4c541d53f188ff988aafdf4f1802b97ff08c51fc128574ae38ce63b", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_global/tests/common/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_global/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6c963e6f41c7e38e88e7f37dd8025ee75cd3970358d2568dc84a25bf0833c221", + "chksum_sha256": "52efea9c016168ecd2fcd4012748fdd81f2753c77b4cd322e5628278cf36a227", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests/common/deleted.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e8603749c8d553899ed39b13b3acd136e23d7bd3b09098fc55d615557712b8e", + "chksum_sha256": "5ad0de011701b4094ceef2432d855f96f3441d92e71e69dcd959cb05e86ba9ef", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc7919875ac197ca437f1f27d4ace434975e7b0ebc59f0b9e76779b7c13300bd", + "chksum_sha256": "35205173a9b4c2cdbf46f89706c24e10a7db1671892f25e7598957b6cd5424c2", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d05b5fe9f03352e3b8f7827b2dcf181df0e3c72fe956593e4da447c9d4f8869c", + "chksum_sha256": "bf494eb0d9629da4381465012ca762ab8ec270ac5b9270f7b2206f6e50eb2df6", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7f405af0ba053d9e613e791943bc8133e6dbf994db877e876b7dbfcfead68cb", + "chksum_sha256": "73a38ab49a6c4f73b8e5d6b5ff301846e40a8d55b18fe61d0647b6c54cac5688", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6245af2941f9a747ea7774bdad73686d4d453173680ea526ab20b52dba2f283", + "chksum_sha256": "e6dc32ce625064b12bbb4bf361b4b9a56df6792af52c16d6bcda508de05bea6f", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tests/common/deleted_af.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a10bac016859ecead883b3a70c3eb13f70718ad9cdd2796b92294bb73bbee29d", + "chksum_sha256": "ef14541859231625e08fe2b53fbf4b8f6e64bcea02d4bb987038b915725abeab", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "546c7e8f53d5167a0c5fb320ccd6b5e7db098829ce47de467b2e20856dd402c2", + "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e18104dcb23f633ded1a694fa4ecbf1df4e14a09620d260473341a8920698a", + "chksum_sha256": "d96baf5dc0a51ac1a75147a0591b62dd0d0429b6f48ed375f6e41e73d43a21ed", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_bgp_global/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b9a08d012138636068569151cf4f74205676ea00cc6fccdc2e2627447110156c", + "chksum_sha256": "b605ca79e5cc2cdb7f664f1aec94711594f2f485adfc760cbcea01b01e2b25f9", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_bgp_global/tests/common/replaced_af.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bf31728c79fcf0b446ffd43fe431bc399513af80a6e363931a9f16fc611bf921", "format": 1 }, { - "name": "tests/integration/targets/nxos_lacp/vars/main.yml", + "name": "tests/integration/targets/nxos_bgp_global/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d990ef6f460be1be57ee33ce95b7fd66d05175e93e1e2716cce708d420a5d466", + "chksum_sha256": "ff3eb25121425c6e970238566923eca969ba8f67f60e6fa8ef5c1516ca5757bd", "format": 1 }, { - "name": "tests/integration/targets/nxos_banner", + "name": "tests/integration/targets/nxos_bgp_global/tests/common/purged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "43b3e83056042eb41ac0a74dc11eca0c07bec178548807f56d79e5d211f75360", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_global/tests/common/_populate_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "acd7172ee28b6a88b6f7a8a95548988e2c6ed27804288daec18676481280cb08", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_file_copy", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_banner/tasks", + "name": "tests/integration/targets/nxos_file_copy/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_banner/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_file_copy/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_banner/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c35d2ac52b14846e9fb2bba91ef7ba5f946b1cd2e47ed10c0b30941d6f9de766", + "name": "tests/integration/targets/nxos_file_copy/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f6bf1e5e97ebdee9d3da5227017b650cf6de337ae6ce68cee739acf39a32ec81", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_file_copy/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_file_copy/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_banner/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_file_copy/fixtures/data.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "ef43c9adc8aeec6910b4373ba0d9fbf28048ed53ec631ab9fd6fa8ad00a8a3a0", "format": 1 }, { - "name": "tests/integration/targets/nxos_banner/meta", + "name": "tests/integration/targets/nxos_file_copy/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_banner/meta/main.yaml", + "name": "tests/integration/targets/nxos_file_copy/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_banner/defaults", + "name": "tests/integration/targets/nxos_file_copy/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_banner/defaults/main.yaml", + "name": "tests/integration/targets/nxos_file_copy/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_banner/tests", + "name": "tests/integration/targets/nxos_file_copy/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_banner/tests/common", + "name": "tests/integration/targets/nxos_file_copy/tests/nxapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_banner/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_file_copy/tests/nxapi/badtransport.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dcccaebec31acf1f9adfe71c2e5067fcb6c1416a7c63b077490beedfff6078ca", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_version", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "21427f41984508b9839c2f35a72d67fd2cf22fcd68d619118a5b5515d2268668", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_version/tasks", + "name": "tests/integration/targets/nxos_file_copy/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_version/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_file_copy/tests/cli/negative.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94", + "chksum_sha256": "0a918d9c6433c61aea340e1c0c94ef62d409893bfe7fd1858386da4422c5e208", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_version/tasks/main.yaml", + "name": "tests/integration/targets/nxos_file_copy/tests/cli/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "25a997ce10f97d08a348b04eb8e123dd4b6b7a6aaa035e5f2c45ef99f985f94c", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_version/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_file_copy/tests/cli/input_validation.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "86642c6a7b15cbac85986a618de3eea6d741cb9819a4b7896570ab07e6033a8c", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_version/meta", + "name": "tests/integration/targets/nxos_ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_version/meta/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_version/defaults", + "name": "tests/integration/targets/nxos_ospfv3/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_version/defaults/main.yaml", + "name": "tests/integration/targets/nxos_ospfv3/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vtp_version/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_version/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospfv3/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dd759468c5cc871fb7737ff3d8d736515fc4a391944ba48e311bd8e9cf4015bf", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_version/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_ospfv3/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e33039720ba0e6ccc73fe5d38aaa4c2d1284afbb89058f6fe98c1a09d2a30638", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts", + "name": "tests/integration/targets/nxos_ospfv3/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/tasks", + "name": "tests/integration/targets/nxos_ospfv3/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_ospfv3/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_ospfv3/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "name": "tests/integration/targets/nxos_ospfv3/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_ospfv3/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "a58f6902557b2603f0814004741aba525b7a0950e5a11aa66b37c4955c16f39e", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/meta", + "name": "tests/integration/targets/nxos_ospfv3/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/meta/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "name": "tests/integration/targets/nxos_ospfv3/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/defaults", + "name": "tests/integration/targets/nxos_ospfv3/tests/common/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/defaults/main.yaml", + "name": "tests/integration/targets/nxos_ospfv3/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "98780d78ffa7990bb331aa22eb22a241c513c360e240824d45a7bf1de5be2ecc", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospfv3/tests/common/parsed.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1668f415528b25d80c75d0b7d1429ad1f2998999e48a9c1103c194437b8d53c6", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospfv3/tests/common/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3351bbfbf0d6d47b6d974a6520e49d2c2e37fe82c909425bc2b35fbd2a1c3619", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/tests/common/not_hardware.yaml", + "name": "tests/integration/targets/nxos_ospfv3/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "933c388db57e0042a75290223a48d69efad1e524bce14f28f64694d34e3475e3", + "chksum_sha256": "dd6501583c6d35a54f84e67f7a3c089c3d327af513f2843227d760ec81b09f26", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/tests/common/default_facts.yaml", + "name": "tests/integration/targets/nxos_ospfv3/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08c3680a5a839d8e3b53515643f3773bb1d25de670124063d41ff3e0a7fd2713", + "chksum_sha256": "c47c9c8159c406510ed5c37a849752430af675f5f74b2dee2d4361c5a4647ada", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/tests/common/invalid_subset.yaml", + "name": "tests/integration/targets/nxos_ospfv3/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7ef14aa0d9ae451bba34e5fb2952f2034793f826a441cd042b03c34e0d78422", + "chksum_sha256": "d97a097d36258f90bedf8acd4609bba2c4840b38c56f3cd6517e9fc394600f61", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/tests/common/all_facts.yaml", + "name": "tests/integration/targets/nxos_ospfv3/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f737c75bd85a50361bfb755799335e3bf0044448e43308c6f4c3f9186a80b65f", + "chksum_sha256": "6e1cddebab71b07ac4b62257a57ee91bb813c2d2a627f21fd1ddc848c5c71242", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_ospfv3/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f15ccd5a6a25f5358288fb8ddb955a1b024c33c0d1f04df3811e03aabe460c32", + "chksum_sha256": "52b75fde8bd0aeae9fa656b94f228d66f550904e311166923cfbd6ad3504ec3b", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ospfv3/tests/common/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fbe1d547c87e7fce94633ac9d2659cf83c9f705225abd47e025752589adf5206", "format": 1 }, { - "name": "tests/integration/targets/nxos_facts/vars/main.yml", + "name": "tests/integration/targets/nxos_ospfv3/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "90b4146d19a8448ba711a28645cf964f8251d544bf1de77f552e08a1e60a9914", + "chksum_sha256": "fdb04181004019fce7d2aa47598c99683fa0c17efda91a40679e647ae1080926", "format": 1 }, { - "name": "tests/integration/targets/nxos_feature", + "name": "tests/integration/targets/nxos_ospfv3/tests/common/_populate_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cef0853f045225f3cfd3ac7b2362e20d12372005f8a175b973e60fa22c30e3b0", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_vxlan_vtep_vni", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/tasks", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "6fa74ca9eef193774b0257522c64344fa2c8851398dc0acd94e161192cc0015d", "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/tasks/main.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/meta", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/meta/main.yml", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/defaults", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/defaults/main.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/tests", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/tests/common", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/tests/common/invalid.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9876fc00630984bf3f7c6a0ce6e7a75b67d4c2dc198fe91c2d4dcaef40fec816", + "chksum_sha256": "81ba6bdc57dba2f0adc0b293862db415cb6aea44ae3793cbb0c755ea01c073a9", "format": 1 }, { - "name": "tests/integration/targets/nxos_feature/tests/common/configure.yaml", + "name": "tests/integration/targets/nxos_vxlan_vtep_vni/tests/common/multisite.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89d6028b9ede5f5589b6786b029044d9cdf739f164d0a593ecacb564588acfe5", + "chksum_sha256": "7127fe8481d55865ca7043a159fb4c4a6e02423899c7143bbb548aff0f3728e4", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni", + "name": "tests/integration/targets/nxos_pim_rp_address", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni/tasks", + "name": "tests/integration/targets/nxos_pim_rp_address/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_pim_rp_address/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni/tasks/main.yaml", + "name": "tests/integration/targets/nxos_pim_rp_address/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_pim_rp_address/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni/meta", + "name": "tests/integration/targets/nxos_pim_rp_address/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni/meta/main.yml", + "name": "tests/integration/targets/nxos_pim_rp_address/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni/defaults", + "name": "tests/integration/targets/nxos_pim_rp_address/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni/defaults/main.yaml", + "name": "tests/integration/targets/nxos_pim_rp_address/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni/tests", + "name": "tests/integration/targets/nxos_pim_rp_address/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni/tests/common", + "name": "tests/integration/targets/nxos_pim_rp_address/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_evpn_vni/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_pim_rp_address/tests/common/configure.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "feb636a1cf337d091e427267dc9639d6fd2a5a481a9fd73cc830618990dc12af", + "chksum_sha256": "5860ed215f27147987c62a8541f96530427cfadc64b6ce13e849a6785275c8ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2", + "name": "tests/integration/targets/nxos_rpm", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tasks", + "name": "tests/integration/targets/nxos_rpm/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_rpm/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tasks/main.yaml", + "name": "tests/integration/targets/nxos_rpm/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7826463ba77fb2f0f2bb32a0e02ce314ce3a06762e189598970cc26dd17828b1", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_rpm/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/meta", + "name": "tests/integration/targets/nxos_rpm/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/meta/main.yml", + "name": "tests/integration/targets/nxos_rpm/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/defaults", + "name": "tests/integration/targets/nxos_rpm/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/defaults/main.yaml", + "name": "tests/integration/targets/nxos_rpm/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests", + "name": "tests/integration/targets/nxos_rpm/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common", + "name": "tests/integration/targets/nxos_rpm/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_rpm/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5bb202379b75e7aaffb216dd2e42b234acf1ab4fc0679f470fc01c67b309b27", + "chksum_sha256": "70447866be2605ad11b7abd82e4ae0000992bbdb0d143e90b86c0b4905ba1d19", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "69ef5f767607840c90b3cb9b80ca6eae206df8ec8a48b850dc47adbcf4b11aa5", + "name": "tests/integration/targets/nxos_gir", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b8b689385d369d30980492e63bb16f13719d27452d738494899f85539130b2b5", + "name": "tests/integration/targets/nxos_gir/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_gir/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ddfff25fc88c57f108a7ed89d11d6df5c2233b27eac626512dc63709325fcf85", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_gir/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "de58bef72adb70191cc8d212367d3332359130dbaf399807962787d1df375915", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_gir/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a3077084e8ed39aae3bc10055bbff711e7d40af65e514c7ecd99bffaad96bfc", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common/fixtures", + "name": "tests/integration/targets/nxos_gir/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common/fixtures/parsed.cfg", + "name": "tests/integration/targets/nxos_gir/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ad11ae9e094b6bc2d4286b05967979551104857b314aa8af9afee18cdec2d4a", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7a00b8609854d6a88cc33f870793ec8972cd5d81ae8dcfed33fbbca19938ce69", + "name": "tests/integration/targets/nxos_gir/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_gir/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b1738278980bd3d3426805bcd85053668078a6b992627d9119043bc29161ea8e", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/tests/common/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "77ed312700fb0471e6e108949f8b983d6c418f0187b84b569551ce3c8205ce0c", + "name": "tests/integration/targets/nxos_gir/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/vars", + "name": "tests/integration/targets/nxos_gir/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv2/vars/main.yml", + "name": "tests/integration/targets/nxos_gir/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61311d9ddd2174a10efead34de8526412e4c4d438600cf5a3ff852ec8692c4f6", + "chksum_sha256": "13582ac62b7614778bc62c5a6f93a36a920e8664812b73a2b0903af35c2fe1da", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3", + "name": "tests/integration/targets/nxos_igmp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tasks", + "name": "tests/integration/targets/nxos_igmp/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_igmp/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tasks/main.yaml", + "name": "tests/integration/targets/nxos_igmp/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd759468c5cc871fb7737ff3d8d736515fc4a391944ba48e311bd8e9cf4015bf", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_igmp/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/meta", + "name": "tests/integration/targets/nxos_igmp/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/meta/main.yml", + "name": "tests/integration/targets/nxos_igmp/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/defaults", + "name": "tests/integration/targets/nxos_igmp/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/defaults/main.yaml", + "name": "tests/integration/targets/nxos_igmp/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests", + "name": "tests/integration/targets/nxos_igmp/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests/common", + "name": "tests/integration/targets/nxos_igmp/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6e1cddebab71b07ac4b62257a57ee91bb813c2d2a627f21fd1ddc848c5c71242", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/deleted.yaml", + "name": "tests/integration/targets/nxos_igmp/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd6501583c6d35a54f84e67f7a3c089c3d327af513f2843227d760ec81b09f26", + "chksum_sha256": "e3f3aa30512b55460b5e6c82887f66d7642c56b86c7eabd5801148a945ce2ef4", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "52b75fde8bd0aeae9fa656b94f228d66f550904e311166923cfbd6ad3504ec3b", + "name": "tests/integration/targets/nxos_ntp_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fbe1d547c87e7fce94633ac9d2659cf83c9f705225abd47e025752589adf5206", + "name": "tests/integration/targets/nxos_ntp_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_ntp_global/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3351bbfbf0d6d47b6d974a6520e49d2c2e37fe82c909425bc2b35fbd2a1c3619", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_ntp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d97a097d36258f90bedf8acd4609bba2c4840b38c56f3cd6517e9fc394600f61", + "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_ntp_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cef0853f045225f3cfd3ac7b2362e20d12372005f8a175b973e60fa22c30e3b0", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/fixtures", + "name": "tests/integration/targets/nxos_ntp_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/fixtures/parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "98780d78ffa7990bb331aa22eb22a241c513c360e240824d45a7bf1de5be2ecc", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_ntp_global/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c47c9c8159c406510ed5c37a849752430af675f5f74b2dee2d4361c5a4647ada", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1668f415528b25d80c75d0b7d1429ad1f2998999e48a9c1103c194437b8d53c6", + "name": "tests/integration/targets/nxos_ntp_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_ntp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fdb04181004019fce7d2aa47598c99683fa0c17efda91a40679e647ae1080926", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/vars", + "name": "tests/integration/targets/nxos_ntp_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_ospfv3/vars/main.yml", + "name": "tests/integration/targets/nxos_ntp_global/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a58f6902557b2603f0814004741aba525b7a0950e5a11aa66b37c4955c16f39e", + "chksum_sha256": "2c37457ec8af62c1519304e787a4e2ca6be4c156f8cf7bc2293106f38aaa2957", "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm", + "name": "tests/integration/targets/nxos_ntp_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm/tasks", + "name": "tests/integration/targets/nxos_ntp_global/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_ntp_global/tests/common/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_ntp_global/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94", + "chksum_sha256": "f7771e974db6ccc58fcb0a69ff17e00e208d57c09d96c7b8dfe8f5ecae8c879b", "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm/tasks/main.yaml", + "name": "tests/integration/targets/nxos_ntp_global/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "9bcba4c729094da821fbbcce077fce21c817d1f560df1dc97ede6c6ff9cc4565", "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_ntp_global/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "159d739b15a17d8f62cbb4c9dfcd2fa3b7ede51f02fa6e9ac2bde196643b60fd", "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ntp_global/tests/common/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e4c2d740371ba62f8ce9a298147acad6ef15cb6b851a8ea32e7682934e5c4294", "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm/meta/main.yml", + "name": "tests/integration/targets/nxos_ntp_global/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "6b602368f7b9b4aba2e9a3e88b73abf107d658eb335fe4ce1a4cd4c0dca3a4c6", "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ntp_global/tests/common/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1581f91ffd8c1c23bb4676eab5c8b75109777725856083ae7e8f3f2e0993b3be", "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm/defaults/main.yaml", + "name": "tests/integration/targets/nxos_ntp_global/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "2a828ee760fb0dfc1ce2906e7498216901248da978df3b7a90ce842c1041a157", "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ntp_global/tests/common/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "060aecc4cf5c2f2c7d5785001728b97f6913dd3900aa2dcb0c37436509d9d92e", "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_ntp_global/tests/common/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f836d5207479f29e09d0669ff7c58dd23bde729eda06dce4649cdc3e60be53a9", "format": 1 }, { - "name": "tests/integration/targets/nxos_rpm/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_ntp_global/tests/common/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eb766ac5e824552d743eb36cfc738ad9abd7985d945bdea3d22a0d9130f839ca", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_ntp_global/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70447866be2605ad11b7abd82e4ae0000992bbdb0d143e90b86c0b4905ba1d19", + "chksum_sha256": "08e70b7bf07e9f6621e1389be04c654a23a2f975aa49fc4aabc7ecb593bc5cfa", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server", + "name": "tests/integration/targets/nxos_vrrp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tasks", + "name": "tests/integration/targets/nxos_vrrp/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_vrrp/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tasks/main.yaml", + "name": "tests/integration/targets/nxos_vrrp/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc2a3a8f315668c3a0a94a40753f7fd1e7eec342b781bbef50ce0f8d3c4abae2", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_vrrp/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/meta", + "name": "tests/integration/targets/nxos_vrrp/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/meta/main.yml", + "name": "tests/integration/targets/nxos_vrrp/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/defaults", + "name": "tests/integration/targets/nxos_vrrp/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/defaults/main.yaml", + "name": "tests/integration/targets/nxos_vrrp/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests", + "name": "tests/integration/targets/nxos_vrrp/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests/common", + "name": "tests/integration/targets/nxos_vrrp/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_vrrp/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e57172ca560cf57a5a6cda0d4427ef723ff0c2041494801839810d37f2dc448", + "chksum_sha256": "a7766c42cc22f1bb7cc7fa396978f2db1df0d1c744e3241f371f55912f3cd610", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "98bd39c65fc6a311ba043b2cb6e5fb636bf75e1cd4976826739b8a81f1a4a6fc", + "name": "tests/integration/targets/nxos_lacp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "870e84431b7485f0d29bb5431284baf0098b3a2dc4c33433007de1b970ed5b6f", + "name": "tests/integration/targets/nxos_lacp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_lacp/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8669a63ac0d96789d4722d662bf1568b86c5433817147820023d2b323b2c14e", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_lacp/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fd565877939a79d2e7d7d25da2c520c9ea6d42572d5d4fc8110716dff0f961a", + "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_lacp/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af12998368091442ef220d6e85760264d3d8b49b44ab62a34598479e622d6d61", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/fixtures", + "name": "tests/integration/targets/nxos_lacp/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/fixtures/parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "68295fddd79719b8ad7b74adc76ea194066abae9bd717b24c71eacb7d4b20f8e", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/_setup.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5153443ed073b0cc035110ac96d297361e22abe390c84014d0a7dbc83ede74e4", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_lacp/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6e477bd3b8bdcdbdb4a581d99fc15745c21c823d54c364ea2b1a1fbfb43958d", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0a2278a138afa16699d2018af1c1e1e616a0898336bf1632352195a4d2be36ec", + "name": "tests/integration/targets/nxos_lacp/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_lacp/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84c00378264bacd0d235c0b7a80ebf88d754fb93b1e85b00047fac028b29275c", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/vars", + "name": "tests/integration/targets/nxos_lacp/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_server/vars/main.yml", + "name": "tests/integration/targets/nxos_lacp/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8668c98a492f96e42640c00cc5b31c0b73f071b7a61dac9e872c31602833ade2", + "chksum_sha256": "d990ef6f460be1be57ee33ce95b7fd66d05175e93e1e2716cce708d420a5d466", "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback", + "name": "tests/integration/targets/nxos_lacp/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback/tasks", + "name": "tests/integration/targets/nxos_lacp/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_lacp/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94", + "chksum_sha256": "82e18104dcb23f633ded1a694fa4ecbf1df4e14a09620d260473341a8920698a", "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback/tasks/main.yaml", + "name": "tests/integration/targets/nxos_lacp/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "d7f405af0ba053d9e613e791943bc8133e6dbf994db877e876b7dbfcfead68cb", "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_lacp/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "5e8603749c8d553899ed39b13b3acd136e23d7bd3b09098fc55d615557712b8e", "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_lacp/tests/common/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "546c7e8f53d5167a0c5fb320ccd6b5e7db098829ce47de467b2e20856dd402c2", "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback/meta/main.yml", + "name": "tests/integration/targets/nxos_lacp/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "c6245af2941f9a747ea7774bdad73686d4d453173680ea526ab20b52dba2f283", "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_lacp/tests/common/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6c963e6f41c7e38e88e7f37dd8025ee75cd3970358d2568dc84a25bf0833c221", "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback/defaults/main.yaml", + "name": "tests/integration/targets/nxos_lacp/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "dc7919875ac197ca437f1f27d4ace434975e7b0ebc59f0b9e76779b7c13300bd", "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_lacp/tests/common/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d05b5fe9f03352e3b8f7827b2dcf181df0e3c72fe956593e4da447c9d4f8869c", "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_lacp/tests/common/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b9a08d012138636068569151cf4f74205676ea00cc6fccdc2e2627447110156c", "format": 1 }, { - "name": "tests/integration/targets/nxos_rollback/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_lacp/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "394570f3e6f1edf503b6782dd89ffa589499a778fc5336c8c610b01d473a7bb8", + "chksum_sha256": "a10bac016859ecead883b3a70c3eb13f70718ad9cdd2796b92294bb73bbee29d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vsan", + "name": "tests/integration/targets/nxos_igmp_snooping", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vsan/tasks", + "name": "tests/integration/targets/nxos_igmp_snooping/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vsan/tasks/main.yaml", + "name": "tests/integration/targets/nxos_igmp_snooping/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f47853340600c1c9b76ed00695079b203ae45896e40acfac2f48e28f2ad98b40", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vsan/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_igmp_snooping/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_igmp_snooping/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_vsan/meta", + "name": "tests/integration/targets/nxos_igmp_snooping/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vsan/meta/main.yml", + "name": "tests/integration/targets/nxos_igmp_snooping/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_vsan/defaults", + "name": "tests/integration/targets/nxos_igmp_snooping/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vsan/defaults/main.yaml", + "name": "tests/integration/targets/nxos_igmp_snooping/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_vsan/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vsan/tests/common", + "name": "tests/integration/targets/nxos_igmp_snooping/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vsan/tests/common/sanity.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cb88ac95adfc25626d2c81d7dc7d45341c006ac0490dda44c675101938ec4bcc", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vsan/vars", + "name": "tests/integration/targets/nxos_igmp_snooping/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vsan/vars/main.yml", + "name": "tests/integration/targets/nxos_igmp_snooping/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97b10ee26b05c01b328d79887c41479bd2bf559184fb1df4af53645db6e109ba", + "chksum_sha256": "a4a73bc840e125f41372313d58b550980ef7c1642f87ba9bb8ee85d8d026ff42", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists", + "name": "tests/integration/targets/nxos_gir_profile_management", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tasks", + "name": "tests/integration/targets/nxos_gir_profile_management/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_gir_profile_management/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tasks/main.yaml", + "name": "tests/integration/targets/nxos_gir_profile_management/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_gir_profile_management/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/meta", + "name": "tests/integration/targets/nxos_gir_profile_management/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/meta/main.yml", + "name": "tests/integration/targets/nxos_gir_profile_management/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/defaults", + "name": "tests/integration/targets/nxos_gir_profile_management/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/defaults/main.yaml", + "name": "tests/integration/targets/nxos_gir_profile_management/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_prefix_lists/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common", + "name": "tests/integration/targets/nxos_gir_profile_management/tests", "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b94ddd8f6e3aef1be0b00d88c934c971a436d3595b760e10dd388b6dacfac7d3", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8c7dfc255e4fdc2e873e375b7b4a24b1098f63ebc6f80b18ddaf4bb4e62a9a46", + "name": "tests/integration/targets/nxos_gir_profile_management/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_gir_profile_management/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c10395ec2b03209c79681dd09690cb615195b8adaae1cdfa3fabc0fd68ef0565", + "chksum_sha256": "d0237be40a79468b006b7bc99f59a3b8b9227b61b780adcd94fef59ea697e6fb", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "56b14e2fd373b2211c65f09454a4c39137bb1f1a06ad96f007e377d8b2b51851", + "name": "tests/integration/targets/nxos_vpc", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b63842b6c47d71229bd8ad567bce61e119a9da6f44fb987d22a5348d9b67f1e7", + "name": "tests/integration/targets/nxos_vpc/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_vpc/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56599df6259a9ed56f2794f1171dba7cd811995b228ee29610d679201d7094f0", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/.DS_Store", + "name": "tests/integration/targets/nxos_vpc/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b8c3589c79b71429938a827331899d13ac16c156374f8c45ec59068bd2d2060", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_vpc/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2233813d83a2cf367f99e9348cfb36ea295efcebe61d310a4580abbab8836d5c", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/fixtures", + "name": "tests/integration/targets/nxos_vpc/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/fixtures/parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f7f1e53d17acf3059197aa476e1715028d571930c8cff8eabada2af3da2e7819", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_vpc/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7bf73d5bf1f98884b2c8dedfcdc762af1c6542276fc649a04bf360fe10400cff", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "53a49d08552e563da400b6c13475d9e2a020cc039eee9985b1c5a3e930fb3843", + "name": "tests/integration/targets/nxos_vpc/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_vpc/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "742244e5eb090968dbbab6b3bce1d5d52404f476371439bf2404e4467534b488", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/tests/.DS_Store", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "af891bb95ebcc39dfd38131bf64fba6eb7bb8e84f59a428b6af5477588fbc6b6", + "name": "tests/integration/targets/nxos_vpc/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/vars", + "name": "tests/integration/targets/nxos_vpc/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_prefix_lists/vars/main.yml", + "name": "tests/integration/targets/nxos_vpc/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f869515b8a1ec55c8346c13f87eff1b4bef627722f02ba89f143fec41ea52254", + "chksum_sha256": "2df57c902caed23947093482590483584784db8850c51e6efe545b314895eaed", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces", + "name": "tests/integration/targets/nxos_vtp_password", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tasks", + "name": "tests/integration/targets/nxos_vtp_password/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_vtp_password/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/nxos_vtp_password/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_vtp_password/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/meta", + "name": "tests/integration/targets/nxos_vtp_password/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/meta/main.yml", + "name": "tests/integration/targets/nxos_vtp_password/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/defaults", + "name": "tests/integration/targets/nxos_vtp_password/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/nxos_vtp_password/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests", + "name": "tests/integration/targets/nxos_vtp_password/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common", + "name": "tests/integration/targets/nxos_vtp_password/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_vtp_password/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce89afffb71cc896f467a3e32919ab4a8fdcd5ea07a9175ecd7db9a7ae6f77cb", + "chksum_sha256": "3146095b01817bec07dd315c90e066bd664e16b5438d62d337a7ebfc0c48884e", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6e9f0e87988c4ded07d518b67a5118d9d6894e2fab2c86c9cd90ffcf5f56beab", + "name": "tests/integration/targets/nxos_lldp_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0ef96315e1d8b08e76b5d905207c1d85c0ddea43e8efa07b54896132e7d772e1", + "name": "tests/integration/targets/nxos_lldp_interfaces/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_lldp_interfaces/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1ff8909b5732150a58ea8fafa7e0f20c447a8bd7e6be23fa0d7cc5655b75510", + "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_lldp_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da6b8a879ff9188026a3b1aa01b53289a7517026aff1a7d1954d1bdaead6dec0", + "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_lldp_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "45a5f0f9979ffcd5b7ef73f95de39a4c6ad35b3f7f05a61b7f6770eb17166dcb", + "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/_populate_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a313ec546dfda89fa9e4dbd468fa0940164b42c0ebce4e544f9c6eddf9c76e63", + "name": "tests/integration/targets/nxos_lldp_interfaces/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_lldp_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1c4df45348332e927abe784ea39438ab014af521a169cc07ca76ff6d8d7c52d", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9db583ddb82a512ca231ffb3a5ba6c672aa653ec28834c17328fd56190b4a558", + "name": "tests/integration/targets/nxos_lldp_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_lldp_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4f2c908e56c100ed364248792037843ebe703124cb856054bba1a7904494edd3", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/vars", + "name": "tests/integration/targets/nxos_lldp_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp_interfaces/vars/main.yml", + "name": "tests/integration/targets/nxos_lldp_interfaces/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a06be45c7fcb5fbb624b33983db74636889ef05ed32ce0f3ba56485272e3db09", + "chksum_sha256": "823ad4608bc4788ff160348fe4e6be75f267c9f2a55bf2043875eb2d76084f39", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname", + "name": "tests/integration/targets/nxos_lldp_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tasks", + "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/overridden.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "b4403fc48624d3990b76b682c8b17543e81f43f152f1afe573bdde1722248ea1", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tasks/main.yaml", + "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/rtt.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c100293cbf1e43e53f2ff874e3e1079621ae414e404db0078a26044ececac0b1", + "chksum_sha256": "23d20e20e06201967d2847f91f879c7741ac48c9e08bc1b9b3f63ef8c111ad29", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/rendered.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_hostname/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "05a26c146d796dee090a8d9931d7f38b5cf3ea87682c7f50f73597a6cff1a4cb", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/meta/main.yml", + "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_hostname/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "303bc0ba56d6f13d152987aaf4b6953d88e4461e8958c7db467d52d247a63dce", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/defaults/main.yaml", + "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/gathered.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "d559bcc46e44d101f2fa43a97d785b4476d6053486294e513a7cafbaf67b6bae", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/merged.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2399f3e2619a3b82bcf30be4b9a2be7c660d0f53450d25a46b87fd8ee4abb25b", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/replaced.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2c101fa94fc443f0335f4fb75c440dc5c0fe47363d3463d0eccc2c340b39e6cf", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/deleted.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c610838a6fa946c2237c8292c07b688a1ba7e8096a2d35d75f12f0b58866ed7", + "chksum_sha256": "8695d048ec2623b31a194a213ef80da6add19468e0f90a4ca97d5b8257979529", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/deleted.yaml", + "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/parsed.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce390e649cf85c4eddff7df5c0d545f57e389bb36774ae580dadafec45cf2a1b", + "chksum_sha256": "e63afbeefadaaf0dcc22637aaeebfc27980cb517c68aabda8338c05976255320", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0b28a51b56bc716da4598490f3cb3302329f0113eb3ab32fa9a860223eae43f6", + "name": "tests/integration/targets/nxos_evpn_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c48e9bf3dac84165ae9953b7ad26ecec061cc599fd5cc78290d048b36119ce19", + "name": "tests/integration/targets/nxos_evpn_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_evpn_global/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2db6ef6d129f976a7c1dd3d1543020bba577d399fa4e780311e9942d0e39a21", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_evpn_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c76970334ac8f7dea1c52d4a2e9785b43fe9754ed2cece81e49036d8efce6507", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_evpn_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55288117a1ba1770a3e0bcac6e550c318807316ce84c65e536ba34cc449f62b0", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/fixtures", + "name": "tests/integration/targets/nxos_evpn_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/fixtures/parsed.cfg", + "name": "tests/integration/targets/nxos_evpn_global/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6cd019ca4bbc9dc9a7657ccbc89a52a8505890bda564813765bc2bb004ef3814", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/replaced.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8564938ffbfc1d998d5ce080e9bc6cb612cf2aeefa19ac79bf9bf6f895800a2e", + "name": "tests/integration/targets/nxos_evpn_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_evpn_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "292e2e1750dcd0b5114b4c1b2f8fe93125754fa76c1869f64f87e6055da6338f", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/tests/common/rendered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6e0e085de3251f1846bf350484b27a639383cf70f82effdb6d8aa0b73f105c60", + "name": "tests/integration/targets/nxos_evpn_global/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/vars", + "name": "tests/integration/targets/nxos_evpn_global/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hostname/vars/main.yml", + "name": "tests/integration/targets/nxos_evpn_global/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "372a997c3a0ce9aa7b42746d99a75295a66504416d94fd1b0c545e58717a6a9d", + "chksum_sha256": "9190f2d0dae47c3b29ebe68f89ec9e3b88f0af56af489b15624cf99c86415d9f", "format": 1 }, { - "name": "tests/integration/targets/nxos_config", + "name": "tests/integration/targets/nxos_bgp_templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tasks", + "name": "tests/integration/targets/nxos_bgp_templates/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tasks/main.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a069f9e3d9d905e5a1d7e2b316e284944bc38cddc390470831451fb4672fbde2", + "chksum_sha256": "918e266fd84500fc8a9d7958437789683bd47b7875371afaf4941b60f4594bc7", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tasks/cli_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "244797b68a9ec0f73b3fecca59e21469c0bc8126f36a5b7ffe2fe20ebdf22f19", + "name": "tests/integration/targets/nxos_bgp_templates/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tasks/redirection.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4f04d0bc1463bb36c212620e786d8ce8d18681fd03f641c1a37351b6d0dfac8", + "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/meta", + "name": "tests/integration/targets/nxos_bgp_templates/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/meta/main.yml", + "name": "tests/integration/targets/nxos_bgp_templates/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/defaults", + "name": "tests/integration/targets/nxos_bgp_templates/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/defaults/main.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "320a4fb71862d3232cd18205318c3a960d55b06bb1fd7fa7afd49ff122c04605", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests", + "name": "tests/integration/targets/nxos_bgp_templates/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli/toplevel_before.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "da70c4dcf111e0de17abc736ab6b4cfef245ca202d235dd1d9e611b40bbab8b2", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_config/tests/cli/toplevel_after.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7792c748c17cf012bd7462753459725b9b2d4e8418a3edb3f4f76eb84f8b5914", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli/diff.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d890138033f9812260dfd304fb4888d77e0c78b71f0afb2f8f97ce71f11a2491", + "chksum_sha256": "e921d4fa370873c1b237ba6b3ee2d3c0a70520b08f5097e960152137a57ed123", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli/sublevel_strict.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "057bf9a3f64bb1abb24a5dc5a530553401a32850185af62cb278c85228ac6465", + "chksum_sha256": "a1ffab53eece71058929fba7b157214cd3aeea388b6bf8aae94e146b03e5eb25", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli/multilevel.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b91edced261b04cd778d86a702fd71159bcb7e37050b2b59d66f5fbd0485ca6e", + "chksum_sha256": "09f60138ddf3d5c8a6782f9f5f937091c37a58ea72c0304384034becdf946850", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli/replace_block.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0eef2496cf4af6b50d6274c1b6ef30dbe7955e60ab6695c4cc0660ee5e8a51e", + "chksum_sha256": "425c2ab3097932fcb46a43b4d5b8bcaeed500348e760e77a5b6f1d4e4fca9eea", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli/sublevel_exact.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b755c791e3a1b329e7da5896f70e10b01bdc5237bbe2e80316a4515d6f8d8bd8", + "chksum_sha256": "d307cdaf9d9ecb2c711093d4f9879deb595a843ed2d17b6ae1036d918b22cf2f", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli/sublevel.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "937eb38ce64f2eaaab0f4c8f86a336d6fa022a96d75e285baaf7c85f45fb0b09", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_config/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "1197072828ecfc518dd9ac00389c239db31f18e8d566fbe5a37fd80ff479f104", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/common/src_match_none.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f485a516ee779d29f9c4bef94249e47c885743481d409fedaad14bd49ecbafe0", + "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/common/sublevel_block.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "45748bd39c32ff0675cebcff8ed674384c0fcbd51797f2110edfbef816394801", + "chksum_sha256": "2326d2afd434fadf9b8d2ef427e3918e6a5947eb39d58c4fc1988df599c58510", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/common/toplevel_nonidempotent.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "48fbcde0f38c5b06062ccb0f93d50a5b7a7554edf66ee7ed4779d9d4ce524ac1", + "chksum_sha256": "37be696dfcec49e17974100e3ea8181b391da9cdad82f8667aa2f5df0ff8aaca", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/common/toplevel.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2bc1969eeb4a97775fd72dd6e5109d499c24cf5735c2c54bf75dcf7d49690bea", + "chksum_sha256": "56e1c2649908ef81810457cc96bc917c530d7096e907b516389ef7cdbe3c9ba3", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_bgp_templates/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55efec005b7a96d5dbd8739cfce99c359f047d1aacbee36ad6bc04bcf8283f26", + "chksum_sha256": "0f7753a98712bcde737fce34f1a0af8d5a655bba229b306685e5ae6f8c26257d", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/common/src_basic.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "eccd369dee1af74d2b9f2888107f438904ae0c58705d800ad95e913965991608", + "name": "tests/integration/targets/nxos_pim", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/common/defaults.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "db431603f9429be57048a8789d1f0af71d6cdae47a26878a608c082768a1244d", + "name": "tests/integration/targets/nxos_pim/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/common/backup.yaml", + "name": "tests/integration/targets/nxos_pim/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "098fa1e9566ae02a5c089a7ab7a235ce53f1bc78b431e01595556f623f718c82", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/common/src_invalid.yaml", + "name": "tests/integration/targets/nxos_pim/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "000c3c67b80eab4be77858bbb29844ec788342c63d8570c1db6166ca5a9539b5", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/common/save.yaml", + "name": "tests/integration/targets/nxos_pim/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bc462c07044762a41b8eddbe29be65aa51e6d6cea05d1e0630555e8cb4a9e446", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_config/tests/redirection", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/redirection/cli", + "name": "tests/integration/targets/nxos_pim/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/redirection/cli/shortname.yaml", + "name": "tests/integration/targets/nxos_pim/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "00bb1bd085c826013b04f4eaf7f74ff0de45ec8330aa386f4cd0263d468df9f1", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/nxapi", + "name": "tests/integration/targets/nxos_pim/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/nxapi/toplevel_before.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1d150adeed3e6e02c3adc3871d29b6a153d504ab7a861cd401b02c480008ba5b", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_config/tests/nxapi/toplevel_after.yaml", + "name": "tests/integration/targets/nxos_pim/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b8ad2836c7ec7360561cb0f4319bbe95feae70b134c5dac9deb2ba18a17638e", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/nxapi/sublevel_strict.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "acaded71377fcc8c8b288d527caf6fc777c8d0f50079c8b409d1007f821cc9d3", + "name": "tests/integration/targets/nxos_pim/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/nxapi/multilevel.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ff4c8dc408f5b4296300c4d7d983fcbdf19ee303fc95fe44ddb3d72a8b2aa08e", + "name": "tests/integration/targets/nxos_pim/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/nxapi/sublevel_exact.yaml", + "name": "tests/integration/targets/nxos_pim/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "694ab236d9c21462b423d507666dfe90caceca03e8a2f8fa3759f9f51b6d06e0", + "chksum_sha256": "ab1efb1a3ca7cc688042b32d2d0660eeb0e25ff2bb2c833e9bcdeab5d6a1e0a0", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/nxapi/sublevel.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dc08a002e9e00d36590098bfe308ca825954a3e43755650cb5809684512433cb", + "name": "tests/integration/targets/nxos_smoke", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli_config", + "name": "tests/integration/targets/nxos_smoke/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_exact_match.yaml", + "name": "tests/integration/targets/nxos_smoke/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5eb01810e15ac6b6941a7b9b79ca5ca3be016f16ee7f534eea9be0115fb53a46", + "chksum_sha256": "7277ec56762ca20a3617b1da87631d8dde35556a4c004e7c82974e49fab50d92", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_strict_match.yaml", + "name": "tests/integration/targets/nxos_smoke/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6329b5bab571f5218aeff32c54936052c2188466f842b4364d80dc9c6d800450", + "chksum_sha256": "849f2a2746300bf950bfe382b3f2b80990bbee773cbdbd2d1e2a897a9ed1e261", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_backup.yaml", + "name": "tests/integration/targets/nxos_smoke/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02aa5aa3478284c141cb3741eb86bf919a560bc25b5a911f453e05ce25737bd7", + "chksum_sha256": "62a31764ef528947cdefe8eb150e20bdaba422d40bac12a3609948ca1575cf8f", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_block_replace.yaml", + "name": "tests/integration/targets/nxos_smoke/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_smoke/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9058efd9127aa10094d23e72b8d7b8e0426d2707a113d7be2d539c15a1b9d229", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_basic.yaml", + "name": "tests/integration/targets/nxos_smoke/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_smoke/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b3703086ba8415b259a2c8353dc03d9295173092ba3dc15170ae9718b10626e", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates", + "name": "tests/integration/targets/nxos_smoke/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/basic", + "name": "tests/integration/targets/nxos_smoke/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/basic/configstrict1.j2", + "name": "tests/integration/targets/nxos_smoke/tests/cli/misc_tests.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da30d9c2fbe9c9473f957d26568b2cb42baa620e261efbce7d604535ec532cf5", + "chksum_sha256": "dedfb27511bd8fde863a0aa430bdd23272cd766d0c23694764d01852c9586073", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/basic/setupexact.j2", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b358f8f54eb293ce2eac2ead8f8bc2e3aae7383c2981c9c192530d6bcbff3d6f", + "name": "tests/integration/targets/nxos_smoke/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/basic/setupstrict.j2", + "name": "tests/integration/targets/nxos_smoke/tests/common/common_utils.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b358f8f54eb293ce2eac2ead8f8bc2e3aae7383c2981c9c192530d6bcbff3d6f", + "chksum_sha256": "a60e645271b0b349228daf7eac3948d5651a32abd8cb578005202d4c1ed80236", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/basic/acl_config.j2", + "name": "tests/integration/targets/nxos_smoke/tests/common/common_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8cfadc33b5527be5bd82a279cbcc769a882135ce815cb6d42177cb51d325e4e", + "chksum_sha256": "dea32a9f41f8c2367181bfb2fc2821e4304e393ac781dd02e19d6cb01c6273ae", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/basic/intended_running_config", + "name": "tests/integration/targets/nxos_smoke/tests/common/caching.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b478553dd335d5085c847219eae58a8daac0902372a5e8fbbd133da3850332b2", + "chksum_sha256": "2db51e2d9c925d2773d4bcf45ee241c75cc02547793d07cad590f1d9657eb36c", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/basic/base_running_config", + "name": "tests/integration/targets/nxos_smoke/tests/common/misc_tests.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85528fb2bdea51956f0b6d9a7cb07c7bc75e498553f9b5301b904db35ed0f929", + "chksum_sha256": "ca259adfd9eabd17072e03cae98011aa82cf2e1b6d8fc88fb0ada2ebaca18d7a", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/basic/configblock.j2", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f8cfadc33b5527be5bd82a279cbcc769a882135ce815cb6d42177cb51d325e4e", + "name": "tests/integration/targets/nxos_user", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/basic/configexact1.j2", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f8cfadc33b5527be5bd82a279cbcc769a882135ce815cb6d42177cb51d325e4e", + "name": "tests/integration/targets/nxos_user/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/basic/configexact2.j2", + "name": "tests/integration/targets/nxos_user/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5884db197b0f69276768f1f6e5e8b4214ead32869dab90d76fae353425a4b28", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/basic/config.j2", + "name": "tests/integration/targets/nxos_user/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d62440fb734cd4db3dd623ab8e77214ff7f82e44c7dfca249b20dcd83d83a9af", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/config.js", + "name": "tests/integration/targets/nxos_user/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6d65e4fbe26ecfdf18d8eba2eac04aecfdd65e59e6b6db1c2aa2d29ed5a5847", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/defaults", + "name": "tests/integration/targets/nxos_user/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/defaults/test.j2", + "name": "tests/integration/targets/nxos_user/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "356d51cb39cbc26b408ca0b3aeacc83634ee2f6e061811a3a8fafb63955ffa4d", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_config/templates/defaults/config.j2", + "name": "tests/integration/targets/nxos_user/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_user/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "522484a8eb35e809c1ebd645a73ca12f02b09c6cf237f1db1ed577088c149c51", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces", + "name": "tests/integration/targets/nxos_user/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tasks", + "name": "tests/integration/targets/nxos_user/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_user/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "bd39b32f02401670bfda98c14839d0da9c76ae8446c151dc7f10131c9531ded6", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/nxos_user/tests/common/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "ba9e801ff2ad1ae02085f83753b4f2e51565888a0fa5822ea0f671ee8a54229f", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_user/tests/common/auth.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "db7a57ed2e804cae9aea360123df898848cc2e772fcab84d843aac01ca0b6b61", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/meta", + "name": "tests/integration/targets/nxos_facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/meta/main.yml", + "name": "tests/integration/targets/nxos_facts/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_facts/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_facts/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/nxos_facts/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests", + "name": "tests/integration/targets/nxos_facts/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common", + "name": "tests/integration/targets/nxos_facts/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_facts/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_facts/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "35032ab6b2376156d9cc4386e0c3ae950aeea92146c89106e92963e5d9f30abd", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1ef608de6174de4a28060255b4f85b5c00beb4bf2c8c4083a85d4132fe06341f", + "name": "tests/integration/targets/nxos_facts/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_facts/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8b8f05c67f53717f791d5fa39768a09589083927c1b288181a9a2b28d3f19fd", + "chksum_sha256": "90b4146d19a8448ba711a28645cf964f8251d544bf1de77f552e08a1e60a9914", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/empty_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a07b5658b8543fad6adbc03cc3dedf24b925d6c15ab96cba887e4057adde9af4", + "name": "tests/integration/targets/nxos_facts/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b7125a5bf2a88b3a35ff6aa0d06f3afd1474431c753306f1390613c7892f8217", + "name": "tests/integration/targets/nxos_facts/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_facts/tests/common/invalid_subset.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "903605fdce930f7ab623ddda18bc721d07632ae35cede2608f93d0178fffff86", + "chksum_sha256": "d7ef14aa0d9ae451bba34e5fb2952f2034793f826a441cd042b03c34e0d78422", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_facts/tests/common/default_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "febb1078f232f6b64f4600db4e81e08b293f9c1b5959937b92458ea3228ac8ce", + "chksum_sha256": "08c3680a5a839d8e3b53515643f3773bb1d25de670124063d41ff3e0a7fd2713", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_facts/tests/common/not_hardware.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "57b05a37ab33678d00ceac9fa16256aa5ce862265fb330cf2045a6f06bd40331", + "chksum_sha256": "933c388db57e0042a75290223a48d69efad1e524bce14f28f64694d34e3475e3", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_facts/tests/common/all_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7ce5887a89b7e2b67eb2b4bae794a1e0a77c77c2c98c1fbd123bca9ecbf78f3", + "chksum_sha256": "f737c75bd85a50361bfb755799335e3bf0044448e43308c6f4c3f9186a80b65f", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_facts/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "879575bd8531da7b1f7752bc36e8b1d92d654dadebf3ac9e372c71ead2cd75d0", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_bfd_interfaces/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "f15ccd5a6a25f5358288fb8ddb955a1b024c33c0d1f04df3811e03aabe460c32", "format": 1 }, { - "name": "tests/integration/targets/nxos_bfd_interfaces/vars/main.yml", + "name": "tests/integration/targets/nxos_facts/tests/common/interface_facts.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab74ba6b07626a0723ca4ba193159ba14bc7011f11acd94ca9b5f13f817def19", + "chksum_sha256": "5c7fa4749d973f3993d84e4ae324dfefa8a62167452abcbdd66de1cb668fdba0", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep", + "name": "tests/integration/targets/nxos_udld", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tasks", + "name": "tests/integration/targets/nxos_udld/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_udld/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1e03994e82f05167e558b19e20c435e80ed92b6ff4f62f71fb93ed9082d30f94", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/main.yaml", + "name": "tests/integration/targets/nxos_udld/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_udld/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform", + "name": "tests/integration/targets/nxos_udld/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform/n7k", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_udld/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform/n7k/cleanup.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6fe5dccac28d950d4f93db2d5dd8d2d53f974b51a0c07a9371165a7fd9b20585", + "name": "tests/integration/targets/nxos_udld/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tasks/platform/n7k/setup.yaml", + "name": "tests/integration/targets/nxos_udld/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b569f1de86c96331c196b935a58a716b5314f80ebd5b9130aeaa56f44c45f047", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/meta", + "name": "tests/integration/targets/nxos_udld/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/meta/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vxlan_vtep/defaults", + "name": "tests/integration/targets/nxos_udld/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/defaults/main.yaml", + "name": "tests/integration/targets/nxos_udld/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "327f500b5a3e5f79399f7a93e74613eec32ee87f52ea77b89af0bb84862a89d2", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tests", + "name": "tests/integration/targets/nxos_nxapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tests/common", + "name": "tests/integration/targets/nxos_nxapi/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_nxapi/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6f5876cdb7e7636f06c87e462e6002cd2694520079c83f7103450520ff14b3b9", + "chksum_sha256": "7022927c86a437ced8d1f9058b25af83150ab1d87223183b1c61bbf4c0d6523f", "format": 1 }, { - "name": "tests/integration/targets/nxos_vxlan_vtep/tests/common/multisite.yaml", + "name": "tests/integration/targets/nxos_nxapi/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6e9df57ea06843b691dc030437dd9190193ddb70664dd0254133417e3a8b5cdc", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_udld/tasks", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_udld/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_https.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "4f99598e0507cfb4e0e625a4075deabb91c5de5e1c0e5531846b9467a6faeaa9", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld/tasks/main.yaml", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_https_http.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "79ee713da7a48ad0b493f6e07690138be3eb4d04d890126aec488e2242e7a442", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_https_http_ports.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_udld/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "3cef9d277e717f6956a9d5136862c72616d866eb04d8f8c0da44c0777739c92c", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld/meta/main.yml", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n5k/assert_changes_http.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "ed763ee2de2c730ea2783225dc132f5c28f22ea272213a36b9b3bb4471492e08", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld/defaults", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_udld/defaults/main.yaml", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "bfae052c7df36024a59df89f314dc7e03019ad1649f4132cb34bb2a8f50fe903", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https_http.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b055af4a4779d412640cee585ef493e52c3937782e095218164d2719d5223d29", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_https_http_ports.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "04e8b8ae8842f40c777282e979ea824c7c886f3e8ae1d9e2710ff466d1fc2ae0", "format": 1 }, { - "name": "tests/integration/targets/nxos_udld/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/default/assert_changes_http.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "327f500b5a3e5f79399f7a93e74613eec32ee87f52ea77b89af0bb84862a89d2", + "chksum_sha256": "db4865169c3dc97c5ca5e24083550b243b685cfaeaaba16333b1f55754dd265a", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_https.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d826b7762b3ab39ad7d294ca171272d1ff3213c35f8040c3657228f259d331d5", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_https_http.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "97089a108cc1eac9afae028c6da9bf6f7017afcfc3f1a85776cfe6af31f2c6af", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_https_http_ports.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2418a2ada8700c06969324411c9be328b4d4ad913c6eb93fb824dff96900ff8f", + "chksum_sha256": "5d5a7bc39789b15cf95dd49af7ab1636f3a4589a2be3ee5ca341dbb4414eb95b", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_nxapi/tasks/platform/n7k/assert_changes_http.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "35222b27a54a701db0042dd5fb6069d48d9e27a70821a1707a4aad0d19bc227f", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/meta", + "name": "tests/integration/targets/nxos_nxapi/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_nxapi/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/meta/main.yml", + "name": "tests/integration/targets/nxos_nxapi/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/defaults", + "name": "tests/integration/targets/nxos_nxapi/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/nxos_nxapi/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests", + "name": "tests/integration/targets/nxos_nxapi/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common", + "name": "tests/integration/targets/nxos_nxapi/tests/nxapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_nxapi/tests/nxapi/badtransport.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9dbc4efa7c9e6843b987aa6286ba0de836129c75b66249ab846fee2012fc2394", + "chksum_sha256": "28a2dfdf7ba13f8dd757c8d9095797a0b91437b5bfd9d9c1c8bfe65508e15901", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1676a953c0e740cc280155ea76e6368fd5628556cdc0acae19e1834b40721681", + "name": "tests/integration/targets/nxos_nxapi/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_nxapi/tests/cli/nxapi_ssl.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c8ea6a0bd93a5ae1092362c88b1eb6ed13a086968841b5d68654677741714dc", + "chksum_sha256": "dae84b45affca730b7c9158216bf18dc9ab9c92bbce4701b6ba881f192ae47f4", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_nxapi/tests/cli/disable.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "858bc39fea4f9cedff070a248b5119124852eeb9237388ef833c414510dbf24c", + "chksum_sha256": "94889efb465f8b55120a28becc23705cd11dc1bc9aebc91204105ba9f8207302", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/rtt.yaml", + "name": "tests/integration/targets/nxos_nxapi/tests/cli/configure.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d660e4e5717467104076599f04b44aca40bbe45b79eb5e5554cb1ff390feb405", + "chksum_sha256": "b4853e02af108065809baebdb1f8e957bc48184f9a24e3510826d28f734d17a6", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_nxapi/tests/cli/enable.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7555ee3d0322003861d6c2d810ec490027b8d792e8800c7e9a46fab869b1c92", + "chksum_sha256": "abdd34478d7db89533c9d3d8cc0fb2f26a5324ab85212086aa1fecc220e7d1c8", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c670083adeabaa18419eea52a2297aeea81b1a5635718b95aebf3d1955f78385", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/multisite.yaml", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b0b3ebe6d2d7db422ec1a046818ce06ddf83ef9f32a9178691d732b0824b4da1", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3a640fd87c6717d5876b64797f7d0092fd6673272fc5a674bde3cf5ed78e8b79", + "chksum_sha256": "0defcb7ce6f353926624c2c3e045b403af33c34a6bc1c49b08e71ec602cd21f2", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef91b776e8c9627a55cc9759549aaa7482e0f7da4385079443b8e8f1d8d40b8c", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e2abf21e437435b96d94e3a1c900ac1284a39092f3b0b1d19e8d5d7544a8424", + "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f274f91771b34f2246ee4fa58bae6acd7fafb0ea1f1efb04ffb362cfd1678de3", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/vars", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_l3_interfaces/vars/main.yml", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24e5a4f2e7330b185775678aa68b4645786e83617b90d5a32fb4ff4b77b345ad", + "chksum_sha256": "c9c20222a6eea75718e72f0e12a439d0f2a36eee5fc85db00a855c0ca4a72f99", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tasks", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666", + "chksum_sha256": "b2a00e0d2590a7c6caff9c7d3d3df8eddf7a04bcb142a5900735574cf7d7ba14", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0ff0c24a2fb4a8aa58a6356c5029065acb6cf1aba1e14add135ff69c8d1387b", + "chksum_sha256": "40d8f8cfc0bfd8a2d5da53d9e61f2d398e4ed50e2cc17915359ba02b980d16d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724", + "chksum_sha256": "ebe2088087a911826370430ed7e8029bee349d39be051ef9ce89f96ebb2d4118", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dc0718832154ed173f9ada21e4072a3f3c7fc9202d9a83e0b18c26d72991702e", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/meta/main.yml", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "bc402cfd6f07870283877fcd9c3158fdef7f756c7ea88c1aeebdd73629628a00", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/overridden.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9c296bdd111a832466197719e7d3a6da9215aaaa0ab6aeca20b16e5284c61b52", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "367b5c49d11893b14160cf94e6675588ac07bf0ee93574f6a1e9a9d4c6df70d9", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ed006b0b9dbb7b7c16264d7c9304040f7ddf7104c0aef4d084dd0380d81c0f0d", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a8055703f881f09873f851f1e0c212ac66aa662b744b5cc81a6bd07a7e854643", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "047f1c0feea67e71c51f1eed5b1434e093a7b9f98494aa230acea01f7b68a91b", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tests", + "name": "tests/integration/targets/nxos_snmp_host", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common", + "name": "tests/integration/targets/nxos_snmp_host/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/remove_config.yaml", + "name": "tests/integration/targets/nxos_snmp_host/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "303bc0ba56d6f13d152987aaf4b6953d88e4461e8958c7db467d52d247a63dce", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/parsed.yml", + "name": "tests/integration/targets/nxos_snmp_host/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e63afbeefadaaf0dcc22637aaeebfc27980cb517c68aabda8338c05976255320", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/gathered.yml", + "name": "tests/integration/targets/nxos_snmp_host/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d559bcc46e44d101f2fa43a97d785b4476d6053486294e513a7cafbaf67b6bae", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/merged.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2399f3e2619a3b82bcf30be4b9a2be7c660d0f53450d25a46b87fd8ee4abb25b", + "name": "tests/integration/targets/nxos_snmp_host/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/replaced.yml", + "name": "tests/integration/targets/nxos_snmp_host/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c101fa94fc443f0335f4fb75c440dc5c0fe47363d3463d0eccc2c340b39e6cf", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/deleted.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8695d048ec2623b31a194a213ef80da6add19468e0f90a4ca97d5b8257979529", + "name": "tests/integration/targets/nxos_snmp_host/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/rtt.yml", + "name": "tests/integration/targets/nxos_snmp_host/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23d20e20e06201967d2847f91f879c7741ac48c9e08bc1b9b3f63ef8c111ad29", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/overridden.yml", + "name": "tests/integration/targets/nxos_snmp_host/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_snmp_host/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v3_trap.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4403fc48624d3990b76b682c8b17543e81f43f152f1afe573bdde1722248ea1", + "chksum_sha256": "1e10b5c9c01f39edff0f76171c81720d458aca5775d0f5f97f20bd2e6c21f57f", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/tests/common/rendered.yml", + "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v2_inform.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05a26c146d796dee090a8d9931d7f38b5cf3ea87682c7f50f73597a6cff1a4cb", + "chksum_sha256": "54b2c813dda14d97a1eef23c8a3b3ff2bdc194b60ec4cf15d7f6e0068802afa5", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v3_inform.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0156bedc287881d6d9d767fd9720c5821708b9ad3c9c217c5c4b1df0a72a6891", "format": 1 }, { - "name": "tests/integration/targets/nxos_lldp_interfaces/vars/main.yml", + "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v1_trap.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "823ad4608bc4788ff160348fe4e6be75f267c9f2a55bf2043875eb2d76084f39", + "chksum_sha256": "aa6a8b70ec63534db6d01bad4ccb22de07cf1d7c0c65b148a02474964d1a4e72", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf", + "name": "tests/integration/targets/nxos_aaa_server_host", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/tasks", + "name": "tests/integration/targets/nxos_aaa_server_host/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_aaa_server_host/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/tasks/main.yaml", + "name": "tests/integration/targets/nxos_aaa_server_host/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_aaa_server_host/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/meta", + "name": "tests/integration/targets/nxos_aaa_server_host/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/meta/main.yml", + "name": "tests/integration/targets/nxos_aaa_server_host/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/defaults", + "name": "tests/integration/targets/nxos_aaa_server_host/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/defaults/main.yaml", + "name": "tests/integration/targets/nxos_aaa_server_host/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/tests", + "name": "tests/integration/targets/nxos_aaa_server_host/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/tests/common", + "name": "tests/integration/targets/nxos_aaa_server_host/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/tests/common/intent.yaml", + "name": "tests/integration/targets/nxos_aaa_server_host/tests/common/tacacs.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b49015c20a19ae1f270a3b5e69d370744549a23915fb03c23f6e84ad40f8ef74", + "chksum_sha256": "b669c11c0bee9b899cb3075b446411bac7b4fd7c79396e5add683a2d5ab8b725", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_aaa_server_host/tests/common/radius.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8fb2d6249a8d9311ec67a31c87ad94a8184c7351dbf190d833bb1d7bafd4e7a", + "chksum_sha256": "10dec61711d8e2e9660491a3ac36bda92ef57264b44ce2fafd5c0512b2ecfd13", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp", + "name": "tests/integration/targets/nxos_hsrp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp/tasks", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp/tasks/main.yaml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp/meta", + "name": "tests/integration/targets/nxos_hsrp_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp/meta/main.yml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp/defaults", + "name": "tests/integration/targets/nxos_hsrp_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp/defaults/main.yaml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_hsrp/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp/tests/common", + "name": "tests/integration/targets/nxos_hsrp_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_hsrp/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a9c0076bb37472ad1bcf0815ed5845032be77683ffc6e967f2577c29cc28f8a8", + "chksum_sha256": "a06be45c7fcb5fbb624b33983db74636889ef05ed32ce0f3ba56485272e3db09", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password/tasks", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "9db583ddb82a512ca231ffb3a5ba6c672aa653ec28834c17328fd56190b4a558", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password/tasks/main.yaml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "da6b8a879ff9188026a3b1aa01b53289a7517026aff1a7d1954d1bdaead6dec0", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "6e9f0e87988c4ded07d518b67a5118d9d6894e2fab2c86c9cd90ffcf5f56beab", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d1c4df45348332e927abe784ea39438ab014af521a169cc07ca76ff6d8d7c52d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password/meta/main.yml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "45a5f0f9979ffcd5b7ef73f95de39a4c6ad35b3f7f05a61b7f6770eb17166dcb", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ce89afffb71cc896f467a3e32919ab4a8fdcd5ea07a9175ecd7db9a7ae6f77cb", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password/defaults/main.yaml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "0ef96315e1d8b08e76b5d905207c1d85c0ddea43e8efa07b54896132e7d772e1", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d1ff8909b5732150a58ea8fafa7e0f20c447a8bd7e6be23fa0d7cc5655b75510", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4f2c908e56c100ed364248792037843ebe703124cb856054bba1a7904494edd3", "format": 1 }, { - "name": "tests/integration/targets/nxos_vtp_password/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_hsrp_interfaces/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3146095b01817bec07dd315c90e066bd664e16b5438d62d337a7ebfc0c48884e", + "chksum_sha256": "a313ec546dfda89fa9e4dbd468fa0940164b42c0ebce4e544f9c6eddf9c76e63", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family", + "name": "tests/integration/targets/nxos_snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tasks", + "name": "tests/integration/targets/nxos_snmp_server/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_snmp_server/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tasks/main.yaml", + "name": "tests/integration/targets/nxos_snmp_server/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0defcb7ce6f353926624c2c3e045b403af33c34a6bc1c49b08e71ec602cd21f2", + "chksum_sha256": "dc2a3a8f315668c3a0a94a40753f7fd1e7eec342b781bbef50ce0f8d3c4abae2", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_snmp_server/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/meta", + "name": "tests/integration/targets/nxos_snmp_server/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/meta/main.yml", + "name": "tests/integration/targets/nxos_snmp_server/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/defaults", + "name": "tests/integration/targets/nxos_snmp_server/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/defaults/main.yaml", + "name": "tests/integration/targets/nxos_snmp_server/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests", + "name": "tests/integration/targets/nxos_snmp_server/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common", + "name": "tests/integration/targets/nxos_snmp_server/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8668c98a492f96e42640c00cc5b31c0b73f071b7a61dac9e872c31602833ade2", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_snmp_server/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5", + "name": "tests/integration/targets/nxos_snmp_server/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dc0718832154ed173f9ada21e4072a3f3c7fc9202d9a83e0b18c26d72991702e", + "name": "tests/integration/targets/nxos_snmp_server/tests/common/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_snmp_server/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "367b5c49d11893b14160cf94e6675588ac07bf0ee93574f6a1e9a9d4c6df70d9", + "chksum_sha256": "68295fddd79719b8ad7b74adc76ea194066abae9bd717b24c71eacb7d4b20f8e", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_snmp_server/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed006b0b9dbb7b7c16264d7c9304040f7ddf7104c0aef4d084dd0380d81c0f0d", + "chksum_sha256": "0a2278a138afa16699d2018af1c1e1e616a0898336bf1632352195a4d2be36ec", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_snmp_server/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ebe2088087a911826370430ed7e8029bee349d39be051ef9ce89f96ebb2d4118", + "chksum_sha256": "f8669a63ac0d96789d4722d662bf1568b86c5433817147820023d2b323b2c14e", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_snmp_server/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c296bdd111a832466197719e7d3a6da9215aaaa0ab6aeca20b16e5284c61b52", + "chksum_sha256": "f6e477bd3b8bdcdbdb4a581d99fc15745c21c823d54c364ea2b1a1fbfb43958d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_snmp_server/tests/common/_setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "047f1c0feea67e71c51f1eed5b1434e093a7b9f98494aa230acea01f7b68a91b", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "5153443ed073b0cc035110ac96d297361e22abe390c84014d0a7dbc83ede74e4", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/fixtures/parsed.cfg", + "name": "tests/integration/targets/nxos_snmp_server/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2a00e0d2590a7c6caff9c7d3d3df8eddf7a04bcb142a5900735574cf7d7ba14", + "chksum_sha256": "7fd565877939a79d2e7d7d25da2c520c9ea6d42572d5d4fc8110716dff0f961a", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_snmp_server/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bc402cfd6f07870283877fcd9c3158fdef7f756c7ea88c1aeebdd73629628a00", + "chksum_sha256": "5e57172ca560cf57a5a6cda0d4427ef723ff0c2041494801839810d37f2dc448", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_snmp_server/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40d8f8cfc0bfd8a2d5da53d9e61f2d398e4ed50e2cc17915359ba02b980d16d0", + "chksum_sha256": "98bd39c65fc6a311ba043b2cb6e5fb636bf75e1cd4976826739b8a81f1a4a6fc", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_snmp_server/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8055703f881f09873f851f1e0c212ac66aa662b744b5cc81a6bd07a7e854643", + "chksum_sha256": "870e84431b7485f0d29bb5431284baf0098b3a2dc4c33433007de1b970ed5b6f", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_snmp_server/tests/common/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84c00378264bacd0d235c0b7a80ebf88d754fb93b1e85b00047fac028b29275c", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_neighbor_address_family/vars/main.yml", + "name": "tests/integration/targets/nxos_snmp_server/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9c20222a6eea75718e72f0e12a439d0f2a36eee5fc85db00a855c0ca4a72f99", + "chksum_sha256": "af12998368091442ef220d6e85760264d3d8b49b44ab62a34598479e622d6d61", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging", + "name": "tests/integration/targets/nxos_telemetry", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/tasks", + "name": "tests/integration/targets/nxos_telemetry/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_telemetry/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/tasks/main.yaml", + "name": "tests/integration/targets/nxos_telemetry/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2fa4212775c84d75c443b3960aebf6341b09e5224e4faa7487fd1665c531cfed", + "chksum_sha256": "4fe8ec88364fed45512b5f8e5687038986edd9b03ab1962afa6476aed1ab2f5a", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_telemetry/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/meta", + "name": "tests/integration/targets/nxos_telemetry/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/meta/main.yaml", + "name": "tests/integration/targets/nxos_telemetry/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/defaults", + "name": "tests/integration/targets/nxos_telemetry/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/defaults/main.yaml", + "name": "tests/integration/targets/nxos_telemetry/templates/populate_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "160c96e0f5f10f0cd536d1fcd93fad3b60a8eac159a64755ac8617a702f032b7", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/tests", + "name": "tests/integration/targets/nxos_telemetry/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/tests/common", + "name": "tests/integration/targets/nxos_telemetry/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_telemetry/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/tests/common/basic.yaml", + "name": "tests/integration/targets/nxos_telemetry/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cffb79e3d12eafda145406aeabd6a8b977e70c5eaf2357b1ea7e9f961f0d8efa", + "chksum_sha256": "90ee74a6d8158f5b1a5e92b16e0e044a5fae636e2742931b542355cb71ed2da4", "format": 1 }, { - "name": "tests/integration/targets/nxos_logging/tests/common/purge.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "73306e68b9cf6de77d4ae5c21bef31324fa909718a1aa43c35e1d99dfa07ce1f", + "name": "tests/integration/targets/nxos_telemetry/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_gir", + "name": "tests/integration/targets/nxos_telemetry/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_gir/tasks", + "name": "tests/integration/targets/nxos_telemetry/tests/common/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_gir/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_telemetry/tests/common/fixtures/new_server.crt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "d761bf530e78d0752a7d9f05dfd5084e106245c7cecac49ca75c0c76ba495fc1", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir/tasks/main.yaml", + "name": "tests/integration/targets/nxos_telemetry/tests/common/fixtures/server.crt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "9248b8354ba01bd1fecb1d24494a6098ee9547fa34a9d8840068abbb9a80fd92", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_telemetry/tests/common/fixtures/local_server.crt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "29437b8420b999138ca0947aef901533fd9affbc7ae98a39b13fb6bfa0ae29cd", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_telemetry/tests/common/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b1ac88fec698b51b1f358987e65b5793cd9488ea085606963409a7b9d9b2b4cc", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir/meta/main.yml", + "name": "tests/integration/targets/nxos_telemetry/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "d231b07bd5ab608ddebbdbbdbbcbed5e4648ac7ad05dfbbf1df4e2a21c063389", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_telemetry/tests/common/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "00736c9321f59eb87d3655075f655cf2244ba30caed17b3175c3f0171c94bd9f", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir/defaults/main.yaml", + "name": "tests/integration/targets/nxos_telemetry/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "0f66a09ea372c1fa2c05027c0a2097da33a0912daf4355ff6cab34a77e057acd", "format": 1 }, { - "name": "tests/integration/targets/nxos_gir/tests", + "name": "tests/integration/targets/nxos_static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_gir/tests/common", + "name": "tests/integration/targets/nxos_static_routes/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_gir/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_static_routes/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "13582ac62b7614778bc62c5a6f93a36a920e8664812b73a2b0903af35c2fe1da", + "chksum_sha256": "40fe4fe85031868241ac9845115f925a1c7be1ad8c4f932f4896fdaad51da36c", "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_static_routes/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2eacf5012e1fb8a88bd7663844178dc5f6b617535d4bc2ddf0037ce474a33b1e", "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/tasks", + "name": "tests/integration/targets/nxos_static_routes/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/tasks/nxapi.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7277ec56762ca20a3617b1da87631d8dde35556a4c004e7c82974e49fab50d92", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_smoke/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "849f2a2746300bf950bfe382b3f2b80990bbee773cbdbd2d1e2a897a9ed1e261", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_smoke/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_static_routes/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "62a31764ef528947cdefe8eb150e20bdaba422d40bac12a3609948ca1575cf8f", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/meta", + "name": "tests/integration/targets/nxos_static_routes/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/meta/main.yml", + "name": "tests/integration/targets/nxos_static_routes/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/defaults", + "name": "tests/integration/targets/nxos_static_routes/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/defaults/main.yaml", + "name": "tests/integration/targets/nxos_static_routes/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "3eda3cf170b296ca5e5f4996c8b03c030d87a4e3e6197f7770e2b14e739e4ab3", "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/tests", + "name": "tests/integration/targets/nxos_static_routes/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/tests/cli", + "name": "tests/integration/targets/nxos_static_routes/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/tests/cli/misc_tests.yaml", + "name": "tests/integration/targets/nxos_static_routes/tests/common/overridden.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dedfb27511bd8fde863a0aa430bdd23272cd766d0c23694764d01852c9586073", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_smoke/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "ff14829c4bb5758e9c2bcce36a6a134e5fd2d02af7586147e25ce45f5d3c6197", "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/tests/common/common_utils.yaml", + "name": "tests/integration/targets/nxos_static_routes/tests/common/rtt.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a60e645271b0b349228daf7eac3948d5651a32abd8cb578005202d4c1ed80236", + "chksum_sha256": "ac26dd65c91afd1fd0e3734c2d3b9c361904f6af8fed0fbce8ee7746c96b64bf", "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/tests/common/misc_tests.yaml", + "name": "tests/integration/targets/nxos_static_routes/tests/common/rendered.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca259adfd9eabd17072e03cae98011aa82cf2e1b6d8fc88fb0ada2ebaca18d7a", + "chksum_sha256": "b9734f5468d080e059ad191471f78497c2ce42fa6d87de56f9f2e273bc0d8e28", "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/tests/common/common_config.yaml", + "name": "tests/integration/targets/nxos_static_routes/tests/common/gathered.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dea32a9f41f8c2367181bfb2fc2821e4304e393ac781dd02e19d6cb01c6273ae", + "chksum_sha256": "f58a5e229e9cb4a2cd367d9bd3d36dfc7b8a03598bd35d77c19ea701e70b8976", "format": 1 }, { - "name": "tests/integration/targets/nxos_smoke/tests/common/caching.yaml", + "name": "tests/integration/targets/nxos_static_routes/tests/common/merged.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2db51e2d9c925d2773d4bcf45ee241c75cc02547793d07cad590f1d9657eb36c", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_bgp_templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_bgp_templates/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "d8a7a44814c334c50589139d3473b014a953fda361f2d88075fe1538f65a580e", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_static_routes/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "244c13d831c6419ec7e7a46e3e00e82fc1be5a476e5204561deae0efce659d93", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tasks/main.yaml", + "name": "tests/integration/targets/nxos_static_routes/tests/common/replaced.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "918e266fd84500fc8a9d7958437789683bd47b7875371afaf4941b60f4594bc7", + "chksum_sha256": "5c23e4c252c1cd1583fd56550d8d702f0b09b867eb03c50886e83f3c24197690", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_static_routes/tests/common/deleted.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_bgp_templates/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "10271b66076c4d1659a13c85ae4ba02c903ba2eb771ba8a2e31f0910c46de739", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/meta/main.yml", + "name": "tests/integration/targets/nxos_static_routes/tests/common/parsed.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_bgp_templates/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "4a2cd09da60d6b0bc0904e3f313e959fc3efbba7979d14309764e11aaefab96d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/defaults/main.yaml", + "name": "tests/integration/targets/nxos_static_routes/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "d486bec06fd92b15f491fc77298d00447520a955e2dbf3d84a5a739d1a2703c2", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests", + "name": "tests/integration/targets/nxos_config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common", + "name": "tests/integration/targets/nxos_config/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_config/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/deleted.yaml", + "name": "tests/integration/targets/nxos_config/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "425c2ab3097932fcb46a43b4d5b8bcaeed500348e760e77a5b6f1d4e4fca9eea", + "chksum_sha256": "a069f9e3d9d905e5a1d7e2b316e284944bc38cddc390470831451fb4672fbde2", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_config/tasks/redirection.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2326d2afd434fadf9b8d2ef427e3918e6a5947eb39d58c4fc1988df599c58510", + "chksum_sha256": "a4f04d0bc1463bb36c212620e786d8ce8d18681fd03f641c1a37351b6d0dfac8", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_config/tasks/cli_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37be696dfcec49e17974100e3ea8181b391da9cdad82f8667aa2f5df0ff8aaca", + "chksum_sha256": "244797b68a9ec0f73b3fecca59e21469c0bc8126f36a5b7ffe2fe20ebdf22f19", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_config/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "09f60138ddf3d5c8a6782f9f5f937091c37a58ea72c0304384034becdf946850", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1197072828ecfc518dd9ac00389c239db31f18e8d566fbe5a37fd80ff479f104", + "name": "tests/integration/targets/nxos_config/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_config/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0f7753a98712bcde737fce34f1a0af8d5a655bba229b306685e5ae6f8c26257d", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/fixtures", + "name": "tests/integration/targets/nxos_config/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/fixtures/parsed.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e921d4fa370873c1b237ba6b3ee2d3c0a70520b08f5097e960152137a57ed123", + "name": "tests/integration/targets/nxos_config/templates/basic", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_config/templates/basic/acl_config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d307cdaf9d9ecb2c711093d4f9879deb595a843ed2d17b6ae1036d918b22cf2f", + "chksum_sha256": "f8cfadc33b5527be5bd82a279cbcc769a882135ce815cb6d42177cb51d325e4e", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_config/templates/basic/base_running_config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a1ffab53eece71058929fba7b157214cd3aeea388b6bf8aae94e146b03e5eb25", + "chksum_sha256": "85528fb2bdea51956f0b6d9a7cb07c7bc75e498553f9b5301b904db35ed0f929", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_config/templates/basic/intended_running_config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56e1c2649908ef81810457cc96bc917c530d7096e907b516389ef7cdbe3c9ba3", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_bgp_templates/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "b478553dd335d5085c847219eae58a8daac0902372a5e8fbbd133da3850332b2", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_templates/vars/main.yml", + "name": "tests/integration/targets/nxos_config/templates/basic/configstrict1.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "320a4fb71862d3232cd18205318c3a960d55b06bb1fd7fa7afd49ff122c04605", + "chksum_sha256": "da30d9c2fbe9c9473f957d26568b2cb42baa620e261efbce7d604535ec532cf5", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_config/templates/basic/setupstrict.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b358f8f54eb293ce2eac2ead8f8bc2e3aae7383c2981c9c192530d6bcbff3d6f", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_config/templates/basic/config.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d62440fb734cd4db3dd623ab8e77214ff7f82e44c7dfca249b20dcd83d83a9af", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_config/templates/basic/setupexact.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "b358f8f54eb293ce2eac2ead8f8bc2e3aae7383c2981c9c192530d6bcbff3d6f", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping/tasks/main.yaml", + "name": "tests/integration/targets/nxos_config/templates/basic/configexact2.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "b5884db197b0f69276768f1f6e5e8b4214ead32869dab90d76fae353425a4b28", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_config/templates/basic/configblock.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "f8cfadc33b5527be5bd82a279cbcc769a882135ce815cb6d42177cb51d325e4e", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_config/templates/basic/configexact1.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f8cfadc33b5527be5bd82a279cbcc769a882135ce815cb6d42177cb51d325e4e", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping/meta/main.yml", + "name": "tests/integration/targets/nxos_config/templates/config.js", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "c6d65e4fbe26ecfdf18d8eba2eac04aecfdd65e59e6b6db1c2aa2d29ed5a5847", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping/defaults", + "name": "tests/integration/targets/nxos_config/templates/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping/defaults/main.yaml", + "name": "tests/integration/targets/nxos_config/templates/defaults/test.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "356d51cb39cbc26b408ca0b3aeacc83634ee2f6e061811a3a8fafb63955ffa4d", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_config/templates/defaults/config.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "522484a8eb35e809c1ebd645a73ca12f02b09c6cf237f1db1ed577088c149c51", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping/tests/common", + "name": "tests/integration/targets/nxos_config/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_snooping/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_config/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4a73bc840e125f41372313d58b550980ef7c1642f87ba9bb8ee85d8d026ff42", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps", + "name": "tests/integration/targets/nxos_config/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tasks", + "name": "tests/integration/targets/nxos_config/tests/cli_config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "7b3703086ba8415b259a2c8353dc03d9295173092ba3dc15170ae9718b10626e", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tasks/main.yaml", + "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_exact_match.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e", + "chksum_sha256": "5eb01810e15ac6b6941a7b9b79ca5ca3be016f16ee7f534eea9be0115fb53a46", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_backup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "02aa5aa3478284c141cb3741eb86bf919a560bc25b5a911f453e05ce25737bd7", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_strict_match.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6329b5bab571f5218aeff32c54936052c2188466f842b4364d80dc9c6d800450", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/meta/main.yml", + "name": "tests/integration/targets/nxos_config/tests/cli_config/cli_block_replace.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "9058efd9127aa10094d23e72b8d7b8e0426d2707a113d7be2d539c15a1b9d229", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/defaults", + "name": "tests/integration/targets/nxos_config/tests/nxapi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/defaults/main.yaml", + "name": "tests/integration/targets/nxos_config/tests/nxapi/sublevel_strict.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_route_maps/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "acaded71377fcc8c8b288d527caf6fc777c8d0f50079c8b409d1007f821cc9d3", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_config/tests/nxapi/sublevel.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dc08a002e9e00d36590098bfe308ca825954a3e43755650cb5809684512433cb", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_config/tests/nxapi/toplevel_after.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cdf825a17b7761cfbd225079ec5d366f4584e7f97111e0af086884f87fda0fde", + "chksum_sha256": "7b8ad2836c7ec7360561cb0f4319bbe95feae70b134c5dac9deb2ba18a17638e", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/deleted.yaml", + "name": "tests/integration/targets/nxos_config/tests/nxapi/multilevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c276d4c6888f077b84280f79606acb632995c8f1bf32e8c1c0bcb9c02055ee76", + "chksum_sha256": "ff4c8dc408f5b4296300c4d7d983fcbdf19ee303fc95fe44ddb3d72a8b2aa08e", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_config/tests/nxapi/sublevel_exact.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "562a6817ca710cc4c1b6c4babb9b7bca97334312e19d963f8df83a98b7e94512", + "chksum_sha256": "694ab236d9c21462b423d507666dfe90caceca03e8a2f8fa3759f9f51b6d06e0", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_config/tests/nxapi/toplevel_before.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff60a5603326c1ae214cbac1f9411495c0cab6360f7880234d1b2e3be1a2ffbb", + "chksum_sha256": "1d150adeed3e6e02c3adc3871d29b6a153d504ab7a861cd401b02c480008ba5b", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3b2a9d97ae8aa59ee542363b43e7051f5d8492e4f45ba0db862a9d071e1ef820", + "name": "tests/integration/targets/nxos_config/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_config/tests/cli/sublevel_strict.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d8ea6575a0570f9ce32c1d3211f075ee42f56a4ba2d87115c6fccd3409b6b5d0", + "chksum_sha256": "057bf9a3f64bb1abb24a5dc5a530553401a32850185af62cb278c85228ac6465", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_config/tests/cli/diff.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "036af452cc03bdec84720356e6c7013b4f39c2a6800e1f8303120d785b2955e7", + "chksum_sha256": "d890138033f9812260dfd304fb4888d77e0c78b71f0afb2f8f97ce71f11a2491", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_config/tests/cli/sublevel.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "937eb38ce64f2eaaab0f4c8f86a336d6fa022a96d75e285baaf7c85f45fb0b09", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/fixtures/parsed.cfg", + "name": "tests/integration/targets/nxos_config/tests/cli/toplevel_after.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "09e1c1e0b37433d900624319d7037eb3672c94053d18f87f22552dceeec1dc96", + "chksum_sha256": "7792c748c17cf012bd7462753459725b9b2d4e8418a3edb3f4f76eb84f8b5914", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/_setup.yaml", + "name": "tests/integration/targets/nxos_config/tests/cli/replace_block.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5153443ed073b0cc035110ac96d297361e22abe390c84014d0a7dbc83ede74e4", + "chksum_sha256": "e0eef2496cf4af6b50d6274c1b6ef30dbe7955e60ab6695c4cc0660ee5e8a51e", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_config/tests/cli/multilevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56653dab75b72e7a40ed1dbff928b5fd2dedf7651dcf2155747903b1a64803e4", + "chksum_sha256": "b91edced261b04cd778d86a702fd71159bcb7e37050b2b59d66f5fbd0485ca6e", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_config/tests/cli/sublevel_exact.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab508eea7234bac851c3c482330fa0c4afb0e8bd2af87d91901c230754d9779d", + "chksum_sha256": "b755c791e3a1b329e7da5896f70e10b01bdc5237bbe2e80316a4515d6f8d8bd8", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_config/tests/cli/toplevel_before.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4e59d332194a4bb9ce27f445771203088b05b31a191b59d0e9e049deb72552a8", + "chksum_sha256": "da70c4dcf111e0de17abc736ab6b4cfef245ca202d235dd1d9e611b40bbab8b2", "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/vars", + "name": "tests/integration/targets/nxos_config/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_route_maps/vars/main.yml", + "name": "tests/integration/targets/nxos_config/tests/common/src_invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e01454e13b8195b24273afb60288d0cb4a32a1ca4e7f1fff3bfea0fd2610f18", + "chksum_sha256": "000c3c67b80eab4be77858bbb29844ec788342c63d8570c1db6166ca5a9539b5", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_config/tests/common/src_basic.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eccd369dee1af74d2b9f2888107f438904ae0c58705d800ad95e913965991608", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_config/tests/common/save.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bc462c07044762a41b8eddbe29be65aa51e6d6cea05d1e0630555e8cb4a9e446", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_config/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "55efec005b7a96d5dbd8739cfce99c359f047d1aacbee36ad6bc04bcf8283f26", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface/tasks/main.yaml", + "name": "tests/integration/targets/nxos_config/tests/common/toplevel_nonidempotent.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "48fbcde0f38c5b06062ccb0f93d50a5b7a7554edf66ee7ed4779d9d4ce524ac1", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_config/tests/common/backup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "098fa1e9566ae02a5c089a7ab7a235ce53f1bc78b431e01595556f623f718c82", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_config/tests/common/toplevel.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2bc1969eeb4a97775fd72dd6e5109d499c24cf5735c2c54bf75dcf7d49690bea", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface/meta/main.yml", + "name": "tests/integration/targets/nxos_config/tests/common/defaults.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "db431603f9429be57048a8789d1f0af71d6cdae47a26878a608c082768a1244d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_config/tests/common/sublevel_block.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "45748bd39c32ff0675cebcff8ed674384c0fcbd51797f2110edfbef816394801", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface/defaults/main.yaml", + "name": "tests/integration/targets/nxos_config/tests/common/src_match_none.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "f485a516ee779d29f9c4bef94249e47c885743481d409fedaad14bd49ecbafe0", "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface/tests", + "name": "tests/integration/targets/nxos_config/tests/redirection", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface/tests/common", + "name": "tests/integration/targets/nxos_config/tests/redirection/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vrf_interface/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_config/tests/redirection/cli/shortname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f97e455b1bd40d8c37f4c473ba8a86d18cb742022dface71269898bcf9d6594", + "chksum_sha256": "00bb1bd085c826013b04f4eaf7f74ff0de45ec8330aa386f4cd0263d468df9f1", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_location", + "name": "tests/integration/targets/nxos_route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_location/tasks", + "name": "tests/integration/targets/nxos_route_maps/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_location/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_route_maps/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_location/tasks/main.yaml", + "name": "tests/integration/targets/nxos_route_maps/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_location/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_route_maps/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_location/meta", + "name": "tests/integration/targets/nxos_route_maps/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_location/meta/main.yml", + "name": "tests/integration/targets/nxos_route_maps/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_location/defaults", + "name": "tests/integration/targets/nxos_route_maps/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_location/defaults/main.yaml", + "name": "tests/integration/targets/nxos_route_maps/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_snmp_location/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_location/tests/common", + "name": "tests/integration/targets/nxos_route_maps/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_location/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_route_maps/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e00a1c43687d39e22e8835b039f398d7bdebbcc45399d8cd01d6ca7d4ef6e96", + "chksum_sha256": "2e01454e13b8195b24273afb60288d0cb4a32a1ca4e7f1fff3bfea0fd2610f18", "format": 1 }, { - "name": "tests/integration/targets/nxos_devicealias", + "name": "tests/integration/targets/nxos_route_maps/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_devicealias/tasks", + "name": "tests/integration/targets/nxos_route_maps/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_devicealias/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f47853340600c1c9b76ed00695079b203ae45896e40acfac2f48e28f2ad98b40", + "name": "tests/integration/targets/nxos_route_maps/tests/common/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_devicealias/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_route_maps/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_devicealias/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "09e1c1e0b37433d900624319d7037eb3672c94053d18f87f22552dceeec1dc96", "format": 1 }, { - "name": "tests/integration/targets/nxos_devicealias/meta/main.yml", + "name": "tests/integration/targets/nxos_route_maps/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", + "chksum_sha256": "ab508eea7234bac851c3c482330fa0c4afb0e8bd2af87d91901c230754d9779d", "format": 1 }, { - "name": "tests/integration/targets/nxos_devicealias/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_route_maps/tests/common/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3b2a9d97ae8aa59ee542363b43e7051f5d8492e4f45ba0db862a9d071e1ef820", "format": 1 }, { - "name": "tests/integration/targets/nxos_devicealias/defaults/main.yaml", + "name": "tests/integration/targets/nxos_route_maps/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "c276d4c6888f077b84280f79606acb632995c8f1bf32e8c1c0bcb9c02055ee76", "format": 1 }, { - "name": "tests/integration/targets/nxos_devicealias/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_route_maps/tests/common/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "56653dab75b72e7a40ed1dbff928b5fd2dedf7651dcf2155747903b1a64803e4", "format": 1 }, { - "name": "tests/integration/targets/nxos_devicealias/tests/common", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_route_maps/tests/common/_setup.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5153443ed073b0cc035110ac96d297361e22abe390c84014d0a7dbc83ede74e4", "format": 1 }, { - "name": "tests/integration/targets/nxos_devicealias/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_route_maps/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a93b103d12183553437c6808898ac57aa27e80ef5d1547e496e4ce5d5039baa9", + "chksum_sha256": "d8ea6575a0570f9ce32c1d3211f075ee42f56a4ba2d87115c6fccd3409b6b5d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_interface", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_route_maps/tests/common/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cdf825a17b7761cfbd225079ec5d366f4584e7f97111e0af086884f87fda0fde", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_interface/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_route_maps/tests/common/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "562a6817ca710cc4c1b6c4babb9b7bca97334312e19d963f8df83a98b7e94512", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_interface/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_route_maps/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "ff60a5603326c1ae214cbac1f9411495c0cab6360f7880234d1b2e3be1a2ffbb", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_interface/tasks/main.yaml", + "name": "tests/integration/targets/nxos_route_maps/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "chksum_sha256": "4e59d332194a4bb9ce27f445771203088b05b31a191b59d0e9e049deb72552a8", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_interface/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_route_maps/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "036af452cc03bdec84720356e6c7013b4f39c2a6800e1f8303120d785b2955e7", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_interface/meta", + "name": "tests/integration/targets/nxos_zone_zoneset", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_interface/meta/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_igmp_interface/defaults", + "name": "tests/integration/targets/nxos_zone_zoneset/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_interface/defaults/main.yaml", + "name": "tests/integration/targets/nxos_zone_zoneset/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "f47853340600c1c9b76ed00695079b203ae45896e40acfac2f48e28f2ad98b40", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_interface/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_zone_zoneset/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_interface/tests/common", + "name": "tests/integration/targets/nxos_zone_zoneset/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_igmp_interface/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_zone_zoneset/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3f1f412736c7af33d14c2be45d461f6f96778bc221e6abdabdc579247c32d72d", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_pim", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim/tasks", + "name": "tests/integration/targets/nxos_zone_zoneset/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_zone_zoneset/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "name": "tests/integration/targets/nxos_zone_zoneset/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_zone_zoneset/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "chksum_sha256": "97b10ee26b05c01b328d79887c41479bd2bf559184fb1df4af53645db6e109ba", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim/meta", + "name": "tests/integration/targets/nxos_zone_zoneset/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim/meta/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_pim/defaults", + "name": "tests/integration/targets/nxos_zone_zoneset/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim/defaults/main.yaml", + "name": "tests/integration/targets/nxos_zone_zoneset/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "781a480d71c224fb90d67eba3072492ff3f2d263df13ec8c735cabec41956751", "format": 1 }, { - "name": "tests/integration/targets/nxos_pim/tests", + "name": "tests/integration/targets/nxos_acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim/tests/common", + "name": "tests/integration/targets/nxos_acl_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_pim/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab1efb1a3ca7cc688042b32d2d0660eeb0e25ff2bb2c833e9bcdeab5d6a1e0a0", + "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_acl_interfaces/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7be6dc51b2f6fb5601e0d7f3498991d34f0910206fe6ed537217c8eba86a3cf5", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tasks", + "name": "tests/integration/targets/nxos_acl_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_acl_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", + "name": "tests/integration/targets/nxos_acl_interfaces/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/templates/populate_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "6dd477232ff3b52e84f25f81712afb11874700566d9c52d923c012ad1d770cf0", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/meta", + "name": "tests/integration/targets/nxos_acl_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/meta/main.yml", + "name": "tests/integration/targets/nxos_acl_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/defaults", + "name": "tests/integration/targets/nxos_acl_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/defaults/main.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "6a97fa118eda919bd0c4d9b45fbacbb04ef221e6d264073eda5612e7b57228c9", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests", + "name": "tests/integration/targets/nxos_acl_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common/_remove_config.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/populate_acl.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d0b9b581e3e45b412907eecbc4ba5ad1632595e8cb58f397365287ce091bee0", + "chksum_sha256": "d44542c7c93f7edcef7326941f254a969cc90fca962286a98a576a1979064cd0", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common/deleted.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/overridden.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e2964f468cfe2c92dbee0504a71845636d76ff4e079dd07ad7f8656cba328221", + "chksum_sha256": "603d8a6ba49dd33261b0c7a152e55df28f2c3e10f09e9ec0f3eebde8d6c5c7ad", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/empty_config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87888ec93930b5630192fd9f60d931700a43910cfe6a3d092b04099ac88eb612", + "chksum_sha256": "46c8e8809399bcd1bdfe1242e346ac1c340668e32fdbfcba0cfe6a4ad9ff6f4d", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/rtt.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "69cfb989d7be0b980e8fc3eb9d33154c66e2cde5df1a9f8b17b1ea0894879212", + "chksum_sha256": "832178be08db3abba5b2d95b0c57c79f8a4d5b132f1f01f9dfe786c2a3b5cb31", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common/rtt.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/rendered.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "65b9276bee903c86af57ed5a6afee1d84461bf6c7bf3a3cf95aa8369e0c7df57", + "chksum_sha256": "9ab726e93c94df77ac9671e7dfa0b8c89104ea4333e25b56f04830f9bda81942", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6f9623efb3904d185246e618c1cb0726553a5556941e5c2e91b7c9025de0e89c", + "chksum_sha256": "4b97c05adf25534f7d6e4ac7a67e541969eb7e1060b6360f956c5dcae418e5f7", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/gathered.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c70b2b7642402aeef4772a4a8cc7b7abde208bfedd65fbdcf95231b2ab5a74db", + "chksum_sha256": "698995afdf69835fb4ba540353a3e4f213d7954d21073c0cc754b1787cd05231", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/merged.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0fef283f3a139da74d869920dfc1b12b127b20e505c060d30b893d457ea980bc", + "chksum_sha256": "8eae4ac211ea7861be4677520f4962046223747c3f400208cad64b245998d0df", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/replaced.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1f1efb47f41f82d4be94cca66acf388791ed71b63f1f3897f769f7e4110f1be6", + "chksum_sha256": "155aa10a15be7eea0049eb7035993970089c76ee53bcd152999c6055e8586aa1", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/deleted.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe16be9cd5316c7526ea489bad81d693f40c2f2351c01f60a4074802f208164e", + "chksum_sha256": "3c80a977c86fd76c2bbf06ab9878e383170afc5cba3f336e2d4f8ca2de3500fa", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/parsed.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5745013bf8f6e23f513cea1bb8878e4ca80ba61a331a5a5d2a7097673b786ed2", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_vlans/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "ac628812931497d1846e45df02f6c9fc4ba4b8d61fba9a559793b8b217e08484", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/fixtures/parsed.cfg", + "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d00aff551522b3a0a61d5ba2b38944de36985bd3353dc67987d76d650ccbea3", + "chksum_sha256": "ff18091eda8eab8839ce8b146409c956a16da2af0d78204879e2a0d844835c46", "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/vars", + "name": "tests/integration/targets/nxos_hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_vlans/vars/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fd3723c027909807b1d6ef73222d5bfc96f98c680a9f86f3e89c0366bdd22116", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_acl_interfaces", + "name": "tests/integration/targets/nxos_hostname/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_hostname/tasks/nxapi.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_hostname/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666", + "chksum_sha256": "c100293cbf1e43e53f2ff874e3e1079621ae414e404db0078a26044ececac0b1", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/nxos_hostname/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7be6dc51b2f6fb5601e0d7f3498991d34f0910206fe6ed537217c8eba86a3cf5", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_hostname/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_hostname/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/meta", + "name": "tests/integration/targets/nxos_hostname/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/meta/main.yml", + "name": "tests/integration/targets/nxos_hostname/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/defaults", + "name": "tests/integration/targets/nxos_hostname/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/nxos_hostname/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "372a997c3a0ce9aa7b42746d99a75295a66504416d94fd1b0c545e58717a6a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests", + "name": "tests/integration/targets/nxos_hostname/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common", + "name": "tests/integration/targets/nxos_hostname/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/remove_config.yaml", + "name": "tests/integration/targets/nxos_hostname/tests/common/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_hostname/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a810ecec7ad98918852e116b1723828e387fe649b66384bcce7ac7eeda9a3c3", + "chksum_sha256": "6cd019ca4bbc9dc9a7657ccbc89a52a8505890bda564813765bc2bb004ef3814", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/populate_config.yaml", + "name": "tests/integration/targets/nxos_hostname/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff18091eda8eab8839ce8b146409c956a16da2af0d78204879e2a0d844835c46", + "chksum_sha256": "292e2e1750dcd0b5114b4c1b2f8fe93125754fa76c1869f64f87e6055da6338f", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/parsed.yml", + "name": "tests/integration/targets/nxos_hostname/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac628812931497d1846e45df02f6c9fc4ba4b8d61fba9a559793b8b217e08484", + "chksum_sha256": "b2db6ef6d129f976a7c1dd3d1543020bba577d399fa4e780311e9942d0e39a21", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/empty_config.yml", + "name": "tests/integration/targets/nxos_hostname/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "46c8e8809399bcd1bdfe1242e346ac1c340668e32fdbfcba0cfe6a4ad9ff6f4d", + "chksum_sha256": "ce390e649cf85c4eddff7df5c0d545f57e389bb36774ae580dadafec45cf2a1b", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/gathered.yml", + "name": "tests/integration/targets/nxos_hostname/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "698995afdf69835fb4ba540353a3e4f213d7954d21073c0cc754b1787cd05231", + "chksum_sha256": "8564938ffbfc1d998d5ce080e9bc6cb612cf2aeefa19ac79bf9bf6f895800a2e", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/merged.yml", + "name": "tests/integration/targets/nxos_hostname/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8eae4ac211ea7861be4677520f4962046223747c3f400208cad64b245998d0df", + "chksum_sha256": "c76970334ac8f7dea1c52d4a2e9785b43fe9754ed2cece81e49036d8efce6507", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/replaced.yml", + "name": "tests/integration/targets/nxos_hostname/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "155aa10a15be7eea0049eb7035993970089c76ee53bcd152999c6055e8586aa1", + "chksum_sha256": "3c610838a6fa946c2237c8292c07b688a1ba7e8096a2d35d75f12f0b58866ed7", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/populate_acl.yaml", + "name": "tests/integration/targets/nxos_hostname/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d44542c7c93f7edcef7326941f254a969cc90fca962286a98a576a1979064cd0", + "chksum_sha256": "0b28a51b56bc716da4598490f3cb3302329f0113eb3ab32fa9a860223eae43f6", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/deleted.yml", + "name": "tests/integration/targets/nxos_hostname/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c80a977c86fd76c2bbf06ab9878e383170afc5cba3f336e2d4f8ca2de3500fa", + "chksum_sha256": "c48e9bf3dac84165ae9953b7ad26ecec061cc599fd5cc78290d048b36119ce19", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/rtt.yml", + "name": "tests/integration/targets/nxos_hostname/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96d777b4974044947557f7ae5f9400640b0376086e15759c8dd8befb6a65d4b2", + "chksum_sha256": "6e0e085de3251f1846bf350484b27a639383cf70f82effdb6d8aa0b73f105c60", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/overridden.yml", + "name": "tests/integration/targets/nxos_hostname/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "603d8a6ba49dd33261b0c7a152e55df28f2c3e10f09e9ec0f3eebde8d6c5c7ad", + "chksum_sha256": "55288117a1ba1770a3e0bcac6e550c318807316ce84c65e536ba34cc449f62b0", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/tests/common/rendered.yml", + "name": "tests/integration/targets/nxos_devicealias", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_devicealias/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_devicealias/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ab726e93c94df77ac9671e7dfa0b8c89104ea4333e25b56f04830f9bda81942", + "chksum_sha256": "f47853340600c1c9b76ed00695079b203ae45896e40acfac2f48e28f2ad98b40", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/vars", + "name": "tests/integration/targets/nxos_devicealias/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_devicealias/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/vars/main.yml", + "name": "tests/integration/targets/nxos_devicealias/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6a97fa118eda919bd0c4d9b45fbacbb04ef221e6d264073eda5612e7b57228c9", + "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/templates", + "name": "tests/integration/targets/nxos_devicealias/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_acl_interfaces/templates/populate_config.cfg", + "name": "tests/integration/targets/nxos_devicealias/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6dd477232ff3b52e84f25f81712afb11874700566d9c52d923c012ad1d770cf0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family", + "name": "tests/integration/targets/nxos_devicealias/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_devicealias/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_devicealias/tests/common/sanity.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a93b103d12183553437c6808898ac57aa27e80ef5d1547e496e4ce5d5039baa9", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tasks", + "name": "tests/integration/targets/nxos_acls/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_acls/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", + "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tasks/main.yaml", + "name": "tests/integration/targets/nxos_acls/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "918e266fd84500fc8a9d7958437789683bd47b7875371afaf4941b60f4594bc7", + "chksum_sha256": "dc2e669d7f6ccc6f6bd958fc52376105ef28a808ec084c11f2dfcecf1471760a", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_acls/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", + "chksum_sha256": "c57c3ff656bb8daf9febb3c7a7bff934b952d1ccb83604d93e23ccfc3ea88724", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/meta", + "name": "tests/integration/targets/nxos_acls/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/meta/main.yml", + "name": "tests/integration/targets/nxos_acls/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/defaults", + "name": "tests/integration/targets/nxos_acls/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/defaults/main.yaml", + "name": "tests/integration/targets/nxos_acls/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tests", + "name": "tests/integration/targets/nxos_acls/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common", + "name": "tests/integration/targets/nxos_acls/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c07047642c717ad5e564697143a11e7cc93a18376d91ee56dc5f44f3d19e22b5", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e76deb0ccd6d015af64ec4b54fc1da88ccf401b0aa373bda8d4cfabd23b9b1d9", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/gathered.yaml", + "name": "tests/integration/targets/nxos_acls/tests/common/overridden.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0aefe84d03b67ec239027816ac3522c7b7cfabac56bd979c781c74cab4b01955", + "chksum_sha256": "9e261e0e1a8b1778739d5bb1c17c75a378186c5c2efd72a351d604e0d7560318", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/empty_config.yaml", + "name": "tests/integration/targets/nxos_acls/tests/common/rtt.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fed0782bb5669d310ba18f8a49c51be3b1c8b16b0951f388e2280ed4a1769b50", + "chksum_sha256": "4912e31a951706d32e6682e65095ad1794df0cdedeeeec3d5e9ba139e14a0409", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/merged.yaml", + "name": "tests/integration/targets/nxos_acls/tests/common/rendered.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a6f21fe892ff7e532f40e0d7ecb6bba83f26bb1765ac4177b453d85f896dc633", + "chksum_sha256": "aa791c7d2f4a1989dd888e3880d230146cee3a448116cb224c31066a7f7573fe", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/overridden.yaml", + "name": "tests/integration/targets/nxos_acls/tests/common/remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba2591fcb1bd54b023d7d45818463cb4d7efb6c7a918133129505ab24d3c9b7d", + "chksum_sha256": "6b36b668815324ab75f641e80f9341c4f7b4f264585d07409b01704c5f8a018d", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/_populate_config.yaml", + "name": "tests/integration/targets/nxos_acls/tests/common/gathered.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ad5b3d3c16b81ea4fcf40639099f5191577136f0cf3ff4970ed630d8248ec66", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/fixtures", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "8c6126ef877c72fdb6e19f6499e4c3ac4219a5fb4cde44f4529306aac3fd7966", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/fixtures/parsed.cfg", + "name": "tests/integration/targets/nxos_acls/tests/common/merged.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6189829f4b10872e4553b8c55db04c742cca9c7598d067ddb3eea05e0ab2f0d", + "chksum_sha256": "fc2db360c49a4f960de158645c43115dec175da832363eeaba86a8ea97d1e62b", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/replaced.yaml", + "name": "tests/integration/targets/nxos_acls/tests/common/replaced.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a2cbefd9d104a0f9e0370a13ed7e87feb1e74175d922f33d786e604e775a498", + "chksum_sha256": "2b9ce3eb07fb30eb390fc555830b61b4118c485523bf85538a805feb06ea0fb0", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/parsed.yaml", + "name": "tests/integration/targets/nxos_acls/tests/common/deleted.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29d4c709454554edeef9e3a0e394a93ff71200d5ae09e04d855d8edcedc24549", + "chksum_sha256": "14f12dadd4d09d23feee07007209b1eae18bc9c013a50f79ed39ae022e652226", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/tests/common/rendered.yaml", + "name": "tests/integration/targets/nxos_acls/tests/common/parsed.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7121942f388ee7ab8d2484101d1a980b1d666be25f8388c6f00438f36a99736d", - "format": 1 - }, - { - "name": "tests/integration/targets/nxos_bgp_address_family/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "9c6e2f1a0b9c9d9dc2c33b7906490f5acde968592b9257f095b4cfc38eee3dd9", "format": 1 }, { - "name": "tests/integration/targets/nxos_bgp_address_family/vars/main.yml", + "name": "tests/integration/targets/nxos_acls/tests/common/populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "528513c35a708d559281b5758e5c998565f110acf10803504b3cdbf2accf1988", + "chksum_sha256": "ea179f0b4974165f1ad36daff838b34a663eb136543c6a908df7b8fe73027eaa", "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot", + "name": "tests/integration/targets/nxos_snmp_contact", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot/tasks", + "name": "tests/integration/targets/nxos_snmp_contact/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_snmp_contact/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot/tasks/main.yaml", + "name": "tests/integration/targets/nxos_snmp_contact/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_snmp_contact/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot/meta", + "name": "tests/integration/targets/nxos_snmp_contact/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot/meta/main.yml", + "name": "tests/integration/targets/nxos_snmp_contact/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot/defaults", + "name": "tests/integration/targets/nxos_snmp_contact/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot/defaults/main.yaml", + "name": "tests/integration/targets/nxos_snmp_contact/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot/tests", + "name": "tests/integration/targets/nxos_snmp_contact/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot/tests/common", + "name": "tests/integration/targets/nxos_snmp_contact/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snapshot/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_snmp_contact/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "171022870f501d3dcb8c73978ee34038cb5e65c32786bbabc9f638c9ae04be4d", + "chksum_sha256": "21c997106ed806dbad5a3cdba01f5e201161020b6498a5d92ac003b702fa579a", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps", + "name": "tests/integration/targets/nxos_reboot", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps/tasks", + "name": "tests/integration/targets/nxos_reboot/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_reboot/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", + "chksum_sha256": "b93ca9bd41e9b2ddb1e47c5782c7104ad85b67441154a82ac8954fdaebc62cfc", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps/tasks/main.yaml", + "name": "tests/integration/targets/nxos_reboot/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", + "chksum_sha256": "0789afb380e4ee3da221b8e5904d1fc0309acaaf7afce7e63c9ba4c75c34ef57", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_reboot/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps/meta", + "name": "tests/integration/targets/nxos_reboot/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps/meta/main.yml", + "name": "tests/integration/targets/nxos_reboot/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps/defaults", + "name": "tests/integration/targets/nxos_reboot/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps/defaults/main.yaml", + "name": "tests/integration/targets/nxos_reboot/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps/tests", + "name": "tests/integration/targets/nxos_reboot/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps/tests/common", + "name": "tests/integration/targets/nxos_reboot/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_traps/tests/common/sanity.yaml", + "name": "tests/integration/targets/nxos_reboot/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05f0dab9e4ec9f1e7c2800b2027b212b293b7f81a6a5a5645ded7d94b353e09f", + "chksum_sha256": "b4c67bb49d21e284b5a0589f01582abe664f16d3361279b26463e6db76fd2425", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host", + "name": "tests/integration/targets/nxos_snmp_traps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/tasks", + "name": "tests/integration/targets/nxos_snmp_traps/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/tasks/nxapi.yaml", + "name": "tests/integration/targets/nxos_snmp_traps/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/tasks/main.yaml", + "name": "tests/integration/targets/nxos_snmp_traps/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/tasks/cli.yaml", + "name": "tests/integration/targets/nxos_snmp_traps/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/meta", + "name": "tests/integration/targets/nxos_snmp_traps/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/meta/main.yml", + "name": "tests/integration/targets/nxos_snmp_traps/meta/main.yml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/defaults", + "name": "tests/integration/targets/nxos_snmp_traps/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/defaults/main.yaml", + "name": "tests/integration/targets/nxos_snmp_traps/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/tests", + "name": "tests/integration/targets/nxos_snmp_traps/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/tests/common", + "name": "tests/integration/targets/nxos_snmp_traps/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v2_inform.yaml", + "name": "tests/integration/targets/nxos_snmp_traps/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54b2c813dda14d97a1eef23c8a3b3ff2bdc194b60ec4cf15d7f6e0068802afa5", + "chksum_sha256": "05f0dab9e4ec9f1e7c2800b2027b212b293b7f81a6a5a5645ded7d94b353e09f", "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v3_trap.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1e10b5c9c01f39edff0f76171c81720d458aca5775d0f5f97f20bd2e6c21f57f", + "name": "tests/integration/targets/nxos_logging_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v1_trap.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "aa6a8b70ec63534db6d01bad4ccb22de07cf1d7c0c65b148a02474964d1a4e72", + "name": "tests/integration/targets/nxos_logging_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/nxos_snmp_host/tests/common/sanity_snmp_v3_inform.yaml", + "name": "tests/integration/targets/nxos_logging_global/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0156bedc287881d6d9d767fd9720c5821708b9ad3c9c217c5c4b1df0a72a6891", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "tests/integration/target-prefixes.network", + "name": "tests/integration/targets/nxos_logging_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1d281d4e38e720eeeee03bdd1df2429947e358ec15ab276b0b29765d99953d63", + "chksum_sha256": "2396a1bb62aa2d673208deb59766a787971d061630b8467afa525b7fdcb2e95e", "format": 1 }, { - "name": "tests/.gitignore", + "name": "tests/integration/targets/nxos_logging_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "docs", + "name": "tests/integration/targets/nxos_logging_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vrf_af_module.rst", + "name": "tests/integration/targets/nxos_logging_global/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "505afd306e1f21c5940397a50a876c3a2413e197d166db33f9196dfc1b9cb677", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_user_module.rst", + "name": "tests/integration/targets/nxos_logging_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_logging_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d655e1b47fea4edf25adb1fdd20fa7191ef114caaa31d5ce1c2b9edf46b1c63c", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_pim_rp_address_module.rst", + "name": "tests/integration/targets/nxos_logging_global/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_logging_global/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "94630c630affe8dedd940b41d0fcdab02712ade527964334956ca5698280d13d", + "chksum_sha256": "15f80d89c3629bea0c669753c52136268f11e94a83ba6e69411fc96ab8449457", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_logging_global/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_logging_global/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_logging_global/tests/common/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_system_module.rst", + "name": "tests/integration/targets/nxos_logging_global/tests/common/fixtures/parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c8e2849fa4d54b78f6e1d87d2ce57d052b37b75b8ac2739b62ad111e326b617", + "chksum_sha256": "3a97c562338de257e93908f409c770a5439d362fcddcdb8d939dc7ff2e7002c6", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_ntp_options_module.rst", + "name": "tests/integration/targets/nxos_logging_global/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adeee3c976eeaec6027d4327f520832708c6ecdffabfd321a854c8b6b821e07b", + "chksum_sha256": "d952ab3ac507f65ff98eb58e380db0abe1583198f653d77beaa4e384929ad698", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_evpn_global_module.rst", + "name": "tests/integration/targets/nxos_logging_global/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "993ea85ff1bf02311f55646f0c5dcadc2d216a2819b7902f43470a645d1b90d7", + "chksum_sha256": "82ec13620a0c096e01a22d68b13c59798667ca68d3ddbbc1be802ff3f415a562", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_aaa_server_module.rst", + "name": "tests/integration/targets/nxos_logging_global/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae7d06f89fb79b0ff5b7dbb41b289db70e8c602a08c1baac5b059adc72775665", + "chksum_sha256": "926b1b20a7babe989cc2f1b3e34a16d08368817d3ef38d6903650a294a42cc3a", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_config_module.rst", + "name": "tests/integration/targets/nxos_logging_global/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c973074149659b0f0130eaf0a7339a039cd5d496f13cfbb4e51c59d0af957096", + "chksum_sha256": "dadff9821e586c3a062c7ac4b2936903359a8fc4b2f4cceeb466f558c82b52d1", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_aaa_server_host_module.rst", + "name": "tests/integration/targets/nxos_logging_global/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e8d1dc8303a82ca59e70c37d6852f8dd1ba6b002e896a9f4f2182148a6944ef7", + "chksum_sha256": "04822e2f3237fcae131842012a520b5fde51c1fd4b381ab86aa055d7c076f867", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_pim_interface_module.rst", + "name": "tests/integration/targets/nxos_logging_global/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b7fa1c8e28a128af94059b3d66e3e40c97e7d748a858ff74e77a0e313641c3ff", + "chksum_sha256": "619954ad3ae24e83760fb7b9f09daaf010f96020056398fe49a04001326f72c8", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_fc_interfaces_module.rst", + "name": "tests/integration/targets/nxos_logging_global/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd8685843982e7d823622c7c11bbb1fa2bc89409a7759f943a649c39540841d6", + "chksum_sha256": "7c13b226487605fb6b6c73406c97a1972ed4c1995825124cb426d64eaac1a2ec", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_httpapi.rst", + "name": "tests/integration/targets/nxos_logging_global/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eb7f6fd0b46ad4b478746f0518b8d443e541f44ba8d77f999a42a760671ea015", + "chksum_sha256": "b1658713d71b118aec3c1e27ae2d2453c239d56b32e3c6d816f5187796b40c7c", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_overlay_global_module.rst", + "name": "tests/integration/targets/nxos_logging_global/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8362ed52554894dd979a332e946ede7fa0834c17d8980a08a282320a2a18391", + "chksum_sha256": "b4a5f8a10bd86d7609cb6688523bc611e052260c4a06bf9cf202f33eee40a1f5", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_lacp_module.rst", + "name": "tests/integration/targets/nxos_logging_global/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf3920fe2dbbd42f322d4a0f4dd23c875d01f6a5545dbc648ae5ae3aa62320de", + "chksum_sha256": "dd0584d7e6d6a3aa5942acda6002b2e13a2bd64d59ee04dc5122274268676cc8", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_ntp_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7a21e1c58d9ce02be1cfa7699138e3008ec4bef1aacbd137d142b22caafc7af0", + "name": "tests/integration/targets/nxos_lldp_global", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vrrp_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "26a52da59610c540242b40091c3fc689cf5b1672a4f36084202ebba38f5589e0", + "name": "tests/integration/targets/nxos_lldp_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_gir_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2969b2a880bc98f5272720086059bc55d861fc1ce00c8854c75aa061ba3aa8bf", + "chksum_sha256": "280d285e1a9b531b25d8b880d3a032933d7135004c4658b7f1eb4872c60cc666", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_bgp_global_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b21cb51d17f350ce70cf1731fca38c9a502e4b0b35c275a0214c976b9c0ce2c9", + "chksum_sha256": "a4138a366efebe8659a4237d00d38110163d05b728a38c3514dce547a6d16a9d", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_file_copy_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c38e717848ddfc093b17245d08c45e6beda5d7b1c263453ef0a43171d5008f47", + "chksum_sha256": "fe84894e2a9ff992a755f52f856ff23c23dd249fb9fe14dc4f264cd1a6070e12", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_l2_interfaces_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0f0b13631588f0c4e04951537a83c446d484cc89ea73b5f3cb7472518f9524ef", + "name": "tests/integration/targets/nxos_lldp_global/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vtp_domain_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18a52103976ba1d930a98e0e7fa45de34d95a86ca222e59b0ffc9629585cdf6a", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_nxapi_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7e1d3a6d1f0ab8c170068321f77ab36c1161892773c9efa90dfff711664bfdb3", + "name": "tests/integration/targets/nxos_lldp_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_ospfv2_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "302ee60d5fd7f5ab60ba47c4e55e45c094002dfd3203119bef8fcd7a2a030d3d", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_telemetry_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2461b4210c818c4300ebd11916a38e830c129d01b644c205846e90a3e1e470c9", + "name": "tests/integration/targets/nxos_lldp_global/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_lldp_interfaces_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d351b81a44cbdf2e64c1c745af9cdd81b1a6ed89bc5b1e5d960b199a818c23c0", + "chksum_sha256": "ac136582618b2844cd5bb84e0aaf52f6b4e7a6ea581a0fa0ec5466e9c9c3bd68", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_snmp_community_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "273905bc36e919c6f348d146018b77d4b028457714b0f3b4b2fad6a078680fe7", + "name": "tests/integration/targets/nxos_lldp_global/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_igmp_interface_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1e6eb10d1c630069ea01a42ae07b033d7c7b5aa72fa3a758a74805dc59b6688a", + "name": "tests/integration/targets/nxos_lldp_global/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vtp_password_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tests/common/overridden.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aba8c49ea83acf4e1ad8de779ebc06e21940537ce459b53bcfbdabdf72dacd06", + "chksum_sha256": "8aeec5521c22e513a4e736c9b51461285abce953173508ae28fb02ecef95952a", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_snmp_user_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tests/common/rendered.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ebfbf6a1bdda73a9f3e5943dc33bbb38d636865ab213c2e79501baca180a6ef", + "chksum_sha256": "18c1848ef28d20fffd52045955b5a54ca72aea45d5c2ff9060d8856aeeb7162a", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_evpn_vni_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tests/common/gathered.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7ab07a1a0137a0b43f2fee0160fff6af516646ec848a811a1a46e012c00cefbb", + "chksum_sha256": "e5f9f21d8529dd8144e8259391a04642355d3f3c9063db5a27472a5180d6b7dd", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_ping_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tests/common/merged.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74122faa018ba84c3628abadef990f3888d58a72897d4b56ec41882348a12141", + "chksum_sha256": "e82eb173fbdc3209c167bc096bf1665240e72b24a34f75c19ec1a3b7c5d4c8d1", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_snmp_server_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tests/common/_remove_config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2dfc1bc683bd7bd38223bf73283e1680999597e4bbef9f73a3a93f829e1e9bce", + "chksum_sha256": "339639545338297ee483c8e1370eeefc88356fceb240523dbbc6d8c237444982", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_hsrp_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tests/common/replaced.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41fd5b3b6c57a33c8ce81d03798b35d598496b89d13327c18dfe27dedaf99ae4", + "chksum_sha256": "a62a8ac1f40b48c56dbd06eb543897331236925608b859a758f1c91037f17455", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_snmp_contact_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tests/common/deleted.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cbb715723ead144ae09062bf77f7f4a73e4a5035a81a7ecec925b00410e8579b", + "chksum_sha256": "ffe0021fbc8bd39a7990267dc791d78f2571f3285efd5fd1244c68159ffca98f", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_facts_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tests/common/parsed.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bd70b6a7af989f66c15280934d332c07b93afcc7b1e106ea41ff3157ccd66f7f", + "chksum_sha256": "ca1cd52e0c16bb7a97f9e1aa4eb9c49600b25854f35a93b0bcfeaf3ead1e7c07", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_install_os_module.rst", + "name": "tests/integration/targets/nxos_lldp_global/tests/common/_populate_config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "60aba080258dbcb6a750738a28130c662db2bdb378f5a9301974d1b35eb559a0", + "chksum_sha256": "c7bacd3b7cb077dc6895ecf350711c1bf39e18739a361f6cf514e9dd4d6355f3", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_snapshot_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a0e3fad000d677b7f24bf64090f02742004a9cf100306a97f51aff9594fe8d9f", + "name": "tests/integration/targets/nxos_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_igmp_snooping_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a31b9e7cac6c66069bc1b9a46fbf4f3e778fec3cdbdb55f4b6d672abeaf7d795", + "name": "tests/integration/targets/nxos_interfaces/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_ospf_interfaces_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "14b703fc053e0bb1480660ba83c421a75d064f6ccc5b036d614cd9fb260045a0", + "chksum_sha256": "adcabdbc005b34ef70ef70c9a7a3b0bfc9b94ff93d2f3ea18bf1f19fbc2d2201", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_igmp_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f12f1c5cb360aa1634964c6343e14141cfce7fc49e37e0062c2957b20459399", + "chksum_sha256": "64ca5b4de950cd0d788bdd92389f7741e663d949ee6b0e343f1038c573564b64", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_bgp_address_family_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6110c639e4f6c1ecbf4b26eae3c5cee417711f047ef02b28ac30a6d802fd5152", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vrf_interface_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "64296c4de9145ceec2a49e4f09b2573fd163bbe33247b395769cb6833cdd16ba", + "name": "tests/integration/targets/nxos_interfaces/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vpc_interface_module.rst", + "name": "tests/integration/targets/nxos_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "941e607951f2fe1347329a6f68d9303ff04fcebedfd0792fe5ab181625e120d3", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "docs/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "tests/integration/targets/nxos_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_static_routes_module.rst", + "name": "tests/integration/targets/nxos_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "321573507ba209d6e730e742919ab4a4dd106bb60fbc63e34cf974b9868890b5", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vlans_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "92873fb2eb3e2513027457a149812b55bcdb3bc05a488ff1eb448a97fcc45be0", + "name": "tests/integration/targets/nxos_interfaces/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_rpm_module.rst", + "name": "tests/integration/targets/nxos_interfaces/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e928284ecee7ed27ef75a660db2e02900d8de4cf0d255bfd31a819f4e2abe036", + "chksum_sha256": "c7aa68e2e8b3bb1d6b4258ed279670b1a8e5fc5e6a63b446eab511c3963db1c1", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_lldp_global_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6994ab2f365796541f268d6d3051e4a192e2b911495e12342d6d3cad12016f2b", + "name": "tests/integration/targets/nxos_interfaces/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_gir_profile_management_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a61bb74ddc282c53b69e51c4b4cbad0edbe362819e4bc3e823fb2dc892052418", + "chksum_sha256": "e26569250511575d31ea2338e2abede7fda11240bd583ac7896adccb24abd7f2", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_acl_interfaces_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "274afa56a270c6d4b216af200a3bde7d6b964f281fe641ef4e5b0eeacb27c844", + "chksum_sha256": "49898e976fb440f5b1ebc404e489b6e2511049c950c8c0d8fe75e251dc5c3671", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_interfaces_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ccbb66492488e26ebf3982743505a0b9fadaa7c6a63adf3d93190064d6419669", + "chksum_sha256": "d5ba532156bd9771e2ec35bb085d404ed049b88e1da827ab9eb6d4dd38a3c871", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_snmp_location_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "321530eb77aa27eecab0eb6090a189eee7b9a7431cc94750c1f0f38718058d4d", + "chksum_sha256": "c8d1e0d8e50dd46dc84c73912990ffca760b0f5e1a8ad8ab2f10a90bce902369", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_devicealias_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4b7ad5d619f577089e5a87b5b628c6c869bd4adf86eb8e8c547b491154361dc6", + "chksum_sha256": "52f0f66116a7b07a9bfd39bcc2cdabc5a2db68ed24d92751f3f53f08332f0ed0", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_udld_interface_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7786920d50729a8a8a73a20bcd0d4296af8095f52590076177511dc0c696dda5", + "chksum_sha256": "a639b04de3b8a2a70660b4034c291526f9e1f4bee9e24e4e543bd719a4f65a50", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vpc_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0aeb5a090773bcf219cb3ab181424bde284e9669ccc3ace93175b739fec4f81a", + "chksum_sha256": "0eb7659a55ab72845d72bf76bcac9618bf84c8d5d55c6fa8f04ff9c15c68a92a", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_hostname_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2cc61e3ea5053c4ee1bb14f41a85e67e4790010b7142e21bb72fcc88a5e715aa", + "chksum_sha256": "3f875bd8877a898338a0402b34179ad17f45b84d1623c72741490f52913eb064", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_acls_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a87f6ac4c6d930a3561852c685ea70e75e34f7653b1cfbade26432a94e2b736", + "chksum_sha256": "c5a2d4d2fa3245673307a06eb29fd3b751fad50fde2dac24f84aaff5498a5af7", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_l3_interfaces_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a3839881ddd3679d82e6376c6aab14f88f57d9b2b626414e90c1845d02f2e6df", + "chksum_sha256": "454396b9f57fd4895a1d8063b565bde8a053291bc6f6e5f934397c75e99ac6cb", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_netconf.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common/purged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da11bd9904bba75e1ca0484cf6ddc0ebcd0a2ffc12b1e9132d60f8a0bc54705c", + "chksum_sha256": "832b01df3053b44b5e69f7b1e62fede8df0291af913f7b4abd1d4545439ef718", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_logging_global_module.rst", + "name": "tests/integration/targets/nxos_interfaces/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "727f844d56c2eef418f10b022c0295ade96365f73b0654b00b5b586b42dfcf44", + "chksum_sha256": "eb7918401f281cb2d25ccebc214ac1fd9ae10975f3ca4f77f56a53f3cc485a40", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_snmp_traps_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "25326502a9e485b1bfe99093b316af67686f797fb8ce8d972c9ae914d8e9da27", + "name": "tests/integration/targets/nxos_snmp_community", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_logging_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d43af63274e03108055551c1ddf7127fe3bf869db5fd5b73bcf3e0b95bcbaea0", + "name": "tests/integration/targets/nxos_snmp_community/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_bgp_neighbor_address_family_module.rst", + "name": "tests/integration/targets/nxos_snmp_community/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3931a7ccbc77cb049c8d06798076797b250d4fb3b2ad60da12b799b62cf01285", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_pim_module.rst", + "name": "tests/integration/targets/nxos_snmp_community/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f974bc3ca8293d0e60b7dd26ef3babfc02003702ea5632feee97fbba59fc59a0", + "chksum_sha256": "bb83a5490c188c20d9a8632bdb13043146a87d5dfc555cd2e389ee30885bf7ca", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_command_module.rst", + "name": "tests/integration/targets/nxos_snmp_community/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ceaf1d413d6a78bb8b3611ff936316cd03c6e6bbef6b99d95e9998695f9f3a85", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vsan_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dfa3dd3cb1bb3c94e13e1d85c9df1221bd9dace01ad337346126ccca7808680a", + "name": "tests/integration/targets/nxos_snmp_community/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vxlan_vtep_module.rst", + "name": "tests/integration/targets/nxos_snmp_community/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "920cbc7cf6b2d9736bbeacbf6751674c6b8985af13183432f027070235ed745e", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_banner_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f33242bd0d3b632cb5e97dc9ce3e6a9029060e204c87a3554aff1ed36a7d19f0", + "name": "tests/integration/targets/nxos_snmp_community/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_bfd_global_module.rst", + "name": "tests/integration/targets/nxos_snmp_community/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ff1d376f71be1de3dc5e97bfae1ea331e92430adb9e31b61e6fdde8da710538", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_bgp_templates_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "00bb83305a1e55e1fa99e7008ff4131123f6702514a66409c524e6ca1374c00e", + "name": "tests/integration/targets/nxos_snmp_community/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_ospfv3_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ecb974bec3af1412bb18f229492198eaf19c2de8102d65176de90d2f2810566c", + "name": "tests/integration/targets/nxos_snmp_community/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_bfd_interfaces_module.rst", + "name": "tests/integration/targets/nxos_snmp_community/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "17874cc21b8abc82fc53aace972f6d49833e45d5c1a2cc672ebe97c5c98c2102", + "chksum_sha256": "7a31444a04409e8b5f9d58864e5405ec3ded7ec744e6e731b3ca0d22ec1a6ee0", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_rollback_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "04cf041066c5d09e1a5317b7cb7cc1eb2504f0d1faeb9a28d3d59f3ae98c783f", + "name": "tests/integration/targets/nxos_vsan", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_reboot_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "194778e502ec450e673e2562baf84d459a9d844c3c3f281cd6ed2f2bc2618087", + "name": "tests/integration/targets/nxos_vsan/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_hsrp_interfaces_module.rst", + "name": "tests/integration/targets/nxos_vsan/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "717413f42fcf927466b00bb8a1e38f17e5e7391794b8a7431edf822a7a71da9d", + "chksum_sha256": "f47853340600c1c9b76ed00695079b203ae45896e40acfac2f48e28f2ad98b40", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_zone_zoneset_module.rst", + "name": "tests/integration/targets/nxos_vsan/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7e6e8c9e520a4ae76c3532b010ea67997a01a555775c112b89d094d129999c3b", + "chksum_sha256": "44ac0ca4032d1756f572a45038a7dfbf52c9ba9762815aa3a900b7c425036120", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_cliconf.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "546fc754b81109404a33285c90c3bba565b1a2529e00b7284609b62bb25b4d8b", + "name": "tests/integration/targets/nxos_vsan/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_feature_module.rst", + "name": "tests/integration/targets/nxos_vsan/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e31d99494f87afad1ecdce42d483a32e523e8e978f42b1955de1f3b0033bcf80", + "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vrf_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9e68ccbcf499b55feecf2b3c6b57f4b79b6dae43fd2671946ae3a65cd16d5ad6", + "name": "tests/integration/targets/nxos_vsan/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_lag_interfaces_module.rst", + "name": "tests/integration/targets/nxos_vsan/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ef2ea1a3291066c3f7260b2247a47058a65afae30226465b6b6be9994617789", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_ntp_global_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4fce862cb2f944fdb7438e8c9796fc1138b700a4acfc3654181d589bfaa170cb", + "name": "tests/integration/targets/nxos_vsan/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_prefix_lists_module.rst", + "name": "tests/integration/targets/nxos_vsan/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e411c76a91d77aac63c31c51864f7247f91fb48226b134bbb1b2cbc29029bfa3", + "chksum_sha256": "97b10ee26b05c01b328d79887c41479bd2bf559184fb1df4af53645db6e109ba", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_route_maps_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "501f2b75dfc0dbbe3054ebcdfad739b3a8ba8f4c367e8d22baabe987addea62c", + "name": "tests/integration/targets/nxos_vsan/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_udld_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "26d0773b5cbd658f39b2c08b9949e45ae5aa8a94405c4f1ef9ed0708c682c4a3", + "name": "tests/integration/targets/nxos_vsan/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_lacp_interfaces_module.rst", + "name": "tests/integration/targets/nxos_vsan/tests/common/sanity.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "34e04733378368d79deb4513e17315978468b0180b5e9c1d2e4ac863ba3ad1b1", + "chksum_sha256": "cb88ac95adfc25626d2c81d7dc7d45341c006ac0490dda44c675101938ec4bcc", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vxlan_vtep_vni_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7aebad3ad5c1c53036df468c782c366a17fea865b15a189f99aff17c171e464b", + "name": "tests/integration/targets/nxos_lag_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_vtp_version_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c27cc4c99dbad288216a917b46c9949f1cc2ed72a4268e79ef61e708d6a1edff", + "name": "tests/integration/targets/nxos_lag_interfaces/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.nxos.nxos_snmp_host_module.rst", + "name": "tests/integration/targets/nxos_lag_interfaces/tasks/nxapi.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "738d6be19ec9aea9158035e6f1a2302d3484500ee9b3148e2d01628bf2f9fcdc", + "chksum_sha256": "228491b275c71b123f5bbb1dbac0093d55bd77f2a291bec15d452b489ef1674d", "format": 1 }, { - "name": "docs/cisco.nxos.nxos_ntp_auth_module.rst", + "name": "tests/integration/targets/nxos_lag_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fade0c737ea69c03d4075d1ed2a53eed91225b511d5c18e8b36ce965cd53f724", + "chksum_sha256": "b9647339f89f9eeca01a09cd4f31da21e0c0c2f10793ea3ea06c24fd8664046e", "format": 1 }, { - "name": ".isort.cfg", + "name": "tests/integration/targets/nxos_lag_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3fc5fcc23727e7c5b9f1a7035303990229f796a171a84e21051dd1d242b90c52", + "chksum_sha256": "82e7cf4c490409760e85c9516e174b27c8d67fb419e829353d94c4d022016245", "format": 1 }, { - "name": "pyproject.toml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc", + "name": "tests/integration/targets/nxos_lag_interfaces/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "bindep.txt", + "name": "tests/integration/targets/nxos_lag_interfaces/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f0e2709e0a523d84f824ccfb6883f62e9d27f70bd7a38be0d18506223ccfe60e", + "chksum_sha256": "306ef26bd70b58285bef6b50a83c64b26b9077181c6823ef20ac63252373d5de", "format": 1 }, { - "name": "changelogs", + "name": "tests/integration/targets/nxos_lag_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "changelogs/fragments", + "name": "tests/integration/targets/nxos_lag_interfaces/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7d754db246e92eda93bade9b741e09afdc7c5ba2754a4ea5d874f92a479b65d0", + "format": 1 + }, + { + "name": "tests/integration/targets/nxos_lag_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "changelogs/fragments/.keep", + "name": "tests/integration/targets/nxos_lag_interfaces/vars/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "05455a29f1db6e4d3602a83b356d9d7353037b1ef0627d2d2943b43520af76e6", "format": 1 }, { - "name": "changelogs/config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "54c802c2ade537e8b71ba45d10c73a422778a62aab0093bc6805c75ab8c7f448", + "name": "tests/integration/targets/nxos_lag_interfaces/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "changelogs/changelog.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bd41980acf38b47c9690052ff587311d4130c6f8180315df9540e1060d14c8e9", + "name": "tests/integration/targets/nxos_lag_interfaces/tests/common", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tox.ini", + "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "beb3313789623e5570d0871f6115ba563a0d92ea75e8e89cbd9f79045b4fe279", + "chksum_sha256": "c10b8ab6302c0df3b5d8c99d1f67a9d92b80b518250c11e650dde96bc8f6b886", "format": 1 }, { - "name": "CHANGELOG.rst", + "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ee70734d5e5b80f6503635de8d1655903b775ccf03679361cbb9cec895fc3f0", + "chksum_sha256": "53c3cd45c91dd6078cf71ea7a9973d65069a61eaef47c49a51c7b66355970a63", "format": 1 }, { - "name": ".gitignore", + "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "179a6d0780422c32653a71b9395a3ecb8b3859346ffa3e38ca3c8d90f8063fd2", + "chksum_sha256": "4af7dc65128b02d59c3c12d5f94cfc4a77c266e867b79b172fc6425c871f9ffd", "format": 1 }, { - "name": ".pre-commit-config.yaml", + "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0f78200450af191fc02f788182fbe9253661ce2257435654c5806b4482487901", + "chksum_sha256": "08e830f9373a4a360949e7c56cf2c374dad94a559adbde314f3b66daa642a0c8", "format": 1 }, { - "name": ".prettierignore", + "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe21cf5ca4606d16ccedb1bccc85ef06771ee697924ca50ecd8ca4c98acce5cc", - "format": 1 - }, - { - "name": ".github", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "96e1c7636b178b2ae705ac0d7dd2ea67a4d4c1aaf29122900549bde0da43b4de", "format": 1 }, { - "name": ".github/dependabot.yml", + "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c4d7b4c429faafe0eb46a070eafcd3d8d84d9083b5fe72943d627b5f4ccf0dd8", + "chksum_sha256": "d6daa4d3b2cb43c7b62b7606b80b4f212348ecb1e28a516d16ac90e02f459266", "format": 1 }, { - "name": ".github/workflows", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/gathered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2e4441e52874693cf2caa332a4639c23ad59350a6eda4e9c5109a9792a306447", "format": 1 }, { - "name": ".github/workflows/codecoverage.yml", + "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "efd9c5d5eb70165779fc2ad3269b85d618c25a266927d19c47253c0db97ebbf4", + "chksum_sha256": "96cae582141397682d092a6b5d6de9651b6203157e891342063c439ffb130a4d", "format": 1 }, { - "name": ".github/workflows/ack.yml", + "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24c6fbafaa69e3e3ee696f2cefa5120794b62cef7e870553dddce8b8af0a127c", + "chksum_sha256": "6eb88f454c810cee9cf1be9fc56eb6a574516fc49bddc50e81f329dc98cfb9eb", "format": 1 }, { - "name": ".github/workflows/release.yml", + "name": "tests/integration/targets/nxos_lag_interfaces/tests/common/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1", + "chksum_sha256": "76ea0558de38d30dd8813738f9d92fba9867c7d37fcb2a104acaaf5aeebb12af", "format": 1 }, { - "name": ".github/workflows/push.yml", + "name": "tests/integration/target-prefixes.network", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c8ecdf1088f9e34c9383c49a18a7c54d08ef378ba29eaa6373b52ee8e8bd522", + "chksum_sha256": "1d281d4e38e720eeeee03bdd1df2429947e358ec15ab276b0b29765d99953d63", "format": 1 }, { - "name": ".github/workflows/tests.yml", + "name": "tests/integration/test_integration.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a363c29cae8f4b799d88470e5cc5546312966f5559f25ffd680611119035dd29", + "chksum_sha256": "a4966cf32b6505b51255468ffa72db6f36b948b07aa5b9ae3313607a93e48988", "format": 1 }, { - "name": ".github/release-drafter.yml", + "name": "tox-ansible.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", + "chksum_sha256": "da802bfc2dc2671ca7caba028e8a635b459b131874041d119b698717333a7a49", "format": 1 } ], diff --git a/ansible_collections/cisco/nxos/MANIFEST.json b/ansible_collections/cisco/nxos/MANIFEST.json index 2f7654ec3..dd68be244 100644 --- a/ansible_collections/cisco/nxos/MANIFEST.json +++ b/ansible_collections/cisco/nxos/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "cisco", "name": "nxos", - "version": "5.3.0", + "version": "8.0.0", "authors": [ "Ansible Network Community (ansible-network)" ], @@ -18,7 +18,7 @@ "license": [], "license_file": "LICENSE", "dependencies": { - "ansible.netcommon": ">=2.6.1" + "ansible.netcommon": ">=6.1.0" }, "repository": "https://github.com/ansible-collections/cisco.nxos", "documentation": null, @@ -29,7 +29,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9600e95767ff5e93775f06e4e23e6eba580715b1e945d26ddb3f8bac0ce16cbe", + "chksum_sha256": "e7c60a9cfda9d9f1ae29b578d7a8f10bf08f80cfb94eb05f7eb016110eaa973d", "format": 1 }, "format": 1 diff --git a/ansible_collections/cisco/nxos/README.md b/ansible_collections/cisco/nxos/README.md index e8ad6e9d9..82ce821c8 100644 --- a/ansible_collections/cisco/nxos/README.md +++ b/ansible_collections/cisco/nxos/README.md @@ -1,7 +1,5 @@ - - # Cisco NX-OS Collection -[![CI](https://zuul-ci.org/gated.svg)](https://dashboard.zuul.ansible.com/t/ansible/project/github.com/ansible-collections/cisco.nxos) +[![CI](https://zuul-ci.org/gated.svg)](https://dashboard.zuul.ansible.com/t/ansible/project/github.com/ansible-collections/cisco.nxos) [![Codecov](https://codecov.io/gh/ansible-collections/cisco.nxos/branch/main/graph/badge.svg)](https://codecov.io/gh/ansible-collections/cisco.nxos) [![CI](https://github.com/ansible-collections/cisco.nxos/actions/workflows/tests.yml/badge.svg?branch=main&event=schedule)](https://github.com/ansible-collections/cisco.nxos/actions/workflows/tests.yml) @@ -15,7 +13,7 @@ The modules with full support for Cisco MDS are tested against NX-OS 8.4(1) on M ## Ansible version compatibility -This collection has been tested against following Ansible versions: **>=2.9.10**. +This collection has been tested against following Ansible versions: **>=2.14.0**. For collections that support Ansible 2.9, please ensure you update your `network_os` to use the fully qualified collection name (for example, `cisco.ios.ios`). @@ -25,7 +23,7 @@ PEP440 is the schema used to describe the versions of Ansible. ### Supported connections -The Cisco NX-OS collection supports ``network_cli`` and ``httpapi`` connections. +The Cisco NX-OS collection supports ``network_cli`` and ``httpapi`` connections. A detailed platform guide can be found [here](https://github.com/ansible-collections/cisco.nxos/blob/main/platform_guide.rst). ## Included content @@ -84,12 +82,8 @@ Name | Description [cisco.nxos.nxos_lag_interfaces](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_lag_interfaces_module.rst)|LAG interfaces resource module [cisco.nxos.nxos_lldp_global](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_lldp_global_module.rst)|LLDP resource module [cisco.nxos.nxos_lldp_interfaces](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_lldp_interfaces_module.rst)|LLDP interfaces resource module -[cisco.nxos.nxos_logging](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_logging_module.rst)|Manage logging on network devices [cisco.nxos.nxos_logging_global](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_logging_global_module.rst)|Logging resource module. -[cisco.nxos.nxos_ntp](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_ntp_module.rst)|Manages core NTP configuration. -[cisco.nxos.nxos_ntp_auth](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_ntp_auth_module.rst)|Manages NTP authentication. [cisco.nxos.nxos_ntp_global](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_ntp_global_module.rst)|NTP Global resource module. -[cisco.nxos.nxos_ntp_options](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_ntp_options_module.rst)|Manages NTP options. [cisco.nxos.nxos_nxapi](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_nxapi_module.rst)|Manage NXAPI configuration on an NXOS device. [cisco.nxos.nxos_ospf_interfaces](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_ospf_interfaces_module.rst)|OSPF Interfaces Resource Module. [cisco.nxos.nxos_ospfv2](https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_ospfv2_module.rst)|OSPFv2 resource module diff --git a/ansible_collections/cisco/nxos/changelogs/changelog.yaml b/ansible_collections/cisco/nxos/changelogs/changelog.yaml index 055d17154..c0b40cc7f 100644 --- a/ansible_collections/cisco/nxos/changelogs/changelog.yaml +++ b/ansible_collections/cisco/nxos/changelogs/changelog.yaml @@ -1023,3 +1023,71 @@ releases: - fix_config_module.yaml - trivial.yaml release_date: "2023-11-29" + 6.0.0: + changes: + major_changes: + - Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions + are EoL now. + release_summary: + Starting from this release, the minimum `ansible-core` version + this collection requires is `2.14.0`. The last known version compatible with + ansible-core<2.14 is `v5.3.0`. + fragments: + - prep_300.yaml + - trivial_lint.yaml + release_date: "2023-11-30" + 6.0.1: + changes: + bugfixes: + - Prevents module_defaults from were being incorrectly applied to the platform + action, instead of the concerned module. + - nxos_file_copy - correctly set file_pull_timeout/persistent_command_timeout + value. + fragments: + - file_copy.yaml + - module_defaults.yaml + release_date: "2024-01-30" + 6.0.2: + changes: + bugfixes: + - nxos_interfaces - Correctly enable L3 interfaces on supported N3K platforms + (https://github.com/ansible-collections/cisco.nxos/issues/749). + fragments: + - fix_749.yaml + release_date: "2024-02-06" + 6.0.3: + changes: + bugfixes: + - nxos_acls - Fix parsing of ace entries with range in it. (https://github.com/ansible-collections/cisco.nxos/issues/788) + fragments: + - acls_gather_fix.yml + release_date: "2024-02-14" + 7.0.0: + changes: + major_changes: + - This release removes four previously deprecated modules from this collection. + Please refer to the **Removed Features** section for details. + removed_features: + - The nxos_logging module has been removed with this release. + - The nxos_ntp module has been removed with this release. + - The nxos_ntp_auth module has been removed with this release. + - The nxos_ntp_options module has been removed with this release. + fragments: + - major_700.yaml + release_date: "2024-03-27" + 8.0.0: + changes: + bugfixes: + - nxos_facts - correct parse JSON output when multiple interfaces have IPv6 + address assigned (https://github.com/ansible-collections/cisco.nxos/issues/771). + major_changes: + - Updated the minimum required ansible.netcommon version to 6.1.0 to support the cli_restore module. + minor_changes: + - Add support for cli_restore functionality. + - Please refer the PR to know more about core changes (https://github.com/ansible-collections/ansible.netcommon/pull/618). + The cli_restore module is a part of ansible.netcommon. + fragments: + - add_restore_support.yaml + - fix_771.yaml + - trivial.yaml + release_date: "2024-04-19" diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_acl_interfaces_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_acl_interfaces_module.rst index 938e0cafe..a2885df02 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_acl_interfaces_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_acl_interfaces_module.rst @@ -258,28 +258,28 @@ Examples - name: Merge ACL interfaces configuration cisco.nxos.nxos_acl_interfaces: config: - - name: Ethernet1/2 - access_groups: - - afi: ipv6 - acls: - - name: ACL1v6 - direction: in - - - name: Eth1/5 - access_groups: - - afi: ipv4 - acls: - - name: PortACL - direction: in - port: true - - - name: ACL1v4 - direction: out - - - afi: ipv6 - acls: - - name: ACL1v6 - direction: in + - name: Ethernet1/2 + access_groups: + - afi: ipv6 + acls: + - name: ACL1v6 + direction: in + + - name: Eth1/5 + access_groups: + - afi: ipv4 + acls: + - name: PortACL + direction: in + port: true + + - name: ACL1v4 + direction: out + + - afi: ipv6 + acls: + - name: ACL1v6 + direction: in state: merged # After state: @@ -305,20 +305,20 @@ Examples - name: Replace interface configuration with given configuration cisco.nxos.nxos_acl_interfaces: config: - - name: Eth1/5 - access_groups: - - afi: ipv4 - acls: - - name: NewACLv4 - direction: out - - - name: Ethernet1/3 - access_groups: - - afi: ipv6 - acls: - - name: NewACLv6 - direction: in - port: true + - name: Eth1/5 + access_groups: + - afi: ipv4 + acls: + - name: NewACLv4 + direction: out + + - name: Ethernet1/3 + access_groups: + - afi: ipv6 + acls: + - name: NewACLv6 + direction: in + port: true state: replaced # After state: @@ -344,21 +344,21 @@ Examples - name: Override interface configuration with given configuration cisco.nxos.nxos_acl_interfaces: config: - - name: Ethernet1/3 - access_groups: - - afi: ipv4 - acls: - - name: ACL1v4 - direction: out - - - name: PortACL - port: true - direction: in - - afi: ipv6 - acls: - - name: NewACLv6 - direction: in - port: true + - name: Ethernet1/3 + access_groups: + - afi: ipv4 + acls: + - name: ACL1v4 + direction: out + + - name: PortACL + port: true + direction: in + - afi: ipv6 + acls: + - name: NewACLv6 + direction: in + port: true state: overridden # After state: @@ -384,8 +384,8 @@ Examples - name: Delete ACL configuration on interfaces cisco.nxos.nxos_acl_interfaces: config: - - name: Ethernet1/5 - - name: Ethernet1/2 + - name: Ethernet1/5 + - name: Ethernet1/2 state: deleted # After state: @@ -498,28 +498,28 @@ Examples - name: Render required configuration to be pushed to the device cisco.nxos.nxos_acl_interfaces: config: - - name: Ethernet1/2 - access_groups: - - afi: ipv6 - acls: - - name: ACL1v6 - direction: in - - - name: Ethernet1/5 - access_groups: - - afi: ipv4 - acls: - - name: PortACL - direction: in - port: true - - name: ACL1v4 - direction: out - - afi: ipv6 - acls: - - name: ACL1v6 - direction: in + - name: Ethernet1/2 + access_groups: + - afi: ipv6 + acls: + - name: ACL1v6 + direction: in + - name: Ethernet1/5 + access_groups: + - afi: ipv4 + acls: + - name: PortACL + direction: in + port: true + - name: ACL1v4 + direction: out + - afi: ipv6 + acls: + - name: ACL1v6 + direction: in state: rendered + # returns # rendered: # interface Ethernet1/2 diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_acls_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_acls_module.rst index 8a4c23f3d..1b806511d 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_acls_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_acls_module.rst @@ -3140,13 +3140,13 @@ Examples acls: - name: ACL1v6 aces: - - grant: permit - sequence: 10 - source: - any: true - destination: - prefix: 2001:db8:12::/32 - protocol: sctp + - grant: permit + sequence: 10 + source: + any: true + destination: + prefix: 2001:db8:12::/32 + protocol: sctp # Task Output # ----------- @@ -3578,7 +3578,7 @@ Examples - name: Delete all ACLs in given AFI cisco.nxos.nxos_acls: config: - - afi: ipv4 + - afi: ipv4 state: deleted # Task Output @@ -3913,38 +3913,38 @@ Examples - name: Render required configuration to be pushed to the device cisco.nxos.nxos_acls: config: - - afi: ipv4 - acls: - - name: ACL1v4 - aces: - - grant: deny - destination: - address: 192.0.2.64 - wildcard_bits: 0.0.0.255 - source: - any: true - port_protocol: - lt: 55 - protocol: tcp - protocol_options: - tcp: - ack: true - fin: true - sequence: 50 - - - afi: ipv6 - acls: - - name: ACL1v6 - aces: - - grant: permit - sequence: 10 - source: - any: true - destination: - prefix: 2001:db8:12::/32 - protocol: sctp + - afi: ipv4 + acls: + - name: ACL1v4 + aces: + - grant: deny + destination: + address: 192.0.2.64 + wildcard_bits: 0.0.0.255 + source: + any: true + port_protocol: + lt: 55 + protocol: tcp + protocol_options: + tcp: + ack: true + fin: true + sequence: 50 + - afi: ipv6 + acls: + - name: ACL1v6 + aces: + - grant: permit + sequence: 10 + source: + any: true + destination: + prefix: '2001:db8:12::/32' + protocol: sctp state: rendered + # Task Output # ----------- # diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bfd_interfaces_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bfd_interfaces_module.rst index 17aac421c..975de891c 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bfd_interfaces_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bfd_interfaces_module.rst @@ -178,12 +178,12 @@ Examples - name: Configure interfaces cisco.nxos.nxos_bfd_interfaces: config: - - name: Ethernet1/1 - bfd: enable - echo: enable - - name: Ethernet1/2 - bfd: disable - echo: disable + - name: Ethernet1/1 + bfd: enable + echo: enable + - name: Ethernet1/2 + bfd: disable + echo: disable state: merged @@ -192,12 +192,12 @@ Examples - name: Configure interfaces cisco.nxos.nxos_bfd_interfaces: config: - - name: Ethernet1/1 - bfd: enable - echo: enable - - name: Ethernet1/2 - bfd: disable - echo: disable + - name: Ethernet1/1 + bfd: enable + echo: enable + - name: Ethernet1/2 + bfd: disable + echo: disable state: overridden @@ -206,12 +206,12 @@ Examples - name: Configure interfaces cisco.nxos.nxos_bfd_interfaces: config: - - name: Ethernet1/1 - bfd: enable - echo: enable - - name: Ethernet1/2 - bfd: disable - echo: disable + - name: Ethernet1/1 + bfd: enable + echo: enable + - name: Ethernet1/2 + bfd: disable + echo: disable state: replaced # Using rendered @@ -219,12 +219,12 @@ Examples - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_bfd_interfaces: config: - - name: Ethernet1/800 - bfd: enable - echo: enable - - name: Ethernet1/801 - bfd: disable - echo: disable + - name: Ethernet1/800 + bfd: enable + echo: enable + - name: Ethernet1/801 + bfd: disable + echo: disable state: rendered # Task Output (redacted) diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_address_family_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_address_family_module.rst index 8378c8439..d16dbee7d 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_address_family_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_address_family_module.rst @@ -1674,11 +1674,11 @@ Examples safi: unicast vrf: site-1 default_information: - originate: True + originate: true aggregate_address: - prefix: 203.0.113.0/24 - as_set: True - summary_only: True + as_set: true + summary_only: true - afi: ipv6 safi: multicast vrf: site-1 @@ -1727,11 +1727,11 @@ Examples # safi: unicast # vrf: site-1 # default_information: - # originate: True + # originate: true # aggregate_address: # - prefix: 203.0.113.0/24 - # as_set: True - # summary_only: True + # as_set: true + # summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 @@ -1797,8 +1797,8 @@ Examples non_critical_delay: 180 aggregate_address: - prefix: 203.0.113.0/24 - as_set: True - summary_only: True + as_set: true + summary_only: true - afi: ipv4 safi: unicast vrf: site-1 @@ -1824,11 +1824,11 @@ Examples # safi: unicast # vrf: site-1 # default_information: - # originate: True + # originate: true # aggregate_address: # - prefix: 203.0.113.0/24 - # as_set: True - # summary_only: True + # as_set: true + # summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 @@ -1865,8 +1865,8 @@ Examples # non_critical_delay: 180 # aggregate_address: # - prefix: 203.0.113.0/24 - # as_set: True - # summary_only: True + # as_set: true + # summary_only: true # # - afi: ipv4 # safi: unicast @@ -1929,8 +1929,8 @@ Examples route_map: rmap1 aggregate_address: - prefix: 203.0.113.0/24 - as_set: True - summary_only: True + as_set: true + summary_only: true - afi: ipv4 safi: unicast vrf: site-1 @@ -1956,11 +1956,11 @@ Examples # safi: unicast # vrf: site-1 # default_information: - # originate: True + # originate: true # aggregate_address: # - prefix: 203.0.113.0/24 - # as_set: True - # summary_only: True + # as_set: true + # summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 @@ -1997,8 +1997,8 @@ Examples # route_map: rmap1 # aggregate_address: # - prefix: 203.0.113.0/24 - # as_set: True - # summary_only: True + # as_set: true + # summary_only: true # - afi: ipv4 # safi: unicast # vrf: site-1 @@ -2066,11 +2066,11 @@ Examples # safi: unicast # vrf: site-1 # default_information: - # originate: True + # originate: true # aggregate_address: # - prefix: 203.0.113.0/24 - # as_set: True - # summary_only: True + # as_set: true + # summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 @@ -2095,11 +2095,11 @@ Examples # safi: unicast # vrf: site-1 # default_information: - # originate: True + # originate: true # aggregate_address: # - prefix: 203.0.113.0/24 - # as_set: True - # summary_only: True + # as_set: true + # summary_only: true # After state: # ------------ @@ -2153,11 +2153,11 @@ Examples # safi: unicast # vrf: site-1 # default_information: - # originate: True + # originate: true # aggregate_address: # - prefix: 203.0.113.0/24 - # as_set: True - # summary_only: True + # as_set: true + # summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 @@ -2207,11 +2207,11 @@ Examples safi: unicast vrf: site-1 default_information: - originate: True + originate: true aggregate_address: - prefix: 203.0.113.0/24 - as_set: True - summary_only: True + as_set: true + summary_only: true - afi: ipv6 safi: multicast vrf: site-1 @@ -2284,11 +2284,11 @@ Examples # safi: unicast # vrf: site-1 # default_information: - # originate: True + # originate: true # aggregate_address: # - prefix: 203.0.113.0/24 - # as_set: True - # summary_only: True + # as_set: true + # summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_global_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_global_module.rst index 1ef0c27b4..19ee2709e 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_global_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_global_module.rst @@ -4630,16 +4630,16 @@ Examples router_id: 192.168.1.1 bestpath: as_path: - multipath_relax: True - compare_neighborid: True - cost_community_ignore: True + multipath_relax: true + compare_neighborid: true + cost_community_ignore: true confederation: identifier: 42 peers: - 65020 - 65030 - 65040 - log_neighbor_changes: True + log_neighbor_changes: true maxas_limit: 20 neighbors: - neighbor_address: 192.168.1.100 @@ -4649,19 +4649,19 @@ Examples remote_as: 65563 description: NBR-1 low_memory: - exempt: True + exempt: true - neighbor_address: 192.168.1.101 remote_as: 65563 password: encryption: 7 key: 12090404011C03162E neighbor_down: - fib_accelerate: True + fib_accelerate: true vrfs: - vrf: site-1 allocate_index: 5000 local_as: 200 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 198.51.100.1 description: site-1-nbr-1 @@ -4674,7 +4674,7 @@ Examples description: site-1-nbr-2 - vrf: site-2 local_as: 300 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 203.0.113.2 description: site-2-nbr-1 @@ -4683,7 +4683,7 @@ Examples key: AF92F4C16A0A0EC5BDF56CF58BC030F6 remote_as: 65568 neighbor_down: - fib_accelerate: True + fib_accelerate: true # Task output: # ------------ @@ -4882,8 +4882,8 @@ Examples as_number: 65563 router_id: 192.168.1.1 bestpath: - compare_neighborid: True - cost_community_ignore: True + compare_neighborid: true + cost_community_ignore: true confederation: identifier: 42 peers: @@ -4899,20 +4899,20 @@ Examples remote_as: 65563 description: NBR-1 low_memory: - exempt: True + exempt: true neighbor_down: - fib_accelerate: True + fib_accelerate: true vrfs: - vrf: site-2 local_as: 300 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 203.0.113.2 password: encryption: 7 key: 12090404011C03162E neighbor_down: - fib_accelerate: True + fib_accelerate: true state: replaced # Task output: @@ -5345,16 +5345,16 @@ Examples router_id: 192.168.1.1 bestpath: as_path: - multipath_relax: True - compare_neighborid: True - cost_community_ignore: True + multipath_relax: true + compare_neighborid: true + cost_community_ignore: true confederation: identifier: 42 peers: - 65020 - 65030 - 65040 - log_neighbor_changes: True + log_neighbor_changes: true maxas_limit: 20 neighbors: - neighbor_address: 192.168.1.100 @@ -5364,19 +5364,19 @@ Examples remote_as: 65563 description: NBR-1 low_memory: - exempt: True + exempt: true - neighbor_address: 192.168.1.101 remote_as: 65563 password: encryption: 7 key: 12090404011C03162E neighbor_down: - fib_accelerate: True + fib_accelerate: true vrfs: - vrf: site-1 allocate_index: 5000 local_as: 200 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 198.51.100.1 description: site-1-nbr-1 @@ -5389,7 +5389,7 @@ Examples description: site-1-nbr-2 - vrf: site-2 local_as: 300 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 203.0.113.2 description: site-1-nbr-1 @@ -5398,7 +5398,7 @@ Examples key: AF92F4C16A0A0EC5BDF56CF58BC030F6 remote_as: 65568 neighbor_down: - fib_accelerate: True + fib_accelerate: true # Task output: # ------------ @@ -5648,7 +5648,7 @@ Examples as_number: 65536 router_id: 198.51.100.2 maxas_limit: 20 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 192.0.2.1 remote_as: 65537 @@ -5692,7 +5692,7 @@ Examples as_number: 65536 router_id: 198.51.100.2 maxas_limit: 20 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 192.0.2.1 remote_as: 65537 @@ -5702,7 +5702,7 @@ Examples vrfs: - vrf: site-2 neighbor_down: - fib_accelerate: True + fib_accelerate: true state: replaced # Task output: diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_neighbor_address_family_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_neighbor_address_family_module.rst index 96e3c5e53..8668a0b9f 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_neighbor_address_family_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_bgp_neighbor_address_family_module.rst @@ -2632,9 +2632,9 @@ Examples address_family: - afi: ipv4 safi: unicast - suppress_inactive: True + suppress_inactive: true next_hop_self: - set: True + set: true - neighbor_address: 203.0.113.2 address_family: - afi: ipv6 @@ -2642,7 +2642,7 @@ Examples - afi: ipv4 safi: multicast send_community: - set: True + set: true # Task output: # ------------ @@ -2708,7 +2708,7 @@ Examples # - afi: ipv4 # safi: multicast # send_community: - # set: True + # set: true # - afi: ipv6 # safi: unicast @@ -2797,7 +2797,7 @@ Examples - afi: ipv4 safi: multicast send_community: - set: True + set: true state: replaced # Task output: @@ -2840,7 +2840,7 @@ Examples # - afi: ipv4 # safi: multicast # send_community: - # set: True + # set: true # - afi: ipv6 # safi: unicast # @@ -2887,7 +2887,7 @@ Examples # - afi: ipv4 # safi: multicast # send_community: - # set: True + # set: true # - afi: ipv6 # safi: unicast @@ -2954,9 +2954,9 @@ Examples address_family: - afi: ipv4 safi: unicast - suppress_inactive: True + suppress_inactive: true next_hop_self: - set: True + set: true state: overridden # Task output: @@ -2999,7 +2999,7 @@ Examples # - afi: ipv4 # safi: multicast # send_community: - # set: True + # set: true # - afi: ipv6 # safi: unicast # @@ -3033,9 +3033,9 @@ Examples # address_family: # - afi: ipv4 # safi: unicast - # suppress_inactive: True + # suppress_inactive: true # next_hop_self: - # set: True + # set: true # After state: # ------------ @@ -3134,7 +3134,7 @@ Examples # - afi: ipv4 # safi: multicast # send_community: - # set: True + # set: true # - afi: ipv6 # safi: unicast # @@ -3175,7 +3175,7 @@ Examples # - afi: ipv4 # safi: multicast # send_community: - # set: True + # set: true # # After state: # ------------ @@ -3267,7 +3267,7 @@ Examples # - afi: ipv4 # safi: multicast # send_community: - # set: True + # set: true # - afi: ipv6 # safi: unicast # @@ -3333,9 +3333,9 @@ Examples address_family: - afi: ipv4 safi: unicast - suppress_inactive: True + suppress_inactive: true next_hop_self: - set: True + set: true - neighbor_address: 203.0.113.2 address_family: - afi: ipv6 @@ -3343,7 +3343,7 @@ Examples - afi: ipv4 safi: multicast send_community: - set: True + set: true state: rendered # Task output: @@ -3441,7 +3441,7 @@ Examples # - afi: ipv4 # safi: multicast # send_community: - # set: True + # set: true # - afi: ipv6 # safi: unicast diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_command_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_command_module.rst index e7fbbc048..4308a6582 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_command_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_command_module.rst @@ -153,31 +153,31 @@ Examples - name: run multiple commands on remote nodes cisco.nxos.nxos_command: commands: - - show version - - show interfaces + - show version + - show interfaces - name: run multiple commands and evaluate the output cisco.nxos.nxos_command: commands: - - show version - - show interfaces + - show version + - show interfaces wait_for: - - result[0] contains Cisco - - result[1] contains loopback0 + - result[0] contains Cisco + - result[1] contains loopback0 - name: run commands and specify the output format cisco.nxos.nxos_command: commands: - - command: show version - output: json + - command: show version + output: json - name: run commands that require answering a prompt cisco.nxos.nxos_command: commands: - - configure terminal - - command: no feature npv - prompt: Do you want to continue - answer: y + - configure terminal + - command: no feature npv + prompt: Do you want to continue + answer: y diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_config_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_config_module.rst index 3d7b0cad1..3ead5ab50 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_config_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_config_module.rst @@ -380,21 +380,21 @@ Examples - cisco.nxos.nxos_config: lines: - - 10 permit ip 192.0.2.1/32 any log - - 20 permit ip 192.0.2.2/32 any log - - 30 permit ip 192.0.2.3/32 any log - - 40 permit ip 192.0.2.4/32 any log - - 50 permit ip 192.0.2.5/32 any log + - 10 permit ip 192.0.2.1/32 any log + - 20 permit ip 192.0.2.2/32 any log + - 30 permit ip 192.0.2.3/32 any log + - 40 permit ip 192.0.2.4/32 any log + - 50 permit ip 192.0.2.5/32 any log parents: ip access-list test before: no ip access-list test match: exact - cisco.nxos.nxos_config: lines: - - 10 permit ip 192.0.2.1/32 any log - - 20 permit ip 192.0.2.2/32 any log - - 30 permit ip 192.0.2.3/32 any log - - 40 permit ip 192.0.2.4/32 any log + - 10 permit ip 192.0.2.1/32 any log + - 20 permit ip 192.0.2.2/32 any log + - 30 permit ip 192.0.2.3/32 any log + - 40 permit ip 192.0.2.4/32 any log parents: ip access-list test before: no ip access-list test replace: block @@ -408,7 +408,7 @@ Examples cisco.nxos.nxos_config: lines: # - shut - - shutdown + - shutdown # parents: int eth1/1 parents: interface Ethernet1/1 diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_devicealias_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_devicealias_module.rst index 9e33f93ea..081c8759f 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_devicealias_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_devicealias_module.rst @@ -212,21 +212,21 @@ Examples - name: Test that device alias module works cisco.nxos.nxos_devicealias: da: - - name: test1_add - pwwn: 56:2:22:11:22:88:11:67 - - name: test2_add - pwwn: 65:22:22:11:22:22:11:d - - name: dev1 - remove: true - - name: dev2 - remove: true + - name: test1_add + pwwn: 56:2:22:11:22:88:11:67 + - name: test2_add + pwwn: 65:22:22:11:22:22:11:d + - name: dev1 + remove: true + - name: dev2 + remove: true distribute: true mode: enhanced rename: - - new_name: bcd - old_name: abc - - new_name: bcd1 - old_name: abc1 + - new_name: bcd + old_name: abc + - new_name: bcd1 + old_name: abc1 diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_evpn_vni_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_evpn_vni_module.rst index 714cd9c20..530a9ff18 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_evpn_vni_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_evpn_vni_module.rst @@ -162,8 +162,8 @@ Examples vni: 6000 route_distinguisher: 60:10 route_target_import: - - 5000:10 - - 4100:100 + - "5000:10" + - "4100:100" route_target_export: auto route_target_both: default diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_facts_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_facts_module.rst index 0e344b470..3ce96abea 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_facts_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_facts_module.rst @@ -113,11 +113,11 @@ Examples - name: Gather only the config and default facts cisco.nxos.nxos_facts: gather_subset: - - config + - config - name: Do not gather hardware facts cisco.nxos.nxos_facts: gather_subset: - - '!hardware' + - '!hardware' - name: Gather legacy and resource facts cisco.nxos.nxos_facts: gather_subset: all @@ -125,10 +125,10 @@ Examples - name: Gather only the interfaces resource facts and no legacy facts cisco.nxos.nxos_facts: gather_subset: - - '!all' - - '!min' + - '!all' + - '!min' gather_network_resources: - - interfaces + - interfaces - name: Gather interfaces resource and minimal legacy facts cisco.nxos.nxos_facts: gather_subset: min diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_fc_interfaces_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_fc_interfaces_module.rst index eaad900f2..048ddc0f0 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_fc_interfaces_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_fc_interfaces_module.rst @@ -103,7 +103,7 @@ Parameters -
    Administrative state of the interface. Set the value to true to administratively enable the interface or false to disable it
    +
    Administrative state of the interface. Set the value to true to administratively enable the interface or true to disable it
    @@ -277,8 +277,8 @@ Examples - name: Merge provided configuration with device configuration cisco.nxos.nxos_fc_interfaces: config: - - name: fc18/10 - analytics: fc-scsi + - name: fc18/10 + analytics: fc-scsi state: merged # Task Output @@ -289,7 +289,7 @@ Examples # speed: auto max 16000 # mode: auto # trunk_mode: on - # enabled: False + # enabled: true # description: $ # analytics: fc-nvme # commands: @@ -300,7 +300,7 @@ Examples # speed: auto max 16000 # mode: auto # trunk_mode: on - # enabled: False + # enabled: true # description: $ # analytics: fc-all @@ -335,13 +335,13 @@ Examples - name: Replaces device configuration of listed interfaces with provided configuration cisco.nxos.nxos_fc_interfaces: config: - - name: fc18/12 - speed: auto max 64000 - mode: auto - trunk_mode: on - enabled: True - description: 1 - analytics: fc-scsi + - name: fc18/12 + speed: auto max 64000 + mode: auto + trunk_mode: "on" + enabled: true + description: 1 + analytics: fc-scsi state: replaced # Task Output @@ -352,7 +352,7 @@ Examples # speed: auto max 64000 # mode: auto # trunk_mode: on - # enabled: True + # enabled: true # description: 1 # analytics: fc-all # commands: @@ -364,7 +364,7 @@ Examples # speed: auto max 64000 # mode: auto # trunk_mode: on - # enabled: True + # enabled: true # description: 1 # analytics: fc-scsi @@ -397,7 +397,7 @@ Examples - name: Delete or return interface parameters to default settings cisco.nxos.nxos_fc_interfaces: config: - - name: fc1/2 + - name: fc1/2 state: deleted # Task Output @@ -408,7 +408,7 @@ Examples # speed: 1000 # mode: E # trunk_mode: off - # enabled: True + # enabled: true # commands: # - interface fc1/2 # - no switchport speed 1000 @@ -420,7 +420,7 @@ Examples # speed: auto # mode: auto # trunk_mode: on - # enabled: False + # enabled: true # After state: # ------------ @@ -459,13 +459,13 @@ Examples - name: Replaces device configuration of listed interfaces with provided configuration cisco.nxos.nxos_fc_interfaces: config: - - name: fc18/12 - speed: auto max 64000 - mode: auto - trunk_mode: on - enabled: True - description: 1 - analytics: fc-scsi + - name: fc18/12 + speed: auto max 64000 + mode: auto + trunk_mode: "on" + enabled: true + description: 1 + analytics: fc-scsi state: overridden # Task Output @@ -476,14 +476,14 @@ Examples # speed: auto max 64000 # mode: auto # trunk_mode: on - # enabled: True + # enabled: true # description: 1 # analytics: fc-all # - name: fc18/13 # speed: auto max 64000 # mode: auto # trunk_mode: on - # enabled: True + # enabled: true # description: 1 # analytics: fc-all # commands: @@ -501,14 +501,14 @@ Examples # speed: auto max 64000 # mode: auto # trunk_mode: on - # enabled: True + # enabled: true # description: 1 # analytics: fc-scsi # - name: fc18/13 # speed: auto max 64000 # mode: auto # trunk_mode: on - # enabled: False + # enabled: true # After state: # ------------ @@ -526,29 +526,23 @@ Examples # switchport trunk mode on # shutdown - - - - - - # Using rendered - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_fc_interfaces: config: - - name: fc1/1 - speed: auto - mode: auto - trunk_mode: on - enabled: True - description: This is a sample line - - name: fc1/2 - speed: 1000 - mode: E - trunk_mode: off - enabled: True - state: rendered + - name: fc1/1 + speed: auto + mode: auto + trunk_mode: "on" + enabled: true + description: This is a sample line + - name: fc1/2 + speed: 1000 + mode: E + trunk_mode: "off" + enabled: true + state: rendered # Task Output # ----------- @@ -600,13 +594,13 @@ Examples # speed: auto # mode: auto # trunk_mode: on - # enabled: True + # enabled: true # description: This is a sample line # - name: fc1/2 # speed: 1000 # mode: E # trunk_mode: off - # enabled: True + # enabled: true # Using gathered @@ -639,13 +633,13 @@ Examples # speed: auto # mode: auto # trunk_mode: on - # enabled: True + # enabled: true # description: This is a sample line # - name: fc1/2 # speed: 1000 # mode: E # trunk_mode: off - # enabled: True + # enabled: true diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_gir_profile_management_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_gir_profile_management_module.rst index 98396d508..95d85ae9b 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_gir_profile_management_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_gir_profile_management_module.rst @@ -114,8 +114,8 @@ Examples - cisco.nxos.nxos_gir_profile_management: mode: maintenance commands: - - router eigrp 11 - - isolate + - router eigrp 11 + - isolate # Remove the maintenance-mode profile - cisco.nxos.nxos_gir_profile_management: diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_hsrp_interfaces_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_hsrp_interfaces_module.rst index 1fd8dcded..163612413 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_hsrp_interfaces_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_hsrp_interfaces_module.rst @@ -151,8 +151,8 @@ Examples - name: Configure hsrp attributes on interfaces cisco.nxos.nxos_hsrp_interfaces: config: - - name: Ethernet1/1 - - name: Ethernet1/2 + - name: Ethernet1/1 + - name: Ethernet1/2 operation: deleted @@ -161,10 +161,10 @@ Examples - name: Configure hsrp attributes on interfaces cisco.nxos.nxos_hsrp_interfaces: config: - - name: Ethernet1/1 - bfd: enable - - name: Ethernet1/2 - bfd: disable + - name: Ethernet1/1 + bfd: enable + - name: Ethernet1/2 + bfd: disable operation: merged @@ -173,10 +173,10 @@ Examples - name: Configure hsrp attributes on interfaces cisco.nxos.nxos_hsrp_interfaces: config: - - name: Ethernet1/1 - bfd: enable - - name: Ethernet1/2 - bfd: disable + - name: Ethernet1/1 + bfd: enable + - name: Ethernet1/2 + bfd: disable operation: overridden @@ -185,10 +185,10 @@ Examples - name: Configure hsrp attributes on interfaces cisco.nxos.nxos_hsrp_interfaces: config: - - name: Ethernet1/1 - bfd: enable - - name: Ethernet1/2 - bfd: disable + - name: Ethernet1/1 + bfd: enable + - name: Ethernet1/2 + bfd: disable operation: replaced # Using rendered @@ -196,10 +196,10 @@ Examples - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_hsrp_interfaces: config: - - name: Ethernet1/800 - bfd: enable - - name: Ethernet1/801 - bfd: enable + - name: Ethernet1/800 + bfd: enable + - name: Ethernet1/801 + bfd: enable state: rendered # Task Output (redacted) diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_igmp_interface_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_igmp_interface_module.rst index 298d5bc10..80384f85a 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_igmp_interface_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_igmp_interface_module.rst @@ -342,8 +342,8 @@ Examples interface: ethernet1/32 startup_query_interval: 30 oif_ps: - - {prefix: 238.2.2.6} - - {source: 192.168.0.1, prefix: 238.2.2.5} + - {prefix: 238.2.2.6} + - {source: 192.168.0.1, prefix: 238.2.2.5} state: present diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_install_os_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_install_os_module.rst index f10d02f7d..ddd630d01 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_install_os_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_install_os_module.rst @@ -132,9 +132,10 @@ Examples nxos_command: commands: [show version | json] register: output + - assert: that: - - output['stdout'][0]['kickstart_ver_str'] == '7.0(3)I6(1)' + - output['stdout'][0]['kickstart_ver_str'] == '7.0(3)I6(1)' diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_interfaces_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_interfaces_module.rst index 9ab81a313..bf9e5d9c9 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_interfaces_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_interfaces_module.rst @@ -294,12 +294,12 @@ Examples - name: Merge provided configuration with device configuration cisco.nxos.nxos_interfaces: config: - - name: Ethernet1/1 - description: Configured by Ansible - enabled: true - - name: Ethernet1/2 - description: Configured by Ansible Network - enabled: false + - name: Ethernet1/1 + description: Configured by Ansible + enabled: true + - name: Ethernet1/2 + description: Configured by Ansible Network + enabled: false state: merged # Task Output @@ -358,14 +358,14 @@ Examples - name: Replaces device configuration of listed interfaces with provided configuration cisco.nxos.nxos_interfaces: config: - - name: Ethernet1/1 - description: Configured by Ansible - enabled: true - mtu: 9000 - - name: Ethernet1/2 - description: Configured by Ansible Network - enabled: false - mode: layer2 + - name: Ethernet1/1 + description: Configured by Ansible + enabled: true + mtu: 9000 + - name: Ethernet1/2 + description: Configured by Ansible Network + enabled: false + mode: layer2 state: replaced # Task Output @@ -426,13 +426,13 @@ Examples - name: Override device configuration of all interfaces with provided configuration cisco.nxos.nxos_interfaces: config: - - name: Ethernet1/1 - enabled: true - - name: Ethernet1/2 - description: Configured by Ansible Network - enabled: false - - description: mgmt interface - name: mgmt0 + - name: Ethernet1/1 + enabled: true + - name: Ethernet1/2 + description: Configured by Ansible Network + enabled: false + - description: mgmt interface + name: mgmt0 state: overridden # Task Output @@ -490,7 +490,7 @@ Examples - name: Delete or return interface parameters to default settings cisco.nxos.nxos_interfaces: config: - - name: Ethernet1/2 + - name: Ethernet1/2 state: deleted # Task Output @@ -529,14 +529,14 @@ Examples - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_interfaces: config: - - name: Ethernet1/1 - description: outbound-intf - mode: layer3 - speed: 100 - - name: Ethernet1/2 - mode: layer2 - enabled: true - duplex: full + - name: Ethernet1/1 + description: outbound-intf + mode: layer3 + speed: 100 + - name: Ethernet1/2 + mode: layer2 + enabled: true + duplex: full state: rendered # Task Output diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_l2_interfaces_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_l2_interfaces_module.rst index 2d2248800..bfad0cf31 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_l2_interfaces_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_l2_interfaces_module.rst @@ -251,13 +251,13 @@ Examples - name: Merge provided configuration with device configuration cisco.nxos.nxos_l2_interfaces: config: - - name: Ethernet1/1 - trunk: - native_vlan: 10 - allowed_vlans: 2,4,15 - - name: Ethernet1/2 - access: - vlan: 30 + - name: Ethernet1/1 + trunk: + native_vlan: 10 + allowed_vlans: 2,4,15 + - name: Ethernet1/2 + access: + vlan: 30 state: merged # Task Output @@ -316,10 +316,10 @@ Examples - name: Replace device configuration of specified L2 interfaces with provided configuration. cisco.nxos.nxos_l2_interfaces: config: - - name: Ethernet1/1 - trunk: - native_vlan: 20 - allowed_vlans: 5-10, 15 + - name: Ethernet1/1 + trunk: + native_vlan: 20 + allowed_vlans: 5-10, 15 state: replaced # Task Output @@ -382,9 +382,9 @@ Examples - name: Override device configuration with provided configuration. cisco.nxos.nxos_l2_interfaces: config: - - name: Ethernet1/2 - access: - vlan: 30 + - name: Ethernet1/2 + access: + vlan: 30 state: overridden # Task Output @@ -441,8 +441,8 @@ Examples itself). cisco.nxos.nxos_l2_interfaces: config: - - name: Ethernet1/1 - - name: Ethernet1/2 + - name: Ethernet1/1 + - name: Ethernet1/2 state: deleted # Task Output @@ -483,17 +483,17 @@ Examples - name: Render platform specific configuration lines (without connecting to the device) cisco.nxos.nxos_l2_interfaces: config: - - name: Ethernet1/1 - trunk: - native_vlan: 10 - allowed_vlans: 2,4,15 - - name: Ethernet1/2 - access: - vlan: 30 - - name: Ethernet1/3 - trunk: - native_vlan: 20 - allowed_vlans: 5-10, 15 + - name: Ethernet1/1 + trunk: + native_vlan: 10 + allowed_vlans: 2,4,15 + - name: Ethernet1/2 + access: + vlan: 30 + - name: Ethernet1/3 + trunk: + native_vlan: 20 + allowed_vlans: 5-10, 15 state: rendered # Task Output diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_l3_interfaces_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_l3_interfaces_module.rst index 9241ff2fe..28a56bdf8 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_l3_interfaces_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_l3_interfaces_module.rst @@ -371,19 +371,19 @@ Examples - name: Merge provided configuration with device configuration. cisco.nxos.nxos_l3_interfaces: config: - - name: Ethernet1/6 - ipv4: - - address: 192.168.1.1/24 - tag: 5 - - address: 10.1.1.1/24 - secondary: true - tag: 10 - ipv6: - - address: fd5d:12c9:2201:2::1/64 - tag: 6 - - name: Ethernet1/7.42 - redirects: false - unreachables: false + - name: Ethernet1/6 + ipv4: + - address: 192.168.1.1/24 + tag: 5 + - address: 10.1.1.1/24 + secondary: true + tag: 10 + ipv6: + - address: fd5d:12c9:2201:2::1/64 + tag: 6 + - name: Ethernet1/7.42 + redirects: false + unreachables: false state: merged # Task Output @@ -470,9 +470,9 @@ Examples - name: Replace device configuration of specified L3 interfaces with provided configuration. cisco.nxos.nxos_l3_interfaces: config: - - name: Ethernet1/6 - ipv4: - - address: 192.168.22.3/24 + - name: Ethernet1/6 + ipv4: + - address: 192.168.22.3/24 state: replaced # Task Output @@ -564,12 +564,12 @@ Examples - name: Override device configuration with provided configuration. cisco.nxos.nxos_l3_interfaces: config: - - ipv4: - - address: dhcp - name: mgmt0 - - name: Ethernet1/6 - ipv4: - - address: 192.168.22.3/24 + - ipv4: + - address: dhcp + name: mgmt0 + - name: Ethernet1/6 + ipv4: + - address: 192.168.22.3/24 state: overridden # Task Output @@ -658,8 +658,8 @@ Examples itself). cisco.nxos.nxos_l3_interfaces: config: - - name: Ethernet1/6 - - name: Ethernet1/2 + - name: Ethernet1/6 + - name: Ethernet1/2 state: deleted # Task Output @@ -709,17 +709,17 @@ Examples - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_l3_interfaces: config: - - name: Ethernet1/800 - ipv4: - - address: 192.168.1.100/24 - tag: 5 - - address: 10.1.1.1/24 - secondary: true - tag: 10 - - name: Ethernet1/800 - ipv6: - - address: fd5d:12c9:2201:2::1/64 - tag: 6 + - name: Ethernet1/800 + ipv4: + - address: 192.168.1.100/24 + tag: 5 + - address: 10.1.1.1/24 + secondary: true + tag: 10 + - name: Ethernet1/800 + ipv6: + - address: fd5d:12c9:2201:2::1/64 + tag: 6 state: rendered # Task Output diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lacp_interfaces_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lacp_interfaces_module.rst index 63a082c80..76724ede0 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lacp_interfaces_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lacp_interfaces_module.rst @@ -320,9 +320,9 @@ Examples - name: Merge provided configuration with device configuration. cisco.nxos.nxos_lacp_interfaces: config: - - name: Ethernet1/3 - port_priority: 5 - rate: fast + - name: Ethernet1/3 + port_priority: 5 + rate: fast state: merged # After state: @@ -346,9 +346,9 @@ Examples - name: Replace device lacp interfaces configuration with the given configuration. cisco.nxos.nxos_lacp_interfaces: config: - - name: port-channel11 - links: - min: 4 + - name: port-channel11 + links: + min: 4 state: replaced # After state: @@ -374,9 +374,9 @@ Examples on device with provided configuration. cisco.nxos.nxos_lacp_interfaces: config: - - name: port-channel11 - links: - min: 4 + - name: port-channel11 + links: + min: 4 state: overridden # After state: @@ -409,17 +409,17 @@ Examples - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_lacp_interfaces: config: - - name: Ethernet1/800 - rate: fast - - name: Ethernet1/801 - rate: fast - port_priority: 32 - - name: port-channel10 - links: - max: 15 - min: 2 - convergence: - graceful: true + - name: Ethernet1/800 + rate: fast + - name: Ethernet1/801 + rate: fast + port_priority: 32 + - name: port-channel10 + links: + max: 15 + min: 2 + convergence: + graceful: true state: rendered # Task Output (redacted) diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lag_interfaces_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lag_interfaces_module.rst index cf2bd9102..7d570dbfc 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lag_interfaces_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lag_interfaces_module.rst @@ -215,9 +215,9 @@ Examples - name: Merge provided configuration with device configuration. cisco.nxos.nxos_lag_interfaces: config: - - name: port-channel99 - members: - - member: Ethernet1/4 + - name: port-channel99 + members: + - member: Ethernet1/4 state: merged # After state: @@ -239,9 +239,9 @@ Examples with provided configuration. cisco.nxos.nxos_lag_interfaces: config: - - name: port-channel10 - members: - - member: Ethernet1/4 + - name: port-channel10 + members: + - member: Ethernet1/4 state: replaced # After state: @@ -265,10 +265,10 @@ Examples device with provided configuration. cisco.nxos.nxos_lag_interfaces: config: - - name: port-channel20 - members: - - member: Ethernet1/6 - force: true + - name: port-channel20 + members: + - member: Ethernet1/6 + force: true state: overridden # After state: @@ -291,7 +291,7 @@ Examples itself). cisco.nxos.nxos_lag_interfaces: config: - - port-channel: port-channel99 + - port-channel: port-channel99 state: deleted - name: Delete LAG attributes of all the interfaces @@ -309,15 +309,15 @@ Examples - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_lag_interfaces: config: - - name: port-channel10 - members: - - member: Ethernet1/800 - mode: active - - member: Ethernet1/801 - - name: port-channel11 - members: - - member: Ethernet1/802 - mode: passive + - name: port-channel10 + members: + - member: Ethernet1/800 + mode: active + - member: Ethernet1/801 + - name: port-channel11 + members: + - member: Ethernet1/802 + mode: passive state: rendered # Task Output (redacted) diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lldp_interfaces_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lldp_interfaces_module.rst index 7ae7b9f3e..d634e9aa4 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lldp_interfaces_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_lldp_interfaces_module.rst @@ -227,12 +227,12 @@ Examples - name: Merge provided configuration with device configuration cisco.nxos.nxos_lldp_interfaces: config: - - name: Ethernet1/4 - receive: false - transmit: true - tlv_set: - management_address: 192.168.122.64 - vlan: 12 + - name: Ethernet1/4 + receive: false + transmit: true + tlv_set: + management_address: 192.168.122.64 + vlan: 12 state: merged # After state: @@ -259,10 +259,10 @@ Examples - name: Replace LLDP configuration on interfaces with given configuration cisco.nxos.nxos_lldp_interfaces: config: - - name: Ethernet1/4 - transmit: false - tlv_set: - vlan: 2 + - name: Ethernet1/4 + transmit: false + tlv_set: + vlan: 2 state: replaced @@ -292,10 +292,10 @@ Examples - name: Override LLDP configuration on all interfaces with given configuration cisco.nxos.nxos_lldp_interfaces: config: - - name: Ethernet1/7 - receive: false - tlv_set: - vlan: 12 + - name: Ethernet1/7 + receive: false + tlv_set: + vlan: 12 state: overridden diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_global_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_global_module.rst index ba49b2331..1cda59a35 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_global_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_global_module.rst @@ -1226,7 +1226,7 @@ Examples facility: local6 use_vrf: default origin_id: - hostname: True + hostname: true # Task output # ------------- @@ -1512,7 +1512,7 @@ Examples facility: local6 use_vrf: default origin_id: - hostname: True + hostname: true # Task Output (redacted) # ----------------------- diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_module.rst deleted file mode 100644 index 288b8a3e1..000000000 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_logging_module.rst +++ /dev/null @@ -1,458 +0,0 @@ -.. _cisco.nxos.nxos_logging_module: - - -*********************** -cisco.nxos.nxos_logging -*********************** - -**Manage logging on network devices** - - -Version added: 1.0.0 - -.. contents:: - :local: - :depth: 1 - -DEPRECATED ----------- -:Removed in collection release after 2023-08-01 -:Why: Updated module released with more functionality. -:Alternative: nxos_logging_global - - - -Synopsis --------- -- This module provides declarative management of logging on Cisco NX-OS devices. - - - - -Parameters ----------- - -.. raw:: html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterChoices/DefaultsComments
    -
    - aggregate - -
    - list - / elements=dictionary -
    -
    - -
    List of logging definitions.
    -
    -
    - dest - -
    - string -
    -
    -
      Choices: -
    • console
    • -
    • logfile
    • -
    • module
    • -
    • monitor
    • -
    • server
    • -
    -
    -
    Destination of the logs.
    -
    -
    - dest_level - -
    - integer -
    -
    - -
    Set logging severity levels.
    -

    aliases: level
    -
    -
    - event - -
    - string -
    -
    -
      Choices: -
    • link-enable
    • -
    • link-default
    • -
    • trunk-enable
    • -
    • trunk-default
    • -
    -
    -
    Link/trunk enable/default interface configuration logging
    -
    -
    - facility - -
    - string -
    -
    - -
    Facility name for logging.
    -
    -
    - facility_level - -
    - integer -
    -
    - -
    Set logging severity levels for facility based log messages.
    -
    -
    - facility_link_status - -
    - string -
    -
    -
      Choices: -
    • link-down-notif
    • -
    • link-down-error
    • -
    • link-up-notif
    • -
    • link-up-error
    • -
    -
    -
    Set logging facility ethpm link status. Not idempotent with version 6.0 images.
    -
    -
    - file_size - -
    - integer -
    -
    - -
    Set logfile size
    -
    -
    - interface - -
    - string -
    -
    - -
    Interface to be used while configuring source-interface for logging (e.g., 'Ethernet1/2', 'mgmt0')
    -
    -
    - interface_message - -
    - string -
    -
    -
      Choices: -
    • add-interface-description
    • -
    -
    -
    Add interface description to interface syslogs. Does not work with version 6.0 images using nxapi as a transport.
    -
    -
    - name - -
    - string -
    -
    - -
    If value of dest is logfile it indicates file-name.
    -
    -
    - purge - -
    - boolean -
    -
    -
      Choices: -
    • no ←
    • -
    • yes
    • -
    -
    -
    Remove any switch logging configuration that does not match what has been configured Not supported for ansible_connection local. All nxos_logging tasks must use the same ansible_connection type.
    -
    -
    - remote_server - -
    - string -
    -
    - -
    Hostname or IP Address for remote logging (when dest is 'server').
    -
    -
    - state - -
    - string -
    -
    -
      Choices: -
    • present ←
    • -
    • absent
    • -
    -
    -
    State of the logging configuration.
    -
    -
    - timestamp - -
    - string -
    -
    -
      Choices: -
    • microseconds
    • -
    • milliseconds
    • -
    • seconds
    • -
    -
    -
    Set logging timestamp format
    -
    -
    - use_vrf - -
    - string -
    -
    - -
    VRF to be used while configuring remote logging (when dest is 'server').
    -
    -
    - - -Notes ------ - -.. note:: - - Limited Support for Cisco MDS - - For information on using CLI and NX-API see the :ref:`NXOS Platform Options guide ` - - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide ` - - For more information on using Ansible to manage Cisco devices see the `Cisco integration page `_. - - - -Examples --------- - -.. code-block:: yaml - - - name: configure console logging with level - cisco.nxos.nxos_logging: - dest: console - level: 2 - state: present - - name: remove console logging configuration - cisco.nxos.nxos_logging: - dest: console - level: 2 - state: absent - - name: configure file logging with level - cisco.nxos.nxos_logging: - dest: logfile - name: testfile - dest_level: 3 - state: present - - name: Configure logging logfile with size - cisco.nxos.nxos_logging: - dest: logfile - name: testfile - dest_level: 3 - file_size: 16384 - - name: configure facility level logging - cisco.nxos.nxos_logging: - facility: daemon - facility_level: 0 - state: present - - name: remove facility level logging - cisco.nxos.nxos_logging: - facility: daemon - facility_level: 0 - state: absent - - name: Configure Remote Logging - cisco.nxos.nxos_logging: - dest: server - remote_server: test-syslogserver.com - facility: auth - facility_level: 1 - use_vrf: management - state: present - - name: Configure Source Interface for Logging - cisco.nxos.nxos_logging: - interface: mgmt0 - state: present - - name: Purge nxos_logging configuration not managed by this playbook - cisco.nxos.nxos_logging: - purge: true - - name: Configure logging timestamp - cisco.nxos.nxos_logging: - timestamp: milliseconds - state: present - - name: Configure logging facility ethpm link status - cisco.nxos.nxos_logging: - facility: ethpm - facility_link_status: link-up-notif - state: present - - name: Configure logging message ethernet description - cisco.nxos.nxos_logging: - interface_message: add-interface-description - state: present - - name: Configure logging event link enable - cisco.nxos.nxos_logging: - event: link-enable - state: present - - name: Configure logging using aggregate - cisco.nxos.nxos_logging: - aggregate: - - {dest: console, dest_level: 2} - - {dest: logfile, dest_level: 2, name: testfile} - - {facility: daemon, facility_level: 0} - state: present - - - -Return Values -------------- -Common return values are documented `here `_, the following are the fields unique to this module: - -.. raw:: html - - - - - - - - - - - - -
    KeyReturnedDescription
    -
    - commands - -
    - list -
    -
    always -
    The list of configuration mode commands to send to the device
    -
    -
    Sample:
    -
    ['logging console 2', 'logging logfile testfile 3', 'logging level daemon 0']
    -
    -

    - - -Status ------- - - -- This module will be removed in a release after 2023-08-01. *[deprecated]* -- For more information see `DEPRECATED`_. - - -Authors -~~~~~~~ - -- Trishna Guha (@trishnaguha) diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_auth_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_auth_module.rst deleted file mode 100644 index c825cd017..000000000 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_auth_module.rst +++ /dev/null @@ -1,224 +0,0 @@ -.. _cisco.nxos.nxos_ntp_auth_module: - - -************************ -cisco.nxos.nxos_ntp_auth -************************ - -**Manages NTP authentication.** - - -Version added: 1.0.0 - -.. contents:: - :local: - :depth: 1 - -DEPRECATED ----------- -:Removed in collection release after 2024-01-01 -:Why: Updated module released with more functionality. -:Alternative: nxos_ntp_global - - - -Synopsis --------- -- Manages NTP authentication. - - - - -Parameters ----------- - -.. raw:: html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterChoices/DefaultsComments
    -
    - auth_type - -
    - string -
    -
    -
      Choices: -
    • text ←
    • -
    • encrypt
    • -
    -
    -
    Whether the given md5string is in cleartext or has been encrypted. If in cleartext, the device will encrypt it before storing it.
    -
    -
    - authentication - -
    - string -
    -
    -
      Choices: -
    • on
    • -
    • off
    • -
    -
    -
    Turns NTP authentication on or off.
    -
    -
    - key_id - -
    - string -
    -
    - -
    Authentication key identifier (numeric).
    -
    -
    - md5string - -
    - string -
    -
    - -
    MD5 String.
    -
    -
    - state - -
    - string -
    -
    -
      Choices: -
    • present ←
    • -
    • absent
    • -
    -
    -
    Manage the state of the resource.
    -
    -
    - trusted_key - -
    - string -
    -
    -
      Choices: -
    • false ←
    • -
    • true
    • -
    -
    -
    Whether the given key is required to be supplied by a time source for the device to synchronize to the time source.
    -
    -
    - - -Notes ------ - -.. note:: - - Tested against NXOSv 7.3.(0)D1(1) on VIRL - - Limited Support for Cisco MDS - - If ``state=absent``, the module will remove the given key configuration if it exists. - - If ``state=absent`` and ``authentication=on``, authentication will be turned off. - - For information on using CLI and NX-API see the :ref:`NXOS Platform Options guide ` - - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide ` - - For more information on using Ansible to manage Cisco devices see the `Cisco integration page `_. - - - -Examples --------- - -.. code-block:: yaml - - # Basic NTP authentication configuration - - cisco.nxos.nxos_ntp_auth: - key_id: 32 - md5string: hello - auth_type: text - - - -Return Values -------------- -Common return values are documented `here `_, the following are the fields unique to this module: - -.. raw:: html - - - - - - - - - - - - -
    KeyReturnedDescription
    -
    - commands - -
    - list -
    -
    always -
    command sent to the device
    -
    -
    Sample:
    -
    ['ntp authentication-key 32 md5 helloWorld 0', 'ntp trusted-key 32']
    -
    -

    - - -Status ------- - - -- This module will be removed in a release after 2024-01-01. *[deprecated]* -- For more information see `DEPRECATED`_. - - -Authors -~~~~~~~ - -- Jason Edelman (@jedelman8) diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_global_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_global_module.rst index 76d81c6a3..b77fc9440 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_global_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_global_module.rst @@ -877,7 +877,7 @@ Examples - access_list: PeerAcl1 serve: - access_list: ServeAcl1 - authenticate: True + authenticate: true authentication_keys: - id: 1001 key: vagwwtKfkv @@ -885,7 +885,7 @@ Examples - id: 1002 key: vagwwtKfkvgthz encryption: 7 - logging: True + logging: true master: stratum: 2 peers: @@ -896,7 +896,7 @@ Examples vrf: default - peer: 192.0.2.2 key_id: 2 - prefer: True + prefer: true vrf: siteA servers: - server: 198.51.100.1 @@ -929,7 +929,7 @@ Examples # - access_list: PeerAcl1 # serve: # - access_list: ServeAcl1 - # authenticate: True + # authenticate: true # authentication_keys: # - id: 1001 # key: vagwwtKfkv @@ -937,7 +937,7 @@ Examples # - id: 1002 # key: vagwwtKfkvgthz # encryption: 7 - # logging: True + # logging: true # master: # stratum: 2 # peers: @@ -948,7 +948,7 @@ Examples # vrf: default # - peer: 192.0.2.2 # key_id: 2 - # prefer: True + # prefer: true # vrf: siteA # servers: # - server: 198.51.100.1 @@ -998,7 +998,7 @@ Examples - access_list: PeerAcl2 serve: - access_list: ServeAcl2 - logging: True + logging: true master: stratum: 2 peers: @@ -1009,7 +1009,7 @@ Examples vrf: default - peer: 192.0.2.5 key_id: 2 - prefer: True + prefer: true vrf: siteA servers: - server: 198.51.100.1 @@ -1025,7 +1025,7 @@ Examples # - access_list: PeerAcl1 # serve: # - access_list: ServeAcl1 - # authenticate: True + # authenticate: true # authentication_keys: # - id: 1001 # key: vagwwtKfkv @@ -1033,7 +1033,7 @@ Examples # - id: 1002 # key: vagwwtKfkvgthz # encryption: 7 - # logging: True + # logging: true # master: # stratum: 2 # peers: @@ -1044,7 +1044,7 @@ Examples # vrf: default # - peer: 192.0.2.2 # key_id: 2 - # prefer: True + # prefer: true # vrf: siteA # servers: # - server: 198.51.100.1 @@ -1072,7 +1072,7 @@ Examples # - access_list: PeerAcl2 # serve: # - access_list: ServeAcl2 - # logging: True + # logging: true # master: # stratum: 2 # peers: @@ -1083,7 +1083,7 @@ Examples # vrf: default # - peer: 192.0.2.5 # key_id: 2 - # prefer: True + # prefer: true # vrf: siteA # servers: # - server: 198.51.100.1 @@ -1119,7 +1119,7 @@ Examples # - access_list: PeerAcl1 # serve: # - access_list: ServeAcl1 - # authenticate: True + # authenticate: true # authentication_keys: # - id: 1001 # key: vagwwtKfkv @@ -1127,7 +1127,7 @@ Examples # - id: 1002 # key: vagwwtKfkvgthz # encryption: 7 - # logging: True + # logging: true # master: # stratum: 2 # peers: @@ -1138,7 +1138,7 @@ Examples # vrf: default # - peer: 192.0.2.2 # key_id: 2 - # prefer: True + # prefer: true # vrf: siteA # servers: # - server: 198.51.100.1 @@ -1178,7 +1178,7 @@ Examples - access_list: PeerAcl1 serve: - access_list: ServeAcl1 - authenticate: True + authenticate: true authentication_keys: - id: 1001 key: vagwwtKfkv @@ -1186,7 +1186,7 @@ Examples - id: 1002 key: vagwwtKfkvgthz encryption: 7 - logging: True + logging: true master: stratum: 2 peers: @@ -1197,7 +1197,7 @@ Examples vrf: default - peer: 192.0.2.2 key_id: 2 - prefer: True + prefer: true vrf: siteA servers: - server: 198.51.100.1 @@ -1252,7 +1252,7 @@ Examples # - access_list: PeerAcl1 # serve: # - access_list: ServeAcl1 - # authenticate: True + # authenticate: true # authentication_keys: # - id: 1001 # key: vagwwtKfkv @@ -1260,7 +1260,7 @@ Examples # - id: 1002 # key: vagwwtKfkvgthz # encryption: 7 - # logging: True + # logging: true # master: # stratum: 2 # peers: @@ -1271,7 +1271,7 @@ Examples # vrf: default # - peer: 192.0.2.2 # key_id: 2 - # prefer: True + # prefer: true # vrf: siteA # servers: # - server: 198.51.100.1 diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_module.rst deleted file mode 100644 index 3fa835a96..000000000 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_module.rst +++ /dev/null @@ -1,314 +0,0 @@ -.. _cisco.nxos.nxos_ntp_module: - - -******************* -cisco.nxos.nxos_ntp -******************* - -**Manages core NTP configuration.** - - -Version added: 1.0.0 - -.. contents:: - :local: - :depth: 1 - -DEPRECATED ----------- -:Removed in collection release after 2024-01-01 -:Why: Updated module released with more functionality. -:Alternative: nxos_ntp_global - - - -Synopsis --------- -- Manages core NTP configuration. - - - - -Parameters ----------- - -.. raw:: html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterChoices/DefaultsComments
    -
    - key_id - -
    - string -
    -
    - -
    Authentication key identifier to use with given NTP server or peer or keyword 'default'.
    -
    -
    - peer - -
    - string -
    -
    - -
    Network address of NTP peer.
    -
    -
    - prefer - -
    - string -
    -
    -
      Choices: -
    • enabled
    • -
    • disabled
    • -
    -
    -
    Makes given NTP server or peer the preferred NTP server or peer for the device.
    -
    -
    - server - -
    - string -
    -
    - -
    Network address of NTP server.
    -
    -
    - source_addr - -
    - string -
    -
    - -
    Local source address from which NTP messages are sent or keyword 'default'.
    -
    -
    - source_int - -
    - string -
    -
    - -
    Local source interface from which NTP messages are sent. Must be fully qualified interface name or keyword 'default'
    -
    -
    - state - -
    - string -
    -
    -
      Choices: -
    • present ←
    • -
    • absent
    • -
    -
    -
    Manage the state of the resource.
    -
    -
    - vrf_name - -
    - string -
    -
    - -
    Makes the device communicate with the given NTP server or peer over a specific VRF or keyword 'default'.
    -
    -
    - - -Notes ------ - -.. note:: - - Limited Support for Cisco MDS - - For information on using CLI and NX-API see the :ref:`NXOS Platform Options guide ` - - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide ` - - For more information on using Ansible to manage Cisco devices see the `Cisco integration page `_. - - - -Examples --------- - -.. code-block:: yaml - - # Set NTP Server with parameters - - cisco.nxos.nxos_ntp: - server: 1.2.3.4 - key_id: 32 - prefer: enabled - host: '{{ inventory_hostname }}' - username: '{{ un }}' - password: '{{ pwd }}' - - - -Return Values -------------- -Common return values are documented `here `_, the following are the fields unique to this module: - -.. raw:: html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    KeyReturnedDescription
    -
    - changed - -
    - boolean -
    -
    always -
    check to see if a change was made on the device
    -
    -
    Sample:
    -
    True
    -
    -
    - end_state - -
    - dictionary -
    -
    always -
    k/v pairs of ntp info after module execution
    -
    -
    Sample:
    -
    {'address': '192.0.2.2', 'key_id': '48', 'peer_type': 'server', 'prefer': 'enabled', 'source': '192.0.2.3', 'source_type': 'source'}
    -
    -
    - existing - -
    - dictionary -
    -
    always -
    k/v pairs of existing ntp server/peer
    -
    -
    Sample:
    -
    {'address': '192.0.2.2', 'key_id': '32', 'peer_type': 'server', 'prefer': 'enabled', 'source': 'ethernet2/1', 'source_type': 'source-interface'}
    -
    -
    - proposed - -
    - dictionary -
    -
    always -
    k/v pairs of parameters passed into module
    -
    -
    Sample:
    -
    {'address': '192.0.2.2', 'key_id': '48', 'peer_type': 'server', 'prefer': 'enabled', 'source': '192.0.2.3', 'source_type': 'source'}
    -
    -
    - updates - -
    - list -
    -
    always -
    command sent to the device
    -
    -
    Sample:
    -
    ['ntp server 192.0.2.2 prefer key 48', 'no ntp source-interface ethernet2/1', 'ntp source 192.0.2.3']
    -
    -

    - - -Status ------- - - -- This module will be removed in a release after 2024-01-01. *[deprecated]* -- For more information see `DEPRECATED`_. - - -Authors -~~~~~~~ - -- Jason Edelman (@jedelman8) diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_options_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_options_module.rst deleted file mode 100644 index e99825641..000000000 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ntp_options_module.rst +++ /dev/null @@ -1,192 +0,0 @@ -.. _cisco.nxos.nxos_ntp_options_module: - - -*************************** -cisco.nxos.nxos_ntp_options -*************************** - -**Manages NTP options.** - - -Version added: 1.0.0 - -.. contents:: - :local: - :depth: 1 - -DEPRECATED ----------- -:Removed in collection release after 2024-01-01 -:Why: Updated module released with more functionality. -:Alternative: nxos_ntp_global - - - -Synopsis --------- -- Manages NTP options, e.g. authoritative server and logging. - - - - -Parameters ----------- - -.. raw:: html - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ParameterChoices/DefaultsComments
    -
    - logging - -
    - boolean -
    -
    -
      Choices: -
    • no
    • -
    • yes
    • -
    -
    -
    Sets whether NTP logging is enabled on the device.
    -
    -
    - master - -
    - boolean -
    -
    -
      Choices: -
    • no
    • -
    • yes
    • -
    -
    -
    Sets whether the device is an authoritative NTP server.
    -
    -
    - state - -
    - string -
    -
    -
      Choices: -
    • present ←
    • -
    • absent
    • -
    -
    -
    Manage the state of the resource.
    -
    -
    - stratum - -
    - string -
    -
    - -
    If master=true, an optional stratum can be supplied (1-15). The device default is 8.
    -
    -
    - - -Notes ------ - -.. note:: - - Tested against NXOSv 7.3.(0)D1(1) on VIRL - - Limited Support for Cisco MDS - - When ``state=absent``, master and logging will be set to False and stratum will be removed as well - - For information on using CLI and NX-API see the :ref:`NXOS Platform Options guide ` - - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide ` - - For more information on using Ansible to manage Cisco devices see the `Cisco integration page `_. - - - -Examples --------- - -.. code-block:: yaml - - # Basic NTP options configuration - - cisco.nxos.nxos_ntp_options: - master: true - stratum: 12 - logging: false - host: '{{ inventory_hostname }}' - username: '{{ un }}' - password: '{{ pwd }}' - - - -Return Values -------------- -Common return values are documented `here `_, the following are the fields unique to this module: - -.. raw:: html - - - - - - - - - - - - -
    KeyReturnedDescription
    -
    - updates - -
    - list -
    -
    always -
    command sent to the device
    -
    -
    Sample:
    -
    ['no ntp logging', 'ntp master 12']
    -
    -

    - - -Status ------- - - -- This module will be removed in a release after 2024-01-01. *[deprecated]* -- For more information see `DEPRECATED`_. - - -Authors -~~~~~~~ - -- Jason Edelman (@jedelman8) diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospf_interfaces_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospf_interfaces_module.rst index 6dbfbd5f5..ff69b6e71 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospf_interfaces_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospf_interfaces_module.rst @@ -784,46 +784,46 @@ Examples config: - name: Ethernet1/1 address_family: - - afi: ipv4 - processes: - - process_id: "100" - area: - area_id: 1.1.1.1 - secondaries: False - multi_areas: - - 11.11.11.11 - - afi: ipv6 - processes: - - process_id: "200" - area: - area_id: 2.2.2.2 + - afi: ipv4 + processes: + - process_id: '100' + area: + area_id: 1.1.1.1 + secondaries: false multi_areas: - - 21.0.0.0 - - process_id: "300" + - 11.11.11.11 + - afi: ipv6 + processes: + - process_id: '200' + area: + area_id: 2.2.2.2 + multi_areas: + - 21.0.0.0 + - process_id: '300' + multi_areas: + - 50.50.50.50 multi_areas: - - 50.50.50.50 - multi_areas: - - 16.10.10.10 + - 16.10.10.10 - name: Ethernet1/2 address_family: - - afi: ipv4 - authentication: - enable: True - key_chain: test-1 - message_digest_key: - key_id: 10 - encryption: 3 - key: abc01d272be25d29 - cost: 100 - - afi: ipv6 - network: broadcast - shutdown: True + - afi: ipv4 + authentication: + enable: true + key_chain: test-1 + message_digest_key: + key_id: 10 + encryption: 3 + key: abc01d272be25d29 + cost: 100 + - afi: ipv6 + network: broadcast + shutdown: true - name: Ethernet1/3 address_family: - - afi: ipv4 - authentication_key: - encryption: 7 - key: 12090404011C03162E + - afi: ipv4 + authentication_key: + encryption: 7 + key: 12090404011C03162E state: merged # Task output: @@ -947,17 +947,17 @@ Examples - name: Replace OSPF configurations of listed interfaces with provided configurations cisco.nxos.nxos_ospf_interfaces: config: - - name: Ethernet1/1 - address_family: - - afi: ipv4 - processes: - - process_id: "100" - area: - area_id: 1.1.1.1 - secondaries: False - multi_areas: - - 11.11.11.12 - - name: Ethernet1/3 + - name: Ethernet1/1 + address_family: + - afi: ipv4 + processes: + - process_id: "100" + area: + area_id: 1.1.1.1 + secondaries: false + multi_areas: + - 11.11.11.12 + - name: Ethernet1/3 state: replaced # Task output: @@ -1091,16 +1091,16 @@ Examples - name: Override all OSPF interfaces configuration with provided configuration cisco.nxos.nxos_ospf_interfaces: config: - - name: Ethernet1/1 - address_family: - - afi: ipv4 - processes: - - process_id: "100" - area: - area_id: 1.1.1.1 - secondaries: False - multi_areas: - - 11.11.11.12 + - name: Ethernet1/1 + address_family: + - afi: ipv4 + processes: + - process_id: "100" + area: + area_id: 1.1.1.1 + secondaries: false + multi_areas: + - 11.11.11.12 state: overridden # Task output: @@ -1409,53 +1409,56 @@ Examples # Using rendered - - name: Render platform specific configuration lines with state rendered (without connecting to the device) + - name: >- + Render platform specific configuration lines with state rendered (without + connecting to the device) cisco.nxos.nxos_ospf_interfaces: config: - name: Ethernet1/1 address_family: - - afi: ipv4 - processes: - - process_id: "100" - area: - area_id: 1.1.1.1 - secondaries: False - multi_areas: - - 11.11.11.11 - - afi: ipv6 - processes: - - process_id: "200" - area: - area_id: 2.2.2.2 + - afi: ipv4 + processes: + - process_id: '100' + area: + area_id: 1.1.1.1 + secondaries: false multi_areas: - - 21.0.0.0 - - process_id: "300" + - 11.11.11.11 + - afi: ipv6 + processes: + - process_id: '200' + area: + area_id: 2.2.2.2 + multi_areas: + - 21.0.0.0 + - process_id: '300' + multi_areas: + - 50.50.50.50 multi_areas: - - 50.50.50.50 - multi_areas: - - 16.10.10.10 + - 16.10.10.10 - name: Ethernet1/2 address_family: - - afi: ipv4 - authentication: - enable: True - key_chain: test-1 - message_digest_key: - key_id: 10 - encryption: 3 - key: abc01d272be25d29 - cost: 100 - - afi: ipv6 - network: broadcast - shutdown: True + - afi: ipv4 + authentication: + enable: true + key_chain: test-1 + message_digest_key: + key_id: 10 + encryption: 3 + key: abc01d272be25d29 + cost: 100 + - afi: ipv6 + network: broadcast + shutdown: true - name: Ethernet1/3 address_family: - - afi: ipv4 - authentication_key: - encryption: 7 - key: 12090404011C03162E + - afi: ipv4 + authentication_key: + encryption: 7 + key: 12090404011C03162E state: rendered + # Task Output: # ------------ # rendered: diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospfv2_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospfv2_module.rst index bc5613068..2115d34f2 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospfv2_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospfv2_module.rst @@ -4432,56 +4432,56 @@ Examples cisco.nxos.nxos_ospfv2: config: processes: - - process_id: 100 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_1 - direction: in - - route_map: rmap_2 - direction: out - ranges: - - prefix: 198.51.100.64/27 - not_advertise: true - - prefix: 198.51.100.96/27 - cost: 120 - - area_id: 0.0.0.101 - authentication: - message_digest: true - redistribute: - - protocol: eigrp - id: 120 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - redistribute: - - protocol: static - route_map: zone1-static-connect - summary_address: - - prefix: 198.51.100.128/27 - tag: 121 - - prefix: 198.51.100.160/27 + - process_id: 100 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: true - no_summary: true - - area_id: 0.0.0.103 - nssa: - no_summary: true - translate: - type7: - always: true - - vrf: zone2 - auto_cost: - reference_bandwidth: 45 - unit: Gbps + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_1 + direction: in + - route_map: rmap_2 + direction: out + ranges: + - prefix: 198.51.100.64/27 + not_advertise: true + - prefix: 198.51.100.96/27 + cost: 120 + - area_id: 0.0.0.101 + authentication: + message_digest: true + redistribute: + - protocol: eigrp + id: 120 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + redistribute: + - protocol: static + route_map: zone1-static-connect + summary_address: + - prefix: 198.51.100.128/27 + tag: 121 + - prefix: 198.51.100.160/27 + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true + - area_id: 0.0.0.103 + nssa: + no_summary: true + translate: + type7: + always: true + - vrf: zone2 + auto_cost: + reference_bandwidth: 45 + unit: Gbps state: merged # Task output: @@ -4613,43 +4613,46 @@ Examples # vrf zone2 # auto-cost reference-bandwidth 45 Gbps - - name: Replace device configurations of listed OSPF processes with provided configurations + - name: >- + Replace device configurations of listed OSPF processes with provided + configurations cisco.nxos.nxos_ospfv2: config: processes: - - process_id: 102 - router_id: 198.51.100.1 - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_8 - direction: in - ranges: - - prefix: 198.51.100.64/27 - not_advertise: true - - area_id: 0.0.0.101 - stub: - no_summary: true - redistribute: - - protocol: eigrp - id: 130 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - redistribute: - - protocol: bgp - id: 65563 - route_map: zone1-bgp-connect + - process_id: 102 + router_id: 198.51.100.1 areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: true - no_summary: true + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_8 + direction: in + ranges: + - prefix: 198.51.100.64/27 + not_advertise: true + - area_id: 0.0.0.101 + stub: + no_summary: true + redistribute: + - protocol: eigrp + id: 130 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + redistribute: + - protocol: bgp + id: 65563 + route_map: zone1-bgp-connect + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true state: replaced + # Task output: # ------------ # before: @@ -4803,11 +4806,11 @@ Examples cisco.nxos.nxos_ospfv2: config: processes: - - process_id: 104 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - shutdown: true + - process_id: 104 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 + shutdown: true state: overridden # Task output: @@ -4925,7 +4928,7 @@ Examples cisco.nxos.nxos_ospfv2: config: processes: - - process_id: 102 + - process_id: 102 state: deleted # Task output: @@ -5088,62 +5091,65 @@ Examples # Using rendered - - name: Render platform specific configuration lines (without connecting to the device) + - name: >- + Render platform specific configuration lines (without connecting to the + device) cisco.nxos.nxos_ospfv2: config: processes: - - process_id: 100 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_1 - direction: in - - route_map: rmap_2 - direction: out - ranges: - - prefix: 198.51.100.64/27 - not_advertise: true - - prefix: 198.51.100.96/27 - cost: 120 - - area_id: 0.0.0.101 - authentication: - message_digest: true - redistribute: - - protocol: eigrp - id: 120 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - redistribute: - - protocol: static - route_map: zone1-static-connect - summary_address: - - prefix: 198.51.100.128/27 - tag: 121 - - prefix: 198.51.100.160/27 + - process_id: 100 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: true - no_summary: true - - area_id: 0.0.0.103 - nssa: - no_summary: true - translate: - type7: - always: true - - vrf: zone2 - auto_cost: - reference_bandwidth: 45 - unit: Gbps + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_1 + direction: in + - route_map: rmap_2 + direction: out + ranges: + - prefix: 198.51.100.64/27 + not_advertise: true + - prefix: 198.51.100.96/27 + cost: 120 + - area_id: 0.0.0.101 + authentication: + message_digest: true + redistribute: + - protocol: eigrp + id: 120 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + redistribute: + - protocol: static + route_map: zone1-static-connect + summary_address: + - prefix: 198.51.100.128/27 + tag: 121 + - prefix: 198.51.100.160/27 + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true + - area_id: 0.0.0.103 + nssa: + no_summary: true + translate: + type7: + always: true + - vrf: zone2 + auto_cost: + reference_bandwidth: 45 + unit: Gbps state: rendered + # Task output: # ------------ # rendered: diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospfv3_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospfv3_module.rst index 0c4c9efed..8e7c46ef6 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospfv3_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_ospfv3_module.rst @@ -3570,49 +3570,49 @@ Examples cisco.nxos.nxos_ospfv3: config: processes: - - process_id: 100 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - address_family: - afi: ipv6 - safi: unicast - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_1 - direction: in - - route_map: rmap_2 - direction: out - ranges: - - prefix: 2001:db2::/32 - not_advertise: true - - prefix: 2001:db3::/32 - cost: 120 - redistribute: - - protocol: eigrp - id: 120 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: true - no_summary: true - - area_id: 0.0.0.103 - nssa: - no_summary: true - translate: - type7: - always: true - - vrf: zone2 - auto_cost: - reference_bandwidth: 45 - unit: Gbps + - process_id: 100 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 + address_family: + afi: ipv6 + safi: unicast + areas: + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_1 + direction: in + - route_map: rmap_2 + direction: out + ranges: + - prefix: '2001:db2::/32' + not_advertise: true + - prefix: '2001:db3::/32' + cost: 120 + redistribute: + - protocol: eigrp + id: 120 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true + - area_id: 0.0.0.103 + nssa: + no_summary: true + translate: + type7: + always: true + - vrf: zone2 + auto_cost: + reference_bandwidth: 45 + unit: Gbps state: merged # Task output: @@ -3736,33 +3736,33 @@ Examples cisco.nxos.nxos_ospfv3: config: processes: - - process_id: 102 - router_id: 198.51.100.1 - address_family: - afi: ipv6 - safi: unicast - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_8 - direction: in - ranges: - - not_advertise: true - prefix: 2001:db2::/32 - redistribute: - - protocol: eigrp - id: 130 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: True - no_summary: True + - process_id: 102 + router_id: 198.51.100.1 + address_family: + afi: ipv6 + safi: unicast + areas: + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_8 + direction: in + ranges: + - not_advertise: true + prefix: 2001:db2::/32 + redistribute: + - protocol: eigrp + id: 130 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true state: replaced # Task output: @@ -3902,11 +3902,11 @@ Examples cisco.nxos.nxos_ospfv3: config: processes: - - process_id: 104 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - shutdown: true + - process_id: 104 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 + shutdown: true state: overridden # Task output: @@ -4022,7 +4022,7 @@ Examples cisco.nxos.nxos_ospfv3: config: processes: - - process_id: 102 + - process_id: 102 state: deleted # Task output: @@ -4074,7 +4074,7 @@ Examples # vrf: zone2 # # commands: - # - no router ospfv3 102 + # - no router ospfv3 102 # # after: # processes: @@ -4180,49 +4180,49 @@ Examples cisco.nxos.nxos_ospfv3: config: processes: - - process_id: 100 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - address_family: - afi: ipv6 - safi: unicast - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_1 - direction: in - - route_map: rmap_2 - direction: out - ranges: - - prefix: 2001:db2::/32 - not_advertise: true - - prefix: 2001:db3::/32 - cost: 120 - redistribute: - - protocol: eigrp - id: 120 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: true - no_summary: true - - area_id: 0.0.0.103 - nssa: - no_summary: true - translate: - type7: - always: true - - vrf: zone2 - auto_cost: - reference_bandwidth: 45 - unit: Gbps + - process_id: 100 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 + address_family: + afi: ipv6 + safi: unicast + areas: + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_1 + direction: in + - route_map: rmap_2 + direction: out + ranges: + - prefix: 2001:db2::/32 + not_advertise: true + - prefix: 2001:db3::/32 + cost: 120 + redistribute: + - protocol: eigrp + id: 120 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true + - area_id: 0.0.0.103 + nssa: + no_summary: true + translate: + type7: + always: true + - vrf: zone2 + auto_cost: + reference_bandwidth: 45 + unit: Gbps state: rendered # Task output: @@ -4315,7 +4315,7 @@ Examples # router_id: 192.0.100.2 # - process_id: "102" # router_id: 198.54.100.1 - # shutdown: True + # shutdown: true # Using gathered diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_route_maps_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_route_maps_module.rst index 6ced43a16..bcdf6a426 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_route_maps_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_route_maps_module.rst @@ -2957,44 +2957,44 @@ Examples - route_map: rmap3 entries: - - sequence: 10 - description: "*** first stanza ***" - action: permit - set: - ip: - next_hop: - verify_availability: - - address: 3.3.3.3 - track: 1 - - address: 4.4.4.4 - track: 3 + - sequence: 10 + description: "*** first stanza ***" + action: permit + set: + ip: + next_hop: + verify_availability: + - address: 3.3.3.3 + track: 1 + - address: 4.4.4.4 + track: 3 - - sequence: 20 - description: "*** second stanza ***" - action: permit - set: - ip: - next_hop: - address: 6.6.6.6 2.2.2.2 - load_share: true - drop_on_fail: true + - sequence: 20 + description: "*** second stanza ***" + action: permit + set: + ip: + next_hop: + address: 6.6.6.6 2.2.2.2 + load_share: true + drop_on_fail: true - - sequence: 30 - description: "*** third stanza ***" - action: permit - set: - ip: - next_hop: - peer_address: true + - sequence: 30 + description: "*** third stanza ***" + action: permit + set: + ip: + next_hop: + peer_address: true - - sequence: 40 - description: "*** fourth stanza ***" - action: permit - set: - ip: - next_hop: - unchanged: true - redist_unchanged: true + - sequence: 40 + description: "*** fourth stanza ***" + action: permit + set: + ip: + next_hop: + unchanged: true + redist_unchanged: true state: merged # Task output @@ -3259,35 +3259,35 @@ Examples - AllowPrefix1 set: community: - local_as: True + local_as: true - route_map: rmap3 entries: - - sequence: 10 - description: "*** first stanza ***" - action: permit - set: - ip: - next_hop: - verify_availability: - - address: 3.3.3.3 - track: 1 - - sequence: 20 - description: "*** second stanza ***" - action: permit - set: - ip: - next_hop: - peer_address: true - - sequence: 30 - description: "*** third stanza ***" - action: permit - set: - ip: - next_hop: - address: 6.6.6.6 2.2.2.2 - load_share: true - drop_on_fail: true + - sequence: 10 + description: "*** first stanza ***" + action: permit + set: + ip: + next_hop: + verify_availability: + - address: 3.3.3.3 + track: 1 + - sequence: 20 + description: "*** second stanza ***" + action: permit + set: + ip: + next_hop: + peer_address: true + - sequence: 30 + description: "*** third stanza ***" + action: permit + set: + ip: + next_hop: + address: 6.6.6.6 2.2.2.2 + load_share: true + drop_on_fail: true state: replaced # Task output @@ -3446,7 +3446,7 @@ Examples # - AllowPrefix1 # set: # community: - # local_as: True + # local_as: true # # - route_map: rmap2 # entries: @@ -3594,7 +3594,7 @@ Examples - AllowPrefix1 set: community: - local_as: True + local_as: true state: overridden # Task output @@ -3705,7 +3705,7 @@ Examples # - AllowPrefix1 # set: # community: - # local_as: True + # local_as: true # # After state: # ------------ diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_snmp_server_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_snmp_server_module.rst index 1324c39a1..126e16341 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_snmp_server_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_snmp_server_module.rst @@ -3676,18 +3676,18 @@ Examples location: serverroom-1 traps: aaa: - server_state_change: True + server_state_change: true system: - clock_change_notification: True + clock_change_notification: true hosts: - host: 192.0.2.1 - traps: True + traps: true version: '1' community: public - host: 192.0.2.1 source_interface: Ethernet1/1 - host: 192.0.2.2 - informs: True + informs: true version: '3' auth: NMS users: @@ -3697,16 +3697,16 @@ Examples authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true - user: snmp_user_2 group: network-operator authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true priv: privacy_password: '0x5632724fb8ac3699296af26281e1d0f1' - aes_128: True + aes_128: true use_acls: - user: snmp_user_1 ipv4: acl1 @@ -3725,7 +3725,7 @@ Examples # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" - # localized_key: True + # localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" # @@ -3757,9 +3757,9 @@ Examples # location: serverroom-1 # traps: # aaa: - # server_state_change: True + # server_state_change: true # system: - # clock_change_notification: True + # clock_change_notification: true # hosts: # - host: 192.0.2.1 # traps: true @@ -3780,7 +3780,7 @@ Examples # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" - # localized_key: True + # localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" # @@ -3789,7 +3789,7 @@ Examples # authentication: # algorithm: md5 # password: "0x5632724fb8ac3699296af26281e1d0f1" - # localized_key: True + # localized_key: true # # - authentication: # algorithm: md5 @@ -3863,16 +3863,16 @@ Examples location: serverroom-2 traps: aaa: - server_state_change: True + server_state_change: true hosts: - host: 192.0.2.1 - traps: True + traps: true version: '1' community: public - host: 192.0.2.1 source_interface: Ethernet1/1 - host: 192.0.3.2 - informs: True + informs: true version: '3' auth: NMS users: @@ -3882,7 +3882,7 @@ Examples authentication: algorithm: md5 password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" - localized_key: True + localized_key: true priv: privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" @@ -3891,17 +3891,17 @@ Examples authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true - user: snmp_user_2 group: network-operator authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true priv: privacy_password: '0x5632724fb8ac3699296af26281e1d0f1' - aes_128: True + aes_128: true use_acls: - user: snmp_user_1 ipv4: acl1 @@ -3922,9 +3922,9 @@ Examples # location: serverroom-1 # traps: # aaa: - # server_state_change: True + # server_state_change: true # system: - # clock_change_notification: True + # clock_change_notification: true # hosts: # - host: 192.0.2.1 # traps: true @@ -3945,7 +3945,7 @@ Examples # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" - # localized_key: True + # localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" # @@ -3954,7 +3954,7 @@ Examples # authentication: # algorithm: md5 # password: "0x5632724fb8ac3699296af26281e1d0f1" - # localized_key: True + # localized_key: true # # - authentication: # algorithm: md5 @@ -3996,16 +3996,16 @@ Examples # location: serverroom-2 # traps: # aaa: - # server_state_change: True + # server_state_change: true # hosts: # - host: 192.0.2.1 - # traps: True + # traps: true # version: '1' # community: public # - host: 192.0.2.1 # source_interface: Ethernet1/1 # - host: 192.0.3.2 - # informs: True + # informs: true # version: '3' # auth: NMS # users: @@ -4015,7 +4015,7 @@ Examples # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" - # localized_key: True + # localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" # @@ -4024,17 +4024,17 @@ Examples # authentication: # algorithm: md5 # password: '0x5632724fb8ac3699296af26281e1d0f1' - # localized_key: True + # localized_key: true # # - user: snmp_user_2 # group: network-operator # authentication: # algorithm: md5 # password: '0x5632724fb8ac3699296af26281e1d0f1' - # localized_key: True + # localized_key: true # priv: # privacy_password: '0x5632724fb8ac3699296af26281e1d0f1' - # aes_128: True + # aes_128: true # # use_acls: # - user: snmp_user_1 @@ -4100,9 +4100,9 @@ Examples # location: serverroom-1 # traps: # aaa: - # server_state_change: True + # server_state_change: true # system: - # clock_change_notification: True + # clock_change_notification: true # hosts: # - host: 192.0.2.1 # traps: true @@ -4123,7 +4123,7 @@ Examples # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" - # localized_key: True + # localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" # @@ -4132,7 +4132,7 @@ Examples # authentication: # algorithm: md5 # password: "0x5632724fb8ac3699296af26281e1d0f1" - # localized_key: True + # localized_key: true # # - authentication: # algorithm: md5 @@ -4177,7 +4177,7 @@ Examples # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" - # localized_key: True + # localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" @@ -4203,18 +4203,18 @@ Examples location: serverroom-1 traps: aaa: - server_state_change: True + server_state_change: true system: - clock_change_notification: True + clock_change_notification: true hosts: - host: 192.0.2.1 - traps: True + traps: true version: '1' community: public - host: 192.0.2.1 source_interface: Ethernet1/1 - host: 192.0.2.2 - informs: True + informs: true version: '3' auth: NMS users: @@ -4224,16 +4224,16 @@ Examples authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true - user: snmp_user_2 group: network-operator authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true priv: privacy_password: '0x5632724fb8ac3699296af26281e1d0f1' - aes_128: True + aes_128: true use_acls: - user: snmp_user_1 ipv4: acl1 @@ -4300,9 +4300,9 @@ Examples # location: serverroom-1 # traps: # aaa: - # server_state_change: True + # server_state_change: true # system: - # clock_change_notification: True + # clock_change_notification: true # hosts: # - host: 192.0.2.1 # traps: true @@ -4323,7 +4323,7 @@ Examples # authentication: # algorithm: md5 # password: "0x5632724fb8ac3699296af26281e1d0f1" - # localized_key: True + # localized_key: true # # - authentication: # algorithm: md5 diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_static_routes_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_static_routes_module.rst index 264515ecf..0ce8ef2ed 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_static_routes_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_static_routes_module.rst @@ -416,7 +416,7 @@ Examples - name: Delete routes based on VRF cisco.nxos.nxos_static_routes: config: - - vrf: trial_vrf + - vrf: trial_vrf state: deleted # Task Output @@ -496,9 +496,9 @@ Examples - name: Delete routes based on AFI in a VRF cisco.nxos.nxos_static_routes: config: - - vrf: trial_vrf - address_families: - - afi: ipv4 + - vrf: trial_vrf + address_families: + - afi: ipv4 state: deleted # Task Output @@ -580,28 +580,28 @@ Examples - name: Merge new static route configuration cisco.nxos.nxos_static_routes: config: - - vrf: trial_vrf - address_families: - - afi: ipv4 - routes: - - dest: 192.0.2.64/24 - next_hops: - - forward_router_address: 192.0.2.22 - tag: 4 - admin_distance: 2 - - address_families: - - afi: ipv4 - routes: - - dest: 192.0.2.16/24 - next_hops: - - forward_router_address: 192.0.2.24 - route_name: new_route - - afi: ipv6 - routes: - - dest: 2001:db8::/64 - next_hops: - - interface: eth1/3 - forward_router_address: 2001:db8::12 + - vrf: trial_vrf + address_families: + - afi: ipv4 + routes: + - dest: 192.0.2.64/24 + next_hops: + - forward_router_address: 192.0.2.22 + tag: 4 + admin_distance: 2 + - address_families: + - afi: ipv4 + routes: + - dest: 192.0.2.16/24 + next_hops: + - forward_router_address: 192.0.2.24 + route_name: new_route + - afi: ipv6 + routes: + - dest: '2001:db8::/64' + next_hops: + - interface: eth1/3 + forward_router_address: '2001:db8::12' state: merged # Task Output @@ -663,19 +663,19 @@ Examples - name: Overridden existing static route configuration with new configuration cisco.nxos.nxos_static_routes: config: - - vrf: trial_vrf - address_families: - - afi: ipv4 - routes: - - dest: 192.0.2.16/28 - next_hops: - - forward_router_address: 192.0.2.23 - route_name: overridden_route1 - admin_distance: 3 - - forward_router_address: 192.0.2.45 - route_name: overridden_route2 - dest_vrf: destinationVRF - interface: Ethernet1/2 + - vrf: trial_vrf + address_families: + - afi: ipv4 + routes: + - dest: 192.0.2.16/28 + next_hops: + - forward_router_address: 192.0.2.23 + route_name: overridden_route1 + admin_distance: 3 + - forward_router_address: 192.0.2.45 + route_name: overridden_route2 + dest_vrf: destinationVRF + interface: Ethernet1/2 state: overridden # Task Output @@ -752,18 +752,18 @@ Examples - name: Replaced the existing static configuration of a prefix with new configuration cisco.nxos.nxos_static_routes: config: - - address_families: - - afi: ipv4 - routes: - - dest: 192.0.2.16/28 - next_hops: - - forward_router_address: 192.0.2.23 - route_name: replaced_route1 - admin_distance: 3 - - forward_router_address: 192.0.2.45 - route_name: replaced_route2 - dest_vrf: destinationVRF - interface: Ethernet1/2 + - address_families: + - afi: ipv4 + routes: + - dest: 192.0.2.16/28 + next_hops: + - forward_router_address: 192.0.2.23 + route_name: replaced_route1 + admin_distance: 3 + - forward_router_address: 192.0.2.45 + route_name: replaced_route2 + dest_vrf: destinationVRF + interface: Ethernet1/2 state: replaced # Task Output @@ -882,18 +882,18 @@ Examples - name: Render required configuration to be pushed to the device cisco.nxos.nxos_static_routes: config: - - address_families: - - afi: ipv4 - routes: - - dest: 192.0.2.48/28 - next_hops: - - forward_router_address: 192.0.2.13 - - afi: ipv6 - routes: - - dest: 2001:db8::/64 - next_hops: - - interface: eth1/3 - forward_router_address: 2001:db8::12 + - address_families: + - afi: ipv4 + routes: + - dest: 192.0.2.48/28 + next_hops: + - forward_router_address: 192.0.2.13 + - afi: ipv6 + routes: + - dest: 2001:db8::/64 + next_hops: + - interface: eth1/3 + forward_router_address: 2001:db8::12 state: rendered # Task Output diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_system_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_system_module.rst index 4c573f51b..630ebbaad 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_system_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_system_module.rst @@ -181,14 +181,14 @@ Examples - name: configure name servers cisco.nxos.nxos_system: name_servers: - - 8.8.8.8 - - 8.8.4.4 + - 8.8.8.8 + - 8.8.4.4 - name: configure name servers with VRF support cisco.nxos.nxos_system: name_servers: - - {server: 8.8.8.8, vrf: mgmt} - - {server: 8.8.4.4, vrf: mgmt} + - {server: 8.8.8.8, vrf: mgmt} + - {server: 8.8.4.4, vrf: mgmt} diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_telemetry_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_telemetry_module.rst index 00dcb28b2..d1394ccf0 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_telemetry_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_telemetry_module.rst @@ -611,41 +611,41 @@ Examples source_interface: Ethernet1/1 vrf: management destination_groups: - - id: 2 - destination: - ip: 192.168.0.2 - port: 50001 - protocol: gRPC - encoding: GPB - - id: 55 - destination: - ip: 192.168.0.55 - port: 60001 - protocol: gRPC - encoding: GPB + - id: 2 + destination: + ip: 192.168.0.2 + port: 50001 + protocol: gRPC + encoding: GPB + - id: 55 + destination: + ip: 192.168.0.55 + port: 60001 + protocol: gRPC + encoding: GPB sensor_groups: - - id: 1 - data_source: NX-API - path: - name: '"show lldp neighbors detail"' - depth: 0 - - id: 55 - data_source: DME - path: - name: sys/ch - depth: unbounded - filter_condition: ne(eqptFt.operSt,"ok") + - id: 1 + data_source: NX-API + path: + name: '"show lldp neighbors detail"' + depth: 0 + - id: 55 + data_source: DME + path: + name: sys/ch + depth: unbounded + filter_condition: ne(eqptFt.operSt,"ok") subscriptions: - - id: 5 - destination_group: 55 - sensor_group: - id: 1 - sample_interval: 1000 - - id: 6 - destination_group: 2 - sensor_group: - id: 55 - sample_interval: 2000 + - id: 5 + destination_group: 55 + sensor_group: + id: 1 + sample_interval: 1000 + - id: 6 + destination_group: 2 + sensor_group: + id: 55 + sample_interval: 2000 state: merged @@ -663,15 +663,15 @@ Examples source_interface: Ethernet1/1 vrf: management destination_groups: - - id: 2 - destination: - ip: 192.168.0.2 - port: 50001 - protocol: gRPC - encoding: GPB + - id: 2 + destination: + ip: 192.168.0.2 + port: 50001 + protocol: gRPC + encoding: GPB subscriptions: - - id: 5 - destination_group: 55 + - id: 5 + destination_group: 55 state: replaced diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_user_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_user_module.rst index bcd44852b..a03a23a03 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_user_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_user_module.rst @@ -340,8 +340,8 @@ Examples - name: set multiple users role cisco.nxos.nxos_user: aggregate: - - name: netop - - name: netend + - name: netop + - name: netend role: network-operator state: present diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vlans_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vlans_module.rst index 1da6615e6..a9dc3f41d 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vlans_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vlans_module.rst @@ -228,10 +228,10 @@ Examples - name: Merge provided configuration with device configuration. cisco.nxos.nxos_vlans: config: - - vlan_id: 5 - name: test-vlan5 - - vlan_id: 10 - enabled: false + - vlan_id: 5 + name: test-vlan5 + - vlan_id: 10 + enabled: false state: merged # After state: @@ -258,11 +258,11 @@ Examples - name: Replace device configuration of specified vlan with provided configuration. cisco.nxos.nxos_vlans: config: - - vlan_id: 5 - name: test-vlan - enabled: false - - vlan_id: 10 - enabled: false + - vlan_id: 5 + name: test-vlan + enabled: false + - vlan_id: 10 + enabled: false state: replaced # After state: @@ -293,10 +293,10 @@ Examples - name: Override device configuration of all vlans with provided configuration. cisco.nxos.nxos_vlans: config: - - vlan_id: 5 - name: test-vlan - - vlan_id: 10 - state: active + - vlan_id: 5 + name: test-vlan + - vlan_id: 10 + state: active state: overridden # After state: @@ -321,8 +321,8 @@ Examples - name: Delete vlans. cisco.nxos.nxos_vlans: config: - - vlan_id: 5 - - vlan_id: 10 + - vlan_id: 5 + - vlan_id: 10 state: deleted # After state: @@ -334,13 +334,13 @@ Examples - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_vlans: config: - - vlan_id: 5 - name: vlan5 - mapped_vni: 100 + - vlan_id: 5 + name: vlan5 + mapped_vni: 100 - - vlan_id: 6 - name: vlan6 - state: suspend + - vlan_id: 6 + name: vlan6 + state: suspend state: rendered # Task Output (redacted) diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vrf_af_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vrf_af_module.rst index a48a43847..236991587 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vrf_af_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vrf_af_module.rst @@ -210,55 +210,50 @@ Examples afi: ipv4 route_target_both_auto_evpn: true state: present - - cisco.nxos.nxos_vrf_af: vrf: ntc afi: ipv4 route_targets: - - rt: 65000:1000 - direction: import - - rt: 65001:1000 - direction: import - + - rt: '65000:1000' + direction: import + - rt: '65001:1000' + direction: import - cisco.nxos.nxos_vrf_af: vrf: ntc afi: ipv4 route_targets: - - rt: 65000:1000 - direction: import - - rt: 65001:1000 - state: absent - + - rt: '65000:1000' + direction: import + - rt: '65001:1000' + state: absent - cisco.nxos.nxos_vrf_af: vrf: ntc afi: ipv4 route_targets: - - rt: 65000:1000 - direction: export - - rt: 65001:1000 - direction: export - + - rt: '65000:1000' + direction: export + - rt: '65001:1000' + direction: export - cisco.nxos.nxos_vrf_af: vrf: ntc afi: ipv4 route_targets: - - rt: 65000:1000 - direction: export - state: absent - + - rt: '65000:1000' + direction: export + state: absent - cisco.nxos.nxos_vrf_af: vrf: ntc afi: ipv4 route_targets: - - rt: 65000:1000 - direction: both - state: present - - rt: 65001:1000 - direction: import - state: present - - rt: 65002:1000 - direction: both - state: absent + - rt: '65000:1000' + direction: both + state: present + - rt: '65001:1000' + direction: import + state: present + - rt: '65002:1000' + direction: both + state: absent diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vrf_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vrf_module.rst index dff7e37cd..6765f78b5 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vrf_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vrf_module.rst @@ -400,48 +400,48 @@ Examples name: ntc description: testing state: present - - name: Aggregate definition of VRFs cisco.nxos.nxos_vrf: aggregate: - - {name: test1, description: Testing, admin_state: down} - - {name: test2, interfaces: Ethernet1/2} - + - name: test1 + description: Testing + admin_state: down + - name: test2 + interfaces: Ethernet1/2 - name: Aggregate definitions of VRFs with Purge cisco.nxos.nxos_vrf: aggregate: - - {name: ntc1, description: purge test1} - - {name: ntc2, description: purge test2} + - name: ntc1 + description: purge test1 + - name: ntc2 + description: purge test2 state: present purge: true - - name: Delete VRFs exist on switch cisco.nxos.nxos_vrf: aggregate: - - {name: ntc1} - - {name: ntc2} + - name: ntc1 + - name: ntc2 state: absent - - name: Assign interfaces to VRF declaratively cisco.nxos.nxos_vrf: name: test1 interfaces: - - Ethernet2/3 - - Ethernet2/5 - + - Ethernet2/3 + - Ethernet2/5 - name: Check interfaces assigned to VRF cisco.nxos.nxos_vrf: name: test1 associated_interfaces: - - Ethernet2/3 - - Ethernet2/5 - - - name: Ensure VRF is tagged with interface Ethernet2/5 only (Removes from Ethernet2/3) + - Ethernet2/3 + - Ethernet2/5 + - name: >- + Ensure VRF is tagged with interface Ethernet2/5 only (Removes from + Ethernet2/3) cisco.nxos.nxos_vrf: name: test1 interfaces: - - Ethernet2/5 - + - Ethernet2/5 - name: Delete VRF cisco.nxos.nxos_vrf: name: ntc diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vsan_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vsan_module.rst index c161f11d8..9baa64c68 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vsan_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_vsan_module.rst @@ -160,25 +160,25 @@ Examples - name: Test that vsan module works cisco.nxos.nxos_vsan: vsan: - - id: 922 - interface: - - fc1/1 - - fc1/2 - - port-channel 1 - name: vsan-SAN-A - remove: false - suspend: false - - id: 923 - interface: - - fc1/11 - - fc1/21 - - port-channel 2 - name: vsan-SAN-B - remove: false - suspend: true - - id: 1923 - name: vsan-SAN-Old - remove: true + - id: 922 + interface: + - fc1/1 + - fc1/2 + - port-channel 1 + name: vsan-SAN-A + remove: false + suspend: false + - id: 923 + interface: + - fc1/11 + - fc1/21 + - port-channel 2 + name: vsan-SAN-B + remove: false + suspend: true + - id: 1923 + name: vsan-SAN-Old + remove: true diff --git a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_zone_zoneset_module.rst b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_zone_zoneset_module.rst index 4d0c320b7..95ef4972a 100644 --- a/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_zone_zoneset_module.rst +++ b/ansible_collections/cisco/nxos/docs/cisco.nxos.nxos_zone_zoneset_module.rst @@ -426,54 +426,54 @@ Examples - name: Test that zone/zoneset module works cisco.nxos.nxos_zone_zoneset: zone_zoneset_details: - - mode: enhanced - vsan: 22 - zone: - - members: - - pwwn: 11:11:11:11:11:11:11:11 - - device_alias: test123 - - pwwn: 61:61:62:62:12:12:12:12 - remove: true - name: zoneA - - members: - - pwwn: 10:11:11:11:11:11:11:11 - - pwwn: 62:62:62:62:21:21:21:21 - name: zoneB - - name: zoneC - remove: true - zoneset: - - action: activate - members: - - name: zoneA - - name: zoneB - - name: zoneC - remove: true - name: zsetname1 - - action: deactivate - name: zsetTestExtra - remove: true - - mode: basic - smart_zoning: true - vsan: 21 - zone: - - members: - - devtype: both - pwwn: 11:11:11:11:11:11:11:11 - - pwwn: 62:62:62:62:12:12:12:12 - - devtype: both - pwwn: 92:62:62:62:12:12:1a:1a - remove: true - name: zone21A - - members: - - pwwn: 10:11:11:11:11:11:11:11 - - pwwn: 62:62:62:62:21:21:21:21 - name: zone21B - zoneset: - - action: activate - members: - - name: zone21A - - name: zone21B - name: zsetname212 + - mode: enhanced + vsan: 22 + zone: + - members: + - pwwn: 31314874576271 + - device_alias: test123 + - pwwn: '61:61:62:62:12:12:12:12' + remove: true + name: zoneA + - members: + - pwwn: 28515514576271 + - pwwn: '62:62:62:62:21:21:21:21' + name: zoneB + - name: zoneC + remove: true + zoneset: + - action: activate + members: + - name: zoneA + - name: zoneB + - name: zoneC + remove: true + name: zsetname1 + - action: deactivate + name: zsetTestExtra + remove: true + - mode: basic + smart_zoning: true + vsan: 21 + zone: + - members: + - devtype: both + pwwn: 31314874576271 + - pwwn: '62:62:62:62:12:12:12:12' + - devtype: both + pwwn: '92:62:62:62:12:12:1a:1a' + remove: true + name: zone21A + - members: + - pwwn: 28515514576271 + - pwwn: '62:62:62:62:21:21:21:21' + name: zone21B + zoneset: + - action: activate + members: + - name: zone21A + - name: zone21B + name: zsetname212 diff --git a/ansible_collections/cisco/nxos/meta/runtime.yml b/ansible_collections/cisco/nxos/meta/runtime.yml index d83b291f1..bd17c140f 100644 --- a/ansible_collections/cisco/nxos/meta/runtime.yml +++ b/ansible_collections/cisco/nxos/meta/runtime.yml @@ -1,331 +1,6 @@ --- -requires_ansible: ">=2.9.10" +requires_ansible: ">=2.14.0" plugin_routing: - action: - nxos_aaa_server: - redirect: cisco.nxos.nxos - aaa_server: - redirect: cisco.nxos.nxos - nxos_aaa_server_host: - redirect: cisco.nxos.nxos - aaa_server_host: - redirect: cisco.nxos.nxos - nxos_acl_interfaces: - redirect: cisco.nxos.nxos - acl_interfaces: - redirect: cisco.nxos.nxos - nxos_acls: - redirect: cisco.nxos.nxos - acls: - redirect: cisco.nxos.nxos - nxos_banner: - redirect: cisco.nxos.nxos - banner: - redirect: cisco.nxos.nxos - nxos_bfd_global: - redirect: cisco.nxos.nxos - bfd_global: - redirect: cisco.nxos.nxos - nxos_bfd_interfaces: - redirect: cisco.nxos.nxos - bfd_interfaces: - redirect: cisco.nxos.nxos - nxos_command: - redirect: cisco.nxos.nxos - command: - redirect: cisco.nxos.nxos - nxos_config: - redirect: cisco.nxos.nxos - config: - redirect: cisco.nxos.nxos - nxos_devicealias: - redirect: cisco.nxos.nxos - devicealias: - redirect: cisco.nxos.nxos - nxos_evpn_global: - redirect: cisco.nxos.nxos - evpn_global: - redirect: cisco.nxos.nxos - nxos_evpn_vni: - redirect: cisco.nxos.nxos - evpn_vni: - redirect: cisco.nxos.nxos - nxos_facts: - redirect: cisco.nxos.nxos - facts: - redirect: cisco.nxos.nxos - nxos_feature: - redirect: cisco.nxos.nxos - feature: - redirect: cisco.nxos.nxos - nxos_gir: - redirect: cisco.nxos.nxos - gir: - redirect: cisco.nxos.nxos - nxos_gir_profile_management: - redirect: cisco.nxos.nxos - gir_profile_management: - redirect: cisco.nxos.nxos - nxos_hostname: - redirect: cisco.nxos.nxos - hostname: - redirect: cisco.nxos.nxos - nxos_hsrp: - redirect: cisco.nxos.nxos - hsrp: - redirect: cisco.nxos.nxos - nxos_hsrp_interfaces: - redirect: cisco.nxos.nxos - hsrp_interfaces: - redirect: cisco.nxos.nxos - nxos_igmp: - redirect: cisco.nxos.nxos - igmp: - redirect: cisco.nxos.nxos - nxos_igmp_interface: - redirect: cisco.nxos.nxos - igmp_interface: - redirect: cisco.nxos.nxos - nxos_igmp_snooping: - redirect: cisco.nxos.nxos - igmp_snooping: - redirect: cisco.nxos.nxos - nxos_install_os: - redirect: cisco.nxos.nxos - install_os: - redirect: cisco.nxos.nxos - nxos_interfaces: - redirect: cisco.nxos.nxos - interfaces: - redirect: cisco.nxos.nxos - nxos_l2_interfaces: - redirect: cisco.nxos.nxos - l2_interfaces: - redirect: cisco.nxos.nxos - nxos_l3_interfaces: - redirect: cisco.nxos.nxos - l3_interfaces: - redirect: cisco.nxos.nxos - nxos_lacp: - redirect: cisco.nxos.nxos - lacp: - redirect: cisco.nxos.nxos - nxos_lacp_interfaces: - redirect: cisco.nxos.nxos - lacp_interfaces: - redirect: cisco.nxos.nxos - nxos_lag_interfaces: - redirect: cisco.nxos.nxos - lag_interfaces: - redirect: cisco.nxos.nxos - nxos_lldp_global: - redirect: cisco.nxos.nxos - lldp_global: - redirect: cisco.nxos.nxos - nxos_lldp_interfaces: - redirect: cisco.nxos.nxos - lldp_interfaces: - redirect: cisco.nxos.nxos - nxos_logging: - redirect: cisco.nxos.nxos - logging: - redirect: cisco.nxos.nxos - nxos_logging_global: - redirect: cisco.nxos.nxos - logging_global: - redirect: cisco.nxos.nxos - nxos_ntp_global: - redirect: cisco.nxos.nxos - ntp_global: - redirect: cisco.nxos.nxos - nxos_ntp: - redirect: cisco.nxos.nxos - ntp: - redirect: cisco.nxos.nxos - nxos_ntp_auth: - redirect: cisco.nxos.nxos - ntp_auth: - redirect: cisco.nxos.nxos - nxos_ntp_options: - redirect: cisco.nxos.nxos - ntp_options: - redirect: cisco.nxos.nxos - nxos_nxapi: - redirect: cisco.nxos.nxos - nxapi: - redirect: cisco.nxos.nxos - nxos_ospf_interfaces: - redirect: cisco.nxos.nxos - ospf_interfaces: - redirect: cisco.nxos.nxos - nxos_bgp_global: - redirect: cisco.nxos.nxos - bgp_global: - redirect: cisco.nxos.nxos - nxos_bgp_address_family: - redirect: cisco.nxos.nxos - bgp_address_family: - redirect: cisco.nxos.nxos - nxos_ospfv2: - redirect: cisco.nxos.nxos - ospfv2: - redirect: cisco.nxos.nxos - nxos_ospfv3: - redirect: cisco.nxos.nxos - ospfv3: - redirect: cisco.nxos.nxos - nxos_overlay_global: - redirect: cisco.nxos.nxos - overlay_global: - redirect: cisco.nxos.nxos - nxos_pim: - redirect: cisco.nxos.nxos - pim: - redirect: cisco.nxos.nxos - nxos_pim_interface: - redirect: cisco.nxos.nxos - pim_interface: - redirect: cisco.nxos.nxos - nxos_pim_rp_address: - redirect: cisco.nxos.nxos - pim_rp_address: - redirect: cisco.nxos.nxos - nxos_ping: - redirect: cisco.nxos.nxos - ping: - redirect: cisco.nxos.nxos - nxos_prefix_lists: - redirect: cisco.nxos.nxos - prefix_lists: - redirect: cisco.nxos.nxos - nxos_reboot: - redirect: cisco.nxos.nxos - reboot: - redirect: cisco.nxos.nxos - nxos_rollback: - redirect: cisco.nxos.nxos - rollback: - redirect: cisco.nxos.nxos - nxos_route_maps: - redirect: cisco.nxos.nxos - route_maps: - redirect: cisco.nxos.nxos - nxos_rpm: - redirect: cisco.nxos.nxos - rpm: - redirect: cisco.nxos.nxos - nxos_snapshot: - redirect: cisco.nxos.nxos - snapshot: - redirect: cisco.nxos.nxos - nxos_snmp_community: - redirect: cisco.nxos.nxos - snmp_community: - redirect: cisco.nxos.nxos - nxos_snmp_contact: - redirect: cisco.nxos.nxos - snmp_contact: - redirect: cisco.nxos.nxos - nxos_snmp_host: - redirect: cisco.nxos.nxos - snmp_host: - redirect: cisco.nxos.nxos - nxos_snmp_location: - redirect: cisco.nxos.nxos - snmp_location: - redirect: cisco.nxos.nxos - nxos_snmp_server: - redirect: cisco.nxos.nxos - snmp_server: - redirect: cisco.nxos.nxos - nxos_snmp_traps: - redirect: cisco.nxos.nxos - snmp_traps: - redirect: cisco.nxos.nxos - nxos_snmp_user: - redirect: cisco.nxos.nxos - snmp_user: - redirect: cisco.nxos.nxos - nxos_static_route: - redirect: cisco.nxos.nxos - static_routes: - redirect: cisco.nxos.nxos - nxos_system: - redirect: cisco.nxos.nxos - system: - redirect: cisco.nxos.nxos - nxos_telemetry: - redirect: cisco.nxos.nxos - telemetry: - redirect: cisco.nxos.nxos - nxos_udld: - redirect: cisco.nxos.nxos - udld: - redirect: cisco.nxos.nxos - nxos_udld_interface: - redirect: cisco.nxos.nxos - udld_interface: - redirect: cisco.nxos.nxos - nxos_user: - redirect: cisco.nxos.nxos - user: - redirect: cisco.nxos.nxos - nxos_vlans: - redirect: cisco.nxos.nxos - vlans: - redirect: cisco.nxos.nxos - nxos_vpc: - redirect: cisco.nxos.nxos - vpc: - redirect: cisco.nxos.nxos - nxos_vpc_interface: - redirect: cisco.nxos.nxos - vpc_interface: - redirect: cisco.nxos.nxos - nxos_vrf: - redirect: cisco.nxos.nxos - vrf: - redirect: cisco.nxos.nxos - nxos_vrf_af: - redirect: cisco.nxos.nxos - vrf_af: - redirect: cisco.nxos.nxos - nxos_vrf_interface: - redirect: cisco.nxos.nxos - vrf_interface: - redirect: cisco.nxos.nxos - nxos_vrrp: - redirect: cisco.nxos.nxos - vrrp: - redirect: cisco.nxos.nxos - nxos_vsan: - redirect: cisco.nxos.nxos - vsan: - redirect: cisco.nxos.nxos - nxos_vtp_domain: - redirect: cisco.nxos.nxos - vtp_domain: - redirect: cisco.nxos.nxos - nxos_vtp_password: - redirect: cisco.nxos.nxos - vtp_password: - redirect: cisco.nxos.nxos - nxos_vtp_version: - redirect: cisco.nxos.nxos - vtp_version: - redirect: cisco.nxos.nxos - nxos_vxlan_vtep: - redirect: cisco.nxos.nxos - vxlan_vtep: - redirect: cisco.nxos.nxos - nxos_vxlan_vtep_vni: - redirect: cisco.nxos.nxos - vxlan_vtep_vni: - redirect: cisco.nxos.nxos - nxos_zone_zoneset: - redirect: cisco.nxos.nxos - zone_zoneset: - redirect: cisco.nxos.nxos modules: aaa_server: redirect: cisco.nxos.nxos_aaa_server @@ -391,46 +66,10 @@ plugin_routing: redirect: cisco.nxos.nxos_lldp_global lldp_interfaces: redirect: cisco.nxos.nxos_lldp_interfaces - logging: - redirect: cisco.nxos.nxos_logging - deprecation: - removal_date: "2023-08-01" - warning_text: See the plugin documentation for more details - nxos_logging: - deprecation: - removal_date: "2023-08-01" - warning_text: See the plugin documentation for more details logging_global: redirect: cisco.nxos.nxos_logging_global ntp_global: redirect: cisco.nxos.nxos_ntp_global - ntp: - redirect: cisco.nxos.nxos_ntp - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details - nxos_ntp: - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details - ntp_auth: - redirect: cisco.nxos.nxos_ntp_auth - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details - nxos_ntp_auth: - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details - ntp_options: - redirect: cisco.nxos.nxos_ntp_options - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details - nxos_ntp_options: - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details nxapi: redirect: cisco.nxos.nxos_nxapi ospf_interfaces: diff --git a/ansible_collections/cisco/nxos/platform_guide.rst b/ansible_collections/cisco/nxos/platform_guide.rst new file mode 100644 index 000000000..ab6035f32 --- /dev/null +++ b/ansible_collections/cisco/nxos/platform_guide.rst @@ -0,0 +1,170 @@ +.. _nxos_platform_options: + +*************************************** +NXOS Platform Options +*************************************** + +The `Cisco NXOS `_ supports multiple connections. This page offers details on how each connection works in Ansible and how to use it. + +.. contents:: + :local: + +Connections available +================================================================================ + +.. table:: + :class: documentation-table + + ==================== ========================================== ========================= + .. CLI NX-API + ==================== ========================================== ========================= + Protocol SSH HTTP(S) + + Credentials uses SSH keys / SSH-agent if present uses HTTPS certificates if + present + accepts ``-u myuser -k`` if using password + + Indirect Access by a bastion (jump host) by a web proxy + + Connection Settings ``ansible_connection:`` ``ansible_connection:`` + ``ansible.netcommon.network_cli`` ``ansible.netcommon.httpapi`` + + Enable Mode supported: use ``ansible_become: true`` not supported by NX-API + with ``ansible_become_method: enable`` + and ``ansible_become_password:`` + + Returned Data Format ``stdout[0].`` ``stdout[0].messages[0].`` + ==================== ========================================== ========================= + + +Using CLI in Ansible +==================== + +Example CLI ``group_vars/nxos.yml`` +----------------------------------- + +.. code-block:: yaml + + ansible_connection: ansible.netcommon.network_cli + ansible_network_os: cisco.nxos.nxos + ansible_user: myuser + ansible_password: !vault... + ansible_become: true + ansible_become_method: enable + ansible_become_password: !vault... + ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' + + +- If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. +- If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. +- If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords through environment variables. + +Note +----- + +When using ``ansible_connection: ansible.netcommon.network_cli``, the ``ansible_user`` must have permissions to execute the ``terminal length 0`` and ``terminal width 511`` commands on the target device. + +Example CLI task +---------------- + +.. code-block:: yaml + + - name: Backup current switch config (nxos) + cisco.nxos.nxos_config: + backup: yes + register: backup_nxos_location + when: ansible_network_os == 'cisco.nxos.nxos' + + + +Using NX-API in Ansible +======================= + +Enabling NX-API +--------------- + +Before you can use NX-API to connect to a switch, you must enable NX-API. To enable NX-API on a new switch through Ansible, use the ``nxos_nxapi`` module through the CLI connection. Set up group_vars/nxos.yml just like in the CLI example above, then run a playbook task like this: + +.. code-block:: yaml + + - name: Enable NX-API + cisco.nxos.nxos_nxapi: + enable_http: yes + enable_https: yes + when: ansible_network_os == 'cisco.nxos.nxos' + +To find out more about the options for enabling HTTP/HTTPS and local http see the :ref:`nxos_nxapi ` module documentation. + +Once NX-API is enabled, change your ``group_vars/nxos.yml`` to use the NX-API connection. + +Example NX-API ``group_vars/nxos.yml`` +-------------------------------------- + +.. code-block:: yaml + + ansible_connection: ansible.netcommon.httpapi + ansible_network_os: cisco.nxos.nxos + ansible_user: myuser + ansible_password: !vault... + proxy_env: + http_proxy: http://proxy.example.com:8080 + +- If you are accessing your host directly (not through a web proxy) you can remove the ``proxy_env`` configuration. +- If you are accessing your host through a web proxy using ``https``, change ``http_proxy`` to ``https_proxy``. + + +Example NX-API task +------------------- + +.. code-block:: yaml + + - name: Backup current switch config (nxos) + cisco.nxos.nxos_config: + backup: yes + register: backup_nxos_location + environment: "{{ proxy_env }}" + when: ansible_network_os == 'cisco.nxos.nxos' + +In this example the ``proxy_env`` variable defined in ``group_vars`` gets passed to the ``environment`` option of the module used in the task. + +Warning +-------- +Never store passwords in plain text. We recommend using SSH keys to authenticate SSH connections. Ansible supports ssh-agent to manage your SSH keys. If you must use passwords to authenticate SSH connections, we recommend encrypting them with Ansible Vault. + +Cisco Nexus platform support matrix +=================================== + +The following platforms and software versions have been certified by Cisco to work with this version of Ansible. + +.. table:: Platform / Software Minimum Requirements + :align: center + + =================== ===================== + Supported Platforms Minimum NX-OS Version + =================== ===================== + Cisco Nexus N3k 7.0(3)I2(5) and later + Cisco Nexus N9k 7.0(3)I2(5) and later + Cisco Nexus N5k 7.3(0)N1(1) and later + Cisco Nexus N6k 7.3(0)N1(1) and later + Cisco Nexus N7k 7.3(0)D1(1) and later + Cisco Nexus MDS 8.4(1) and later (Please see individual module documentation for compatibility) + =================== ===================== + +.. table:: Platform Models + :align: center + + ======== ============================================== + Platform Description + ======== ============================================== + N3k Support includes N30xx, N31xx and N35xx models + N5k Support includes all N5xxx models + N6k Support includes all N6xxx models + N7k Support includes all N7xxx models + N9k Support includes all N9xxx models + MDS Support includes all MDS 9xxx models + ======== ============================================== + +Notes +----- + +`Setting Timeout Option `_ diff --git a/ansible_collections/cisco/nxos/plugins/action/aaa_server.py b/ansible_collections/cisco/nxos/plugins/action/aaa_server.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/aaa_server.py +++ b/ansible_collections/cisco/nxos/plugins/action/aaa_server.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/aaa_server_host.py b/ansible_collections/cisco/nxos/plugins/action/aaa_server_host.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/aaa_server_host.py +++ b/ansible_collections/cisco/nxos/plugins/action/aaa_server_host.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/acl.py b/ansible_collections/cisco/nxos/plugins/action/acl.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/acl.py +++ b/ansible_collections/cisco/nxos/plugins/action/acl.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/acl_interface.py b/ansible_collections/cisco/nxos/plugins/action/acl_interface.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/acl_interface.py +++ b/ansible_collections/cisco/nxos/plugins/action/acl_interface.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/acl_interfaces.py b/ansible_collections/cisco/nxos/plugins/action/acl_interfaces.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/acl_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/action/acl_interfaces.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/acls.py b/ansible_collections/cisco/nxos/plugins/action/acls.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/acls.py +++ b/ansible_collections/cisco/nxos/plugins/action/acls.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/banner.py b/ansible_collections/cisco/nxos/plugins/action/banner.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/banner.py +++ b/ansible_collections/cisco/nxos/plugins/action/banner.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/bfd_global.py b/ansible_collections/cisco/nxos/plugins/action/bfd_global.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/bfd_global.py +++ b/ansible_collections/cisco/nxos/plugins/action/bfd_global.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/bfd_interfaces.py b/ansible_collections/cisco/nxos/plugins/action/bfd_interfaces.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/bfd_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/action/bfd_interfaces.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/bgp.py b/ansible_collections/cisco/nxos/plugins/action/bgp.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/bgp.py +++ b/ansible_collections/cisco/nxos/plugins/action/bgp.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/bgp_address_family.py b/ansible_collections/cisco/nxos/plugins/action/bgp_address_family.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/bgp_address_family.py +++ b/ansible_collections/cisco/nxos/plugins/action/bgp_address_family.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/bgp_af.py b/ansible_collections/cisco/nxos/plugins/action/bgp_af.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/bgp_af.py +++ b/ansible_collections/cisco/nxos/plugins/action/bgp_af.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/bgp_global.py b/ansible_collections/cisco/nxos/plugins/action/bgp_global.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/bgp_global.py +++ b/ansible_collections/cisco/nxos/plugins/action/bgp_global.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor.py b/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor.py +++ b/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor_address_family.py b/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor_address_family.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor_address_family.py +++ b/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor_address_family.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor_af.py b/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor_af.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor_af.py +++ b/ansible_collections/cisco/nxos/plugins/action/bgp_neighbor_af.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/command.py b/ansible_collections/cisco/nxos/plugins/action/command.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/command.py +++ b/ansible_collections/cisco/nxos/plugins/action/command.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/config.py b/ansible_collections/cisco/nxos/plugins/action/config.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/config.py +++ b/ansible_collections/cisco/nxos/plugins/action/config.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/devicealias.py b/ansible_collections/cisco/nxos/plugins/action/devicealias.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/devicealias.py +++ b/ansible_collections/cisco/nxos/plugins/action/devicealias.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/evpn_global.py b/ansible_collections/cisco/nxos/plugins/action/evpn_global.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/evpn_global.py +++ b/ansible_collections/cisco/nxos/plugins/action/evpn_global.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/evpn_vni.py b/ansible_collections/cisco/nxos/plugins/action/evpn_vni.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/evpn_vni.py +++ b/ansible_collections/cisco/nxos/plugins/action/evpn_vni.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/facts.py b/ansible_collections/cisco/nxos/plugins/action/facts.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/facts.py +++ b/ansible_collections/cisco/nxos/plugins/action/facts.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/feature.py b/ansible_collections/cisco/nxos/plugins/action/feature.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/feature.py +++ b/ansible_collections/cisco/nxos/plugins/action/feature.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/file_copy.py b/ansible_collections/cisco/nxos/plugins/action/file_copy.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/file_copy.py +++ b/ansible_collections/cisco/nxos/plugins/action/file_copy.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/gir.py b/ansible_collections/cisco/nxos/plugins/action/gir.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/gir.py +++ b/ansible_collections/cisco/nxos/plugins/action/gir.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/gir_profile_management.py b/ansible_collections/cisco/nxos/plugins/action/gir_profile_management.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/gir_profile_management.py +++ b/ansible_collections/cisco/nxos/plugins/action/gir_profile_management.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/hostname.py b/ansible_collections/cisco/nxos/plugins/action/hostname.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/hostname.py +++ b/ansible_collections/cisco/nxos/plugins/action/hostname.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/hsrp.py b/ansible_collections/cisco/nxos/plugins/action/hsrp.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/hsrp.py +++ b/ansible_collections/cisco/nxos/plugins/action/hsrp.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/hsrp_interfaces.py b/ansible_collections/cisco/nxos/plugins/action/hsrp_interfaces.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/hsrp_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/action/hsrp_interfaces.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/igmp.py b/ansible_collections/cisco/nxos/plugins/action/igmp.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/igmp.py +++ b/ansible_collections/cisco/nxos/plugins/action/igmp.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/igmp_interface.py b/ansible_collections/cisco/nxos/plugins/action/igmp_interface.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/igmp_interface.py +++ b/ansible_collections/cisco/nxos/plugins/action/igmp_interface.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/igmp_snooping.py b/ansible_collections/cisco/nxos/plugins/action/igmp_snooping.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/igmp_snooping.py +++ b/ansible_collections/cisco/nxos/plugins/action/igmp_snooping.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/install_os.py b/ansible_collections/cisco/nxos/plugins/action/install_os.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/install_os.py +++ b/ansible_collections/cisco/nxos/plugins/action/install_os.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/interface.py b/ansible_collections/cisco/nxos/plugins/action/interface.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/interface.py +++ b/ansible_collections/cisco/nxos/plugins/action/interface.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/interface_ospf.py b/ansible_collections/cisco/nxos/plugins/action/interface_ospf.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/interface_ospf.py +++ b/ansible_collections/cisco/nxos/plugins/action/interface_ospf.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/interfaces.py b/ansible_collections/cisco/nxos/plugins/action/interfaces.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/action/interfaces.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/l2_interface.py b/ansible_collections/cisco/nxos/plugins/action/l2_interface.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/l2_interface.py +++ b/ansible_collections/cisco/nxos/plugins/action/l2_interface.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/l2_interfaces.py b/ansible_collections/cisco/nxos/plugins/action/l2_interfaces.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/l2_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/action/l2_interfaces.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/l3_interface.py b/ansible_collections/cisco/nxos/plugins/action/l3_interface.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/l3_interface.py +++ b/ansible_collections/cisco/nxos/plugins/action/l3_interface.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/l3_interfaces.py b/ansible_collections/cisco/nxos/plugins/action/l3_interfaces.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/l3_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/action/l3_interfaces.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/lacp.py b/ansible_collections/cisco/nxos/plugins/action/lacp.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/lacp.py +++ b/ansible_collections/cisco/nxos/plugins/action/lacp.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/lacp_interfaces.py b/ansible_collections/cisco/nxos/plugins/action/lacp_interfaces.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/lacp_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/action/lacp_interfaces.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/lag_interfaces.py b/ansible_collections/cisco/nxos/plugins/action/lag_interfaces.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/lag_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/action/lag_interfaces.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/linkagg.py b/ansible_collections/cisco/nxos/plugins/action/linkagg.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/linkagg.py +++ b/ansible_collections/cisco/nxos/plugins/action/linkagg.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/lldp.py b/ansible_collections/cisco/nxos/plugins/action/lldp.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/lldp.py +++ b/ansible_collections/cisco/nxos/plugins/action/lldp.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/lldp_global.py b/ansible_collections/cisco/nxos/plugins/action/lldp_global.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/lldp_global.py +++ b/ansible_collections/cisco/nxos/plugins/action/lldp_global.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/lldp_interfaces.py b/ansible_collections/cisco/nxos/plugins/action/lldp_interfaces.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/lldp_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/action/lldp_interfaces.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/logging.py b/ansible_collections/cisco/nxos/plugins/action/logging.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/logging.py +++ b/ansible_collections/cisco/nxos/plugins/action/logging.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/logging_global.py b/ansible_collections/cisco/nxos/plugins/action/logging_global.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/logging_global.py +++ b/ansible_collections/cisco/nxos/plugins/action/logging_global.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/ntp.py b/ansible_collections/cisco/nxos/plugins/action/ntp.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/ntp.py +++ b/ansible_collections/cisco/nxos/plugins/action/ntp.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/ntp_auth.py b/ansible_collections/cisco/nxos/plugins/action/ntp_auth.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/ntp_auth.py +++ b/ansible_collections/cisco/nxos/plugins/action/ntp_auth.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/ntp_global.py b/ansible_collections/cisco/nxos/plugins/action/ntp_global.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/ntp_global.py +++ b/ansible_collections/cisco/nxos/plugins/action/ntp_global.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/ntp_options.py b/ansible_collections/cisco/nxos/plugins/action/ntp_options.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/ntp_options.py +++ b/ansible_collections/cisco/nxos/plugins/action/ntp_options.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/nxapi.py b/ansible_collections/cisco/nxos/plugins/action/nxapi.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/nxapi.py +++ b/ansible_collections/cisco/nxos/plugins/action/nxapi.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/nxos.py b/ansible_collections/cisco/nxos/plugins/action/nxos.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/nxos.py +++ b/ansible_collections/cisco/nxos/plugins/action/nxos.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/ospf.py b/ansible_collections/cisco/nxos/plugins/action/ospf.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/ospf.py +++ b/ansible_collections/cisco/nxos/plugins/action/ospf.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/ospf_interfaces.py b/ansible_collections/cisco/nxos/plugins/action/ospf_interfaces.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/ospf_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/action/ospf_interfaces.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/ospf_vrf.py b/ansible_collections/cisco/nxos/plugins/action/ospf_vrf.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/ospf_vrf.py +++ b/ansible_collections/cisco/nxos/plugins/action/ospf_vrf.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/ospfv2.py b/ansible_collections/cisco/nxos/plugins/action/ospfv2.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/ospfv2.py +++ b/ansible_collections/cisco/nxos/plugins/action/ospfv2.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/ospfv3.py b/ansible_collections/cisco/nxos/plugins/action/ospfv3.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/ospfv3.py +++ b/ansible_collections/cisco/nxos/plugins/action/ospfv3.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/overlay_global.py b/ansible_collections/cisco/nxos/plugins/action/overlay_global.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/overlay_global.py +++ b/ansible_collections/cisco/nxos/plugins/action/overlay_global.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/pim.py b/ansible_collections/cisco/nxos/plugins/action/pim.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/pim.py +++ b/ansible_collections/cisco/nxos/plugins/action/pim.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/pim_interface.py b/ansible_collections/cisco/nxos/plugins/action/pim_interface.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/pim_interface.py +++ b/ansible_collections/cisco/nxos/plugins/action/pim_interface.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/pim_rp_address.py b/ansible_collections/cisco/nxos/plugins/action/pim_rp_address.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/pim_rp_address.py +++ b/ansible_collections/cisco/nxos/plugins/action/pim_rp_address.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/ping.py b/ansible_collections/cisco/nxos/plugins/action/ping.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/ping.py +++ b/ansible_collections/cisco/nxos/plugins/action/ping.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/prefix_lists.py b/ansible_collections/cisco/nxos/plugins/action/prefix_lists.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/prefix_lists.py +++ b/ansible_collections/cisco/nxos/plugins/action/prefix_lists.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/reboot.py b/ansible_collections/cisco/nxos/plugins/action/reboot.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/reboot.py +++ b/ansible_collections/cisco/nxos/plugins/action/reboot.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/rollback.py b/ansible_collections/cisco/nxos/plugins/action/rollback.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/rollback.py +++ b/ansible_collections/cisco/nxos/plugins/action/rollback.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/route_maps.py b/ansible_collections/cisco/nxos/plugins/action/route_maps.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/route_maps.py +++ b/ansible_collections/cisco/nxos/plugins/action/route_maps.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/rpm.py b/ansible_collections/cisco/nxos/plugins/action/rpm.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/rpm.py +++ b/ansible_collections/cisco/nxos/plugins/action/rpm.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/smu.py b/ansible_collections/cisco/nxos/plugins/action/smu.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/smu.py +++ b/ansible_collections/cisco/nxos/plugins/action/smu.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/snapshot.py b/ansible_collections/cisco/nxos/plugins/action/snapshot.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/snapshot.py +++ b/ansible_collections/cisco/nxos/plugins/action/snapshot.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/snmp_community.py b/ansible_collections/cisco/nxos/plugins/action/snmp_community.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/snmp_community.py +++ b/ansible_collections/cisco/nxos/plugins/action/snmp_community.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/snmp_contact.py b/ansible_collections/cisco/nxos/plugins/action/snmp_contact.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/snmp_contact.py +++ b/ansible_collections/cisco/nxos/plugins/action/snmp_contact.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/snmp_host.py b/ansible_collections/cisco/nxos/plugins/action/snmp_host.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/snmp_host.py +++ b/ansible_collections/cisco/nxos/plugins/action/snmp_host.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/snmp_location.py b/ansible_collections/cisco/nxos/plugins/action/snmp_location.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/snmp_location.py +++ b/ansible_collections/cisco/nxos/plugins/action/snmp_location.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/snmp_server.py b/ansible_collections/cisco/nxos/plugins/action/snmp_server.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/snmp_server.py +++ b/ansible_collections/cisco/nxos/plugins/action/snmp_server.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/snmp_traps.py b/ansible_collections/cisco/nxos/plugins/action/snmp_traps.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/snmp_traps.py +++ b/ansible_collections/cisco/nxos/plugins/action/snmp_traps.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/snmp_user.py b/ansible_collections/cisco/nxos/plugins/action/snmp_user.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/snmp_user.py +++ b/ansible_collections/cisco/nxos/plugins/action/snmp_user.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/static_route.py b/ansible_collections/cisco/nxos/plugins/action/static_route.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/static_route.py +++ b/ansible_collections/cisco/nxos/plugins/action/static_route.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/static_routes.py b/ansible_collections/cisco/nxos/plugins/action/static_routes.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/static_routes.py +++ b/ansible_collections/cisco/nxos/plugins/action/static_routes.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/system.py b/ansible_collections/cisco/nxos/plugins/action/system.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/system.py +++ b/ansible_collections/cisco/nxos/plugins/action/system.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/telemetry.py b/ansible_collections/cisco/nxos/plugins/action/telemetry.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/telemetry.py +++ b/ansible_collections/cisco/nxos/plugins/action/telemetry.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/udld.py b/ansible_collections/cisco/nxos/plugins/action/udld.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/udld.py +++ b/ansible_collections/cisco/nxos/plugins/action/udld.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/udld_interface.py b/ansible_collections/cisco/nxos/plugins/action/udld_interface.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/udld_interface.py +++ b/ansible_collections/cisco/nxos/plugins/action/udld_interface.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/user.py b/ansible_collections/cisco/nxos/plugins/action/user.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/user.py +++ b/ansible_collections/cisco/nxos/plugins/action/user.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vlan.py b/ansible_collections/cisco/nxos/plugins/action/vlan.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vlan.py +++ b/ansible_collections/cisco/nxos/plugins/action/vlan.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vlans.py b/ansible_collections/cisco/nxos/plugins/action/vlans.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vlans.py +++ b/ansible_collections/cisco/nxos/plugins/action/vlans.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vpc.py b/ansible_collections/cisco/nxos/plugins/action/vpc.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vpc.py +++ b/ansible_collections/cisco/nxos/plugins/action/vpc.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vpc_interface.py b/ansible_collections/cisco/nxos/plugins/action/vpc_interface.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vpc_interface.py +++ b/ansible_collections/cisco/nxos/plugins/action/vpc_interface.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vrf.py b/ansible_collections/cisco/nxos/plugins/action/vrf.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vrf.py +++ b/ansible_collections/cisco/nxos/plugins/action/vrf.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vrf_af.py b/ansible_collections/cisco/nxos/plugins/action/vrf_af.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vrf_af.py +++ b/ansible_collections/cisco/nxos/plugins/action/vrf_af.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vrf_interface.py b/ansible_collections/cisco/nxos/plugins/action/vrf_interface.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vrf_interface.py +++ b/ansible_collections/cisco/nxos/plugins/action/vrf_interface.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vrrp.py b/ansible_collections/cisco/nxos/plugins/action/vrrp.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vrrp.py +++ b/ansible_collections/cisco/nxos/plugins/action/vrrp.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vsan.py b/ansible_collections/cisco/nxos/plugins/action/vsan.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vsan.py +++ b/ansible_collections/cisco/nxos/plugins/action/vsan.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vtp_domain.py b/ansible_collections/cisco/nxos/plugins/action/vtp_domain.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vtp_domain.py +++ b/ansible_collections/cisco/nxos/plugins/action/vtp_domain.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vtp_password.py b/ansible_collections/cisco/nxos/plugins/action/vtp_password.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vtp_password.py +++ b/ansible_collections/cisco/nxos/plugins/action/vtp_password.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vtp_version.py b/ansible_collections/cisco/nxos/plugins/action/vtp_version.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vtp_version.py +++ b/ansible_collections/cisco/nxos/plugins/action/vtp_version.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vxlan_vtep.py b/ansible_collections/cisco/nxos/plugins/action/vxlan_vtep.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vxlan_vtep.py +++ b/ansible_collections/cisco/nxos/plugins/action/vxlan_vtep.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/vxlan_vtep_vni.py b/ansible_collections/cisco/nxos/plugins/action/vxlan_vtep_vni.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/vxlan_vtep_vni.py +++ b/ansible_collections/cisco/nxos/plugins/action/vxlan_vtep_vni.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/action/zone_zoneset.py b/ansible_collections/cisco/nxos/plugins/action/zone_zoneset.py index 3602c4074..e57c08aeb 100644 --- a/ansible_collections/cisco/nxos/plugins/action/zone_zoneset.py +++ b/ansible_collections/cisco/nxos/plugins/action/zone_zoneset.py @@ -21,7 +21,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible import constants as C from ansible.module_utils.connection import Connection from ansible.utils.display import Display from ansible_collections.ansible.netcommon.plugins.action.network import ( @@ -48,7 +47,7 @@ class ActionModule(ActionNetworkModule): ): return { "failed": True, - "msg": "Connection httpapi is not valid for '%s' module." % (module_name), + "msg": f"Connection httpapi is not valid for {module_name} module.", } if module_name == "nxos_file_copy": @@ -58,34 +57,43 @@ class ActionModule(ActionNetworkModule): if persistent_connection != "network_cli": return { "failed": True, - "msg": "Connection type must be fully qualified name for network_cli connection type, got %s" + "msg": ( + f"Connection type must be fully qualified name for " + f"network_cli connection type, got {self._play_context.connection}" + ) % self._play_context.connection, } conn = Connection(self._connection.socket_path) + persistent_command_timeout = conn.get_option("persistent_command_timeout") file_pull = self._task.args.get("file_pull", False) - file_pull_timeout = self._task.args.get("file_pull_timeout", 300) + file_pull_timeout = self._task.args.get("file_pull_timeout") connect_ssh_port = self._task.args.get("connect_ssh_port", 22) if file_pull: - conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is explicitly set, use that + if file_pull_timeout: + conn.set_option("persistent_command_timeout", file_pull_timeout) + # if file_pull_timeout is not set and command_timeout < 300s, bump to 300s. + elif persistent_command_timeout < 300: + conn.set_option("persistent_command_timeout", 300) conn.set_option("port", connect_ssh_port) if module_name == "nxos_install_os": connection = self._connection - if connection.transport == "local": - persistent_command_timeout = C.PERSISTENT_COMMAND_TIMEOUT - persistent_connect_timeout = C.PERSISTENT_CONNECT_TIMEOUT - else: - persistent_command_timeout = connection.get_option("persistent_command_timeout") - persistent_connect_timeout = connection.get_option("persistent_connect_timeout") + persistent_command_timeout = connection.get_option( + "persistent_command_timeout", + ) + persistent_connect_timeout = connection.get_option( + "persistent_connect_timeout", + ) display.vvvv( - "PERSISTENT_COMMAND_TIMEOUT is %s" % str(persistent_command_timeout), + f"PERSISTENT_COMMAND_TIMEOUT is {persistent_command_timeout}", self._play_context.remote_addr, ) display.vvvv( - "PERSISTENT_CONNECT_TIMEOUT is %s" % str(persistent_connect_timeout), + f"PERSISTENT_CONNECT_TIMEOUT is %s {persistent_connect_timeout}", self._play_context.remote_addr, ) if persistent_command_timeout < 600 or persistent_connect_timeout < 600: @@ -102,18 +110,19 @@ class ActionModule(ActionNetworkModule): if persistent_connection in ("network_cli", "httpapi"): if module_name == "nxos_gir": conn = Connection(self._connection.socket_path) - persistent_command_timeout = conn.get_option("persistent_command_timeout") + persistent_command_timeout = conn.get_option( + "persistent_command_timeout", + ) gir_timeout = 200 if persistent_command_timeout < gir_timeout: conn.set_option("persistent_command_timeout", gir_timeout) - msg = "timeout value extended to %ss for nxos_gir" % gir_timeout + msg = f"timeout value extended to %ss for nxos_gir {gir_timeout}" display.warning(msg) else: return { "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, + "msg": f"Connection type {self._play_context.connection} is not valid for this module", } result = super(ActionModule, self).run(task_vars=task_vars) diff --git a/ansible_collections/cisco/nxos/plugins/cliconf/nxos.py b/ansible_collections/cisco/nxos/plugins/cliconf/nxos.py index 4f6393858..3a1ae1c6c 100644 --- a/ansible_collections/cisco/nxos/plugins/cliconf/nxos.py +++ b/ansible_collections/cisco/nxos/plugins/cliconf/nxos.py @@ -134,6 +134,12 @@ class Cliconf(CliconfBase): return self._device_info + def restore(self, filename=None, path=""): + if not filename: + raise ValueError("'file_name' value is required for restore") + cmd = f"configure replace {path}{filename} best-effort" + return self.send_command(cmd) + def get_diff( self, candidate=None, diff --git a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/acl_interfaces/acl_interfaces.py b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/acl_interfaces/acl_interfaces.py index 5bd15062e..dcf4c3b0c 100644 --- a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/acl_interfaces/acl_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/acl_interfaces/acl_interfaces.py @@ -10,6 +10,7 @@ is compared to the provided configuration (as dict) and the command set necessary to bring the current configuration to it's desired end-state is created """ + from __future__ import absolute_import, division, print_function @@ -120,7 +121,7 @@ class Acl_interfaces(ConfigBase): for w in config: if get_interface_type(w["name"]) == "loopback": self._module.fail_json( - msg="This module works with ethernet, management or port-channe", + msg="This module works with ethernet, management or port-channel.", ) w.update({"name": normalize_interface(w["name"])}) want.append(remove_empties(w)) @@ -139,7 +140,9 @@ class Acl_interfaces(ConfigBase): """ if self.state in ("overridden", "merged", "replaced", "rendered") and not want: self._module.fail_json( - msg="value of config parameter must not be empty for state {0}".format(self.state), + msg="value of config parameter must not be empty for state {0}".format( + self.state, + ), ) commands = [] @@ -185,7 +188,11 @@ class Acl_interfaces(ConfigBase): for ag in obj_in_have["access_groups"]: want_afi = [] if want.get("access_groups"): - want_afi = search_obj_in_list(ag["afi"], want["access_groups"], "afi") + want_afi = search_obj_in_list( + ag["afi"], + want["access_groups"], + "afi", + ) if not want_afi: # whatever in have is not in want del_dict["access_groups"].append(ag) @@ -241,7 +248,11 @@ class Acl_interfaces(ConfigBase): ip = "ipv6" if w_afi["afi"] == "ipv4": ip = "ip" - have_afi = search_obj_in_list(w_afi["afi"], have_name["access_groups"], "afi") + have_afi = search_obj_in_list( + w_afi["afi"], + have_name["access_groups"], + "afi", + ) if have_afi: new_acls = [] if deleted: diff --git a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/interfaces/interfaces.py b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/interfaces/interfaces.py index 8bd4f66e7..400f0432f 100644 --- a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/interfaces/interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/interfaces/interfaces.py @@ -470,13 +470,13 @@ class Interfaces(ConfigBase): and enabled/shutdown states. The default values for user-defined-default configurations may be different for legacy platforms. Notes: - - L3 enabled default state is False on N9K,N7K but True for N3K,N6K + - L3 enabled default state is False on N9K,N7K,N3K but True for N5K,N6K - Changing L2-L3 modes may change the default enabled value. - '(no) system default switchport shutdown' only applies to L2 interfaces. Run through the gathered interfaces and tag their default enabled state. """ intf_defs = {} - L3_enabled = True if re.search("N[356]K", self.get_platform()) else False + L3_enabled = True if re.search("N[56]K", self.get_platform()) else False intf_defs = { "sysdefs": { "mode": None, diff --git a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/l2_interfaces/l2_interfaces.py b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/l2_interfaces/l2_interfaces.py index e7d91498f..913f8ecfb 100644 --- a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/l2_interfaces/l2_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/config/l2_interfaces/l2_interfaces.py @@ -146,7 +146,7 @@ class L2_interfaces(ConfigBase): if "trunk" in d and d["trunk"]: if "allowed_vlans" in d["trunk"]: allowed_vlans = vlan_range_to_list(d["trunk"]["allowed_vlans"]) - vlans_list = [str(l) for l in sorted(allowed_vlans)] + vlans_list = [str(line) for line in sorted(allowed_vlans)] d["trunk"]["allowed_vlans"] = ",".join(vlans_list) def set_state(self, want, have): diff --git a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/acl_interfaces/acl_interfaces.py b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/acl_interfaces/acl_interfaces.py index 053b56a91..098c2a471 100644 --- a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/acl_interfaces/acl_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/acl_interfaces/acl_interfaces.py @@ -61,9 +61,9 @@ class Acl_interfacesFacts(object): resources = [] for i in range(len(data)): intf = data[i].split("\n") - for l in range(1, len(intf)): - if not re.search("ip(v6)?( port)? (access-group|traffic-filter)", intf[l]): - intf[l] = "" + for line in range(1, len(intf)): + if not re.search("ip(v6)?( port)? (access-group|traffic-filter)", intf[line]): + intf[line] = "" intf = list(filter(None, intf)) resources.append(intf) diff --git a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/acls/acls.py b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/acls/acls.py index ca086bcf9..2a7366bc2 100644 --- a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/acls/acls.py +++ b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/acls/acls.py @@ -119,11 +119,12 @@ class AclsFacts(object): keywords = ["eq", "lt", "gt", "neq", "range"] if len(ace.split()) and ace.split()[0] in keywords: port_protocol = {} - port_pro = re.search(r"(eq|lt|gt|neq) (\S+)", ace) - if port_pro: - port_protocol.update({port_pro.group(1): port_pro.group(2)}) - ace = re.sub(port_pro.group(1), "", ace, 1) - ace = re.sub(port_pro.group(2), "", ace, 1) + if "range" not in ace.split()[0]: + port_pro = re.search(r"(eq|lt|gt|neq) (\S+)", ace) + if port_pro: + port_protocol.update({port_pro.group(1): port_pro.group(2)}) + ace = re.sub(port_pro.group(1), "", ace, 1) + ace = re.sub(port_pro.group(2), "", ace, 1) else: limit = re.search(r"range\s(?P\S+)\s(?P\S+)", ace) if limit: diff --git a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/legacy/base.py b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/legacy/base.py index 16540a435..a3a453784 100644 --- a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/legacy/base.py +++ b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/legacy/base.py @@ -223,9 +223,13 @@ class Interfaces(FactsBase): ], ) - INTERFACE_IPV4_MAP = frozenset([("eth_ip_addr", "address"), ("eth_ip_mask", "masklen")]) + INTERFACE_IPV4_MAP = frozenset( + [("eth_ip_addr", "address"), ("eth_ip_mask", "masklen")], + ) - INTERFACE_SVI_IPV4_MAP = frozenset([("svi_ip_addr", "address"), ("svi_ip_mask", "masklen")]) + INTERFACE_SVI_IPV4_MAP = frozenset( + [("svi_ip_addr", "address"), ("svi_ip_mask", "masklen")], + ) INTERFACE_IPV6_MAP = frozenset([("addr", "address"), ("prefix", "subnet")]) @@ -268,14 +272,18 @@ class Interfaces(FactsBase): data = self.run("show lldp neighbors", output="json") if data: if isinstance(data, dict): - self.facts["neighbors"].update(self.populate_structured_neighbors_lldp(data)) + self.facts["neighbors"].update( + self.populate_structured_neighbors_lldp(data), + ) else: self.facts["neighbors"].update(self.populate_neighbors(data)) data = self.run("show cdp neighbors detail", output="json") if data: if isinstance(data, dict): - self.facts["neighbors"].update(self.populate_structured_neighbors_cdp(data)) + self.facts["neighbors"].update( + self.populate_structured_neighbors_cdp(data), + ) else: self.facts["neighbors"].update(self.populate_neighbors_cdp(data)) @@ -316,14 +324,17 @@ class Interfaces(FactsBase): if isinstance(data, dict): data = [data] for item in data: - name = item["ROW_intf"]["intf-name"] - intf = self.facts["interfaces"][name] - intf["ipv6"] = self.transform_dict(item, self.INTERFACE_IPV6_MAP) - try: - addr = item["ROW_intf"]["addr"] - except KeyError: - addr = item["ROW_intf"]["TABLE_addr"]["ROW_addr"]["addr"] - self.facts["all_ipv6_addresses"].append(addr) + row_intf = item["ROW_intf"] + if isinstance(row_intf, dict): + row_intf = [row_intf] + for item in row_intf: + intf = self.facts["interfaces"][item["intf-name"]] + intf["ipv6"] = self.transform_dict(item, self.INTERFACE_IPV6_MAP) + try: + addr = item["addr"] + except KeyError: + addr = item["TABLE_addr"]["ROW_addr"]["addr"] + self.facts["all_ipv6_addresses"].append(addr) else: return "" except TypeError: @@ -379,7 +390,9 @@ class Interfaces(FactsBase): match = re.match(r"^(\S+)", line) if match: key = match.group(1) - if not key.startswith("admin") or not key.startswith("IPv6 Interface"): + if not key.startswith("admin") or not key.startswith( + "IPv6 Interface", + ): parsed[key] = line return parsed @@ -781,9 +794,9 @@ class Legacy(FactsBase): match = re.search(r"\d\s*\d*\s*(.+)$", line, re.M) if match: - l = match.group(1).split(" ") + line = match.group(1).split(" ") items = list() - for item in l: + for item in line: if item == "": continue items.append(item.strip()) @@ -799,28 +812,28 @@ class Legacy(FactsBase): def parse_fan_info(self, data): objects = list() - for l in data.splitlines(): - if "-----------------" in l or "Status" in l: + for line in data.splitlines(): + if "-----------------" in line or "Status" in line: continue - line = l.split() - if len(line) > 1: + split_line = line.split() + if len(split_line) > 1: obj = {} - obj["name"] = line[0] - obj["model"] = line[1] - obj["hw_ver"] = line[-2] - obj["status"] = line[-1] + obj["name"] = split_line[0] + obj["model"] = split_line[1] + obj["hw_ver"] = split_line[-2] + obj["status"] = split_line[-1] objects.append(obj) return objects def parse_power_supply_info(self, data): objects = list() - for l in data.splitlines(): - if l == "": + for line in data.splitlines(): + if line == "": break - if l[0].isdigit(): + if line[0].isdigit(): obj = {} - line = l.split() + line = line.split() obj["model"] = line[1] obj["number"] = line[0] obj["status"] = line[-1] diff --git a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/lldp_interfaces/lldp_interfaces.py b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/lldp_interfaces/lldp_interfaces.py index 4cd8b2115..8bc886e4b 100644 --- a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/lldp_interfaces/lldp_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/facts/lldp_interfaces/lldp_interfaces.py @@ -66,9 +66,9 @@ class Lldp_interfacesFacts(object): for i in range(len(data)): intf = data[i].split("\n") - for l in range(1, len(intf)): - if not re.search("lldp", intf[l]): - intf[l] = "" + for line in range(1, len(intf)): + if not re.search("lldp", intf[line]): + intf[line] = "" intf = list(filter(None, intf)) intf = "".join(i for i in intf) resources.append(intf) diff --git a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/rm_templates/ospfv2.py b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/rm_templates/ospfv2.py index c8b518dd6..70fae9e81 100644 --- a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/rm_templates/ospfv2.py +++ b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/rm_templates/ospfv2.py @@ -10,25 +10,6 @@ from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.r ) -def _tmplt_area_range(arange): - command = "area {area} range {range}".format(**arange) - if arange.get("not_advertise") is True: - command += " not-advertise" - if "cost" in arange: - command += " cost {cost}".format(**arange) - return command - - -def _tmplt_default_information(proc): - command = "default-information originate" - if "always" in proc["default_information"] and proc["default_information"]["always"]: - command += " always" - if "route_map" in proc["default_information"]: - command += " route-map" - command += " {default_information[route_map]}".format(**proc) - return command - - def _tmplt_log_adjacency_changes(proc): command = "log-adjacency-changes" if proc.get("log_adjacency_changes").get("detail", False) is True: @@ -151,15 +132,6 @@ def _tmplt_area_ranges(arange): return command -def _tmplt_area_ranges(arange): - command = "area {area_id} range {prefix}".format(**arange) - if arange.get("not_advertise") is True: - command += " not-advertise" - if "cost" in arange: - command += " cost {cost}".format(**arange) - return command - - def _tmplt_summary_address(proc): command = "summary-address {prefix}".format(**proc) if proc.get("tag"): diff --git a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/utils/telemetry/telemetry.py b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/utils/telemetry/telemetry.py index aa540aded..ae58c1631 100644 --- a/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/utils/telemetry/telemetry.py +++ b/ansible_collections/cisco/nxos/plugins/module_utils/network/nxos/utils/telemetry/telemetry.py @@ -6,6 +6,7 @@ """ The nxos telemetry utility library """ + from __future__ import absolute_import, division, print_function @@ -61,7 +62,10 @@ def valiate_input(playvals, type, module): msg = "Invalid playbook value: {0}.".format(playvals) msg += " Parameter under is required" module.fail_json(msg=msg) - if playvals.get("destination") and not isinstance(playvals["destination"], dict): + if playvals.get("destination") and not isinstance( + playvals["destination"], + dict, + ): msg = "Invalid playbook value: {0}.".format(playvals) msg += " Parameter under must be a dict" module.fail_json(msg=msg) @@ -209,7 +213,6 @@ def massage_data(have_or_want): massaged["destination_groups"] = {} massaged["sensor_groups"] = {} massaged["subscriptions"] = {} - from pprint import pprint for subgroup in ["destination_groups", "sensor_groups", "subscriptions"]: for item in data.get(subgroup, []): diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_aaa_server_host.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_aaa_server_host.py index d2f84f76d..192b21ab5 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_aaa_server_host.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_aaa_server_host.py @@ -114,7 +114,6 @@ EXAMPLES = """ tacacs_port: 89 host_timeout: 10 address: 5.6.7.8 - """ RETURN = """ @@ -315,7 +314,9 @@ def main(): module.fail_json(msg="tacacs_port can only be used with server_type=tacacs") if (auth_port or acct_port) and server_type != "radius": - module.fail_json(msg="auth_port and acct_port can only be used" "when server_type=radius") + module.fail_json( + msg="auth_port and acct_port can only be used" "when server_type=radius", + ) existing = get_aaa_host_info(module, server_type, address) end_state = existing diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_acl_interfaces.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_acl_interfaces.py index e61746ff3..654fc71e6 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_acl_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_acl_interfaces.py @@ -116,28 +116,28 @@ EXAMPLES = """ - name: Merge ACL interfaces configuration cisco.nxos.nxos_acl_interfaces: config: - - name: Ethernet1/2 - access_groups: - - afi: ipv6 - acls: - - name: ACL1v6 - direction: in - - - name: Eth1/5 - access_groups: - - afi: ipv4 - acls: - - name: PortACL - direction: in - port: true - - - name: ACL1v4 - direction: out - - - afi: ipv6 - acls: - - name: ACL1v6 - direction: in + - name: Ethernet1/2 + access_groups: + - afi: ipv6 + acls: + - name: ACL1v6 + direction: in + + - name: Eth1/5 + access_groups: + - afi: ipv4 + acls: + - name: PortACL + direction: in + port: true + + - name: ACL1v4 + direction: out + + - afi: ipv6 + acls: + - name: ACL1v6 + direction: in state: merged # After state: @@ -163,20 +163,20 @@ EXAMPLES = """ - name: Replace interface configuration with given configuration cisco.nxos.nxos_acl_interfaces: config: - - name: Eth1/5 - access_groups: - - afi: ipv4 - acls: - - name: NewACLv4 - direction: out - - - name: Ethernet1/3 - access_groups: - - afi: ipv6 - acls: - - name: NewACLv6 - direction: in - port: true + - name: Eth1/5 + access_groups: + - afi: ipv4 + acls: + - name: NewACLv4 + direction: out + + - name: Ethernet1/3 + access_groups: + - afi: ipv6 + acls: + - name: NewACLv6 + direction: in + port: true state: replaced # After state: @@ -202,21 +202,21 @@ EXAMPLES = """ - name: Override interface configuration with given configuration cisco.nxos.nxos_acl_interfaces: config: - - name: Ethernet1/3 - access_groups: - - afi: ipv4 - acls: - - name: ACL1v4 - direction: out - - - name: PortACL - port: true - direction: in - - afi: ipv6 - acls: - - name: NewACLv6 - direction: in - port: true + - name: Ethernet1/3 + access_groups: + - afi: ipv4 + acls: + - name: ACL1v4 + direction: out + + - name: PortACL + port: true + direction: in + - afi: ipv6 + acls: + - name: NewACLv6 + direction: in + port: true state: overridden # After state: @@ -242,8 +242,8 @@ EXAMPLES = """ - name: Delete ACL configuration on interfaces cisco.nxos.nxos_acl_interfaces: config: - - name: Ethernet1/5 - - name: Ethernet1/2 + - name: Ethernet1/5 + - name: Ethernet1/2 state: deleted # After state: @@ -356,28 +356,28 @@ EXAMPLES = """ - name: Render required configuration to be pushed to the device cisco.nxos.nxos_acl_interfaces: config: - - name: Ethernet1/2 - access_groups: - - afi: ipv6 - acls: - - name: ACL1v6 - direction: in - - - name: Ethernet1/5 - access_groups: - - afi: ipv4 - acls: - - name: PortACL - direction: in - port: true - - name: ACL1v4 - direction: out - - afi: ipv6 - acls: - - name: ACL1v6 - direction: in + - name: Ethernet1/2 + access_groups: + - afi: ipv6 + acls: + - name: ACL1v6 + direction: in + - name: Ethernet1/5 + access_groups: + - afi: ipv4 + acls: + - name: PortACL + direction: in + port: true + - name: ACL1v4 + direction: out + - afi: ipv6 + acls: + - name: ACL1v6 + direction: in state: rendered + # returns # rendered: # interface Ethernet1/2 @@ -386,7 +386,6 @@ EXAMPLES = """ # ipv6 traffic-filter ACL1v6 in # ip access-group ACL1v4 out # ip port access-group PortACL in - """ RETURN = """ before: diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_acls.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_acls.py index 133bd3a44..29d610400 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_acls.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_acls.py @@ -536,13 +536,13 @@ EXAMPLES = """ acls: - name: ACL1v6 aces: - - grant: permit - sequence: 10 - source: - any: true - destination: - prefix: 2001:db8:12::/32 - protocol: sctp + - grant: permit + sequence: 10 + source: + any: true + destination: + prefix: 2001:db8:12::/32 + protocol: sctp # Task Output # ----------- @@ -974,7 +974,7 @@ EXAMPLES = """ - name: Delete all ACLs in given AFI cisco.nxos.nxos_acls: config: - - afi: ipv4 + - afi: ipv4 state: deleted # Task Output @@ -1309,38 +1309,38 @@ EXAMPLES = """ - name: Render required configuration to be pushed to the device cisco.nxos.nxos_acls: config: - - afi: ipv4 - acls: - - name: ACL1v4 - aces: - - grant: deny - destination: - address: 192.0.2.64 - wildcard_bits: 0.0.0.255 - source: - any: true - port_protocol: - lt: 55 - protocol: tcp - protocol_options: - tcp: - ack: true - fin: true - sequence: 50 - - - afi: ipv6 - acls: - - name: ACL1v6 - aces: - - grant: permit - sequence: 10 - source: - any: true - destination: - prefix: 2001:db8:12::/32 - protocol: sctp + - afi: ipv4 + acls: + - name: ACL1v4 + aces: + - grant: deny + destination: + address: 192.0.2.64 + wildcard_bits: 0.0.0.255 + source: + any: true + port_protocol: + lt: 55 + protocol: tcp + protocol_options: + tcp: + ack: true + fin: true + sequence: 50 + - afi: ipv6 + acls: + - name: ACL1v6 + aces: + - grant: permit + sequence: 10 + source: + any: true + destination: + prefix: '2001:db8:12::/32' + protocol: sctp state: rendered + # Task Output # ----------- # diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_bfd_interfaces.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_bfd_interfaces.py index 1790f8e01..3465d95bb 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_bfd_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_bfd_interfaces.py @@ -104,12 +104,12 @@ EXAMPLES = """ - name: Configure interfaces cisco.nxos.nxos_bfd_interfaces: config: - - name: Ethernet1/1 - bfd: enable - echo: enable - - name: Ethernet1/2 - bfd: disable - echo: disable + - name: Ethernet1/1 + bfd: enable + echo: enable + - name: Ethernet1/2 + bfd: disable + echo: disable state: merged @@ -118,12 +118,12 @@ EXAMPLES = """ - name: Configure interfaces cisco.nxos.nxos_bfd_interfaces: config: - - name: Ethernet1/1 - bfd: enable - echo: enable - - name: Ethernet1/2 - bfd: disable - echo: disable + - name: Ethernet1/1 + bfd: enable + echo: enable + - name: Ethernet1/2 + bfd: disable + echo: disable state: overridden @@ -132,12 +132,12 @@ EXAMPLES = """ - name: Configure interfaces cisco.nxos.nxos_bfd_interfaces: config: - - name: Ethernet1/1 - bfd: enable - echo: enable - - name: Ethernet1/2 - bfd: disable - echo: disable + - name: Ethernet1/1 + bfd: enable + echo: enable + - name: Ethernet1/2 + bfd: disable + echo: disable state: replaced # Using rendered @@ -145,12 +145,12 @@ EXAMPLES = """ - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_bfd_interfaces: config: - - name: Ethernet1/800 - bfd: enable - echo: enable - - name: Ethernet1/801 - bfd: disable - echo: disable + - name: Ethernet1/800 + bfd: enable + echo: enable + - name: Ethernet1/801 + bfd: disable + echo: disable state: rendered # Task Output (redacted) diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_address_family.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_address_family.py index ef6e9012c..489b6fa30 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_address_family.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_address_family.py @@ -52,7 +52,7 @@ options: description: Address Family indicator. type: str choices: ["ipv4", "ipv6", "link-state", "vpnv4", "vpnv6", "l2vpn"] - required: True + required: true safi: description: Sub Address Family indicator. type: str @@ -367,11 +367,11 @@ EXAMPLES = """ safi: unicast vrf: site-1 default_information: - originate: True + originate: true aggregate_address: - prefix: 203.0.113.0/24 - as_set: True - summary_only: True + as_set: true + summary_only: true - afi: ipv6 safi: multicast vrf: site-1 @@ -420,11 +420,11 @@ EXAMPLES = """ # safi: unicast # vrf: site-1 # default_information: -# originate: True +# originate: true # aggregate_address: # - prefix: 203.0.113.0/24 -# as_set: True -# summary_only: True +# as_set: true +# summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 @@ -490,8 +490,8 @@ EXAMPLES = """ non_critical_delay: 180 aggregate_address: - prefix: 203.0.113.0/24 - as_set: True - summary_only: True + as_set: true + summary_only: true - afi: ipv4 safi: unicast vrf: site-1 @@ -517,11 +517,11 @@ EXAMPLES = """ # safi: unicast # vrf: site-1 # default_information: -# originate: True +# originate: true # aggregate_address: # - prefix: 203.0.113.0/24 -# as_set: True -# summary_only: True +# as_set: true +# summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 @@ -558,8 +558,8 @@ EXAMPLES = """ # non_critical_delay: 180 # aggregate_address: # - prefix: 203.0.113.0/24 -# as_set: True -# summary_only: True +# as_set: true +# summary_only: true # # - afi: ipv4 # safi: unicast @@ -622,8 +622,8 @@ EXAMPLES = """ route_map: rmap1 aggregate_address: - prefix: 203.0.113.0/24 - as_set: True - summary_only: True + as_set: true + summary_only: true - afi: ipv4 safi: unicast vrf: site-1 @@ -649,11 +649,11 @@ EXAMPLES = """ # safi: unicast # vrf: site-1 # default_information: -# originate: True +# originate: true # aggregate_address: # - prefix: 203.0.113.0/24 -# as_set: True -# summary_only: True +# as_set: true +# summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 @@ -690,8 +690,8 @@ EXAMPLES = """ # route_map: rmap1 # aggregate_address: # - prefix: 203.0.113.0/24 -# as_set: True -# summary_only: True +# as_set: true +# summary_only: true # - afi: ipv4 # safi: unicast # vrf: site-1 @@ -759,11 +759,11 @@ EXAMPLES = """ # safi: unicast # vrf: site-1 # default_information: -# originate: True +# originate: true # aggregate_address: # - prefix: 203.0.113.0/24 -# as_set: True -# summary_only: True +# as_set: true +# summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 @@ -788,11 +788,11 @@ EXAMPLES = """ # safi: unicast # vrf: site-1 # default_information: -# originate: True +# originate: true # aggregate_address: # - prefix: 203.0.113.0/24 -# as_set: True -# summary_only: True +# as_set: true +# summary_only: true # After state: # ------------ @@ -846,11 +846,11 @@ EXAMPLES = """ # safi: unicast # vrf: site-1 # default_information: -# originate: True +# originate: true # aggregate_address: # - prefix: 203.0.113.0/24 -# as_set: True -# summary_only: True +# as_set: true +# summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 @@ -900,11 +900,11 @@ EXAMPLES = """ safi: unicast vrf: site-1 default_information: - originate: True + originate: true aggregate_address: - prefix: 203.0.113.0/24 - as_set: True - summary_only: True + as_set: true + summary_only: true - afi: ipv6 safi: multicast vrf: site-1 @@ -977,11 +977,11 @@ EXAMPLES = """ # safi: unicast # vrf: site-1 # default_information: -# originate: True +# originate: true # aggregate_address: # - prefix: 203.0.113.0/24 -# as_set: True -# summary_only: True +# as_set: true +# summary_only: true # - afi: ipv6 # safi: multicast # vrf: site-1 diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_global.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_global.py index 29e016181..59e7eefd7 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_global.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_global.py @@ -203,7 +203,7 @@ options: neighbor_address: description: IP address/Prefix of the neighbor or interface. type: str - required: True + required: true bfd: description: Bidirectional Fast Detection for the neighbor. type: dict @@ -543,16 +543,16 @@ EXAMPLES = """ router_id: 192.168.1.1 bestpath: as_path: - multipath_relax: True - compare_neighborid: True - cost_community_ignore: True + multipath_relax: true + compare_neighborid: true + cost_community_ignore: true confederation: identifier: 42 peers: - 65020 - 65030 - 65040 - log_neighbor_changes: True + log_neighbor_changes: true maxas_limit: 20 neighbors: - neighbor_address: 192.168.1.100 @@ -562,19 +562,19 @@ EXAMPLES = """ remote_as: 65563 description: NBR-1 low_memory: - exempt: True + exempt: true - neighbor_address: 192.168.1.101 remote_as: 65563 password: encryption: 7 key: 12090404011C03162E neighbor_down: - fib_accelerate: True + fib_accelerate: true vrfs: - vrf: site-1 allocate_index: 5000 local_as: 200 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 198.51.100.1 description: site-1-nbr-1 @@ -587,7 +587,7 @@ EXAMPLES = """ description: site-1-nbr-2 - vrf: site-2 local_as: 300 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 203.0.113.2 description: site-2-nbr-1 @@ -596,7 +596,7 @@ EXAMPLES = """ key: AF92F4C16A0A0EC5BDF56CF58BC030F6 remote_as: 65568 neighbor_down: - fib_accelerate: True + fib_accelerate: true # Task output: # ------------ @@ -795,8 +795,8 @@ EXAMPLES = """ as_number: 65563 router_id: 192.168.1.1 bestpath: - compare_neighborid: True - cost_community_ignore: True + compare_neighborid: true + cost_community_ignore: true confederation: identifier: 42 peers: @@ -812,20 +812,20 @@ EXAMPLES = """ remote_as: 65563 description: NBR-1 low_memory: - exempt: True + exempt: true neighbor_down: - fib_accelerate: True + fib_accelerate: true vrfs: - vrf: site-2 local_as: 300 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 203.0.113.2 password: encryption: 7 key: 12090404011C03162E neighbor_down: - fib_accelerate: True + fib_accelerate: true state: replaced # Task output: @@ -1258,16 +1258,16 @@ EXAMPLES = """ router_id: 192.168.1.1 bestpath: as_path: - multipath_relax: True - compare_neighborid: True - cost_community_ignore: True + multipath_relax: true + compare_neighborid: true + cost_community_ignore: true confederation: identifier: 42 peers: - 65020 - 65030 - 65040 - log_neighbor_changes: True + log_neighbor_changes: true maxas_limit: 20 neighbors: - neighbor_address: 192.168.1.100 @@ -1277,19 +1277,19 @@ EXAMPLES = """ remote_as: 65563 description: NBR-1 low_memory: - exempt: True + exempt: true - neighbor_address: 192.168.1.101 remote_as: 65563 password: encryption: 7 key: 12090404011C03162E neighbor_down: - fib_accelerate: True + fib_accelerate: true vrfs: - vrf: site-1 allocate_index: 5000 local_as: 200 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 198.51.100.1 description: site-1-nbr-1 @@ -1302,7 +1302,7 @@ EXAMPLES = """ description: site-1-nbr-2 - vrf: site-2 local_as: 300 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 203.0.113.2 description: site-1-nbr-1 @@ -1311,7 +1311,7 @@ EXAMPLES = """ key: AF92F4C16A0A0EC5BDF56CF58BC030F6 remote_as: 65568 neighbor_down: - fib_accelerate: True + fib_accelerate: true # Task output: # ------------ @@ -1561,7 +1561,7 @@ EXAMPLES = """ as_number: 65536 router_id: 198.51.100.2 maxas_limit: 20 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 192.0.2.1 remote_as: 65537 @@ -1605,7 +1605,7 @@ EXAMPLES = """ as_number: 65536 router_id: 198.51.100.2 maxas_limit: 20 - log_neighbor_changes: True + log_neighbor_changes: true neighbors: - neighbor_address: 192.0.2.1 remote_as: 65537 @@ -1615,7 +1615,7 @@ EXAMPLES = """ vrfs: - vrf: site-2 neighbor_down: - fib_accelerate: True + fib_accelerate: true state: replaced # Task output: diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_neighbor_address_family.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_neighbor_address_family.py index e2b72ace3..de41a9bf1 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_neighbor_address_family.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_bgp_neighbor_address_family.py @@ -51,7 +51,7 @@ options: neighbor_address: description: IP/IPv6 address of the neighbor. type: str - required: True + required: true address_family: description: BGP Neighbor Address Family related configurations. type: list @@ -61,7 +61,7 @@ options: description: Address Family indicator. type: str choices: ["ipv4", "ipv6", "link-state", "vpnv4", "vpnv6", "l2vpn"] - required: True + required: true safi: description: Sub Address Family indicator. type: str @@ -73,7 +73,7 @@ options: route_map: description: Route-map name. type: str - required: True + required: true exist_map: description: Condition route-map to advertise only when prefix in condition exists. type: str @@ -307,9 +307,9 @@ EXAMPLES = """ address_family: - afi: ipv4 safi: unicast - suppress_inactive: True + suppress_inactive: true next_hop_self: - set: True + set: true - neighbor_address: 203.0.113.2 address_family: - afi: ipv6 @@ -317,7 +317,7 @@ EXAMPLES = """ - afi: ipv4 safi: multicast send_community: - set: True + set: true # Task output: # ------------ @@ -383,7 +383,7 @@ EXAMPLES = """ # - afi: ipv4 # safi: multicast # send_community: -# set: True +# set: true # - afi: ipv6 # safi: unicast @@ -472,7 +472,7 @@ EXAMPLES = """ - afi: ipv4 safi: multicast send_community: - set: True + set: true state: replaced # Task output: @@ -515,7 +515,7 @@ EXAMPLES = """ # - afi: ipv4 # safi: multicast # send_community: -# set: True +# set: true # - afi: ipv6 # safi: unicast # @@ -562,7 +562,7 @@ EXAMPLES = """ # - afi: ipv4 # safi: multicast # send_community: -# set: True +# set: true # - afi: ipv6 # safi: unicast @@ -629,9 +629,9 @@ EXAMPLES = """ address_family: - afi: ipv4 safi: unicast - suppress_inactive: True + suppress_inactive: true next_hop_self: - set: True + set: true state: overridden # Task output: @@ -674,7 +674,7 @@ EXAMPLES = """ # - afi: ipv4 # safi: multicast # send_community: -# set: True +# set: true # - afi: ipv6 # safi: unicast # @@ -708,9 +708,9 @@ EXAMPLES = """ # address_family: # - afi: ipv4 # safi: unicast -# suppress_inactive: True +# suppress_inactive: true # next_hop_self: -# set: True +# set: true # After state: # ------------ @@ -809,7 +809,7 @@ EXAMPLES = """ # - afi: ipv4 # safi: multicast # send_community: -# set: True +# set: true # - afi: ipv6 # safi: unicast # @@ -850,7 +850,7 @@ EXAMPLES = """ # - afi: ipv4 # safi: multicast # send_community: -# set: True +# set: true # # After state: # ------------ @@ -942,7 +942,7 @@ EXAMPLES = """ # - afi: ipv4 # safi: multicast # send_community: -# set: True +# set: true # - afi: ipv6 # safi: unicast # @@ -1008,9 +1008,9 @@ EXAMPLES = """ address_family: - afi: ipv4 safi: unicast - suppress_inactive: True + suppress_inactive: true next_hop_self: - set: True + set: true - neighbor_address: 203.0.113.2 address_family: - afi: ipv6 @@ -1018,7 +1018,7 @@ EXAMPLES = """ - afi: ipv4 safi: multicast send_community: - set: True + set: true state: rendered # Task output: @@ -1116,7 +1116,7 @@ EXAMPLES = """ # - afi: ipv4 # safi: multicast # send_community: -# set: True +# set: true # - afi: ipv6 # safi: unicast """ diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_command.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_command.py index 7febbf8a7..6c3c2c384 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_command.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_command.py @@ -87,32 +87,31 @@ EXAMPLES = """ - name: run multiple commands on remote nodes cisco.nxos.nxos_command: commands: - - show version - - show interfaces + - show version + - show interfaces - name: run multiple commands and evaluate the output cisco.nxos.nxos_command: commands: - - show version - - show interfaces + - show version + - show interfaces wait_for: - - result[0] contains Cisco - - result[1] contains loopback0 + - result[0] contains Cisco + - result[1] contains loopback0 - name: run commands and specify the output format cisco.nxos.nxos_command: commands: - - command: show version - output: json + - command: show version + output: json - name: run commands that require answering a prompt cisco.nxos.nxos_command: commands: - - configure terminal - - command: no feature npv - prompt: Do you want to continue - answer: y - + - configure terminal + - command: no feature npv + prompt: Do you want to continue + answer: y """ RETURN = """ diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_config.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_config.py index 132a62d28..84be30a02 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_config.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_config.py @@ -246,21 +246,21 @@ EXAMPLES = """ - cisco.nxos.nxos_config: lines: - - 10 permit ip 192.0.2.1/32 any log - - 20 permit ip 192.0.2.2/32 any log - - 30 permit ip 192.0.2.3/32 any log - - 40 permit ip 192.0.2.4/32 any log - - 50 permit ip 192.0.2.5/32 any log + - 10 permit ip 192.0.2.1/32 any log + - 20 permit ip 192.0.2.2/32 any log + - 30 permit ip 192.0.2.3/32 any log + - 40 permit ip 192.0.2.4/32 any log + - 50 permit ip 192.0.2.5/32 any log parents: ip access-list test before: no ip access-list test match: exact - cisco.nxos.nxos_config: lines: - - 10 permit ip 192.0.2.1/32 any log - - 20 permit ip 192.0.2.2/32 any log - - 30 permit ip 192.0.2.3/32 any log - - 40 permit ip 192.0.2.4/32 any log + - 10 permit ip 192.0.2.1/32 any log + - 20 permit ip 192.0.2.2/32 any log + - 30 permit ip 192.0.2.3/32 any log + - 40 permit ip 192.0.2.4/32 any log parents: ip access-list test before: no ip access-list test replace: block @@ -274,7 +274,7 @@ EXAMPLES = """ cisco.nxos.nxos_config: lines: # - shut - - shutdown + - shutdown # parents: int eth1/1 parents: interface Ethernet1/1 @@ -407,7 +407,10 @@ def main(): defaults=dict(type="bool", default=False), backup=dict(type="bool", default=False), backup_options=dict(type="dict", options=backup_spec), - save_when=dict(choices=["always", "never", "modified", "changed"], default="never"), + save_when=dict( + choices=["always", "never", "modified", "changed"], + default="never", + ), diff_against=dict(choices=["running", "startup", "intended"]), diff_ignore_lines=dict(type="list", elements="str"), ) @@ -502,10 +505,21 @@ def main(): if module.params["save_when"] == "always": save_config(module, result) elif module.params["save_when"] == "modified": - output = execute_show_commands(module, ["show running-config", "show startup-config"]) + output = execute_show_commands( + module, + ["show running-config", "show startup-config"], + ) - running_config = NetworkConfig(indent=2, contents=output[0], ignore_lines=diff_ignore_lines) - startup_config = NetworkConfig(indent=2, contents=output[1], ignore_lines=diff_ignore_lines) + running_config = NetworkConfig( + indent=2, + contents=output[0], + ignore_lines=diff_ignore_lines, + ) + startup_config = NetworkConfig( + indent=2, + contents=output[1], + ignore_lines=diff_ignore_lines, + ) if running_config.sha1 != startup_config.sha1: save_config(module, result) @@ -520,11 +534,17 @@ def main(): contents = running_config # recreate the object in order to process diff_ignore_lines - running_config = NetworkConfig(indent=2, contents=contents, ignore_lines=diff_ignore_lines) + running_config = NetworkConfig( + indent=2, + contents=contents, + ignore_lines=diff_ignore_lines, + ) if module.params["diff_against"] == "running": if module.check_mode: - module.warn("unable to perform diff against running-config due to check mode") + module.warn( + "unable to perform diff against running-config due to check mode", + ) contents = None else: contents = config.config_text @@ -540,7 +560,11 @@ def main(): contents = module.params["intended_config"] if contents is not None: - base_config = NetworkConfig(indent=2, contents=contents, ignore_lines=diff_ignore_lines) + base_config = NetworkConfig( + indent=2, + contents=contents, + ignore_lines=diff_ignore_lines, + ) if running_config.sha1 != base_config.sha1: before = "" diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_devicealias.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_devicealias.py index 71d4ebb67..1aa4c9d75 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_devicealias.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_devicealias.py @@ -70,23 +70,21 @@ EXAMPLES = """ - name: Test that device alias module works cisco.nxos.nxos_devicealias: da: - - name: test1_add - pwwn: 56:2:22:11:22:88:11:67 - - name: test2_add - pwwn: 65:22:22:11:22:22:11:d - - name: dev1 - remove: true - - name: dev2 - remove: true + - name: test1_add + pwwn: 56:2:22:11:22:88:11:67 + - name: test2_add + pwwn: 65:22:22:11:22:22:11:d + - name: dev1 + remove: true + - name: dev2 + remove: true distribute: true mode: enhanced rename: - - new_name: bcd - old_name: abc - - new_name: bcd1 - old_name: abc1 - - + - new_name: bcd + old_name: abc + - new_name: bcd1 + old_name: abc1 """ RETURN = """ @@ -179,11 +177,15 @@ class showDeviceAliasDatabase(object): return name in self.da_dict.keys() def isPwwnInDaDatabase(self, pwwn): - newpwwn = ":".join(["0" + str(ep) if len(ep) == 1 else ep for ep in pwwn.split(":")]) + newpwwn = ":".join( + ["0" + str(ep) if len(ep) == 1 else ep for ep in pwwn.split(":")], + ) return newpwwn in self.da_dict.values() def isNamePwwnPresentInDatabase(self, name, pwwn): - newpwwn = ":".join(["0" + str(ep) if len(ep) == 1 else ep for ep in pwwn.split(":")]) + newpwwn = ":".join( + ["0" + str(ep) if len(ep) == 1 else ep for ep in pwwn.split(":")], + ) if name in self.da_dict.keys(): if newpwwn == self.da_dict[name]: return True @@ -196,7 +198,9 @@ class showDeviceAliasDatabase(object): return None def getNameByPwwn(self, pwwn): - newpwwn = ":".join(["0" + str(ep) if len(ep) == 1 else ep for ep in pwwn.split(":")]) + newpwwn = ":".join( + ["0" + str(ep) if len(ep) == 1 else ep for ep in pwwn.split(":")], + ) for n, p in self.da_dict.items(): if p == newpwwn: return n @@ -331,7 +335,9 @@ def main(): d = shDAStausObj.getDistribute() m = shDAStausObj.getMode() if shDAStausObj.isLocked(): - module.fail_json(msg="device-alias has acquired lock on the switch. Hence cannot procced.") + module.fail_json( + msg="device-alias has acquired lock on the switch. Hence cannot procced.", + ) # Step 1: Process distribute commands = [] @@ -342,7 +348,9 @@ def main(): # but switch distribute is disabled(false), so set it to # true(enabled) commands.append("device-alias distribute") - messages.append("device-alias distribute changed from disabled to enabled") + messages.append( + "device-alias distribute changed from disabled to enabled", + ) else: messages.append( "device-alias distribute remains unchanged. current distribution mode is enabled", @@ -353,7 +361,9 @@ def main(): # but switch distribute is enabled(true), so set it to # false(disabled) commands.append("no device-alias distribute") - messages.append("device-alias distribute changed from enabled to disabled") + messages.append( + "device-alias distribute changed from enabled to disabled", + ) else: messages.append( "device-alias distribute remains unchanged. current distribution mode is disabled", @@ -379,7 +389,9 @@ def main(): commands.append("no device-alias mode enhanced") messages.append("device-alias mode changed from enhanced to basic") else: - messages.append("device-alias mode remains unchanged. current mode is basic") + messages.append( + "device-alias mode remains unchanged. current mode is basic", + ) else: # playbook has mode as enhanced @@ -388,7 +400,9 @@ def main(): commands.append("device-alias mode enhanced") messages.append("device-alias mode changed from basic to enhanced") else: - messages.append("device-alias mode remains unchanged. current mode is enhanced") + messages.append( + "device-alias mode remains unchanged. current mode is enhanced", + ) if commands: if distribute: diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_evpn_vni.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_evpn_vni.py index d4490bb7b..89771f374 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_evpn_vni.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_evpn_vni.py @@ -89,8 +89,8 @@ EXAMPLES = """ vni: 6000 route_distinguisher: 60:10 route_target_import: - - 5000:10 - - 4100:100 + - "5000:10" + - "4100:100" route_target_export: auto route_target_both: default """ @@ -215,7 +215,9 @@ def state_present(module, existing, proposed): if target == "default": continue if existing: - if target not in existing.get(key.replace("-", "_").replace(" ", "_")): + if target not in existing.get( + key.replace("-", "_").replace(" ", "_"), + ): commands.append("{0} {1}".format(key, target)) else: commands.append("{0} {1}".format(key, target)) diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_facts.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_facts.py index 24e0dad22..77ca123d5 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_facts.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_facts.py @@ -77,11 +77,11 @@ EXAMPLES = """ - name: Gather only the config and default facts cisco.nxos.nxos_facts: gather_subset: - - config + - config - name: Do not gather hardware facts cisco.nxos.nxos_facts: gather_subset: - - '!hardware' + - '!hardware' - name: Gather legacy and resource facts cisco.nxos.nxos_facts: gather_subset: all @@ -89,10 +89,10 @@ EXAMPLES = """ - name: Gather only the interfaces resource facts and no legacy facts cisco.nxos.nxos_facts: gather_subset: - - '!all' - - '!min' + - '!all' + - '!min' gather_network_resources: - - interfaces + - interfaces - name: Gather interfaces resource and minimal legacy facts cisco.nxos.nxos_facts: gather_subset: min diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_fc_interfaces.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_fc_interfaces.py index b0c58a5e3..a77deffdb 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_fc_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_fc_interfaces.py @@ -50,7 +50,7 @@ options: enabled: description: - Administrative state of the interface. Set the value to C(true) to - administratively enable the interface or C(false) to disable it + administratively enable the interface or C(true) to disable it type: bool speed: description: @@ -131,8 +131,8 @@ EXAMPLES = """ - name: Merge provided configuration with device configuration cisco.nxos.nxos_fc_interfaces: config: - - name: fc18/10 - analytics: fc-scsi + - name: fc18/10 + analytics: fc-scsi state: merged # Task Output @@ -143,7 +143,7 @@ EXAMPLES = """ # speed: auto max 16000 # mode: auto # trunk_mode: on -# enabled: False +# enabled: true # description: $ # analytics: fc-nvme # commands: @@ -154,7 +154,7 @@ EXAMPLES = """ # speed: auto max 16000 # mode: auto # trunk_mode: on -# enabled: False +# enabled: true # description: $ # analytics: fc-all @@ -189,13 +189,13 @@ EXAMPLES = """ - name: Replaces device configuration of listed interfaces with provided configuration cisco.nxos.nxos_fc_interfaces: config: - - name: fc18/12 - speed: auto max 64000 - mode: auto - trunk_mode: on - enabled: True - description: 1 - analytics: fc-scsi + - name: fc18/12 + speed: auto max 64000 + mode: auto + trunk_mode: "on" + enabled: true + description: 1 + analytics: fc-scsi state: replaced # Task Output @@ -206,7 +206,7 @@ EXAMPLES = """ # speed: auto max 64000 # mode: auto # trunk_mode: on -# enabled: True +# enabled: true # description: 1 # analytics: fc-all # commands: @@ -218,7 +218,7 @@ EXAMPLES = """ # speed: auto max 64000 # mode: auto # trunk_mode: on -# enabled: True +# enabled: true # description: 1 # analytics: fc-scsi @@ -251,7 +251,7 @@ EXAMPLES = """ - name: Delete or return interface parameters to default settings cisco.nxos.nxos_fc_interfaces: config: - - name: fc1/2 + - name: fc1/2 state: deleted # Task Output @@ -262,7 +262,7 @@ EXAMPLES = """ # speed: 1000 # mode: E # trunk_mode: off -# enabled: True +# enabled: true # commands: # - interface fc1/2 # - no switchport speed 1000 @@ -274,7 +274,7 @@ EXAMPLES = """ # speed: auto # mode: auto # trunk_mode: on -# enabled: False +# enabled: true # After state: # ------------ @@ -313,13 +313,13 @@ EXAMPLES = """ - name: Replaces device configuration of listed interfaces with provided configuration cisco.nxos.nxos_fc_interfaces: config: - - name: fc18/12 - speed: auto max 64000 - mode: auto - trunk_mode: on - enabled: True - description: 1 - analytics: fc-scsi + - name: fc18/12 + speed: auto max 64000 + mode: auto + trunk_mode: "on" + enabled: true + description: 1 + analytics: fc-scsi state: overridden # Task Output @@ -330,14 +330,14 @@ EXAMPLES = """ # speed: auto max 64000 # mode: auto # trunk_mode: on -# enabled: True +# enabled: true # description: 1 # analytics: fc-all # - name: fc18/13 # speed: auto max 64000 # mode: auto # trunk_mode: on -# enabled: True +# enabled: true # description: 1 # analytics: fc-all # commands: @@ -355,14 +355,14 @@ EXAMPLES = """ # speed: auto max 64000 # mode: auto # trunk_mode: on -# enabled: True +# enabled: true # description: 1 # analytics: fc-scsi # - name: fc18/13 # speed: auto max 64000 # mode: auto # trunk_mode: on -# enabled: False +# enabled: true # After state: # ------------ @@ -380,29 +380,23 @@ EXAMPLES = """ # switchport trunk mode on # shutdown - - - - - - # Using rendered - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_fc_interfaces: config: - - name: fc1/1 - speed: auto - mode: auto - trunk_mode: on - enabled: True - description: This is a sample line - - name: fc1/2 - speed: 1000 - mode: E - trunk_mode: off - enabled: True - state: rendered + - name: fc1/1 + speed: auto + mode: auto + trunk_mode: "on" + enabled: true + description: This is a sample line + - name: fc1/2 + speed: 1000 + mode: E + trunk_mode: "off" + enabled: true + state: rendered # Task Output # ----------- @@ -454,13 +448,13 @@ EXAMPLES = """ # speed: auto # mode: auto # trunk_mode: on -# enabled: True +# enabled: true # description: This is a sample line # - name: fc1/2 # speed: 1000 # mode: E # trunk_mode: off -# enabled: True +# enabled: true # Using gathered @@ -493,17 +487,13 @@ EXAMPLES = """ # speed: auto # mode: auto # trunk_mode: on -# enabled: True +# enabled: true # description: This is a sample line # - name: fc1/2 # speed: 1000 # mode: E # trunk_mode: off -# enabled: True - - - - +# enabled: true """ RETURN = """ diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_gir_profile_management.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_gir_profile_management.py index 84cfc1456..2ddf2ce60 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_gir_profile_management.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_gir_profile_management.py @@ -65,8 +65,8 @@ EXAMPLES = """ - cisco.nxos.nxos_gir_profile_management: mode: maintenance commands: - - router eigrp 11 - - isolate + - router eigrp 11 + - isolate # Remove the maintenance-mode profile - cisco.nxos.nxos_gir_profile_management: diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_hostname.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_hostname.py index 42e45677a..3f141562c 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_hostname.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_hostname.py @@ -146,7 +146,6 @@ EXAMPLES = """ # ----------------------- # parsed: # hostname: NXOSv-9k - """ RETURN = """ diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_hsrp_interfaces.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_hsrp_interfaces.py index e5ac67376..3e11949dc 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_hsrp_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_hsrp_interfaces.py @@ -88,8 +88,8 @@ EXAMPLES = """ - name: Configure hsrp attributes on interfaces cisco.nxos.nxos_hsrp_interfaces: config: - - name: Ethernet1/1 - - name: Ethernet1/2 + - name: Ethernet1/1 + - name: Ethernet1/2 operation: deleted @@ -98,10 +98,10 @@ EXAMPLES = """ - name: Configure hsrp attributes on interfaces cisco.nxos.nxos_hsrp_interfaces: config: - - name: Ethernet1/1 - bfd: enable - - name: Ethernet1/2 - bfd: disable + - name: Ethernet1/1 + bfd: enable + - name: Ethernet1/2 + bfd: disable operation: merged @@ -110,10 +110,10 @@ EXAMPLES = """ - name: Configure hsrp attributes on interfaces cisco.nxos.nxos_hsrp_interfaces: config: - - name: Ethernet1/1 - bfd: enable - - name: Ethernet1/2 - bfd: disable + - name: Ethernet1/1 + bfd: enable + - name: Ethernet1/2 + bfd: disable operation: overridden @@ -122,10 +122,10 @@ EXAMPLES = """ - name: Configure hsrp attributes on interfaces cisco.nxos.nxos_hsrp_interfaces: config: - - name: Ethernet1/1 - bfd: enable - - name: Ethernet1/2 - bfd: disable + - name: Ethernet1/1 + bfd: enable + - name: Ethernet1/2 + bfd: disable operation: replaced # Using rendered @@ -133,10 +133,10 @@ EXAMPLES = """ - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_hsrp_interfaces: config: - - name: Ethernet1/800 - bfd: enable - - name: Ethernet1/801 - bfd: enable + - name: Ethernet1/800 + bfd: enable + - name: Ethernet1/801 + bfd: enable state: rendered # Task Output (redacted) @@ -199,7 +199,6 @@ EXAMPLES = """ # bfd: enable # - name: Ethernet1/2 # bfd: enable - """ RETURN = """ before: diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_igmp_interface.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_igmp_interface.py index 105dac5e6..66a2a495e 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_igmp_interface.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_igmp_interface.py @@ -154,8 +154,8 @@ EXAMPLES = """ interface: ethernet1/32 startup_query_interval: 30 oif_ps: - - {prefix: 238.2.2.6} - - {source: 192.168.0.1, prefix: 238.2.2.5} + - {prefix: 238.2.2.6} + - {source: 192.168.0.1, prefix: 238.2.2.5} state: present """ RETURN = """ @@ -385,7 +385,9 @@ def config_igmp_interface(delta, existing, existing_oif_prefix_source): if "source" in each.keys(): src = each["source"] if src: - commands.append("no " + CMDS.get("oif_prefix_source").format(pf, src)) + commands.append( + "no " + CMDS.get("oif_prefix_source").format(pf, src), + ) else: commands.append("no " + CMDS.get("oif_prefix").format(pf)) elif key == "oif_routemap": @@ -450,7 +452,11 @@ def config_default_igmp_interface(existing, delta): proposed = get_igmp_interface_defaults() delta = dict(set(proposed.items()).difference(existing.items())) if delta: - command = config_igmp_interface(delta, existing, existing_oif_prefix_source=None) + command = config_igmp_interface( + delta, + existing, + existing_oif_prefix_source=None, + ) if command: for each in command: @@ -463,7 +469,9 @@ def config_remove_oif(existing, existing_oif_prefix_source): commands = [] command = None if existing.get("oif_routemap"): - commands.append("no ip igmp static-oif route-map {0}".format(existing.get("oif_routemap"))) + commands.append( + "no ip igmp static-oif route-map {0}".format(existing.get("oif_routemap")), + ) elif existing_oif_prefix_source: for each in existing_oif_prefix_source: if each.get("prefix") and each.get("source"): diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_install_os.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_install_os.py index 53fe00aac..9b64a8989 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_install_os.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_install_os.py @@ -95,9 +95,10 @@ EXAMPLES = """ nxos_command: commands: [show version | json] register: output + - assert: that: - - output['stdout'][0]['kickstart_ver_str'] == '7.0(3)I6(1)' + - output['stdout'][0]['kickstart_ver_str'] == '7.0(3)I6(1)' """ RETURN = """ @@ -390,7 +391,9 @@ def build_install_cmd_set(issu, image, kick, type, force=True): if kick is None: commands.append("%s nxos %s %s" % (rootcmd, image, issu_cmd)) else: - commands.append("%s %s system %s kickstart %s" % (rootcmd, issu_cmd, image, kick)) + commands.append( + "%s %s system %s kickstart %s" % (rootcmd, issu_cmd, image, kick), + ) return commands diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_interfaces.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_interfaces.py index 7884098a7..30045188d 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_interfaces.py @@ -142,12 +142,12 @@ EXAMPLES = """ - name: Merge provided configuration with device configuration cisco.nxos.nxos_interfaces: config: - - name: Ethernet1/1 - description: Configured by Ansible - enabled: true - - name: Ethernet1/2 - description: Configured by Ansible Network - enabled: false + - name: Ethernet1/1 + description: Configured by Ansible + enabled: true + - name: Ethernet1/2 + description: Configured by Ansible Network + enabled: false state: merged # Task Output @@ -206,14 +206,14 @@ EXAMPLES = """ - name: Replaces device configuration of listed interfaces with provided configuration cisco.nxos.nxos_interfaces: config: - - name: Ethernet1/1 - description: Configured by Ansible - enabled: true - mtu: 9000 - - name: Ethernet1/2 - description: Configured by Ansible Network - enabled: false - mode: layer2 + - name: Ethernet1/1 + description: Configured by Ansible + enabled: true + mtu: 9000 + - name: Ethernet1/2 + description: Configured by Ansible Network + enabled: false + mode: layer2 state: replaced # Task Output @@ -274,13 +274,13 @@ EXAMPLES = """ - name: Override device configuration of all interfaces with provided configuration cisco.nxos.nxos_interfaces: config: - - name: Ethernet1/1 - enabled: true - - name: Ethernet1/2 - description: Configured by Ansible Network - enabled: false - - description: mgmt interface - name: mgmt0 + - name: Ethernet1/1 + enabled: true + - name: Ethernet1/2 + description: Configured by Ansible Network + enabled: false + - description: mgmt interface + name: mgmt0 state: overridden # Task Output @@ -338,7 +338,7 @@ EXAMPLES = """ - name: Delete or return interface parameters to default settings cisco.nxos.nxos_interfaces: config: - - name: Ethernet1/2 + - name: Ethernet1/2 state: deleted # Task Output @@ -377,14 +377,14 @@ EXAMPLES = """ - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_interfaces: config: - - name: Ethernet1/1 - description: outbound-intf - mode: layer3 - speed: 100 - - name: Ethernet1/2 - mode: layer2 - enabled: true - duplex: full + - name: Ethernet1/1 + description: outbound-intf + mode: layer3 + speed: 100 + - name: Ethernet1/2 + mode: layer2 + enabled: true + duplex: full state: rendered # Task Output @@ -524,8 +524,6 @@ EXAMPLES = """ # interface port-channel11 # interface Ethernet1/1 # interface Ethernet1/2 - - """ RETURN = """ before: diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_l2_interfaces.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_l2_interfaces.py index 55149b7bf..c490d65ed 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_l2_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_l2_interfaces.py @@ -130,13 +130,13 @@ EXAMPLES = """ - name: Merge provided configuration with device configuration cisco.nxos.nxos_l2_interfaces: config: - - name: Ethernet1/1 - trunk: - native_vlan: 10 - allowed_vlans: 2,4,15 - - name: Ethernet1/2 - access: - vlan: 30 + - name: Ethernet1/1 + trunk: + native_vlan: 10 + allowed_vlans: 2,4,15 + - name: Ethernet1/2 + access: + vlan: 30 state: merged # Task Output @@ -195,10 +195,10 @@ EXAMPLES = """ - name: Replace device configuration of specified L2 interfaces with provided configuration. cisco.nxos.nxos_l2_interfaces: config: - - name: Ethernet1/1 - trunk: - native_vlan: 20 - allowed_vlans: 5-10, 15 + - name: Ethernet1/1 + trunk: + native_vlan: 20 + allowed_vlans: 5-10, 15 state: replaced # Task Output @@ -261,9 +261,9 @@ EXAMPLES = """ - name: Override device configuration with provided configuration. cisco.nxos.nxos_l2_interfaces: config: - - name: Ethernet1/2 - access: - vlan: 30 + - name: Ethernet1/2 + access: + vlan: 30 state: overridden # Task Output @@ -320,8 +320,8 @@ EXAMPLES = """ itself). cisco.nxos.nxos_l2_interfaces: config: - - name: Ethernet1/1 - - name: Ethernet1/2 + - name: Ethernet1/1 + - name: Ethernet1/2 state: deleted # Task Output @@ -362,17 +362,17 @@ EXAMPLES = """ - name: Render platform specific configuration lines (without connecting to the device) cisco.nxos.nxos_l2_interfaces: config: - - name: Ethernet1/1 - trunk: - native_vlan: 10 - allowed_vlans: 2,4,15 - - name: Ethernet1/2 - access: - vlan: 30 - - name: Ethernet1/3 - trunk: - native_vlan: 20 - allowed_vlans: 5-10, 15 + - name: Ethernet1/1 + trunk: + native_vlan: 10 + allowed_vlans: 2,4,15 + - name: Ethernet1/2 + access: + vlan: 30 + - name: Ethernet1/3 + trunk: + native_vlan: 20 + allowed_vlans: 5-10, 15 state: rendered # Task Output diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_l3_interfaces.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_l3_interfaces.py index 1b4d821b2..5dc3d05a9 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_l3_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_l3_interfaces.py @@ -159,19 +159,19 @@ EXAMPLES = """ - name: Merge provided configuration with device configuration. cisco.nxos.nxos_l3_interfaces: config: - - name: Ethernet1/6 - ipv4: - - address: 192.168.1.1/24 - tag: 5 - - address: 10.1.1.1/24 - secondary: true - tag: 10 - ipv6: - - address: fd5d:12c9:2201:2::1/64 - tag: 6 - - name: Ethernet1/7.42 - redirects: false - unreachables: false + - name: Ethernet1/6 + ipv4: + - address: 192.168.1.1/24 + tag: 5 + - address: 10.1.1.1/24 + secondary: true + tag: 10 + ipv6: + - address: fd5d:12c9:2201:2::1/64 + tag: 6 + - name: Ethernet1/7.42 + redirects: false + unreachables: false state: merged # Task Output @@ -258,9 +258,9 @@ EXAMPLES = """ - name: Replace device configuration of specified L3 interfaces with provided configuration. cisco.nxos.nxos_l3_interfaces: config: - - name: Ethernet1/6 - ipv4: - - address: 192.168.22.3/24 + - name: Ethernet1/6 + ipv4: + - address: 192.168.22.3/24 state: replaced # Task Output @@ -352,12 +352,12 @@ EXAMPLES = """ - name: Override device configuration with provided configuration. cisco.nxos.nxos_l3_interfaces: config: - - ipv4: - - address: dhcp - name: mgmt0 - - name: Ethernet1/6 - ipv4: - - address: 192.168.22.3/24 + - ipv4: + - address: dhcp + name: mgmt0 + - name: Ethernet1/6 + ipv4: + - address: 192.168.22.3/24 state: overridden # Task Output @@ -446,8 +446,8 @@ EXAMPLES = """ itself). cisco.nxos.nxos_l3_interfaces: config: - - name: Ethernet1/6 - - name: Ethernet1/2 + - name: Ethernet1/6 + - name: Ethernet1/2 state: deleted # Task Output @@ -497,17 +497,17 @@ EXAMPLES = """ - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_l3_interfaces: config: - - name: Ethernet1/800 - ipv4: - - address: 192.168.1.100/24 - tag: 5 - - address: 10.1.1.1/24 - secondary: true - tag: 10 - - name: Ethernet1/800 - ipv6: - - address: fd5d:12c9:2201:2::1/64 - tag: 6 + - name: Ethernet1/800 + ipv4: + - address: 192.168.1.100/24 + tag: 5 + - address: 10.1.1.1/24 + secondary: true + tag: 10 + - name: Ethernet1/800 + ipv6: + - address: fd5d:12c9:2201:2::1/64 + tag: 6 state: rendered # Task Output diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_lacp_interfaces.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_lacp_interfaces.py index 98e5a6339..d51ea0a71 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_lacp_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_lacp_interfaces.py @@ -143,9 +143,9 @@ EXAMPLES = """ - name: Merge provided configuration with device configuration. cisco.nxos.nxos_lacp_interfaces: config: - - name: Ethernet1/3 - port_priority: 5 - rate: fast + - name: Ethernet1/3 + port_priority: 5 + rate: fast state: merged # After state: @@ -169,9 +169,9 @@ EXAMPLES = """ - name: Replace device lacp interfaces configuration with the given configuration. cisco.nxos.nxos_lacp_interfaces: config: - - name: port-channel11 - links: - min: 4 + - name: port-channel11 + links: + min: 4 state: replaced # After state: @@ -197,9 +197,9 @@ EXAMPLES = """ on device with provided configuration. cisco.nxos.nxos_lacp_interfaces: config: - - name: port-channel11 - links: - min: 4 + - name: port-channel11 + links: + min: 4 state: overridden # After state: @@ -232,17 +232,17 @@ EXAMPLES = """ - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_lacp_interfaces: config: - - name: Ethernet1/800 - rate: fast - - name: Ethernet1/801 - rate: fast - port_priority: 32 - - name: port-channel10 - links: - max: 15 - min: 2 - convergence: - graceful: true + - name: Ethernet1/800 + rate: fast + - name: Ethernet1/801 + rate: fast + port_priority: 32 + - name: port-channel10 + links: + max: 15 + min: 2 + convergence: + graceful: true state: rendered # Task Output (redacted) diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_lag_interfaces.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_lag_interfaces.py index ce06462ed..8d0fabf7a 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_lag_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_lag_interfaces.py @@ -113,9 +113,9 @@ EXAMPLES = """ - name: Merge provided configuration with device configuration. cisco.nxos.nxos_lag_interfaces: config: - - name: port-channel99 - members: - - member: Ethernet1/4 + - name: port-channel99 + members: + - member: Ethernet1/4 state: merged # After state: @@ -137,9 +137,9 @@ EXAMPLES = """ with provided configuration. cisco.nxos.nxos_lag_interfaces: config: - - name: port-channel10 - members: - - member: Ethernet1/4 + - name: port-channel10 + members: + - member: Ethernet1/4 state: replaced # After state: @@ -163,10 +163,10 @@ EXAMPLES = """ device with provided configuration. cisco.nxos.nxos_lag_interfaces: config: - - name: port-channel20 - members: - - member: Ethernet1/6 - force: true + - name: port-channel20 + members: + - member: Ethernet1/6 + force: true state: overridden # After state: @@ -189,7 +189,7 @@ EXAMPLES = """ itself). cisco.nxos.nxos_lag_interfaces: config: - - port-channel: port-channel99 + - port-channel: port-channel99 state: deleted - name: Delete LAG attributes of all the interfaces @@ -207,15 +207,15 @@ EXAMPLES = """ - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_lag_interfaces: config: - - name: port-channel10 - members: - - member: Ethernet1/800 - mode: active - - member: Ethernet1/801 - - name: port-channel11 - members: - - member: Ethernet1/802 - mode: passive + - name: port-channel10 + members: + - member: Ethernet1/800 + mode: active + - member: Ethernet1/801 + - name: port-channel11 + members: + - member: Ethernet1/802 + mode: passive state: rendered # Task Output (redacted) diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_lldp_interfaces.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_lldp_interfaces.py index 2006001de..44ac5b09e 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_lldp_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_lldp_interfaces.py @@ -111,12 +111,12 @@ EXAMPLES = """ - name: Merge provided configuration with device configuration cisco.nxos.nxos_lldp_interfaces: config: - - name: Ethernet1/4 - receive: false - transmit: true - tlv_set: - management_address: 192.168.122.64 - vlan: 12 + - name: Ethernet1/4 + receive: false + transmit: true + tlv_set: + management_address: 192.168.122.64 + vlan: 12 state: merged # After state: @@ -143,10 +143,10 @@ EXAMPLES = """ - name: Replace LLDP configuration on interfaces with given configuration cisco.nxos.nxos_lldp_interfaces: config: - - name: Ethernet1/4 - transmit: false - tlv_set: - vlan: 2 + - name: Ethernet1/4 + transmit: false + tlv_set: + vlan: 2 state: replaced @@ -176,10 +176,10 @@ EXAMPLES = """ - name: Override LLDP configuration on all interfaces with given configuration cisco.nxos.nxos_lldp_interfaces: config: - - name: Ethernet1/7 - receive: false - tlv_set: - vlan: 12 + - name: Ethernet1/7 + receive: false + tlv_set: + vlan: 12 state: overridden @@ -209,8 +209,6 @@ EXAMPLES = """ # After state: # ------------ # - - """ RETURN = """ before: diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_logging.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_logging.py deleted file mode 100644 index 7782eb32c..000000000 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_logging.py +++ /dev/null @@ -1,940 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -# Copyright: (c) 2017, Ansible by Red Hat, inc -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - - -DOCUMENTATION = """ -module: nxos_logging -author: Trishna Guha (@trishnaguha) -short_description: Manage logging on network devices -notes: -- Limited Support for Cisco MDS -description: -- This module provides declarative management of logging on Cisco NX-OS devices. -version_added: 1.0.0 -deprecated: - alternative: nxos_logging_global - why: Updated module released with more functionality. - removed_at_date: '2023-08-01' -options: - dest: - description: - - Destination of the logs. - choices: - - console - - logfile - - module - - monitor - - server - type: str - remote_server: - description: - - Hostname or IP Address for remote logging (when dest is 'server'). - type: str - use_vrf: - description: - - VRF to be used while configuring remote logging (when dest is 'server'). - type: str - interface: - description: - - Interface to be used while configuring source-interface for logging (e.g., 'Ethernet1/2', - 'mgmt0') - type: str - name: - description: - - If value of C(dest) is I(logfile) it indicates file-name. - type: str - facility: - description: - - Facility name for logging. - type: str - dest_level: - description: - - Set logging severity levels. - aliases: - - level - type: int - facility_level: - description: - - Set logging severity levels for facility based log messages. - type: int - aggregate: - description: List of logging definitions. - type: list - elements: dict - state: - description: - - State of the logging configuration. - default: present - choices: - - present - - absent - type: str - event: - description: - - Link/trunk enable/default interface configuration logging - choices: - - link-enable - - link-default - - trunk-enable - - trunk-default - type: str - interface_message: - description: - - Add interface description to interface syslogs. Does not work with version 6.0 - images using nxapi as a transport. - choices: - - add-interface-description - type: str - file_size: - description: - - Set logfile size - type: int - facility_link_status: - description: - - Set logging facility ethpm link status. Not idempotent with version 6.0 images. - choices: - - link-down-notif - - link-down-error - - link-up-notif - - link-up-error - type: str - timestamp: - description: - - Set logging timestamp format - choices: - - microseconds - - milliseconds - - seconds - type: str - purge: - description: - - Remove any switch logging configuration that does not match what has been configured - Not supported for ansible_connection local. All nxos_logging tasks must use - the same ansible_connection type. - type: bool - default: false -extends_documentation_fragment: -- cisco.nxos.nxos -""" - -EXAMPLES = """ -- name: configure console logging with level - cisco.nxos.nxos_logging: - dest: console - level: 2 - state: present -- name: remove console logging configuration - cisco.nxos.nxos_logging: - dest: console - level: 2 - state: absent -- name: configure file logging with level - cisco.nxos.nxos_logging: - dest: logfile - name: testfile - dest_level: 3 - state: present -- name: Configure logging logfile with size - cisco.nxos.nxos_logging: - dest: logfile - name: testfile - dest_level: 3 - file_size: 16384 -- name: configure facility level logging - cisco.nxos.nxos_logging: - facility: daemon - facility_level: 0 - state: present -- name: remove facility level logging - cisco.nxos.nxos_logging: - facility: daemon - facility_level: 0 - state: absent -- name: Configure Remote Logging - cisco.nxos.nxos_logging: - dest: server - remote_server: test-syslogserver.com - facility: auth - facility_level: 1 - use_vrf: management - state: present -- name: Configure Source Interface for Logging - cisco.nxos.nxos_logging: - interface: mgmt0 - state: present -- name: Purge nxos_logging configuration not managed by this playbook - cisco.nxos.nxos_logging: - purge: true -- name: Configure logging timestamp - cisco.nxos.nxos_logging: - timestamp: milliseconds - state: present -- name: Configure logging facility ethpm link status - cisco.nxos.nxos_logging: - facility: ethpm - facility_link_status: link-up-notif - state: present -- name: Configure logging message ethernet description - cisco.nxos.nxos_logging: - interface_message: add-interface-description - state: present -- name: Configure logging event link enable - cisco.nxos.nxos_logging: - event: link-enable - state: present -- name: Configure logging using aggregate - cisco.nxos.nxos_logging: - aggregate: - - {dest: console, dest_level: 2} - - {dest: logfile, dest_level: 2, name: testfile} - - {facility: daemon, facility_level: 0} - state: present -""" - -RETURN = """ -commands: - description: The list of configuration mode commands to send to the device - returned: always - type: list - sample: - - logging console 2 - - logging logfile testfile 3 - - logging level daemon 0 -""" - -import copy -import re - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.cisco.nxos.plugins.module_utils.network.nxos.nxos import ( - get_config, - load_config, - normalize_interface, - read_module_context, - run_commands, - save_module_context, -) - - -STATIC_CLI = { - "link-enable": "logging event link-status enable", - "link-default": "logging event link-status default", - "trunk-enable": "logging event trunk-status enable", - "trunk-default": "logging event trunk-status default", - "microseconds": "logging timestamp microseconds", - "milliseconds": "logging timestamp milliseconds", - "seconds": "logging timestamp seconds", - "link-up-error": "link-up error", - "link-up-notif": "link-up notif", - "link-down-error": "link-down error", - "link-down-notif": "link-down notif", - "add-interface-description": "logging message interface type ethernet description", -} - -DEFAULT_LOGGING_LEVEL = { - 0: [], - 1: [], - 2: ["pktmgr"], - 3: ["adjmgr", "arp", "icmpv6", "l2rib", "netstack"], - 4: [], - 5: ["mrib", "m6rib"], - 6: [], - 7: [], -} - -DEST_GROUP = ["console", "logfile", "module", "monitor", "server"] - - -def map_obj_to_commands(module, updates): - commands = list() - want, have = updates - - for w in want: - state = w["state"] - del w["state"] - - if state == "absent" and w in have: - if w["facility"] is not None: - if ( - not w["dest"] - and not w["facility_link_status"] - and w["facility"] not in DEFAULT_LOGGING_LEVEL[int(w["facility_level"])] - ): - commands.append( - "no logging level {0} {1}".format(w["facility"], w["facility_level"]), - ) - - if w["facility_link_status"] and w["facility"] in ("ethpm"): - commands.append( - "no logging level {0} {1}".format( - w["facility"], - STATIC_CLI[w["facility_link_status"]], - ), - ) - - if w["name"] is not None: - commands.append("no logging logfile") - - if w["dest"] in ("console", "module", "monitor"): - commands.append("no logging {0}".format(w["dest"])) - - if w["dest"] == "server": - commands.append("no logging server {0}".format(w["remote_server"])) - - if w["interface"]: - commands.append("no logging source-interface") - - if w["event"] and w["event"] in STATIC_CLI: - commands.append("no " + STATIC_CLI[w["event"]]) - - if w["message"] and w["message"] in STATIC_CLI: - commands.append("no " + STATIC_CLI[w["message"]]) - - if w["timestamp"] and w["timestamp"] in STATIC_CLI: - commands.append("no " + STATIC_CLI[w["timestamp"]]) - - if state == "present" and w not in have: - if w["facility"] is None: - if w["dest"]: - if w["dest"] not in ("logfile", "server"): - commands.append("logging {0} {1}".format(w["dest"], w["dest_level"])) - - elif w["dest"] == "logfile": - if w["file_size"]: - commands.append( - "logging logfile {0} {1} size {2}".format( - w["name"], - w["dest_level"], - w["file_size"], - ), - ) - else: - commands.append( - "logging logfile {0} {1}".format(w["name"], w["dest_level"]), - ) - - elif w["dest"] == "server": - if w["facility_level"]: - if w["use_vrf"]: - commands.append( - "logging server {0} {1} use-vrf {2}".format( - w["remote_server"], - w["facility_level"], - w["use_vrf"], - ), - ) - else: - commands.append( - "logging server {0} {1}".format( - w["remote_server"], - w["facility_level"], - ), - ) - - else: - if w["use_vrf"]: - commands.append( - "logging server {0} use-vrf {1}".format( - w["remote_server"], - w["use_vrf"], - ), - ) - else: - commands.append("logging server {0}".format(w["remote_server"])) - - if w["facility"]: - if w["dest"] == "server": - if w["facility_level"]: - if w["use_vrf"]: - commands.append( - "logging server {0} {1} facility {2} use-vrf {3}".format( - w["remote_server"], - w["facility_level"], - w["facility"], - w["use_vrf"], - ), - ) - else: - commands.append( - "logging server {0} {1} facility {2}".format( - w["remote_server"], - w["facility_level"], - w["facility"], - ), - ) - else: - if w["use_vrf"]: - commands.append( - "logging server {0} facility {1} use-vrf {2}".format( - w["remote_server"], - w["facility"], - w["use_vrf"], - ), - ) - else: - commands.append( - "logging server {0} facility {1}".format( - w["remote_server"], - w["facility"], - ), - ) - else: - if w["facility_link_status"]: - commands.append( - "logging level {0} {1}".format( - w["facility"], - STATIC_CLI[w["facility_link_status"]], - ), - ) - else: - if not match_facility_default(module, w["facility"], w["facility_level"]): - commands.append( - "logging level {0} {1}".format(w["facility"], w["facility_level"]), - ) - - if w["interface"]: - commands.append( - "logging source-interface {0} {1}".format(*split_interface(w["interface"])), - ) - - if w["event"] and w["event"] in STATIC_CLI: - commands.append(STATIC_CLI[w["event"]]) - - if w["message"] and w["message"] in STATIC_CLI: - commands.append(STATIC_CLI[w["message"]]) - - if w["timestamp"] and w["timestamp"] in STATIC_CLI: - commands.append(STATIC_CLI[w["timestamp"]]) - - return commands - - -def match_facility_default(module, facility, want_level): - """Check wanted facility to see if it matches current device default""" - - matches_default = False - # Sample output from show logging level command - # Facility Default Severity Current Session Severity - # -------- ---------------- ------------------------ - # bfd 5 5 - # - # 0(emergencies) 1(alerts) 2(critical) - # 3(errors) 4(warnings) 5(notifications) - # 6(information) 7(debugging) - - regexl = r"\S+\s+(\d+)\s+(\d+)" - cmd = { - "command": "show logging level {0}".format(facility), - "output": "text", - } - facility_data = run_commands(module, cmd) - for line in facility_data[0].split("\n"): - mo = re.search(regexl, line) - if mo and int(mo.group(1)) == int(want_level) and int(mo.group(2)) == int(want_level): - matches_default = True - - return matches_default - - -def split_interface(interface): - match = re.search(r"(\D+)(\S*)", interface, re.M) - if match: - return match.group(1), match.group(2) - - -def parse_facility_link_status(line, facility, status): - facility_link_status = None - - if facility is not None: - match = re.search(r"logging level {0} {1} (\S+)".format(facility, status), line, re.M) - if match: - facility_link_status = status + "-" + match.group(1) - - return facility_link_status - - -def parse_event_status(line, event): - status = None - - match = re.search(r"logging event {0} (\S+)".format(event + "-status"), line, re.M) - if match: - state = match.group(1) - if state: - status = state - - return status - - -def parse_event(line): - event = None - - match = re.search(r"logging event (\S+)", line, re.M) - if match: - state = match.group(1) - if state == "link-status": - event = "link" - elif state == "trunk-status": - event = "trunk" - - return event - - -def parse_message(line): - message = None - - match = re.search(r"logging message interface type ethernet description", line, re.M) - if match: - message = "add-interface-description" - - return message - - -def parse_file_size(line, name, level): - file_size = None - - match = re.search(r"logging logfile {0} {1} size (\S+)".format(name, level), line, re.M) - if match: - file_size = match.group(1) - if file_size == "8192" or file_size == "4194304": - file_size = None - - return file_size - - -def parse_timestamp(line): - timestamp = None - - match = re.search(r"logging timestamp (\S+)", line, re.M) - if match: - timestamp = match.group(1) - - return timestamp - - -def parse_name(line, dest): - name = None - - if dest is not None: - if dest == "logfile": - match = re.search(r"logging logfile (\S+)", line, re.M) - if match: - name = match.group(1) - else: - pass - - return name - - -def parse_remote_server(line, dest): - remote_server = None - - if dest and dest == "server": - match = re.search(r"logging server (\S+)", line, re.M) - if match: - remote_server = match.group(1) - - return remote_server - - -def parse_dest_level(line, dest, name): - dest_level = None - - def parse_match(match): - level = None - if match: - if int(match.group(1)) in range(0, 8): - level = match.group(1) - else: - pass - return level - - if dest and dest != "server": - if dest == "logfile": - match = re.search(r"logging logfile {0} (\S+)".format(name), line, re.M) - if match: - dest_level = parse_match(match) - - elif dest == "server": - match = re.search(r"logging server (?:\S+) (\d+)", line, re.M) - if match: - dest_level = parse_match(match) - else: - match = re.search(r"logging {0} (\S+)".format(dest), line, re.M) - if match: - dest_level = parse_match(match) - - return dest_level - - -def parse_facility_level(line, facility, dest): - facility_level = None - - if dest == "server": - match = re.search(r"logging server (?:\S+) (\d+)", line, re.M) - if match: - facility_level = match.group(1) - - elif facility is not None: - match = re.search(r"logging level {0} (\S+)".format(facility), line, re.M) - if match: - facility_level = match.group(1) - - return facility_level - - -def parse_facility(line): - facility = None - - match = re.search( - r"logging server (?:\S+) (?:\d+) (?:\S+) (?:\S+) (?:\S+) (\S+)", - line, - re.M, - ) - if match: - facility = match.group(1) - - return facility - - -def parse_use_vrf(line, dest): - use_vrf = None - - if dest and dest == "server": - match = re.search(r"logging server (?:\S+) (?:\d+) use-vrf (\S+)", line, re.M) - if match: - use_vrf = match.group(1) - - return use_vrf - - -def parse_interface(line): - interface = None - - match = re.search(r"logging source-interface (\S*)", line, re.M) - if match: - interface = match.group(1) - - return interface - - -def map_config_to_obj(module): - obj = [] - - data = get_config(module, flags=[" all | section logging"]) - - for line in data.split("\n"): - if re.search(r"no (\S+)", line, re.M): - state = "absent" - else: - state = "present" - - match = re.search(r"logging (\S+)", line, re.M) - if state == "present" and match: - event_status = None - name = None - dest_level = None - dest = None - facility = None - remote_server = None - facility_link_status = None - file_size = None - facility_level = None - - if match.group(1) in DEST_GROUP: - dest = match.group(1) - - name = parse_name(line, dest) - remote_server = parse_remote_server(line, dest) - dest_level = parse_dest_level(line, dest, name) - - if dest == "server": - facility = parse_facility(line) - - facility_level = parse_facility_level(line, facility, dest) - - if dest == "logfile": - file_size = parse_file_size(line, name, dest_level) - - elif match.group(1) == "level": - match_facility = re.search(r"logging level (\S+)", line, re.M) - facility = match_facility.group(1) - - level = parse_facility_level(line, facility, dest) - if level.isdigit(): - facility_level = level - else: - facility_link_status = parse_facility_link_status(line, facility, level) - - elif match.group(1) == "event" and state == "present": - event = parse_event(line) - if event: - status = parse_event_status(line, event) - if status: - event_status = event + "-" + status - else: - continue - - else: - pass - - obj.append( - { - "dest": dest, - "remote_server": remote_server, - "use_vrf": parse_use_vrf(line, dest), - "name": name, - "facility": facility, - "dest_level": dest_level, - "facility_level": facility_level, - "interface": parse_interface(line), - "facility_link_status": facility_link_status, - "event": event_status, - "file_size": file_size, - "message": parse_message(line), - "timestamp": parse_timestamp(line), - }, - ) - - cmd = [ - { - "command": "show logging | section enabled | section console", - "output": "text", - }, - { - "command": "show logging | section enabled | section monitor", - "output": "text", - }, - ] - - default_data = run_commands(module, cmd) - - for line in default_data: - flag = False - match = re.search( - r"Logging (\w+):(?:\s+) (?:\w+) (?:\W)Severity: (\w+)", - str(line), - re.M, - ) - if match: - if match.group(1) == "console" and match.group(2) == "critical": - dest_level = "2" - flag = True - elif match.group(1) == "monitor" and match.group(2) == "notifications": - dest_level = "5" - flag = True - if flag: - obj.append( - { - "dest": match.group(1), - "remote_server": None, - "name": None, - "facility": None, - "dest_level": dest_level, - "facility_level": None, - "use_vrf": None, - "interface": None, - "facility_link_status": None, - "event": None, - "file_size": None, - "message": None, - "timestamp": None, - }, - ) - - return obj - - -def map_params_to_obj(module): - obj = [] - - if "aggregate" in module.params and module.params["aggregate"]: - args = { - "dest": "", - "remote_server": "", - "use_vrf": "", - "name": "", - "facility": "", - "dest_level": "", - "facility_level": "", - "interface": "", - "facility_link_status": None, - "event": None, - "file_size": None, - "message": None, - "timestamp": None, - } - - for c in module.params["aggregate"]: - d = c.copy() - - for key in args: - if key not in d: - d[key] = None - - if d["dest_level"] is not None: - d["dest_level"] = str(d["dest_level"]) - - if d["facility_level"] is not None: - d["facility_level"] = str(d["facility_level"]) - - if d["interface"]: - d["interface"] = normalize_interface(d["interface"]) - - if "state" not in d: - d["state"] = module.params["state"] - - if d["file_size"]: - d["file_size"] = str(d["file_size"]) - - obj.append(d) - - else: - dest_level = None - facility_level = None - file_size = None - - if module.params["dest_level"] is not None: - dest_level = str(module.params["dest_level"]) - - if module.params["facility_level"] is not None: - facility_level = str(module.params["facility_level"]) - - if module.params["file_size"] is not None: - file_size = str(module.params["file_size"]) - - obj.append( - { - "dest": module.params["dest"], - "remote_server": module.params["remote_server"], - "use_vrf": module.params["use_vrf"], - "name": module.params["name"], - "facility": module.params["facility"], - "dest_level": dest_level, - "facility_level": facility_level, - "interface": normalize_interface(module.params["interface"]), - "state": module.params["state"], - "facility_link_status": module.params["facility_link_status"], - "event": module.params["event"], - "message": module.params["interface_message"], - "file_size": file_size, - "timestamp": module.params["timestamp"], - }, - ) - return obj - - -def merge_wants(wants, want): - if not wants: - wants = list() - - for w in want: - w = copy.copy(w) - state = w["state"] - del w["state"] - - if state == "absent": - if w in wants: - wants.remove(w) - elif w not in wants: - wants.append(w) - - return wants - - -def absent(h): - h["state"] = "absent" - return h - - -def outliers(haves, wants): - wants = list(wants) - return [absent(h) for h in haves if not (h in wants or wants.append(h))] - - -def main(): - """main entry point for module execution""" - argument_spec = dict( - dest=dict(choices=DEST_GROUP), - name=dict(), - facility=dict(), - remote_server=dict(), - use_vrf=dict(), - dest_level=dict(type="int", aliases=["level"]), - facility_level=dict(type="int"), - interface=dict(), - facility_link_status=dict( - choices=[ - "link-down-notif", - "link-down-error", - "link-up-notif", - "link-up-error", - ], - ), - event=dict( - choices=[ - "link-enable", - "link-default", - "trunk-enable", - "trunk-default", - ], - ), - interface_message=dict(choices=["add-interface-description"]), - file_size=dict(type="int"), - timestamp=dict(choices=["microseconds", "milliseconds", "seconds"]), - state=dict(default="present", choices=["present", "absent"]), - aggregate=dict(type="list", elements="dict"), - purge=dict(default=False, type="bool"), - ) - - required_if = [ - ("dest", "logfile", ["name"]), - ("dest", "server", ["remote_server"]), - ] - - module = AnsibleModule( - argument_spec=argument_spec, - required_if=required_if, - supports_check_mode=True, - ) - - warnings = list() - - result = {"changed": False} - if warnings: - result["warnings"] = warnings - - want = map_params_to_obj(module) - merged_wants = merge_wants(read_module_context(module), want) - have = map_config_to_obj(module) - - commands = map_obj_to_commands(module, (want, have)) - result["commands"] = commands - - if commands: - if not module.check_mode: - load_config(module, commands) - result["changed"] = True - - save_module_context(module, merged_wants) - - if module.params.get("purge"): - pcommands = map_obj_to_commands(module, (outliers(have, merged_wants), have)) - if pcommands: - if not module.check_mode: - load_config(module, pcommands) - result["changed"] = True - result["commands"] += pcommands - - module.exit_json(**result) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_logging_global.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_logging_global.py index 1c060b01b..759dee67c 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_logging_global.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_logging_global.py @@ -290,7 +290,7 @@ EXAMPLES = """ facility: local6 use_vrf: default origin_id: - hostname: True + hostname: true # Task output # ------------- @@ -576,7 +576,7 @@ EXAMPLES = """ facility: local6 use_vrf: default origin_id: - hostname: True + hostname: true # Task Output (redacted) # ----------------------- diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp.py deleted file mode 100644 index 046436d47..000000000 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp.py +++ /dev/null @@ -1,446 +0,0 @@ -#!/usr/bin/python -# Copyright: Ansible Project -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - - -DOCUMENTATION = """ -module: nxos_ntp -extends_documentation_fragment: -- cisco.nxos.nxos -short_description: Manages core NTP configuration. -notes: -- Limited Support for Cisco MDS -description: -- Manages core NTP configuration. -version_added: 1.0.0 -deprecated: - alternative: nxos_ntp_global - why: Updated module released with more functionality. - removed_at_date: '2024-01-01' -author: -- Jason Edelman (@jedelman8) -options: - server: - description: - - Network address of NTP server. - type: str - peer: - description: - - Network address of NTP peer. - type: str - key_id: - description: - - Authentication key identifier to use with given NTP server or peer or keyword - 'default'. - type: str - prefer: - description: - - Makes given NTP server or peer the preferred NTP server or peer for the device. - choices: - - enabled - - disabled - type: str - vrf_name: - description: - - Makes the device communicate with the given NTP server or peer over a specific - VRF or keyword 'default'. - type: str - source_addr: - description: - - Local source address from which NTP messages are sent or keyword 'default'. - type: str - source_int: - description: - - Local source interface from which NTP messages are sent. Must be fully qualified - interface name or keyword 'default' - type: str - state: - description: - - Manage the state of the resource. - default: present - choices: - - present - - absent - type: str -""" - -EXAMPLES = """ -# Set NTP Server with parameters -- cisco.nxos.nxos_ntp: - server: 1.2.3.4 - key_id: 32 - prefer: enabled - host: '{{ inventory_hostname }}' - username: '{{ un }}' - password: '{{ pwd }}' -""" - -RETURN = """ -proposed: - description: k/v pairs of parameters passed into module - returned: always - type: dict - sample: {"address": "192.0.2.2", "key_id": "48", - "peer_type": "server", "prefer": "enabled", - "source": "192.0.2.3", "source_type": "source"} -existing: - description: - - k/v pairs of existing ntp server/peer - returned: always - type: dict - sample: {"address": "192.0.2.2", "key_id": "32", - "peer_type": "server", "prefer": "enabled", - "source": "ethernet2/1", "source_type": "source-interface"} -end_state: - description: k/v pairs of ntp info after module execution - returned: always - type: dict - sample: {"address": "192.0.2.2", "key_id": "48", - "peer_type": "server", "prefer": "enabled", - "source": "192.0.2.3", "source_type": "source"} -updates: - description: command sent to the device - returned: always - type: list - sample: ["ntp server 192.0.2.2 prefer key 48", - "no ntp source-interface ethernet2/1", "ntp source 192.0.2.3"] -changed: - description: check to see if a change was made on the device - returned: always - type: bool - sample: true -""" - -import re - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.cisco.nxos.plugins.module_utils.network.nxos.nxos import ( - load_config, - run_commands, -) - - -def execute_show_command(command, module, command_type="cli_show"): - if "show run" not in command: - output = "json" - else: - output = "text" - - commands = [{"command": command, "output": output}] - return run_commands(module, commands) - - -def flatten_list(command_lists): - flat_command_list = [] - for command in command_lists: - if isinstance(command, list): - flat_command_list.extend(command) - else: - flat_command_list.append(command) - return flat_command_list - - -def get_ntp_source(module): - source_type = None - source = None - command = "show run | inc ntp.source" - output = execute_show_command(command, module, command_type="cli_show_ascii") - - if output: - try: - if "interface" in output[0]: - source_type = "source-interface" - else: - source_type = "source" - source = output[0].split()[2].lower() - except (AttributeError, IndexError): - source_type = None - source = None - - return source_type, source - - -def get_ntp_peer(module): - command = "show run | inc ntp.(server|peer)" - ntp_peer_list = [] - response = execute_show_command(command, module, command_type="cli_show_ascii") - - if response: - if isinstance(response, list): - ntp = response[0] - else: - ntp = response - if ntp: - ntp_regex = ( - r".*ntp\s(server\s(?P
    \S+)|peer\s(?P\S+))" - r"\s*((?Pprefer)\s*)?(use-vrf\s(?P\S+)\s*)?" - r"(key\s(?P\d+))?.*" - ) - - split_ntp = ntp.splitlines() - for peer_line in split_ntp: - if "access-group" in peer_line: - continue - ntp_peer = {} - try: - peer_address = None - vrf_name = "default" - prefer = None - key_id = None - match_ntp = re.match(ntp_regex, peer_line, re.DOTALL) - group_ntp = match_ntp.groupdict() - - address = group_ntp["address"] - peer_address = group_ntp["peer_address"] - prefer = group_ntp["prefer"] - vrf_name = group_ntp["vrf_name"] - key_id = group_ntp["key_id"] - - if prefer is not None: - prefer = "enabled" - else: - prefer = "disabled" - - if address is not None: - peer_type = "server" - elif peer_address is not None: - peer_type = "peer" - address = peer_address - - args = dict( - peer_type=peer_type, - address=address, - prefer=prefer, - vrf_name=vrf_name, - key_id=key_id, - ) - - ntp_peer = dict((k, v) for k, v in args.items()) - ntp_peer_list.append(ntp_peer) - except AttributeError: - ntp_peer_list = [] - - return ntp_peer_list - - -def get_ntp_existing(address, peer_type, module): - peer_dict = {} - peer_server_list = [] - - peer_list = get_ntp_peer(module) - for peer in peer_list: - if peer["address"] == address: - peer_dict.update(peer) - else: - peer_server_list.append(peer) - - source_type, source = get_ntp_source(module) - - if source_type is not None and source is not None: - peer_dict["source_type"] = source_type - peer_dict["source"] = source - - return (peer_dict, peer_server_list) - - -def set_ntp_server_peer(peer_type, address, prefer, key_id, vrf_name): - command_strings = [] - - if prefer: - command_strings.append(" prefer") - if key_id: - command_strings.append(" key {0}".format(key_id)) - if vrf_name: - command_strings.append(" use-vrf {0}".format(vrf_name)) - - command_strings.insert(0, "ntp {0} {1}".format(peer_type, address)) - - command = "".join(command_strings) - - return command - - -def config_ntp(delta, existing): - if ( - delta.get("address") - or delta.get("peer_type") - or delta.get("vrf_name") - or delta.get("key_id") - or delta.get("prefer") - ): - address = delta.get("address", existing.get("address")) - peer_type = delta.get("peer_type", existing.get("peer_type")) - key_id = delta.get("key_id", existing.get("key_id")) - prefer = delta.get("prefer", existing.get("prefer")) - vrf_name = delta.get("vrf_name", existing.get("vrf_name")) - if delta.get("key_id") == "default": - key_id = None - else: - peer_type = None - prefer = None - - source_type = delta.get("source_type") - source = delta.get("source") - - if prefer: - if prefer == "enabled": - prefer = True - elif prefer == "disabled": - prefer = False - - if source: - source_type = delta.get("source_type", existing.get("source_type")) - - ntp_cmds = [] - if peer_type: - if existing.get("peer_type") and existing.get("address"): - ntp_cmds.append( - "no ntp {0} {1}".format(existing.get("peer_type"), existing.get("address")), - ) - ntp_cmds.append(set_ntp_server_peer(peer_type, address, prefer, key_id, vrf_name)) - if source: - existing_source_type = existing.get("source_type") - existing_source = existing.get("source") - if existing_source_type and source_type != existing_source_type: - ntp_cmds.append("no ntp {0} {1}".format(existing_source_type, existing_source)) - if source == "default": - if existing_source_type and existing_source: - ntp_cmds.append("no ntp {0} {1}".format(existing_source_type, existing_source)) - else: - ntp_cmds.append("ntp {0} {1}".format(source_type, source)) - - return ntp_cmds - - -def main(): - argument_spec = dict( - server=dict(type="str"), - peer=dict(type="str"), - key_id=dict(type="str"), - prefer=dict(type="str", choices=["enabled", "disabled"]), - vrf_name=dict(type="str"), - source_addr=dict(type="str"), - source_int=dict(type="str"), - state=dict(choices=["absent", "present"], default="present"), - ) - - module = AnsibleModule( - argument_spec=argument_spec, - mutually_exclusive=[["server", "peer"], ["source_addr", "source_int"]], - supports_check_mode=True, - ) - - warnings = list() - - server = module.params["server"] or None - peer = module.params["peer"] or None - key_id = module.params["key_id"] - prefer = module.params["prefer"] - vrf_name = module.params["vrf_name"] - source_addr = module.params["source_addr"] - source_int = module.params["source_int"] - state = module.params["state"] - - if source_int is not None: - source_int = source_int.lower() - - if server: - peer_type = "server" - address = server - elif peer: - peer_type = "peer" - address = peer - else: - peer_type = None - address = None - - source_type = None - source = None - if source_addr: - source_type = "source" - source = source_addr - elif source_int: - source_type = "source-interface" - source = source_int - - if key_id or vrf_name or prefer: - if not server and not peer: - module.fail_json(msg="Please supply the server or peer parameter") - - args = dict( - peer_type=peer_type, - address=address, - key_id=key_id, - prefer=prefer, - vrf_name=vrf_name, - source_type=source_type, - source=source, - ) - - proposed = dict((k, v) for k, v in args.items() if v is not None) - - existing, peer_server_list = get_ntp_existing(address, peer_type, module) - - end_state = existing - changed = False - commands = [] - - if state == "present": - delta = dict(set(proposed.items()).difference(existing.items())) - if delta.get("key_id") and delta.get("key_id") == "default": - if not existing.get("key_id"): - delta.pop("key_id") - if delta: - command = config_ntp(delta, existing) - if command: - commands.append(command) - - elif state == "absent": - if existing.get("peer_type") and existing.get("address"): - command = "no ntp {0} {1}".format(existing["peer_type"], existing["address"]) - if command: - commands.append([command]) - - existing_source_type = existing.get("source_type") - existing_source = existing.get("source") - proposed_source_type = proposed.get("source_type") - proposed_source = proposed.get("source") - - if proposed_source_type: - if proposed_source_type == existing_source_type: - if proposed_source == existing_source: - command = "no ntp {0} {1}".format(existing_source_type, existing_source) - if command: - commands.append([command]) - - cmds = flatten_list(commands) - if cmds: - if module.check_mode: - module.exit_json(changed=True, commands=cmds) - else: - changed = True - load_config(module, cmds) - end_state = get_ntp_existing(address, peer_type, module)[0] - if "configure" in cmds: - cmds.pop(0) - - results = {} - results["proposed"] = proposed - results["existing"] = existing - results["updates"] = cmds - results["changed"] = changed - results["warnings"] = warnings - results["end_state"] = end_state - results["peer_server_list"] = peer_server_list - - module.exit_json(**results) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_auth.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_auth.py deleted file mode 100644 index 3e5643812..000000000 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_auth.py +++ /dev/null @@ -1,336 +0,0 @@ -#!/usr/bin/python -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - - -DOCUMENTATION = """ -module: nxos_ntp_auth -extends_documentation_fragment: -- cisco.nxos.nxos -short_description: Manages NTP authentication. -description: -- Manages NTP authentication. -version_added: 1.0.0 -deprecated: - alternative: nxos_ntp_global - why: Updated module released with more functionality. - removed_at_date: '2024-01-01' -author: -- Jason Edelman (@jedelman8) -notes: -- Tested against NXOSv 7.3.(0)D1(1) on VIRL -- Limited Support for Cisco MDS -- If C(state=absent), the module will remove the given key configuration if it exists. -- If C(state=absent) and C(authentication=on), authentication will be turned off. -options: - key_id: - description: - - Authentication key identifier (numeric). - type: str - md5string: - description: - - MD5 String. - type: str - auth_type: - description: - - Whether the given md5string is in cleartext or has been encrypted. If in cleartext, - the device will encrypt it before storing it. - default: text - choices: - - text - - encrypt - type: str - trusted_key: - description: - - Whether the given key is required to be supplied by a time source for the device - to synchronize to the time source. - choices: - - 'false' - - 'true' - default: 'false' - type: str - authentication: - description: - - Turns NTP authentication on or off. - choices: - - "on" - - "off" - type: str - state: - description: - - Manage the state of the resource. - default: present - choices: - - present - - absent - type: str -""" - -EXAMPLES = """ -# Basic NTP authentication configuration -- cisco.nxos.nxos_ntp_auth: - key_id: 32 - md5string: hello - auth_type: text -""" - -RETURN = """ -commands: - description: command sent to the device - returned: always - type: list - sample: ["ntp authentication-key 32 md5 helloWorld 0", "ntp trusted-key 32"] -""" - - -import re - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.cisco.nxos.plugins.module_utils.network.nxos.nxos import ( - load_config, - run_commands, -) - - -def execute_show_command(command, module): - if "show run" not in command: - command = {"command": command, "output": "json"} - else: - command = {"command": command, "output": "text"} - - return run_commands(module, [command]) - - -def flatten_list(command_lists): - flat_command_list = [] - for command in command_lists: - if isinstance(command, list): - flat_command_list.extend(command) - else: - flat_command_list.append(command) - return flat_command_list - - -def get_ntp_auth(module): - command = "show ntp authentication-status" - - body = execute_show_command(command, module)[0] - ntp_auth_str = body["authentication"] - - if "enabled" in ntp_auth_str: - ntp_auth = True - else: - ntp_auth = False - - return ntp_auth - - -def get_ntp_trusted_key(module): - trusted_key_list = [] - command = "show run | inc ntp.trusted-key" - - trusted_key_str = execute_show_command(command, module)[0] - if trusted_key_str: - trusted_keys = trusted_key_str.splitlines() - - else: - trusted_keys = [] - - for line in trusted_keys: - if line: - trusted_key_list.append(str(line.split()[2])) - - return trusted_key_list - - -def get_ntp_auth_key(key_id, module): - authentication_key = {} - command = "show run | inc ntp.authentication-key.{0}".format(key_id) - auth_regex = ( - r".*ntp\sauthentication-key\s(?P\d+)\smd5\s(?P\S+)\s(?P\S+).*" - ) - - body = execute_show_command(command, module)[0] - - try: - match_authentication = re.match(auth_regex, body, re.DOTALL) - group_authentication = match_authentication.groupdict() - authentication_key["key_id"] = group_authentication["key_id"] - authentication_key["md5string"] = group_authentication["md5string"] - if group_authentication["atype"] == "7": - authentication_key["auth_type"] = "encrypt" - else: - authentication_key["auth_type"] = "text" - except (AttributeError, TypeError): - authentication_key = {} - - return authentication_key - - -def get_ntp_auth_info(key_id, module): - auth_info = get_ntp_auth_key(key_id, module) - trusted_key_list = get_ntp_trusted_key(module) - auth_power = get_ntp_auth(module) - - if key_id in trusted_key_list: - auth_info["trusted_key"] = "true" - else: - auth_info["trusted_key"] = "false" - - if auth_power: - auth_info["authentication"] = "on" - else: - auth_info["authentication"] = "off" - - return auth_info - - -def auth_type_to_num(auth_type): - if auth_type == "encrypt": - return "7" - else: - return "0" - - -def set_ntp_auth_key(key_id, md5string, auth_type, trusted_key, authentication): - ntp_auth_cmds = [] - if key_id and md5string: - auth_type_num = auth_type_to_num(auth_type) - ntp_auth_cmds.append( - "ntp authentication-key {0} md5 {1} {2}".format(key_id, md5string, auth_type_num), - ) - - if trusted_key == "true": - ntp_auth_cmds.append("ntp trusted-key {0}".format(key_id)) - elif trusted_key == "false": - ntp_auth_cmds.append("no ntp trusted-key {0}".format(key_id)) - - if authentication == "on": - ntp_auth_cmds.append("ntp authenticate") - elif authentication == "off": - ntp_auth_cmds.append("no ntp authenticate") - - return ntp_auth_cmds - - -def remove_ntp_auth_key(key_id, md5string, auth_type, trusted_key, authentication): - auth_remove_cmds = [] - if key_id: - auth_type_num = auth_type_to_num(auth_type) - auth_remove_cmds.append( - "no ntp authentication-key {0} md5 {1} {2}".format(key_id, md5string, auth_type_num), - ) - - if authentication: - auth_remove_cmds.append("no ntp authenticate") - return auth_remove_cmds - - -def main(): - argument_spec = dict( - key_id=dict(type="str"), - md5string=dict(type="str"), - auth_type=dict(choices=["text", "encrypt"], default="text"), - trusted_key=dict(choices=["true", "false"], default="false"), - authentication=dict(choices=["on", "off"]), - state=dict(choices=["absent", "present"], default="present"), - ) - - module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) - - warnings = list() - - key_id = module.params["key_id"] - md5string = module.params["md5string"] - auth_type = module.params["auth_type"] - trusted_key = module.params["trusted_key"] - authentication = module.params["authentication"] - state = module.params["state"] - - if key_id: - if not trusted_key and not md5string: - module.fail_json(msg="trusted_key or md5string MUST be specified") - - args = dict( - key_id=key_id, - md5string=md5string, - auth_type=auth_type, - trusted_key=trusted_key, - authentication=authentication, - ) - - changed = False - proposed = dict((k, v) for k, v in args.items() if v is not None) - - existing = get_ntp_auth_info(key_id, module) - end_state = existing - - delta = dict(set(proposed.items()).difference(existing.items())) - - commands = [] - if state == "present": - if delta: - command = set_ntp_auth_key( - key_id, - md5string, - delta.get("auth_type"), - delta.get("trusted_key"), - delta.get("authentication"), - ) - if command: - commands.append(command) - elif state == "absent": - auth_toggle = None - if existing.get("authentication") == "on": - auth_toggle = True - if not existing.get("key_id"): - key_id = None - command = remove_ntp_auth_key(key_id, md5string, auth_type, trusted_key, auth_toggle) - if command: - commands.append(command) - - cmds = flatten_list(commands) - if cmds: - if module.check_mode: - module.exit_json(changed=True, commands=cmds) - else: - load_config(module, cmds) - end_state = get_ntp_auth_info(key_id, module) - delta = dict(set(end_state.items()).difference(existing.items())) - if delta or (len(existing) != len(end_state)): - changed = True - if "configure" in cmds: - cmds.pop(0) - - results = {} - results["proposed"] = proposed - results["existing"] = existing - results["updates"] = cmds - results["changed"] = changed - results["warnings"] = warnings - results["end_state"] = end_state - - module.exit_json(**results) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_global.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_global.py index e99fbef83..18cd851c9 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_global.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_global.py @@ -241,7 +241,7 @@ EXAMPLES = """ - access_list: PeerAcl1 serve: - access_list: ServeAcl1 - authenticate: True + authenticate: true authentication_keys: - id: 1001 key: vagwwtKfkv @@ -249,7 +249,7 @@ EXAMPLES = """ - id: 1002 key: vagwwtKfkvgthz encryption: 7 - logging: True + logging: true master: stratum: 2 peers: @@ -260,7 +260,7 @@ EXAMPLES = """ vrf: default - peer: 192.0.2.2 key_id: 2 - prefer: True + prefer: true vrf: siteA servers: - server: 198.51.100.1 @@ -293,7 +293,7 @@ EXAMPLES = """ # - access_list: PeerAcl1 # serve: # - access_list: ServeAcl1 -# authenticate: True +# authenticate: true # authentication_keys: # - id: 1001 # key: vagwwtKfkv @@ -301,7 +301,7 @@ EXAMPLES = """ # - id: 1002 # key: vagwwtKfkvgthz # encryption: 7 -# logging: True +# logging: true # master: # stratum: 2 # peers: @@ -312,7 +312,7 @@ EXAMPLES = """ # vrf: default # - peer: 192.0.2.2 # key_id: 2 -# prefer: True +# prefer: true # vrf: siteA # servers: # - server: 198.51.100.1 @@ -362,7 +362,7 @@ EXAMPLES = """ - access_list: PeerAcl2 serve: - access_list: ServeAcl2 - logging: True + logging: true master: stratum: 2 peers: @@ -373,7 +373,7 @@ EXAMPLES = """ vrf: default - peer: 192.0.2.5 key_id: 2 - prefer: True + prefer: true vrf: siteA servers: - server: 198.51.100.1 @@ -389,7 +389,7 @@ EXAMPLES = """ # - access_list: PeerAcl1 # serve: # - access_list: ServeAcl1 -# authenticate: True +# authenticate: true # authentication_keys: # - id: 1001 # key: vagwwtKfkv @@ -397,7 +397,7 @@ EXAMPLES = """ # - id: 1002 # key: vagwwtKfkvgthz # encryption: 7 -# logging: True +# logging: true # master: # stratum: 2 # peers: @@ -408,7 +408,7 @@ EXAMPLES = """ # vrf: default # - peer: 192.0.2.2 # key_id: 2 -# prefer: True +# prefer: true # vrf: siteA # servers: # - server: 198.51.100.1 @@ -436,7 +436,7 @@ EXAMPLES = """ # - access_list: PeerAcl2 # serve: # - access_list: ServeAcl2 -# logging: True +# logging: true # master: # stratum: 2 # peers: @@ -447,7 +447,7 @@ EXAMPLES = """ # vrf: default # - peer: 192.0.2.5 # key_id: 2 -# prefer: True +# prefer: true # vrf: siteA # servers: # - server: 198.51.100.1 @@ -483,7 +483,7 @@ EXAMPLES = """ # - access_list: PeerAcl1 # serve: # - access_list: ServeAcl1 -# authenticate: True +# authenticate: true # authentication_keys: # - id: 1001 # key: vagwwtKfkv @@ -491,7 +491,7 @@ EXAMPLES = """ # - id: 1002 # key: vagwwtKfkvgthz # encryption: 7 -# logging: True +# logging: true # master: # stratum: 2 # peers: @@ -502,7 +502,7 @@ EXAMPLES = """ # vrf: default # - peer: 192.0.2.2 # key_id: 2 -# prefer: True +# prefer: true # vrf: siteA # servers: # - server: 198.51.100.1 @@ -542,7 +542,7 @@ EXAMPLES = """ - access_list: PeerAcl1 serve: - access_list: ServeAcl1 - authenticate: True + authenticate: true authentication_keys: - id: 1001 key: vagwwtKfkv @@ -550,7 +550,7 @@ EXAMPLES = """ - id: 1002 key: vagwwtKfkvgthz encryption: 7 - logging: True + logging: true master: stratum: 2 peers: @@ -561,7 +561,7 @@ EXAMPLES = """ vrf: default - peer: 192.0.2.2 key_id: 2 - prefer: True + prefer: true vrf: siteA servers: - server: 198.51.100.1 @@ -616,7 +616,7 @@ EXAMPLES = """ # - access_list: PeerAcl1 # serve: # - access_list: ServeAcl1 -# authenticate: True +# authenticate: true # authentication_keys: # - id: 1001 # key: vagwwtKfkv @@ -624,7 +624,7 @@ EXAMPLES = """ # - id: 1002 # key: vagwwtKfkvgthz # encryption: 7 -# logging: True +# logging: true # master: # stratum: 2 # peers: @@ -635,7 +635,7 @@ EXAMPLES = """ # vrf: default # - peer: 192.0.2.2 # key_id: 2 -# prefer: True +# prefer: true # vrf: siteA # servers: # - server: 198.51.100.1 diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_options.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_options.py deleted file mode 100644 index 28fd1aac6..000000000 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_ntp_options.py +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/python -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - - -DOCUMENTATION = """ -module: nxos_ntp_options -extends_documentation_fragment: -- cisco.nxos.nxos -short_description: Manages NTP options. -description: -- Manages NTP options, e.g. authoritative server and logging. -version_added: 1.0.0 -deprecated: - alternative: nxos_ntp_global - why: Updated module released with more functionality. - removed_at_date: '2024-01-01' -author: -- Jason Edelman (@jedelman8) -notes: -- Tested against NXOSv 7.3.(0)D1(1) on VIRL -- Limited Support for Cisco MDS -- When C(state=absent), master and logging will be set to False and stratum will be - removed as well -options: - master: - description: - - Sets whether the device is an authoritative NTP server. - type: bool - stratum: - description: - - If C(master=true), an optional stratum can be supplied (1-15). The device default - is 8. - type: str - logging: - description: - - Sets whether NTP logging is enabled on the device. - type: bool - state: - description: - - Manage the state of the resource. - default: present - choices: - - present - - absent - type: str -""" -EXAMPLES = """ -# Basic NTP options configuration -- cisco.nxos.nxos_ntp_options: - master: true - stratum: 12 - logging: false - host: '{{ inventory_hostname }}' - username: '{{ un }}' - password: '{{ pwd }}' -""" - -RETURN = """ -updates: - description: command sent to the device - returned: always - type: list - sample: ["no ntp logging", "ntp master 12"] -""" -import re - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.cisco.nxos.plugins.module_utils.network.nxos.nxos import ( - load_config, - run_commands, -) - - -def get_current(module): - cmd = "show running-config | inc ntp" - - master = False - logging = False - stratum = None - - output = run_commands(module, ({"command": cmd, "output": "text"}))[0] - - if output: - match = re.search(r"^ntp master(?: (\d+))", output, re.M) - if match: - master = True - stratum = match.group(1) - logging = "ntp logging" in output.lower() - - return {"master": master, "stratum": stratum, "logging": logging} - - -def main(): - argument_spec = dict( - master=dict(required=False, type="bool"), - stratum=dict(required=False, type="str"), - logging=dict(required=False, type="bool"), - state=dict(choices=["absent", "present"], default="present"), - ) - - module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) - - warnings = list() - - master = module.params["master"] - stratum = module.params["stratum"] - logging = module.params["logging"] - state = module.params["state"] - - if stratum and master is False: - if stratum != 8: - module.fail_json(msg="master MUST be True when stratum is changed") - - current = get_current(module) - - result = {"changed": False} - - commands = list() - - if state == "absent": - if current["master"]: - commands.append("no ntp master") - if current["logging"]: - commands.append("no ntp logging") - - elif state == "present": - if master and not current["master"]: - commands.append("ntp master") - elif master is False and current["master"]: - commands.append("no ntp master") - if stratum and stratum != current["stratum"]: - commands.append("ntp master %s" % stratum) - - if logging and not current["logging"]: - commands.append("ntp logging") - elif logging is False and current["logging"]: - commands.append("no ntp logging") - - result["commands"] = commands - result["updates"] = commands - - if commands: - if not module.check_mode: - load_config(module, commands) - result["changed"] = True - - result["warnings"] = warnings - - module.exit_json(**result) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_ospf_interfaces.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_ospf_interfaces.py index 81c4ad45b..7ed26117a 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_ospf_interfaces.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_ospf_interfaces.py @@ -41,7 +41,7 @@ options: description: - Name/Identifier of the interface. type: str - required: True + required: true address_family: description: - OSPF settings on the interfaces in address-family context. @@ -53,7 +53,7 @@ options: - Address Family Identifier (AFI) for OSPF settings on the interfaces. type: str choices: ['ipv4', 'ipv6'] - required: True + required: true processes: description: - Interfaces configuration for an OSPF process. @@ -64,7 +64,7 @@ options: description: - OSPF process tag. type: str - required: True + required: true area: description: - Area associated with interface. @@ -74,7 +74,7 @@ options: description: - Area ID in IP address format. type: str - required: True + required: true secondaries: description: - Do not include secondary IPv4/IPv6 addresses. @@ -129,7 +129,7 @@ options: - Valid values are Cisco type 7 ENCRYPTED password, 3DES ENCRYPTED password and UNENCRYPTED (cleartext) password based on the value of encryption key. type: str - required: True + required: true message_digest_key: description: - Message digest authentication password (key) settings. @@ -139,7 +139,7 @@ options: description: - Key ID. type: int - required: True + required: true encryption: description: - 0 Specifies an UNENCRYPTED ospf password (key) will follow. @@ -152,7 +152,7 @@ options: - Valid values are Cisco type 7 ENCRYPTED password, 3DES ENCRYPTED password and UNENCRYPTED (cleartext) password based on the value of encryption key. type: str - required: True + required: true cost: description: - Cost associated with interface. @@ -236,46 +236,46 @@ EXAMPLES = """ config: - name: Ethernet1/1 address_family: - - afi: ipv4 - processes: - - process_id: "100" - area: - area_id: 1.1.1.1 - secondaries: False - multi_areas: - - 11.11.11.11 - - afi: ipv6 - processes: - - process_id: "200" - area: - area_id: 2.2.2.2 + - afi: ipv4 + processes: + - process_id: '100' + area: + area_id: 1.1.1.1 + secondaries: false multi_areas: - - 21.0.0.0 - - process_id: "300" + - 11.11.11.11 + - afi: ipv6 + processes: + - process_id: '200' + area: + area_id: 2.2.2.2 + multi_areas: + - 21.0.0.0 + - process_id: '300' + multi_areas: + - 50.50.50.50 multi_areas: - - 50.50.50.50 - multi_areas: - - 16.10.10.10 + - 16.10.10.10 - name: Ethernet1/2 address_family: - - afi: ipv4 - authentication: - enable: True - key_chain: test-1 - message_digest_key: - key_id: 10 - encryption: 3 - key: abc01d272be25d29 - cost: 100 - - afi: ipv6 - network: broadcast - shutdown: True + - afi: ipv4 + authentication: + enable: true + key_chain: test-1 + message_digest_key: + key_id: 10 + encryption: 3 + key: abc01d272be25d29 + cost: 100 + - afi: ipv6 + network: broadcast + shutdown: true - name: Ethernet1/3 address_family: - - afi: ipv4 - authentication_key: - encryption: 7 - key: 12090404011C03162E + - afi: ipv4 + authentication_key: + encryption: 7 + key: 12090404011C03162E state: merged # Task output: @@ -399,17 +399,17 @@ EXAMPLES = """ - name: Replace OSPF configurations of listed interfaces with provided configurations cisco.nxos.nxos_ospf_interfaces: config: - - name: Ethernet1/1 - address_family: - - afi: ipv4 - processes: - - process_id: "100" - area: - area_id: 1.1.1.1 - secondaries: False - multi_areas: - - 11.11.11.12 - - name: Ethernet1/3 + - name: Ethernet1/1 + address_family: + - afi: ipv4 + processes: + - process_id: "100" + area: + area_id: 1.1.1.1 + secondaries: false + multi_areas: + - 11.11.11.12 + - name: Ethernet1/3 state: replaced # Task output: @@ -543,16 +543,16 @@ EXAMPLES = """ - name: Override all OSPF interfaces configuration with provided configuration cisco.nxos.nxos_ospf_interfaces: config: - - name: Ethernet1/1 - address_family: - - afi: ipv4 - processes: - - process_id: "100" - area: - area_id: 1.1.1.1 - secondaries: False - multi_areas: - - 11.11.11.12 + - name: Ethernet1/1 + address_family: + - afi: ipv4 + processes: + - process_id: "100" + area: + area_id: 1.1.1.1 + secondaries: false + multi_areas: + - 11.11.11.12 state: overridden # Task output: @@ -861,53 +861,56 @@ EXAMPLES = """ # Using rendered -- name: Render platform specific configuration lines with state rendered (without connecting to the device) +- name: >- + Render platform specific configuration lines with state rendered (without + connecting to the device) cisco.nxos.nxos_ospf_interfaces: config: - name: Ethernet1/1 address_family: - - afi: ipv4 - processes: - - process_id: "100" - area: - area_id: 1.1.1.1 - secondaries: False - multi_areas: - - 11.11.11.11 - - afi: ipv6 - processes: - - process_id: "200" - area: - area_id: 2.2.2.2 + - afi: ipv4 + processes: + - process_id: '100' + area: + area_id: 1.1.1.1 + secondaries: false multi_areas: - - 21.0.0.0 - - process_id: "300" + - 11.11.11.11 + - afi: ipv6 + processes: + - process_id: '200' + area: + area_id: 2.2.2.2 + multi_areas: + - 21.0.0.0 + - process_id: '300' + multi_areas: + - 50.50.50.50 multi_areas: - - 50.50.50.50 - multi_areas: - - 16.10.10.10 + - 16.10.10.10 - name: Ethernet1/2 address_family: - - afi: ipv4 - authentication: - enable: True - key_chain: test-1 - message_digest_key: - key_id: 10 - encryption: 3 - key: abc01d272be25d29 - cost: 100 - - afi: ipv6 - network: broadcast - shutdown: True + - afi: ipv4 + authentication: + enable: true + key_chain: test-1 + message_digest_key: + key_id: 10 + encryption: 3 + key: abc01d272be25d29 + cost: 100 + - afi: ipv6 + network: broadcast + shutdown: true - name: Ethernet1/3 address_family: - - afi: ipv4 - authentication_key: - encryption: 7 - key: 12090404011C03162E + - afi: ipv4 + authentication_key: + encryption: 7 + key: 12090404011C03162E state: rendered + # Task Output: # ------------ # rendered: diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv2.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv2.py index be23724d2..1d127b707 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv2.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv2.py @@ -1018,56 +1018,56 @@ EXAMPLES = """ cisco.nxos.nxos_ospfv2: config: processes: - - process_id: 100 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_1 - direction: in - - route_map: rmap_2 - direction: out - ranges: - - prefix: 198.51.100.64/27 - not_advertise: true - - prefix: 198.51.100.96/27 - cost: 120 - - area_id: 0.0.0.101 - authentication: - message_digest: true - redistribute: - - protocol: eigrp - id: 120 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - redistribute: - - protocol: static - route_map: zone1-static-connect - summary_address: - - prefix: 198.51.100.128/27 - tag: 121 - - prefix: 198.51.100.160/27 + - process_id: 100 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: true - no_summary: true - - area_id: 0.0.0.103 - nssa: - no_summary: true - translate: - type7: - always: true - - vrf: zone2 - auto_cost: - reference_bandwidth: 45 - unit: Gbps + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_1 + direction: in + - route_map: rmap_2 + direction: out + ranges: + - prefix: 198.51.100.64/27 + not_advertise: true + - prefix: 198.51.100.96/27 + cost: 120 + - area_id: 0.0.0.101 + authentication: + message_digest: true + redistribute: + - protocol: eigrp + id: 120 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + redistribute: + - protocol: static + route_map: zone1-static-connect + summary_address: + - prefix: 198.51.100.128/27 + tag: 121 + - prefix: 198.51.100.160/27 + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true + - area_id: 0.0.0.103 + nssa: + no_summary: true + translate: + type7: + always: true + - vrf: zone2 + auto_cost: + reference_bandwidth: 45 + unit: Gbps state: merged # Task output: @@ -1199,43 +1199,46 @@ EXAMPLES = """ # vrf zone2 # auto-cost reference-bandwidth 45 Gbps -- name: Replace device configurations of listed OSPF processes with provided configurations +- name: >- + Replace device configurations of listed OSPF processes with provided + configurations cisco.nxos.nxos_ospfv2: config: processes: - - process_id: 102 - router_id: 198.51.100.1 - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_8 - direction: in - ranges: - - prefix: 198.51.100.64/27 - not_advertise: true - - area_id: 0.0.0.101 - stub: - no_summary: true - redistribute: - - protocol: eigrp - id: 130 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - redistribute: - - protocol: bgp - id: 65563 - route_map: zone1-bgp-connect + - process_id: 102 + router_id: 198.51.100.1 areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: true - no_summary: true + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_8 + direction: in + ranges: + - prefix: 198.51.100.64/27 + not_advertise: true + - area_id: 0.0.0.101 + stub: + no_summary: true + redistribute: + - protocol: eigrp + id: 130 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + redistribute: + - protocol: bgp + id: 65563 + route_map: zone1-bgp-connect + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true state: replaced + # Task output: # ------------ # before: @@ -1389,11 +1392,11 @@ EXAMPLES = """ cisco.nxos.nxos_ospfv2: config: processes: - - process_id: 104 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - shutdown: true + - process_id: 104 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 + shutdown: true state: overridden # Task output: @@ -1511,7 +1514,7 @@ EXAMPLES = """ cisco.nxos.nxos_ospfv2: config: processes: - - process_id: 102 + - process_id: 102 state: deleted # Task output: @@ -1674,62 +1677,65 @@ EXAMPLES = """ # Using rendered -- name: Render platform specific configuration lines (without connecting to the device) +- name: >- + Render platform specific configuration lines (without connecting to the + device) cisco.nxos.nxos_ospfv2: config: processes: - - process_id: 100 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_1 - direction: in - - route_map: rmap_2 - direction: out - ranges: - - prefix: 198.51.100.64/27 - not_advertise: true - - prefix: 198.51.100.96/27 - cost: 120 - - area_id: 0.0.0.101 - authentication: - message_digest: true - redistribute: - - protocol: eigrp - id: 120 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - redistribute: - - protocol: static - route_map: zone1-static-connect - summary_address: - - prefix: 198.51.100.128/27 - tag: 121 - - prefix: 198.51.100.160/27 + - process_id: 100 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: true - no_summary: true - - area_id: 0.0.0.103 - nssa: - no_summary: true - translate: - type7: - always: true - - vrf: zone2 - auto_cost: - reference_bandwidth: 45 - unit: Gbps + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_1 + direction: in + - route_map: rmap_2 + direction: out + ranges: + - prefix: 198.51.100.64/27 + not_advertise: true + - prefix: 198.51.100.96/27 + cost: 120 + - area_id: 0.0.0.101 + authentication: + message_digest: true + redistribute: + - protocol: eigrp + id: 120 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + redistribute: + - protocol: static + route_map: zone1-static-connect + summary_address: + - prefix: 198.51.100.128/27 + tag: 121 + - prefix: 198.51.100.160/27 + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true + - area_id: 0.0.0.103 + nssa: + no_summary: true + translate: + type7: + always: true + - vrf: zone2 + auto_cost: + reference_bandwidth: 45 + unit: Gbps state: rendered + # Task output: # ------------ # rendered: diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv3.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv3.py index 357afda11..226de291b 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv3.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_ospfv3.py @@ -87,7 +87,7 @@ options: description: - The Area ID in IP Address format. type: str - required: True + required: true default_cost: description: - Specify the default cost. @@ -102,13 +102,13 @@ options: description: - The Route-map name. type: str - required: True + required: true direction: description: - The direction to apply the route map. type: str choices: [in, out] - required: True + required: true ranges: description: - Configure an address range for the area. @@ -119,7 +119,7 @@ options: description: - IP in Prefix format (x.x.x.x/len) type: str - required: True + required: true cost: description: - Cost to use for the range. @@ -169,7 +169,7 @@ options: - The name of the protocol. type: str choices: [bgp, direct, eigrp, isis, lisp, ospfv3, rip, static] - required: True + required: true id: description: - The identifier for the protocol specified. @@ -178,7 +178,7 @@ options: description: - The route map policy to constrain redistribution. type: str - required: True + required: true summary_address: description: - Configure route summarization for redistribution. @@ -189,7 +189,7 @@ options: description: - IPv6 prefix format 'xxxx:xxxx/ml', 'xxxx:xxxx::/ml' or 'xxxx::xx/128' type: str - required: True + required: true not_advertise: description: - Suppress advertising the specified summary. @@ -208,7 +208,7 @@ options: description: - The Route Map name. type: str - required: True + required: true filter: description: - Block the OSPF routes from being sent to RIB. @@ -250,7 +250,7 @@ options: description: - The Area ID in IP Address format. type: str - required: True + required: true nssa: description: - NSSA settings for the area. @@ -320,12 +320,12 @@ options: description: - Reference bandwidth used to assign OSPF cost. type: int - required: True + required: true unit: description: - Specify in which unit the reference bandwidth is specified. type: str - required: True + required: true choices: [Gbps, Mbps] flush_routes: description: @@ -378,7 +378,7 @@ options: description: - Set the maximum number of non self-generated LSAs. type: int - required: True + required: true threshold: description: - Threshold value (%) at which to generate a warning message. @@ -477,7 +477,7 @@ options: description: - The OSPF process tag. type: str - required: True + required: true router_id: description: - Set OSPF process router-id. @@ -537,7 +537,7 @@ options: description: - The Area ID in IP Address format. type: str - required: True + required: true nssa: description: - NSSA settings for the area. @@ -607,12 +607,12 @@ options: description: - Reference bandwidth used to assign OSPF cost. type: int - required: True + required: true unit: description: - Specify in which unit the reference bandwidth is specified. type: str - required: True + required: true choices: [Gbps, Mbps] graceful_restart: description: @@ -657,7 +657,7 @@ options: description: - Set the maximum number of non self-generated LSAs. type: int - required: True + required: true threshold: description: - Threshold value (%) at which to generate a warning message. @@ -799,7 +799,7 @@ options: description: - Name/Identifier of the VRF. type: str - required: True + required: true state: description: - The state the configuration should be left in. @@ -826,49 +826,49 @@ EXAMPLES = """ cisco.nxos.nxos_ospfv3: config: processes: - - process_id: 100 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - address_family: - afi: ipv6 - safi: unicast - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_1 - direction: in - - route_map: rmap_2 - direction: out - ranges: - - prefix: 2001:db2::/32 - not_advertise: true - - prefix: 2001:db3::/32 - cost: 120 - redistribute: - - protocol: eigrp - id: 120 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: true - no_summary: true - - area_id: 0.0.0.103 - nssa: - no_summary: true - translate: - type7: - always: true - - vrf: zone2 - auto_cost: - reference_bandwidth: 45 - unit: Gbps + - process_id: 100 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 + address_family: + afi: ipv6 + safi: unicast + areas: + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_1 + direction: in + - route_map: rmap_2 + direction: out + ranges: + - prefix: '2001:db2::/32' + not_advertise: true + - prefix: '2001:db3::/32' + cost: 120 + redistribute: + - protocol: eigrp + id: 120 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true + - area_id: 0.0.0.103 + nssa: + no_summary: true + translate: + type7: + always: true + - vrf: zone2 + auto_cost: + reference_bandwidth: 45 + unit: Gbps state: merged # Task output: @@ -992,33 +992,33 @@ EXAMPLES = """ cisco.nxos.nxos_ospfv3: config: processes: - - process_id: 102 - router_id: 198.51.100.1 - address_family: - afi: ipv6 - safi: unicast - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_8 - direction: in - ranges: - - not_advertise: true - prefix: 2001:db2::/32 - redistribute: - - protocol: eigrp - id: 130 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: True - no_summary: True + - process_id: 102 + router_id: 198.51.100.1 + address_family: + afi: ipv6 + safi: unicast + areas: + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_8 + direction: in + ranges: + - not_advertise: true + prefix: 2001:db2::/32 + redistribute: + - protocol: eigrp + id: 130 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true state: replaced # Task output: @@ -1158,11 +1158,11 @@ EXAMPLES = """ cisco.nxos.nxos_ospfv3: config: processes: - - process_id: 104 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - shutdown: true + - process_id: 104 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 + shutdown: true state: overridden # Task output: @@ -1278,7 +1278,7 @@ EXAMPLES = """ cisco.nxos.nxos_ospfv3: config: processes: - - process_id: 102 + - process_id: 102 state: deleted # Task output: @@ -1330,7 +1330,7 @@ EXAMPLES = """ # vrf: zone2 # # commands: -# - no router ospfv3 102 +# - no router ospfv3 102 # # after: # processes: @@ -1436,49 +1436,49 @@ EXAMPLES = """ cisco.nxos.nxos_ospfv3: config: processes: - - process_id: 100 - router_id: 203.0.113.20 - - process_id: 102 - router_id: 198.51.100.1 - address_family: - afi: ipv6 - safi: unicast - areas: - - area_id: 0.0.0.100 - filter_list: - - route_map: rmap_1 - direction: in - - route_map: rmap_2 - direction: out - ranges: - - prefix: 2001:db2::/32 - not_advertise: true - - prefix: 2001:db3::/32 - cost: 120 - redistribute: - - protocol: eigrp - id: 120 - route_map: rmap_1 - - protocol: direct - route_map: ospf102-direct-connect - vrfs: - - vrf: zone1 - router_id: 198.51.100.129 - areas: - - area_id: 0.0.0.102 - nssa: - default_information_originate: true - no_summary: true - - area_id: 0.0.0.103 - nssa: - no_summary: true - translate: - type7: - always: true - - vrf: zone2 - auto_cost: - reference_bandwidth: 45 - unit: Gbps + - process_id: 100 + router_id: 203.0.113.20 + - process_id: 102 + router_id: 198.51.100.1 + address_family: + afi: ipv6 + safi: unicast + areas: + - area_id: 0.0.0.100 + filter_list: + - route_map: rmap_1 + direction: in + - route_map: rmap_2 + direction: out + ranges: + - prefix: 2001:db2::/32 + not_advertise: true + - prefix: 2001:db3::/32 + cost: 120 + redistribute: + - protocol: eigrp + id: 120 + route_map: rmap_1 + - protocol: direct + route_map: ospf102-direct-connect + vrfs: + - vrf: zone1 + router_id: 198.51.100.129 + areas: + - area_id: 0.0.0.102 + nssa: + default_information_originate: true + no_summary: true + - area_id: 0.0.0.103 + nssa: + no_summary: true + translate: + type7: + always: true + - vrf: zone2 + auto_cost: + reference_bandwidth: 45 + unit: Gbps state: rendered # Task output: @@ -1571,7 +1571,7 @@ EXAMPLES = """ # router_id: 192.0.100.2 # - process_id: "102" # router_id: 198.54.100.1 -# shutdown: True +# shutdown: true # Using gathered diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_route_maps.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_route_maps.py index bcf7076f0..bf57dcb7a 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_route_maps.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_route_maps.py @@ -573,44 +573,44 @@ EXAMPLES = """ - route_map: rmap3 entries: - - sequence: 10 - description: "*** first stanza ***" - action: permit - set: - ip: - next_hop: - verify_availability: - - address: 3.3.3.3 - track: 1 - - address: 4.4.4.4 - track: 3 + - sequence: 10 + description: "*** first stanza ***" + action: permit + set: + ip: + next_hop: + verify_availability: + - address: 3.3.3.3 + track: 1 + - address: 4.4.4.4 + track: 3 - - sequence: 20 - description: "*** second stanza ***" - action: permit - set: - ip: - next_hop: - address: 6.6.6.6 2.2.2.2 - load_share: true - drop_on_fail: true + - sequence: 20 + description: "*** second stanza ***" + action: permit + set: + ip: + next_hop: + address: 6.6.6.6 2.2.2.2 + load_share: true + drop_on_fail: true - - sequence: 30 - description: "*** third stanza ***" - action: permit - set: - ip: - next_hop: - peer_address: true + - sequence: 30 + description: "*** third stanza ***" + action: permit + set: + ip: + next_hop: + peer_address: true - - sequence: 40 - description: "*** fourth stanza ***" - action: permit - set: - ip: - next_hop: - unchanged: true - redist_unchanged: true + - sequence: 40 + description: "*** fourth stanza ***" + action: permit + set: + ip: + next_hop: + unchanged: true + redist_unchanged: true state: merged # Task output @@ -875,35 +875,35 @@ EXAMPLES = """ - AllowPrefix1 set: community: - local_as: True + local_as: true - route_map: rmap3 entries: - - sequence: 10 - description: "*** first stanza ***" - action: permit - set: - ip: - next_hop: - verify_availability: - - address: 3.3.3.3 - track: 1 - - sequence: 20 - description: "*** second stanza ***" - action: permit - set: - ip: - next_hop: - peer_address: true - - sequence: 30 - description: "*** third stanza ***" - action: permit - set: - ip: - next_hop: - address: 6.6.6.6 2.2.2.2 - load_share: true - drop_on_fail: true + - sequence: 10 + description: "*** first stanza ***" + action: permit + set: + ip: + next_hop: + verify_availability: + - address: 3.3.3.3 + track: 1 + - sequence: 20 + description: "*** second stanza ***" + action: permit + set: + ip: + next_hop: + peer_address: true + - sequence: 30 + description: "*** third stanza ***" + action: permit + set: + ip: + next_hop: + address: 6.6.6.6 2.2.2.2 + load_share: true + drop_on_fail: true state: replaced # Task output @@ -1062,7 +1062,7 @@ EXAMPLES = """ # - AllowPrefix1 # set: # community: -# local_as: True +# local_as: true # # - route_map: rmap2 # entries: @@ -1210,7 +1210,7 @@ EXAMPLES = """ - AllowPrefix1 set: community: - local_as: True + local_as: true state: overridden # Task output @@ -1321,7 +1321,7 @@ EXAMPLES = """ # - AllowPrefix1 # set: # community: -# local_as: True +# local_as: true # # After state: # ------------ diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_snmp_server.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_snmp_server.py index 7354dc1ee..d31dbc72c 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_snmp_server.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_snmp_server.py @@ -727,18 +727,18 @@ EXAMPLES = """ location: serverroom-1 traps: aaa: - server_state_change: True + server_state_change: true system: - clock_change_notification: True + clock_change_notification: true hosts: - host: 192.0.2.1 - traps: True + traps: true version: '1' community: public - host: 192.0.2.1 source_interface: Ethernet1/1 - host: 192.0.2.2 - informs: True + informs: true version: '3' auth: NMS users: @@ -748,16 +748,16 @@ EXAMPLES = """ authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true - user: snmp_user_2 group: network-operator authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true priv: privacy_password: '0x5632724fb8ac3699296af26281e1d0f1' - aes_128: True + aes_128: true use_acls: - user: snmp_user_1 ipv4: acl1 @@ -776,7 +776,7 @@ EXAMPLES = """ # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" -# localized_key: True +# localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" # @@ -808,9 +808,9 @@ EXAMPLES = """ # location: serverroom-1 # traps: # aaa: -# server_state_change: True +# server_state_change: true # system: -# clock_change_notification: True +# clock_change_notification: true # hosts: # - host: 192.0.2.1 # traps: true @@ -831,7 +831,7 @@ EXAMPLES = """ # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" -# localized_key: True +# localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" # @@ -840,7 +840,7 @@ EXAMPLES = """ # authentication: # algorithm: md5 # password: "0x5632724fb8ac3699296af26281e1d0f1" -# localized_key: True +# localized_key: true # # - authentication: # algorithm: md5 @@ -914,16 +914,16 @@ EXAMPLES = """ location: serverroom-2 traps: aaa: - server_state_change: True + server_state_change: true hosts: - host: 192.0.2.1 - traps: True + traps: true version: '1' community: public - host: 192.0.2.1 source_interface: Ethernet1/1 - host: 192.0.3.2 - informs: True + informs: true version: '3' auth: NMS users: @@ -933,7 +933,7 @@ EXAMPLES = """ authentication: algorithm: md5 password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" - localized_key: True + localized_key: true priv: privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" @@ -942,17 +942,17 @@ EXAMPLES = """ authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true - user: snmp_user_2 group: network-operator authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true priv: privacy_password: '0x5632724fb8ac3699296af26281e1d0f1' - aes_128: True + aes_128: true use_acls: - user: snmp_user_1 ipv4: acl1 @@ -973,9 +973,9 @@ EXAMPLES = """ # location: serverroom-1 # traps: # aaa: -# server_state_change: True +# server_state_change: true # system: -# clock_change_notification: True +# clock_change_notification: true # hosts: # - host: 192.0.2.1 # traps: true @@ -996,7 +996,7 @@ EXAMPLES = """ # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" -# localized_key: True +# localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" # @@ -1005,7 +1005,7 @@ EXAMPLES = """ # authentication: # algorithm: md5 # password: "0x5632724fb8ac3699296af26281e1d0f1" -# localized_key: True +# localized_key: true # # - authentication: # algorithm: md5 @@ -1047,16 +1047,16 @@ EXAMPLES = """ # location: serverroom-2 # traps: # aaa: -# server_state_change: True +# server_state_change: true # hosts: # - host: 192.0.2.1 -# traps: True +# traps: true # version: '1' # community: public # - host: 192.0.2.1 # source_interface: Ethernet1/1 # - host: 192.0.3.2 -# informs: True +# informs: true # version: '3' # auth: NMS # users: @@ -1066,7 +1066,7 @@ EXAMPLES = """ # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" -# localized_key: True +# localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" # @@ -1075,17 +1075,17 @@ EXAMPLES = """ # authentication: # algorithm: md5 # password: '0x5632724fb8ac3699296af26281e1d0f1' -# localized_key: True +# localized_key: true # # - user: snmp_user_2 # group: network-operator # authentication: # algorithm: md5 # password: '0x5632724fb8ac3699296af26281e1d0f1' -# localized_key: True +# localized_key: true # priv: # privacy_password: '0x5632724fb8ac3699296af26281e1d0f1' -# aes_128: True +# aes_128: true # # use_acls: # - user: snmp_user_1 @@ -1151,9 +1151,9 @@ EXAMPLES = """ # location: serverroom-1 # traps: # aaa: -# server_state_change: True +# server_state_change: true # system: -# clock_change_notification: True +# clock_change_notification: true # hosts: # - host: 192.0.2.1 # traps: true @@ -1174,7 +1174,7 @@ EXAMPLES = """ # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" -# localized_key: True +# localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" # @@ -1183,7 +1183,7 @@ EXAMPLES = """ # authentication: # algorithm: md5 # password: "0x5632724fb8ac3699296af26281e1d0f1" -# localized_key: True +# localized_key: true # # - authentication: # algorithm: md5 @@ -1228,7 +1228,7 @@ EXAMPLES = """ # authentication: # algorithm: md5 # password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" -# localized_key: True +# localized_key: true # priv: # privacy_password: "0xcbde46b02c46e0bcd3ac5af6a8b13da9" @@ -1254,18 +1254,18 @@ EXAMPLES = """ location: serverroom-1 traps: aaa: - server_state_change: True + server_state_change: true system: - clock_change_notification: True + clock_change_notification: true hosts: - host: 192.0.2.1 - traps: True + traps: true version: '1' community: public - host: 192.0.2.1 source_interface: Ethernet1/1 - host: 192.0.2.2 - informs: True + informs: true version: '3' auth: NMS users: @@ -1275,16 +1275,16 @@ EXAMPLES = """ authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true - user: snmp_user_2 group: network-operator authentication: algorithm: md5 password: '0x5632724fb8ac3699296af26281e1d0f1' - localized_key: True + localized_key: true priv: privacy_password: '0x5632724fb8ac3699296af26281e1d0f1' - aes_128: True + aes_128: true use_acls: - user: snmp_user_1 ipv4: acl1 @@ -1351,9 +1351,9 @@ EXAMPLES = """ # location: serverroom-1 # traps: # aaa: -# server_state_change: True +# server_state_change: true # system: -# clock_change_notification: True +# clock_change_notification: true # hosts: # - host: 192.0.2.1 # traps: true @@ -1374,7 +1374,7 @@ EXAMPLES = """ # authentication: # algorithm: md5 # password: "0x5632724fb8ac3699296af26281e1d0f1" -# localized_key: True +# localized_key: true # # - authentication: # algorithm: md5 diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_static_routes.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_static_routes.py index a7fdf6713..679f5cdb4 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_static_routes.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_static_routes.py @@ -184,7 +184,7 @@ EXAMPLES = """ - name: Delete routes based on VRF cisco.nxos.nxos_static_routes: config: - - vrf: trial_vrf + - vrf: trial_vrf state: deleted # Task Output @@ -264,9 +264,9 @@ EXAMPLES = """ - name: Delete routes based on AFI in a VRF cisco.nxos.nxos_static_routes: config: - - vrf: trial_vrf - address_families: - - afi: ipv4 + - vrf: trial_vrf + address_families: + - afi: ipv4 state: deleted # Task Output @@ -348,28 +348,28 @@ EXAMPLES = """ - name: Merge new static route configuration cisco.nxos.nxos_static_routes: config: - - vrf: trial_vrf - address_families: - - afi: ipv4 - routes: - - dest: 192.0.2.64/24 - next_hops: - - forward_router_address: 192.0.2.22 - tag: 4 - admin_distance: 2 - - address_families: - - afi: ipv4 - routes: - - dest: 192.0.2.16/24 - next_hops: - - forward_router_address: 192.0.2.24 - route_name: new_route - - afi: ipv6 - routes: - - dest: 2001:db8::/64 - next_hops: - - interface: eth1/3 - forward_router_address: 2001:db8::12 + - vrf: trial_vrf + address_families: + - afi: ipv4 + routes: + - dest: 192.0.2.64/24 + next_hops: + - forward_router_address: 192.0.2.22 + tag: 4 + admin_distance: 2 + - address_families: + - afi: ipv4 + routes: + - dest: 192.0.2.16/24 + next_hops: + - forward_router_address: 192.0.2.24 + route_name: new_route + - afi: ipv6 + routes: + - dest: '2001:db8::/64' + next_hops: + - interface: eth1/3 + forward_router_address: '2001:db8::12' state: merged # Task Output @@ -431,19 +431,19 @@ EXAMPLES = """ - name: Overridden existing static route configuration with new configuration cisco.nxos.nxos_static_routes: config: - - vrf: trial_vrf - address_families: - - afi: ipv4 - routes: - - dest: 192.0.2.16/28 - next_hops: - - forward_router_address: 192.0.2.23 - route_name: overridden_route1 - admin_distance: 3 - - forward_router_address: 192.0.2.45 - route_name: overridden_route2 - dest_vrf: destinationVRF - interface: Ethernet1/2 + - vrf: trial_vrf + address_families: + - afi: ipv4 + routes: + - dest: 192.0.2.16/28 + next_hops: + - forward_router_address: 192.0.2.23 + route_name: overridden_route1 + admin_distance: 3 + - forward_router_address: 192.0.2.45 + route_name: overridden_route2 + dest_vrf: destinationVRF + interface: Ethernet1/2 state: overridden # Task Output @@ -520,18 +520,18 @@ EXAMPLES = """ - name: Replaced the existing static configuration of a prefix with new configuration cisco.nxos.nxos_static_routes: config: - - address_families: - - afi: ipv4 - routes: - - dest: 192.0.2.16/28 - next_hops: - - forward_router_address: 192.0.2.23 - route_name: replaced_route1 - admin_distance: 3 - - forward_router_address: 192.0.2.45 - route_name: replaced_route2 - dest_vrf: destinationVRF - interface: Ethernet1/2 + - address_families: + - afi: ipv4 + routes: + - dest: 192.0.2.16/28 + next_hops: + - forward_router_address: 192.0.2.23 + route_name: replaced_route1 + admin_distance: 3 + - forward_router_address: 192.0.2.45 + route_name: replaced_route2 + dest_vrf: destinationVRF + interface: Ethernet1/2 state: replaced # Task Output @@ -650,18 +650,18 @@ EXAMPLES = """ - name: Render required configuration to be pushed to the device cisco.nxos.nxos_static_routes: config: - - address_families: - - afi: ipv4 - routes: - - dest: 192.0.2.48/28 - next_hops: - - forward_router_address: 192.0.2.13 - - afi: ipv6 - routes: - - dest: 2001:db8::/64 - next_hops: - - interface: eth1/3 - forward_router_address: 2001:db8::12 + - address_families: + - afi: ipv4 + routes: + - dest: 192.0.2.48/28 + next_hops: + - forward_router_address: 192.0.2.13 + - afi: ipv6 + routes: + - dest: 2001:db8::/64 + next_hops: + - interface: eth1/3 + forward_router_address: 2001:db8::12 state: rendered # Task Output diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_system.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_system.py index df4bbde0d..dafbf9f1f 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_system.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_system.py @@ -98,14 +98,14 @@ EXAMPLES = """ - name: configure name servers cisco.nxos.nxos_system: name_servers: - - 8.8.8.8 - - 8.8.4.4 + - 8.8.8.8 + - 8.8.4.4 - name: configure name servers with VRF support cisco.nxos.nxos_system: name_servers: - - {server: 8.8.8.8, vrf: mgmt} - - {server: 8.8.4.4, vrf: mgmt} + - {server: 8.8.8.8, vrf: mgmt} + - {server: 8.8.4.4, vrf: mgmt} """ RETURN = """ diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_telemetry.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_telemetry.py index 7498ff880..89a58e2d2 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_telemetry.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_telemetry.py @@ -225,41 +225,41 @@ EXAMPLES = """ source_interface: Ethernet1/1 vrf: management destination_groups: - - id: 2 - destination: - ip: 192.168.0.2 - port: 50001 - protocol: gRPC - encoding: GPB - - id: 55 - destination: - ip: 192.168.0.55 - port: 60001 - protocol: gRPC - encoding: GPB + - id: 2 + destination: + ip: 192.168.0.2 + port: 50001 + protocol: gRPC + encoding: GPB + - id: 55 + destination: + ip: 192.168.0.55 + port: 60001 + protocol: gRPC + encoding: GPB sensor_groups: - - id: 1 - data_source: NX-API - path: - name: '"show lldp neighbors detail"' - depth: 0 - - id: 55 - data_source: DME - path: - name: sys/ch - depth: unbounded - filter_condition: ne(eqptFt.operSt,"ok") + - id: 1 + data_source: NX-API + path: + name: '"show lldp neighbors detail"' + depth: 0 + - id: 55 + data_source: DME + path: + name: sys/ch + depth: unbounded + filter_condition: ne(eqptFt.operSt,"ok") subscriptions: - - id: 5 - destination_group: 55 - sensor_group: - id: 1 - sample_interval: 1000 - - id: 6 - destination_group: 2 - sensor_group: - id: 55 - sample_interval: 2000 + - id: 5 + destination_group: 55 + sensor_group: + id: 1 + sample_interval: 1000 + - id: 6 + destination_group: 2 + sensor_group: + id: 55 + sample_interval: 2000 state: merged @@ -277,18 +277,16 @@ EXAMPLES = """ source_interface: Ethernet1/1 vrf: management destination_groups: - - id: 2 - destination: - ip: 192.168.0.2 - port: 50001 - protocol: gRPC - encoding: GPB + - id: 2 + destination: + ip: 192.168.0.2 + port: 50001 + protocol: gRPC + encoding: GPB subscriptions: - - id: 5 - destination_group: 55 + - id: 5 + destination_group: 55 state: replaced - - """ RETURN = """ before: diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_user.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_user.py index 2456c53ac..d3e847359 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_user.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_user.py @@ -170,8 +170,8 @@ EXAMPLES = """ - name: set multiple users role cisco.nxos.nxos_user: aggregate: - - name: netop - - name: netend + - name: netop + - name: netend role: network-operator state: present """ diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_vlans.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_vlans.py index cac276b64..4116f524b 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_vlans.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_vlans.py @@ -117,10 +117,10 @@ EXAMPLES = """ - name: Merge provided configuration with device configuration. cisco.nxos.nxos_vlans: config: - - vlan_id: 5 - name: test-vlan5 - - vlan_id: 10 - enabled: false + - vlan_id: 5 + name: test-vlan5 + - vlan_id: 10 + enabled: false state: merged # After state: @@ -147,11 +147,11 @@ EXAMPLES = """ - name: Replace device configuration of specified vlan with provided configuration. cisco.nxos.nxos_vlans: config: - - vlan_id: 5 - name: test-vlan - enabled: false - - vlan_id: 10 - enabled: false + - vlan_id: 5 + name: test-vlan + enabled: false + - vlan_id: 10 + enabled: false state: replaced # After state: @@ -182,10 +182,10 @@ EXAMPLES = """ - name: Override device configuration of all vlans with provided configuration. cisco.nxos.nxos_vlans: config: - - vlan_id: 5 - name: test-vlan - - vlan_id: 10 - state: active + - vlan_id: 5 + name: test-vlan + - vlan_id: 10 + state: active state: overridden # After state: @@ -210,8 +210,8 @@ EXAMPLES = """ - name: Delete vlans. cisco.nxos.nxos_vlans: config: - - vlan_id: 5 - - vlan_id: 10 + - vlan_id: 5 + - vlan_id: 10 state: deleted # After state: @@ -223,13 +223,13 @@ EXAMPLES = """ - name: Use rendered state to convert task input to device specific commands cisco.nxos.nxos_vlans: config: - - vlan_id: 5 - name: vlan5 - mapped_vni: 100 + - vlan_id: 5 + name: vlan5 + mapped_vni: 100 - - vlan_id: 6 - name: vlan6 - state: suspend + - vlan_id: 6 + name: vlan6 + state: suspend state: rendered # Task Output (redacted) diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_vrf.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_vrf.py index 6b81ba99a..6017d3c88 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_vrf.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_vrf.py @@ -169,48 +169,48 @@ EXAMPLES = """ name: ntc description: testing state: present - - name: Aggregate definition of VRFs cisco.nxos.nxos_vrf: aggregate: - - {name: test1, description: Testing, admin_state: down} - - {name: test2, interfaces: Ethernet1/2} - + - name: test1 + description: Testing + admin_state: down + - name: test2 + interfaces: Ethernet1/2 - name: Aggregate definitions of VRFs with Purge cisco.nxos.nxos_vrf: aggregate: - - {name: ntc1, description: purge test1} - - {name: ntc2, description: purge test2} + - name: ntc1 + description: purge test1 + - name: ntc2 + description: purge test2 state: present purge: true - - name: Delete VRFs exist on switch cisco.nxos.nxos_vrf: aggregate: - - {name: ntc1} - - {name: ntc2} + - name: ntc1 + - name: ntc2 state: absent - - name: Assign interfaces to VRF declaratively cisco.nxos.nxos_vrf: name: test1 interfaces: - - Ethernet2/3 - - Ethernet2/5 - + - Ethernet2/3 + - Ethernet2/5 - name: Check interfaces assigned to VRF cisco.nxos.nxos_vrf: name: test1 associated_interfaces: - - Ethernet2/3 - - Ethernet2/5 - -- name: Ensure VRF is tagged with interface Ethernet2/5 only (Removes from Ethernet2/3) + - Ethernet2/3 + - Ethernet2/5 +- name: >- + Ensure VRF is tagged with interface Ethernet2/5 only (Removes from + Ethernet2/3) cisco.nxos.nxos_vrf: name: test1 interfaces: - - Ethernet2/5 - + - Ethernet2/5 - name: Delete VRF cisco.nxos.nxos_vrf: name: ntc @@ -375,7 +375,9 @@ def map_obj_to_commands(updates, module): commands.append("vrf member {0}".format(name)) elif set(interfaces) != set(obj_in_have["interfaces"]): - missing_interfaces = list(set(interfaces) - set(obj_in_have["interfaces"])) + missing_interfaces = list( + set(interfaces) - set(obj_in_have["interfaces"]), + ) for i in missing_interfaces: commands.append("vrf context {0}".format(name)) commands.append("exit") @@ -541,7 +543,9 @@ def check_declarative_intent_params(want, module, element_spec, result): if obj_in_have: interfaces = obj_in_have.get("interfaces") if interfaces is not None and i not in interfaces: - module.fail_json(msg="Interface %s not configured on vrf %s" % (i, w["name"])) + module.fail_json( + msg="Interface %s not configured on vrf %s" % (i, w["name"]), + ) def vrf_error_check(module, commands, responses): diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_vrf_af.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_vrf_af.py index bf155ce8f..5bd043706 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_vrf_af.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_vrf_af.py @@ -103,55 +103,50 @@ EXAMPLES = """ afi: ipv4 route_target_both_auto_evpn: true state: present - - cisco.nxos.nxos_vrf_af: vrf: ntc afi: ipv4 route_targets: - - rt: 65000:1000 - direction: import - - rt: 65001:1000 - direction: import - + - rt: '65000:1000' + direction: import + - rt: '65001:1000' + direction: import - cisco.nxos.nxos_vrf_af: vrf: ntc afi: ipv4 route_targets: - - rt: 65000:1000 - direction: import - - rt: 65001:1000 - state: absent - + - rt: '65000:1000' + direction: import + - rt: '65001:1000' + state: absent - cisco.nxos.nxos_vrf_af: vrf: ntc afi: ipv4 route_targets: - - rt: 65000:1000 - direction: export - - rt: 65001:1000 - direction: export - + - rt: '65000:1000' + direction: export + - rt: '65001:1000' + direction: export - cisco.nxos.nxos_vrf_af: vrf: ntc afi: ipv4 route_targets: - - rt: 65000:1000 - direction: export - state: absent - + - rt: '65000:1000' + direction: export + state: absent - cisco.nxos.nxos_vrf_af: vrf: ntc afi: ipv4 route_targets: - - rt: 65000:1000 - direction: both - state: present - - rt: 65001:1000 - direction: import - state: present - - rt: 65002:1000 - direction: both - state: absent + - rt: '65000:1000' + direction: both + state: present + - rt: '65001:1000' + direction: import + state: present + - rt: '65002:1000' + direction: both + state: absent """ RETURN = """ @@ -248,10 +243,25 @@ def main(): if platform.startswith("N9K") and rt.get("rt") == "auto": rt_commands = match_current_rt(rt, "both", current, rt_commands) else: - rt_commands = match_current_rt(rt, "import", current, rt_commands) - rt_commands = match_current_rt(rt, "export", current, rt_commands) + rt_commands = match_current_rt( + rt, + "import", + current, + rt_commands, + ) + rt_commands = match_current_rt( + rt, + "export", + current, + rt_commands, + ) else: - rt_commands = match_current_rt(rt, rt.get("direction"), current, rt_commands) + rt_commands = match_current_rt( + rt, + rt.get("direction"), + current, + rt_commands, + ) if rt_commands: commands.extend(rt_commands) diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_vsan.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_vsan.py index d95d95a96..70f9b50ee 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_vsan.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_vsan.py @@ -51,25 +51,25 @@ EXAMPLES = """ - name: Test that vsan module works cisco.nxos.nxos_vsan: vsan: - - id: 922 - interface: - - fc1/1 - - fc1/2 - - port-channel 1 - name: vsan-SAN-A - remove: false - suspend: false - - id: 923 - interface: - - fc1/11 - - fc1/21 - - port-channel 2 - name: vsan-SAN-B - remove: false - suspend: true - - id: 1923 - name: vsan-SAN-Old - remove: true + - id: 922 + interface: + - fc1/1 + - fc1/2 + - port-channel 1 + name: vsan-SAN-A + remove: false + suspend: false + - id: 923 + interface: + - fc1/11 + - fc1/21 + - port-channel 2 + name: vsan-SAN-B + remove: false + suspend: true + - id: 1923 + name: vsan-SAN-Old + remove: true """ RETURN = """ @@ -198,7 +198,9 @@ def main(): interface=dict(type="list", elements="str"), ) - argument_spec = dict(vsan=dict(type="list", elements="dict", options=vsan_element_spec)) + argument_spec = dict( + vsan=dict(type="list", elements="dict", options=vsan_element_spec), + ) module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) warnings = list() @@ -238,7 +240,9 @@ def main(): if vsanremove: # Negative case: if vsanid == "4079" or vsanid == "4094": - messages.append(str(vsanid) + " is a reserved vsan, hence cannot be removed") + messages.append( + str(vsanid) + " is a reserved vsan, hence cannot be removed", + ) continue if vsanid == sw_vsanid: commands.append("no vsan " + str(vsanid)) @@ -270,7 +274,9 @@ def main(): if vsanname is not None: # Negative case: if vsanid == "4079" or vsanid == "4094": - messages.append(str(vsanid) + " is a reserved vsan, and cannot be renamed") + messages.append( + str(vsanid) + " is a reserved vsan, and cannot be renamed", + ) else: if vsanname == sw_vsanname: messages.append( @@ -282,12 +288,16 @@ def main(): ) else: commands.append("vsan " + str(vsanid) + " name " + vsanname) - messages.append("setting vsan name to " + vsanname + " for vsan " + str(vsanid)) + messages.append( + "setting vsan name to " + vsanname + " for vsan " + str(vsanid), + ) if vsansuspend: # Negative case: if vsanid == "4079" or vsanid == "4094": - messages.append(str(vsanid) + " is a reserved vsan, and cannot be suspended") + messages.append( + str(vsanid) + " is a reserved vsan, and cannot be suspended", + ) else: if sw_vsanstate == "suspended": messages.append( @@ -322,7 +332,9 @@ def main(): + " interface list", ) else: - commands.append("vsan " + str(vsanid) + " interface " + each_interface_name) + commands.append( + "vsan " + str(vsanid) + " interface " + each_interface_name, + ) messages.append( "adding interface " + each_interface_name + " to vsan " + str(vsanid), ) diff --git a/ansible_collections/cisco/nxos/plugins/modules/nxos_zone_zoneset.py b/ansible_collections/cisco/nxos/plugins/modules/nxos_zone_zoneset.py index 7c9fba30a..5d519150f 100644 --- a/ansible_collections/cisco/nxos/plugins/modules/nxos_zone_zoneset.py +++ b/ansible_collections/cisco/nxos/plugins/modules/nxos_zone_zoneset.py @@ -10,180 +10,184 @@ DOCUMENTATION = """ module: nxos_zone_zoneset short_description: Configuration of zone/zoneset for Cisco NXOS MDS Switches. description: -- Configuration of zone/zoneset for Cisco MDS NXOS. + - Configuration of zone/zoneset for Cisco MDS NXOS. version_added: 1.0.0 author: -- Suhas Bharadwaj (@srbharadwaj) (subharad@cisco.com) + - Suhas Bharadwaj (@srbharadwaj) (subharad@cisco.com) notes: -- Tested against Cisco MDS NX-OS 8.4(1) + - Tested against Cisco MDS NX-OS 8.4(1) options: zone_zoneset_details: description: - - List of zone/zoneset details to be added or removed + - List of zone/zoneset details to be added or removed type: list elements: dict suboptions: vsan: description: - - vsan id + - vsan id required: true type: int mode: description: - - mode of the zone for the vsan + - mode of the zone for the vsan choices: - - enhanced - - basic + - enhanced + - basic type: str default_zone: description: - - default zone behaviour for the vsan + - default zone behaviour for the vsan choices: - - permit - - deny + - permit + - deny type: str smart_zoning: description: - - Removes the vsan if True + - Removes the vsan if True type: bool zone: description: - - List of zone options for that vsan + - List of zone options for that vsan type: list elements: dict suboptions: name: description: - - name of the zone + - name of the zone required: true type: str remove: description: - - Deletes the zone if True + - Deletes the zone if True type: bool default: false members: description: - - Members of the zone that needs to be removed or added + - Members of the zone that needs to be removed or added type: list elements: dict suboptions: pwwn: description: - - pwwn member of the zone, use alias 'device_alias' as option for - device_alias member + - >- + pwwn member of the zone, use alias 'device_alias' as option + for device_alias member aliases: - - device_alias + - device_alias required: true type: str remove: description: - - Removes member from the zone if True + - Removes member from the zone if True type: bool default: false devtype: description: - - devtype of the zone member used along with Smart zoning config + - >- + devtype of the zone member used along with Smart zoning + config choices: - - initiator - - target - - both + - initiator + - target + - both type: str zoneset: description: - - List of zoneset options for the vsan + - List of zoneset options for the vsan type: list elements: dict suboptions: name: description: - - name of the zoneset + - name of the zoneset required: true type: str remove: description: - - Removes zoneset if True + - Removes zoneset if True type: bool default: false action: description: - - activates/de-activates the zoneset + - activates/de-activates the zoneset choices: - - activate - - deactivate + - activate + - deactivate type: str members: description: - - Members of the zoneset that needs to be removed or added + - Members of the zoneset that needs to be removed or added type: list elements: dict suboptions: name: description: - - name of the zone that needs to be added to the zoneset or removed - from the zoneset + - >- + name of the zone that needs to be added to the zoneset or + removed from the zoneset required: true type: str remove: description: - - Removes zone member from the zoneset + - Removes zone member from the zoneset type: bool default: false + """ EXAMPLES = """ - name: Test that zone/zoneset module works cisco.nxos.nxos_zone_zoneset: zone_zoneset_details: - - mode: enhanced - vsan: 22 - zone: - - members: - - pwwn: 11:11:11:11:11:11:11:11 - - device_alias: test123 - - pwwn: 61:61:62:62:12:12:12:12 - remove: true - name: zoneA - - members: - - pwwn: 10:11:11:11:11:11:11:11 - - pwwn: 62:62:62:62:21:21:21:21 - name: zoneB - - name: zoneC - remove: true - zoneset: - - action: activate - members: - - name: zoneA - - name: zoneB - - name: zoneC - remove: true - name: zsetname1 - - action: deactivate - name: zsetTestExtra - remove: true - - mode: basic - smart_zoning: true - vsan: 21 - zone: - - members: - - devtype: both - pwwn: 11:11:11:11:11:11:11:11 - - pwwn: 62:62:62:62:12:12:12:12 - - devtype: both - pwwn: 92:62:62:62:12:12:1a:1a - remove: true - name: zone21A - - members: - - pwwn: 10:11:11:11:11:11:11:11 - - pwwn: 62:62:62:62:21:21:21:21 - name: zone21B - zoneset: - - action: activate - members: - - name: zone21A - - name: zone21B - name: zsetname212 - + - mode: enhanced + vsan: 22 + zone: + - members: + - pwwn: 31314874576271 + - device_alias: test123 + - pwwn: '61:61:62:62:12:12:12:12' + remove: true + name: zoneA + - members: + - pwwn: 28515514576271 + - pwwn: '62:62:62:62:21:21:21:21' + name: zoneB + - name: zoneC + remove: true + zoneset: + - action: activate + members: + - name: zoneA + - name: zoneB + - name: zoneC + remove: true + name: zsetname1 + - action: deactivate + name: zsetTestExtra + remove: true + - mode: basic + smart_zoning: true + vsan: 21 + zone: + - members: + - devtype: both + pwwn: 31314874576271 + - pwwn: '62:62:62:62:12:12:12:12' + - devtype: both + pwwn: '92:62:62:62:12:12:1a:1a' + remove: true + name: zone21A + - members: + - pwwn: 28515514576271 + - pwwn: '62:62:62:62:21:21:21:21' + name: zone21B + zoneset: + - action: activate + members: + - name: zone21A + - name: zone21B + name: zsetname212 """ RETURN = """ @@ -472,7 +476,11 @@ def main(): ) argument_spec = dict( - zone_zoneset_details=dict(type="list", elements="dict", options=zonedetails_spec), + zone_zoneset_details=dict( + type="list", + elements="dict", + options=zonedetails_spec, + ), ) module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) @@ -519,13 +527,17 @@ def main(): if op_default_zone is not None: if op_default_zone != sw_default_zone: if op_default_zone == "permit": - commands_executed.append("zone default-zone permit vsan " + str(vsan)) + commands_executed.append( + "zone default-zone permit vsan " + str(vsan), + ) messages.append( "default zone configuration changed from deny to permit for vsan " + str(vsan), ) else: - commands_executed.append("no zone default-zone permit vsan " + str(vsan)) + commands_executed.append( + "no zone default-zone permit vsan " + str(vsan), + ) messages.append( "default zone configuration changed from permit to deny for vsan " + str(vsan), @@ -565,10 +577,14 @@ def main(): if op_smart_zoning is not None: if op_smart_zoning != sw_smart_zoning_bool: if op_smart_zoning: - commands_executed.append("zone smart-zoning enable vsan " + str(vsan)) + commands_executed.append( + "zone smart-zoning enable vsan " + str(vsan), + ) messages.append("smart-zoning enabled for vsan " + str(vsan)) else: - commands_executed.append("no zone smart-zoning enable vsan " + str(vsan)) + commands_executed.append( + "no zone smart-zoning enable vsan " + str(vsan), + ) messages.append("smart-zoning disabled for vsan " + str(vsan)) else: messages.append( @@ -589,8 +605,12 @@ def main(): removeflag = eachzone["remove"] if removeflag: if shZoneObj.isZonePresent(zname): - messages.append("zone '" + zname + "' is removed from vsan " + str(vsan)) - commands_executed.append("no zone name " + zname + " vsan " + str(vsan)) + messages.append( + "zone '" + zname + "' is removed from vsan " + str(vsan), + ) + commands_executed.append( + "no zone name " + zname + " vsan " + str(vsan), + ) else: messages.append( "zone '" @@ -606,8 +626,12 @@ def main(): "zone '" + zname + "' is already present in vsan " + str(vsan), ) else: - commands_executed.append("zone name " + zname + " vsan " + str(vsan)) - messages.append("zone '" + zname + "' is created in vsan " + str(vsan)) + commands_executed.append( + "zone name " + zname + " vsan " + str(vsan), + ) + messages.append( + "zone '" + zname + "' is created in vsan " + str(vsan), + ) else: cmdmemlist = [] for eachmem in zmembers: @@ -721,7 +745,9 @@ def main(): + str(vsan), ) if len(cmdmemlist) != 0: - commands_executed.append("zone name " + zname + " vsan " + str(vsan)) + commands_executed.append( + "zone name " + zname + " vsan " + str(vsan), + ) commands_executed = commands_executed + cmdmemlist # Process zoneset member options @@ -758,7 +784,10 @@ def main(): zsetmem_name = eachzsmem["name"] zsetmem_removeflag = eachzsmem["remove"] if zsetmem_removeflag: - if shZonesetObj.isZonePresentInZoneset(zsetname, zsetmem_name): + if shZonesetObj.isZonePresentInZoneset( + zsetname, + zsetmem_name, + ): cmd = "no member " + zsetmem_name cmdmemlist.append(cmd) messages.append( @@ -780,7 +809,10 @@ def main(): + " ,hence there is nothing to remove", ) else: - if shZonesetObj.isZonePresentInZoneset(zsetname, zsetmem_name): + if shZonesetObj.isZonePresentInZoneset( + zsetname, + zsetmem_name, + ): messages.append( "zoneset member '" + zsetmem_name @@ -844,7 +876,9 @@ def main(): messages.append( "activating zoneset '" + zsetname + "' in vsan " + str(vsan), ) - actcmd.append("zoneset activate name " + zsetname + " vsan " + str(vsan)) + actcmd.append( + "zoneset activate name " + zsetname + " vsan " + str(vsan), + ) else: messages.append( "no changes to existing zoneset '" diff --git a/ansible_collections/cisco/nxos/plugins/netconf/nxos.py b/ansible_collections/cisco/nxos/plugins/netconf/nxos.py index fcbee7952..f144a51aa 100644 --- a/ansible_collections/cisco/nxos/plugins/netconf/nxos.py +++ b/ansible_collections/cisco/nxos/plugins/netconf/nxos.py @@ -38,7 +38,6 @@ options: identify the ncclient device handler name refer ncclient library documentation. """ -from ansible.plugins.netconf import NetconfBase from ansible_collections.ansible.netcommon.plugins.plugin_utils.netconf_base import NetconfBase diff --git a/ansible_collections/cisco/nxos/pyproject.toml b/ansible_collections/cisco/nxos/pyproject.toml index fa4225f3e..66aa89b87 100644 --- a/ansible_collections/cisco/nxos/pyproject.toml +++ b/ansible_collections/cisco/nxos/pyproject.toml @@ -2,6 +2,8 @@ line-length = 100 [tool.pytest.ini_options] -addopts = ["-vvv", "-n", "2", "--log-level", "WARNING", "--color", "yes"] testpaths = ["tests"] -filterwarnings = ['ignore:AnsibleCollectionFinder has already been configured'] +filterwarnings = [ + 'ignore:AnsibleCollectionFinder has already been configured', + 'ignore:_AnsibleCollectionFinder.find_spec().*', +] diff --git a/ansible_collections/cisco/nxos/test-requirements.txt b/ansible_collections/cisco/nxos/test-requirements.txt index 94ff7c9e3..396789aed 100644 --- a/ansible_collections/cisco/nxos/test-requirements.txt +++ b/ansible_collections/cisco/nxos/test-requirements.txt @@ -1,9 +1,7 @@ -# For ansible-tox-linters -black==23.3.0 ; python_version >= '3.7' -flake8 -yamllint +# For CML +virl2-client==2.6.1 # Unit test runner -pytest-ansible ; python_version >= '3.9' -git+https://github.com/ansible-community/pytest-ansible-units.git ; python_version < '3.9' +pytest-ansible pytest-xdist +pytest-cov diff --git a/ansible_collections/cisco/nxos/tests/__init__.py b/ansible_collections/cisco/nxos/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ansible_collections/cisco/nxos/tests/config.yml b/ansible_collections/cisco/nxos/tests/config.yml index 41f529264..c26ea5966 100644 --- a/ansible_collections/cisco/nxos/tests/config.yml +++ b/ansible_collections/cisco/nxos/tests/config.yml @@ -1,3 +1,3 @@ --- modules: - python_requires: ">=3.6" + python_requires: ">=3.9" diff --git a/ansible_collections/cisco/nxos/tests/integration/__init__.py b/ansible_collections/cisco/nxos/tests/integration/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ansible_collections/cisco/nxos/tests/integration/labs/single.yaml b/ansible_collections/cisco/nxos/tests/integration/labs/single.yaml new file mode 100644 index 000000000..7f3e4d96f --- /dev/null +++ b/ansible_collections/cisco/nxos/tests/integration/labs/single.yaml @@ -0,0 +1,241 @@ +lab: + description: "" + notes: "" + title: cisco.nxos.nxos + version: 0.2.0 +links: + - id: l0 + n1: n0 + n2: n1 + i1: i1 + i2: i0 + label: nxos9000-0-mgmt0<->ext-conn-0-port +nodes: + - boot_disk_size: null + configuration: |2- + + !Command: show running-config + !Running configuration last done at: Mon Feb 12 07:11:33 2024 + !Time: Mon Feb 12 07:11:33 2024 + + version 10.3(1) Bios:version + hostname R1 + vdc R1 id 1 + limit-resource vlan minimum 16 maximum 4094 + limit-resource vrf minimum 2 maximum 4096 + limit-resource port-channel minimum 0 maximum 511 + limit-resource m4route-mem minimum 58 maximum 58 + limit-resource m6route-mem minimum 8 maximum 8 + + no password strength-check + username admin password 5 $5$AADOBF$GVXUV2cvmlZH42xDu6wnqfBpV9gXF61WGVNrGF5Gk6C role network-admin + username ansible password 5 $5$GHBNKA$8ccD8KWjmP6NzxzkIRufl7giaUWjrhAn4SRrVWYZ4R1 role network-admin + username ansible passphrase lifetime 99999 warntime 14 gracetime 3 + ssh key rsa 2048 + ip domain-lookup + snmp-server user admin network-admin auth md5 040F90283AEB9A92CCAF81F5CDA2639FFFCD priv aes-128 006084272498F8CD8F98DE888DEC6899C6D0 localizedV2key + snmp-server user ansible network-admin auth md5 5207BA419F48B4EB39149FDC00BE411BC828 priv aes-128 041EED4A876CACFD7656EA885CE15D3CE108 localizedV2key + rmon event 1 log trap public description FATAL(1) owner PMON@FATAL + rmon event 2 log trap public description CRITICAL(2) owner PMON@CRITICAL + rmon event 3 log trap public description ERROR(3) owner PMON@ERROR + rmon event 4 log trap public description WARNING(4) owner PMON@WARNING + rmon event 5 log trap public description INFORMATION(5) owner PMON@INFO + + vlan 1 + + vrf context management + ip name-server 192.168.255.1 + ip route 0.0.0.0/0 192.168.255.1 + + interface Ethernet1/1 + + interface Ethernet1/2 + + interface Ethernet1/3 + + interface Ethernet1/4 + + interface Ethernet1/5 + + interface Ethernet1/6 + + interface Ethernet1/7 + + interface Ethernet1/8 + + interface Ethernet1/9 + + interface Ethernet1/10 + + interface Ethernet1/11 + + interface Ethernet1/12 + + interface Ethernet1/13 + + interface Ethernet1/14 + + interface Ethernet1/15 + + interface Ethernet1/16 + + interface Ethernet1/17 + + interface Ethernet1/18 + + interface Ethernet1/19 + + interface Ethernet1/20 + + interface Ethernet1/21 + + interface Ethernet1/22 + + interface Ethernet1/23 + + interface Ethernet1/24 + + interface Ethernet1/25 + + interface Ethernet1/26 + + interface Ethernet1/27 + + interface Ethernet1/28 + + interface Ethernet1/29 + + interface Ethernet1/30 + + interface Ethernet1/31 + + interface Ethernet1/32 + + interface Ethernet1/33 + + interface Ethernet1/34 + + interface Ethernet1/35 + + interface Ethernet1/36 + + interface Ethernet1/37 + + interface Ethernet1/38 + + interface Ethernet1/39 + + interface Ethernet1/40 + + interface Ethernet1/41 + + interface Ethernet1/42 + + interface Ethernet1/43 + + interface Ethernet1/44 + + interface Ethernet1/45 + + interface Ethernet1/46 + + interface Ethernet1/47 + + interface Ethernet1/48 + + interface Ethernet1/49 + + interface Ethernet1/50 + + interface Ethernet1/51 + + interface Ethernet1/52 + + interface Ethernet1/53 + + interface Ethernet1/54 + + interface Ethernet1/55 + + interface Ethernet1/56 + + interface Ethernet1/57 + + interface Ethernet1/58 + + interface Ethernet1/59 + + interface Ethernet1/60 + + interface Ethernet1/61 + + interface Ethernet1/62 + + interface Ethernet1/63 + + interface Ethernet1/64 + + interface mgmt0 + ip address dhcp + vrf member management + icam monitor scale + + line console + exec-timeout 0 + line vty + exec-timeout 0 + boot nxos bootflash:/nxos64-cs.10.3.1.F.bin + + no logging console + cpu_limit: null + cpus: null + data_volume: null + hide_links: false + id: n0 + image_definition: null + label: nxos9000-0 + node_definition: nxosv9000 + ram: null + tags: [] + x: -1750 + y: -250 + interfaces: + - id: i0 + label: Loopback0 + type: loopback + - id: i1 + label: mgmt0 + slot: 0 + type: physical + - id: i2 + label: Ethernet1/1 + slot: 1 + type: physical + - id: i3 + label: Ethernet1/2 + slot: 2 + type: physical + - id: i4 + label: Ethernet1/3 + slot: 3 + type: physical + - boot_disk_size: null + configuration: virbr0 + cpu_limit: null + cpus: null + data_volume: null + hide_links: false + id: n1 + image_definition: null + label: ext-conn-0 + node_definition: external_connector + ram: null + tags: [] + x: -2250 + y: -250 + interfaces: + - id: i0 + label: port + slot: 0 + type: physical +annotations: [] diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_acl_interfaces/tests/common/remove_config.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_acl_interfaces/tests/common/remove_config.yaml index 3cad7ce53..f76058818 100644 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_acl_interfaces/tests/common/remove_config.yaml +++ b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_acl_interfaces/tests/common/remove_config.yaml @@ -22,6 +22,7 @@ - name: Remove configuration - 3 cisco.nxos.nxos_config: lines: + - no switchport - no ip access-group ACL1v4 out parents: interface Ethernet1/3 ignore_errors: true @@ -41,3 +42,8 @@ - no ip port access-group PortACL in parents: interface Ethernet1/6 ignore_errors: true + +- name: Remove configuration - 6 + cisco.nxos.nxos_config: + lines: no interface loopback1 + ignore_errors: true diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_acl_interfaces/tests/common/rtt.yml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_acl_interfaces/tests/common/rtt.yml index 90f72fb39..d42b4b19a 100644 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_acl_interfaces/tests/common/rtt.yml +++ b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_acl_interfaces/tests/common/rtt.yml @@ -83,6 +83,9 @@ - "'no ip port access-group PortACL in' in result.commands" - "'ipv6 port traffic-filter NewACLv6 in' in result.commands" + - ansible.builtin.debug: + msg: "{{ ansible_facts['network_resources']['acl_interfaces'] }}" + - name: Revert back to base configuration using facts round trip register: result cisco.nxos.nxos_acl_interfaces: diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tests/common/interface_facts.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tests/common/interface_facts.yaml new file mode 100644 index 000000000..2c237d360 --- /dev/null +++ b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_facts/tests/common/interface_facts.yaml @@ -0,0 +1,62 @@ +--- +- ansible.builtin.debug: + msg: START connection={{ ansible_connection }}/interface_facts.yaml + +- name: Setup + cisco.nxos.nxos_config: &default + lines: + - default interface Ethernet1/1 + - default interface Ethernet1/2 + +- block: + - name: Make sure interfaces are L3 + cisco.nxos.nxos_interfaces: + config: + - name: Ethernet1/1 + mode: layer3 + - name: Ethernet1/2 + mode: layer3 + + # since the | json output renders differently when only one + # interface has IPv6 address vs when more than one interface + # has IPv6 address, we need to test them separately + + - name: Assign IPv6 address to interface - 1 + register: result + cisco.nxos.nxos_l3_interfaces: + config: + - name: Ethernet1/1 + ipv6: + - address: 2001:db8::2/32 + + - name: Gather interface facts + cisco.nxos.nxos_facts: + gather_subset: + - "interfaces" + + - name: Assert that IPv6 address was found + ansible.builtin.assert: + that: + - "'2001:db8::2/32' in ansible_net_all_ipv6_addresses" + + - name: Assign IPv6 address to interface - 2 + register: result + cisco.nxos.nxos_l3_interfaces: + config: + - name: Ethernet1/2 + ipv6: + - address: 2001:db8::3/32 + + - name: Gather interface facts + cisco.nxos.nxos_facts: + gather_subset: + - "interfaces" + + - name: Assert that IPv6 address was found + ansible.builtin.assert: + that: + - "'2001:db8::2/32' in ansible_net_all_ipv6_addresses" + - "'2001:db8::3/32' in ansible_net_all_ipv6_addresses" + always: + - name: Teardown + cisco.nxos.nxos_config: *default diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_file_copy/tests/cli/sanity.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_file_copy/tests/cli/sanity.yaml index 70c450c39..0f2bdbb0f 100644 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_file_copy/tests/cli/sanity.yaml +++ b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_file_copy/tests/cli/sanity.yaml @@ -132,11 +132,11 @@ - result.changed == true - "'copy scp:' in result.copy_cmd" - "'bootflash:' in result.file_system" - - "'bootflash:dir1/dir2/dir3/{{ test_destination_file }}_copy' in result.local_file" - - "'/{{ test_destination_file }}' in result.remote_file" + - "'bootflash:dir1/dir2/dir3/test_destination_file_copy' in result.local_file" + - "'/test_destination_file' in result.remote_file" - "'Received: File copied/pulled to nxos device from remote scp server.' in result.transfer_status" - - "'{{ mgmt0_ip }}' in result.remote_scp_server" + - mgmt0_ip in result.remote_scp_server - ansible.builtin.pause: seconds: 60 @@ -169,11 +169,11 @@ - result.changed == true - "'copy sftp:' in result.copy_cmd" - "'bootflash:' in result.file_system" - - "'bootflash:dir1/dir2/dir3/{{ test_destination_file }}_another_copy' in result.local_file" - - "'/bootflash/{{ test_destination_file }}' in result.remote_file" + - "'bootflash:dir1/dir2/dir3/test_destination_file_another_copy' in result.local_file" + - "'/bootflash/test_destination_file' in result.remote_file" - "'Received: File copied/pulled to nxos device from remote scp server.' in result.transfer_status" - - "'{{ mgmt0_ip }}' in result.remote_scp_server" + - mgmt0_ip in result.remote_scp_server always: - name: Remove file diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/defaults/main.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/defaults/main.yaml deleted file mode 100644 index 5f709c5aa..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/meta/main.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/meta/main.yaml deleted file mode 100644 index f504a6ab2..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/meta/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -dependencies: - - prepare_nxos_tests diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/cli.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/cli.yaml deleted file mode 100644 index d3d521f2a..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/cli.yaml +++ /dev/null @@ -1,31 +0,0 @@ ---- -- name: Collect common test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/common" - patterns: "{{ testcase }}.yaml" - connection: local - register: test_cases - -- name: Collect CLI test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - connection: local - register: cli_cases - -- name: Set a fact for 'test_cases' - ansible.builtin.set_fact: - test_cases: - files: "{{ test_cases.files + cli_cases.files }}" - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases with connection network_cli - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - vars: - ansible_connection: ansible.netcommon.network_cli diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/main.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/main.yaml deleted file mode 100644 index ccb324f33..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/main.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -- name: Run the CLI and NX-API tests - block: - - name: Include the CLI tasks - ansible.builtin.include_tasks: cli.yaml - tags: - - cli - - - name: Include the NX-API tasks - ansible.builtin.include_tasks: nxapi.yaml - tags: - - nxapi - always: - - name: Set baud rate back to 9600 so our tests don't break - connection: ansible.netcommon.network_cli - cisco.nxos.nxos_config: - lines: - - speed 9600 - parents: line console diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/nxapi.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/nxapi.yaml deleted file mode 100644 index 5fec0f43b..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tasks/nxapi.yaml +++ /dev/null @@ -1,31 +0,0 @@ ---- -- name: Collect common test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/common" - patterns: "{{ testcase }}.yaml" - connection: local - register: test_cases - -- name: Collect NX-API test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/nxapi" - patterns: "{{ testcase }}.yaml" - connection: local - register: nxapi_cases - -- name: Set a fact for 'test_cases' - ansible.builtin.set_fact: - test_cases: - files: "{{ test_cases.files + nxapi_cases.files }}" - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases with connection httpapi - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - vars: - ansible_connection: ansible.netcommon.httpapi diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/basic.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/basic.yaml deleted file mode 100644 index 72bf146d1..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/basic.yaml +++ /dev/null @@ -1,485 +0,0 @@ ---- -- ansible.builtin.debug: - msg: START connection={{ ansible_connection }} nxos_logging basic test - -- name: Workaround to clear logging logfile size - ignore_errors: true - cisco.nxos.nxos_config: - lines: - - logging logfile test 1 size 4194304 - -- name: Purge logging configuration first - cisco.nxos.nxos_logging: - purge: true - -- name: Set up console logging - register: result - cisco.nxos.nxos_logging: &id001 - dest: console - dest_level: 0 - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging console 0" in result.commands' - -- name: Set up console logging again (idempotent) - register: result - cisco.nxos.nxos_logging: *id001 - -- ansible.builtin.assert: &id003 - that: - - result.changed == false - -- name: Set up console logging with level 2 (edge case) - register: result - cisco.nxos.nxos_logging: &id002 - dest: console - dest_level: 2 - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging console 2" in result.commands' - -- name: Set up console logging with level 2 (edge case) (idempotent) - register: result - cisco.nxos.nxos_logging: *id002 - -- ansible.builtin.assert: *id003 - -- block: - - name: Logfile logging with level - register: result - cisco.nxos.nxos_logging: &id004 - dest: logfile - name: test - dest_level: 1 - state: present - - - ansible.builtin.assert: - that: - - result.changed == true - - '"logging logfile test 1" in result.commands' - - - name: Logfile logging with level (idempotent) - register: result - cisco.nxos.nxos_logging: *id004 - - - ansible.builtin.assert: *id003 - when: platform is not search('N5K|N7K') and imagetag is not search("A8") - -- name: Configure module with level - register: result - cisco.nxos.nxos_logging: &id005 - dest: module - dest_level: 2 - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging module 2" in result.commands' - -- name: Configure module with level (idempotent) - register: result - cisco.nxos.nxos_logging: *id005 - -- ansible.builtin.assert: *id003 - -- name: Configure monitor with level - register: result - cisco.nxos.nxos_logging: &id006 - dest: monitor - dest_level: 3 - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging monitor 3" in result.commands' - -- name: Configure monitor with level (idempotent) - register: result - cisco.nxos.nxos_logging: *id006 - -- ansible.builtin.assert: *id003 - -- name: Configure monitor with level 5 (edge case) - register: result - cisco.nxos.nxos_logging: &id007 - dest: monitor - dest_level: 5 - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging monitor 5" in result.commands' - -- name: Configure monitor with level 5 (edge case) (idempotent) - register: result - cisco.nxos.nxos_logging: *id007 - -- ansible.builtin.assert: *id003 - -- name: Configure facility with level - register: result - cisco.nxos.nxos_logging: &id008 - facility: daemon - facility_level: 4 - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging level daemon 4" in result.commands' - -- name: Configure facility with level (idempotent) - register: result - cisco.nxos.nxos_logging: *id008 - -- ansible.builtin.assert: *id003 - -- name: Configure remote logging - register: result - cisco.nxos.nxos_logging: &id009 - dest: server - remote_server: test-syslogserver.com - facility: auth - facility_level: 1 - use_vrf: management - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging server test-syslogserver.com 1 facility auth use-vrf management" in result.commands' - -- name: Configure remote logging (idempotent) - register: result - cisco.nxos.nxos_logging: *id009 - -- ansible.builtin.assert: *id003 - -- name: Configure source interface for logging - register: result - cisco.nxos.nxos_logging: &id010 - interface: mgmt0 - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging source-interface mgmt 0" in result.commands' - -- name: Configure source interface for logging (idempotent) - register: result - cisco.nxos.nxos_logging: *id010 - -- ansible.builtin.assert: - that: - - result.changed == false - -- name: Remove logging as collection teardown - register: result - cisco.nxos.nxos_logging: &id011 - aggregate: - - dest: console - dest_level: 3 - - - dest: module - dest_level: 2 - - - dest: monitor - dest_level: 5 - - - dest: logfile - dest_level: 1 - name: test - - - facility: daemon - facility_level: 4 - - - dest: server - remote_server: test-syslogserver.com - facility: auth - facility_level: 1 - use_vrf: management - - - interface: mgmt0 - state: absent - -- ansible.builtin.assert: - that: - - result.changed == true - - '"no logging logfile" in result.commands' - - '"no logging level daemon 4" in result.commands' - - '"no logging monitor" in result.commands' - - '"no logging module" in result.commands' - - '"no logging server test-syslogserver.com" in result.commands' - - '"no logging source-interface" in result.commands' - when: platform is not search('N5K|N7K') and imagetag is not search("A8") - -- ansible.builtin.assert: - that: - - result.changed == true - - '"no logging level daemon 4" in result.commands' - - '"no logging monitor" in result.commands' - - '"no logging module" in result.commands' - - '"no logging server test-syslogserver.com" in result.commands' - - '"no logging source-interface" in result.commands' - when: platform is search('N5K|N7K') or imagetag is search("A8") - -- name: Remove aggregate logging (idempotent) - register: result - cisco.nxos.nxos_logging: *id011 - -- ansible.builtin.assert: *id003 - -- block: - - name: Configure logging message - register: result - cisco.nxos.nxos_logging: &id012 - interface_message: add-interface-description - state: present - - - ansible.builtin.assert: &id013 - that: - - result.changed == true - - - name: Configure logging message (idempotent) - register: result - cisco.nxos.nxos_logging: *id012 - - - ansible.builtin.assert: *id003 - - - name: Remove logging message - register: result - cisco.nxos.nxos_logging: - interface_message: add-interface-description - state: absent - - - ansible.builtin.assert: *id013 - when: platform is not search('N5K') and imagetag is not search("A8") - -- name: Logfile logging with level and size - register: result - cisco.nxos.nxos_logging: &id014 - dest: logfile - name: test - dest_level: 1 - file_size: 16384 - state: present - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging logfile test 1 size 16384" in result.commands' - -- name: Logfile logging with level and size (idempotent) - register: result - cisco.nxos.nxos_logging: *id014 - -- ansible.builtin.assert: *id003 - -- name: Remove logfile logging with level and size - register: result - cisco.nxos.nxos_logging: - dest: logfile - name: test - dest_level: 1 - file_size: 16384 - state: absent - -- ansible.builtin.assert: *id013 - -- name: Set up logging event link enable - register: result - cisco.nxos.nxos_logging: &id015 - event: link-enable - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging event link-status enable" in result.commands' - -- name: Set up logging event link enable again (idempotent) - register: result - cisco.nxos.nxos_logging: *id015 - -- ansible.builtin.assert: *id003 - -- name: Remove logging event link enable - register: result - cisco.nxos.nxos_logging: &id016 - event: link-enable - state: absent - -- ansible.builtin.assert: *id013 - -- name: Remove logging event link enable again (idempotent) - register: result - cisco.nxos.nxos_logging: *id016 - -- ansible.builtin.assert: *id003 - -- name: Set up logging event link default - register: result - cisco.nxos.nxos_logging: &id017 - event: link-default - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging event link-status default" in result.commands' - -- name: Set up logging event link default again (idempotent) - register: result - cisco.nxos.nxos_logging: *id017 - -- ansible.builtin.assert: *id003 - -- name: Remove logging event link default - register: result - cisco.nxos.nxos_logging: &id018 - event: link-default - state: absent - -- ansible.builtin.assert: *id013 - -- name: Remove logging event link default again (idempotent) - register: result - cisco.nxos.nxos_logging: *id018 - -- ansible.builtin.assert: *id003 - -- name: Set up logging event trunk enable - register: result - cisco.nxos.nxos_logging: &id019 - event: trunk-enable - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging event trunk-status enable" in result.commands' - -- name: Set up logging event trunk enable again (idempotent) - register: result - cisco.nxos.nxos_logging: *id019 - -- ansible.builtin.assert: *id003 - -- name: Remove logging event trunk enable - register: result - cisco.nxos.nxos_logging: &id020 - event: trunk-enable - state: absent - -- ansible.builtin.assert: *id013 - -- name: Remove logging event trunk enable again (idempotent) - register: result - cisco.nxos.nxos_logging: *id020 - -- ansible.builtin.assert: *id003 - -- name: Set up logging event trunk default - register: result - cisco.nxos.nxos_logging: &id021 - event: trunk-default - -- ansible.builtin.assert: - that: - - result.changed == true - - '"logging event trunk-status default" in result.commands' - -- name: Set up logging event trunk default again (idempotent) - register: result - cisco.nxos.nxos_logging: *id021 - -- ansible.builtin.assert: *id003 - -- name: Remove logging event trunk default - register: result - cisco.nxos.nxos_logging: &id022 - event: trunk-default - state: absent - -- ansible.builtin.assert: *id013 - -- name: Remove logging event trunk default again (idempotent) - register: result - cisco.nxos.nxos_logging: *id022 - -- ansible.builtin.assert: *id003 - -- name: Set up logging timestamp - register: result - cisco.nxos.nxos_logging: &id023 - timestamp: microseconds - state: present - -- ansible.builtin.assert: *id013 - -- name: Set up logging timestamp (idempotent) - register: result - cisco.nxos.nxos_logging: *id023 - -- ansible.builtin.assert: *id003 - -- name: Remove logging timestamp - register: result - cisco.nxos.nxos_logging: - timestamp: microseconds - state: absent - -- ansible.builtin.assert: *id013 - -- name: Set up facility ethpm link up error - register: result - cisco.nxos.nxos_logging: &id024 - facility: ethpm - facility_link_status: link-up-error - state: present - -- ansible.builtin.assert: *id013 - -- name: Set up facility ethpm link up error (idempotent) - register: result - cisco.nxos.nxos_logging: *id024 - -- ansible.builtin.assert: *id003 - -- name: Remove facility ethpm link up error - register: result - cisco.nxos.nxos_logging: - facility: ethpm - facility_link_status: link-up-error - state: absent - -- ansible.builtin.assert: *id013 - -- name: Set up facility ethpm link down error - register: result - cisco.nxos.nxos_logging: &id025 - facility: ethpm - facility_link_status: link-down-error - state: present - -- ansible.builtin.assert: *id013 - -- name: Set up facility ethpm link down error (idempotent) - register: result - cisco.nxos.nxos_logging: *id025 - -- ansible.builtin.assert: *id003 - -- name: Remove facility ethpm link down error - register: result - cisco.nxos.nxos_logging: - facility: ethpm - facility_link_status: link-down-error - state: absent - -- ansible.builtin.assert: *id013 - -- ansible.builtin.debug: - msg: END connection={{ ansible_connection }} nxos_logging basic test diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/purge.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/purge.yaml deleted file mode 100644 index fa773b58a..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_logging/tests/common/purge.yaml +++ /dev/null @@ -1,111 +0,0 @@ ---- -- ansible.builtin.debug: - msg: START connection={{ ansible_connection }} nxos_logging purge test - -- name: Purge logging configuration first - cisco.nxos.nxos_logging: - purge: true - -- block: - - name: Set up console logging - register: result - cisco.nxos.nxos_logging: - dest: console - dest_level: 0 - state: present - - - ansible.builtin.assert: - that: - - result.changed == true - - '"logging console 0" in result.commands' - - - name: Set up logging timestamp - register: result - cisco.nxos.nxos_logging: - timestamp: microseconds - state: present - - - ansible.builtin.assert: - that: - - result.changed == true - - '"logging timestamp microseconds" in result.commands' - - - name: Configure monitor with level - register: result - cisco.nxos.nxos_logging: - dest: monitor - dest_level: 3 - - - ansible.builtin.assert: - that: - - result.changed == true - - '"logging monitor 3" in result.commands' - - - name: Configure facility with level - register: result - cisco.nxos.nxos_logging: - facility: daemon - facility_level: 4 - - - ansible.builtin.assert: - that: - - result.changed == true - - '"logging level daemon 4" in result.commands' - - - name: Configure logging level virtual-service 7 using nxos_config - register: result - cisco.nxos.nxos_config: - lines: logging level virtual-service 7 - - - ansible.builtin.assert: - that: - - result.changed == true - - - name: Purge the outliers - register: result - cisco.nxos.nxos_logging: - purge: true - - - ansible.builtin.assert: - that: - - result.changed == true - - '"no logging level virtual-service 7" in result.commands' - - - block: - - name: Purge the outliers (idempotent) - register: result - cisco.nxos.nxos_logging: - purge: true - - - assert: - that: - - result.changed == false - when: imagetag is not search("A8") - - - name: Remove logging as collection teardown - register: result - cisco.nxos.nxos_logging: - aggregate: - - dest: console - dest_level: 0 - - - dest: monitor - dest_level: 3 - - - timestamp: microseconds - - - facility: daemon - facility_level: 4 - state: absent - - - ansible.builtin.assert: - that: - - result.changed == true - - '"no logging console" in result.commands' - - '"no logging timestamp microseconds" in result.commands' - - '"no logging level daemon 4" in result.commands' - - '"no logging monitor" in result.commands' - when: ansible_connection != "local" - -- ansible.builtin.debug: - msg: END connection={{ ansible_connection }} nxos_logging purge test diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/defaults/main.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/defaults/main.yaml deleted file mode 100644 index 5f709c5aa..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/meta/main.yml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/meta/main.yml deleted file mode 100644 index f504a6ab2..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/meta/main.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -dependencies: - - prepare_nxos_tests diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/cli.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/cli.yaml deleted file mode 100644 index d3d521f2a..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/cli.yaml +++ /dev/null @@ -1,31 +0,0 @@ ---- -- name: Collect common test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/common" - patterns: "{{ testcase }}.yaml" - connection: local - register: test_cases - -- name: Collect CLI test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - connection: local - register: cli_cases - -- name: Set a fact for 'test_cases' - ansible.builtin.set_fact: - test_cases: - files: "{{ test_cases.files + cli_cases.files }}" - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases with connection network_cli - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - vars: - ansible_connection: ansible.netcommon.network_cli diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/main.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/main.yaml deleted file mode 100644 index c9e70304e..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/main.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -- name: Run the CLI and NX-API tests - block: - - name: Include the CLI tasks - ansible.builtin.include_tasks: cli.yaml - tags: - - cli - always: - - name: Include the NX-API tasks - ansible.builtin.include_tasks: nxapi.yaml - tags: - - nxapi diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/nxapi.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/nxapi.yaml deleted file mode 100644 index 5fec0f43b..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tasks/nxapi.yaml +++ /dev/null @@ -1,31 +0,0 @@ ---- -- name: Collect common test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/common" - patterns: "{{ testcase }}.yaml" - connection: local - register: test_cases - -- name: Collect NX-API test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/nxapi" - patterns: "{{ testcase }}.yaml" - connection: local - register: nxapi_cases - -- name: Set a fact for 'test_cases' - ansible.builtin.set_fact: - test_cases: - files: "{{ test_cases.files + nxapi_cases.files }}" - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases with connection httpapi - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - vars: - ansible_connection: ansible.netcommon.httpapi diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tests/common/sanity.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tests/common/sanity.yaml deleted file mode 100644 index f22c99f55..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp/tests/common/sanity.yaml +++ /dev/null @@ -1,114 +0,0 @@ ---- -- ansible.builtin.debug: - msg: START connection={{ ansible_connection }} nxos_ntp sanity test - -- name: Setup - remove ntp if configured - ignore_errors: true - cisco.nxos.nxos_ntp: &id005 - server: 1.2.3.4 - key_id: 32 - prefer: disabled - vrf_name: management - source_addr: 192.0.2.5 - state: absent - -- block: - - name: Configure ntp - register: result - cisco.nxos.nxos_ntp: &id001 - server: 1.2.3.4 - key_id: 32 - prefer: enabled - vrf_name: management - source_addr: 192.0.2.5 - state: present - - - ansible.builtin.assert: &id002 - that: - - result.changed == true - - - name: Idempotence check - register: result - cisco.nxos.nxos_ntp: *id001 - - - ansible.builtin.assert: &id004 - that: - - result.changed == false - - - name: Configure ntp with some defaults - register: result - cisco.nxos.nxos_ntp: &id003 - peer: 1.2.3.4 - key_id: default - prefer: enabled - vrf_name: default - source_addr: default - state: present - - - ansible.builtin.assert: *id002 - - - name: Idempotence check - register: result - cisco.nxos.nxos_ntp: *id003 - - - ansible.builtin.assert: *id004 - - - name: Remove ntp configuration - register: result - cisco.nxos.nxos_ntp: *id005 - - - ansible.builtin.assert: *id002 - - - name: Remove idempotence check - register: result - cisco.nxos.nxos_ntp: *id005 - - - ansible.builtin.assert: *id004 - - - name: Configure ntp again - register: result - cisco.nxos.nxos_ntp: &id006 - source_int: Ethernet1/3 - peer: 1.2.3.4 - prefer: enabled - state: present - - - ansible.builtin.assert: *id002 - - - name: Idempotence check - register: result - cisco.nxos.nxos_ntp: *id006 - - - ansible.builtin.assert: *id004 - - - name: Remove source interface - register: result - cisco.nxos.nxos_ntp: &id007 - source_int: default - state: present - - - ansible.builtin.assert: *id002 - - - name: Idempotence check - register: result - cisco.nxos.nxos_ntp: *id007 - - - ansible.builtin.assert: *id004 - - - name: Remove ntp - register: result - cisco.nxos.nxos_ntp: *id005 - - - ansible.builtin.assert: *id002 - - - name: Remove idempotence check - register: result - cisco.nxos.nxos_ntp: *id005 - - - ansible.builtin.assert: *id004 - always: - - name: Remove ntp configuration - cisco.nxos.nxos_ntp: *id005 - - - ansible.builtin.debug: - msg: END connection={{ ansible_connection }} nxos_ntp sanity test diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/defaults/main.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/defaults/main.yaml deleted file mode 100644 index 5f709c5aa..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/meta/main.yml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/meta/main.yml deleted file mode 100644 index f504a6ab2..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/meta/main.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -dependencies: - - prepare_nxos_tests diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/cli.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/cli.yaml deleted file mode 100644 index d3d521f2a..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/cli.yaml +++ /dev/null @@ -1,31 +0,0 @@ ---- -- name: Collect common test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/common" - patterns: "{{ testcase }}.yaml" - connection: local - register: test_cases - -- name: Collect CLI test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - connection: local - register: cli_cases - -- name: Set a fact for 'test_cases' - ansible.builtin.set_fact: - test_cases: - files: "{{ test_cases.files + cli_cases.files }}" - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases with connection network_cli - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - vars: - ansible_connection: ansible.netcommon.network_cli diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/main.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/main.yaml deleted file mode 100644 index a1da90e57..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/main.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -- name: Include the CLI tasks - ansible.builtin.include_tasks: cli.yaml - tags: - - cli - -- name: Include the NX-API tasks - ansible.builtin.include_tasks: nxapi.yaml - tags: - - nxapi diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/nxapi.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/nxapi.yaml deleted file mode 100644 index 5fec0f43b..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tasks/nxapi.yaml +++ /dev/null @@ -1,31 +0,0 @@ ---- -- name: Collect common test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/common" - patterns: "{{ testcase }}.yaml" - connection: local - register: test_cases - -- name: Collect NX-API test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/nxapi" - patterns: "{{ testcase }}.yaml" - connection: local - register: nxapi_cases - -- name: Set a fact for 'test_cases' - ansible.builtin.set_fact: - test_cases: - files: "{{ test_cases.files + nxapi_cases.files }}" - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases with connection httpapi - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - vars: - ansible_connection: ansible.netcommon.httpapi diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tests/common/sanity.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tests/common/sanity.yaml deleted file mode 100644 index 3ceb9e122..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_auth/tests/common/sanity.yaml +++ /dev/null @@ -1,133 +0,0 @@ ---- -- ansible.builtin.debug: - msg: START connection={{ ansible_connection }} nxos_ntp_auth sanity test - -- name: Configure text ntp authentication - ignore_errors: true - cisco.nxos.nxos_ntp_auth: &id009 - key_id: 32 - md5string: hello - state: absent - -- block: - - name: Configure text ntp authentication - register: result - cisco.nxos.nxos_ntp_auth: - key_id: 32 - md5string: hello - authentication: false - state: present - - - ansible.builtin.assert: &id001 - that: - - result.changed == true - - - name: Remove text ntp authentication - register: result - cisco.nxos.nxos_ntp_auth: - key_id: 32 - md5string: hello - authentication: false - state: absent - - - ansible.builtin.assert: *id001 - - - name: Configure encrypt ntp authentication - register: result - cisco.nxos.nxos_ntp_auth: &id002 - key_id: 32 - md5string: hello - auth_type: encrypt - state: present - - - ansible.builtin.assert: *id001 - - - name: Check idempotence - configure encrypt ntp authentication - register: result - cisco.nxos.nxos_ntp_auth: *id002 - - - ansible.builtin.assert: &id004 - that: - - result.changed == false - - - name: Turn on authentication - register: result - cisco.nxos.nxos_ntp_auth: &id003 - authentication: true - state: present - - - ansible.builtin.assert: *id001 - - - name: Check idempotence - turn on authentication - register: result - cisco.nxos.nxos_ntp_auth: *id003 - - - ansible.builtin.assert: *id004 - - - name: Turn off authentication - register: result - cisco.nxos.nxos_ntp_auth: &id005 - authentication: false - state: present - - - ansible.builtin.assert: *id001 - - - name: Check idempotence - turn off authentication - register: result - cisco.nxos.nxos_ntp_auth: *id005 - - - ansible.builtin.assert: *id004 - - - name: Add trusted key - register: result - cisco.nxos.nxos_ntp_auth: &id006 - key_id: 32 - trusted_key: true - state: present - - - ansible.builtin.assert: *id001 - - - name: Check idempotence - add trusted key - register: result - cisco.nxos.nxos_ntp_auth: *id006 - - - ansible.builtin.assert: *id004 - - - name: Remove trusted key - register: result - cisco.nxos.nxos_ntp_auth: &id007 - key_id: 32 - trusted_key: false - state: present - - - ansible.builtin.assert: *id001 - - - name: Check idempotence - remove trusted key - register: result - cisco.nxos.nxos_ntp_auth: *id007 - - - ansible.builtin.assert: *id004 - - - name: Remove encrypt ntp authentication - register: result - cisco.nxos.nxos_ntp_auth: &id008 - key_id: 32 - md5string: hello - auth_type: encrypt - authentication: true - state: absent - - - ansible.builtin.assert: *id001 - - - name: Check idempotence - remove encrypt ntp authentication - register: result - cisco.nxos.nxos_ntp_auth: *id008 - - - ansible.builtin.assert: *id004 - always: - - name: Cleanup ntp auth configuration - ignore_errors: true - cisco.nxos.nxos_ntp_auth: *id009 - - - ansible.builtin.debug: - msg: END connection={{ ansible_connection }} nxos_ntp_auth sanity test diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/defaults/main.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/defaults/main.yaml deleted file mode 100644 index 5f709c5aa..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/meta/main.yml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/meta/main.yml deleted file mode 100644 index f504a6ab2..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/meta/main.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -dependencies: - - prepare_nxos_tests diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/cli.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/cli.yaml deleted file mode 100644 index d3d521f2a..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/cli.yaml +++ /dev/null @@ -1,31 +0,0 @@ ---- -- name: Collect common test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/common" - patterns: "{{ testcase }}.yaml" - connection: local - register: test_cases - -- name: Collect CLI test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - connection: local - register: cli_cases - -- name: Set a fact for 'test_cases' - ansible.builtin.set_fact: - test_cases: - files: "{{ test_cases.files + cli_cases.files }}" - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases with connection network_cli - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - vars: - ansible_connection: ansible.netcommon.network_cli diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/main.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/main.yaml deleted file mode 100644 index a1da90e57..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/main.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -- name: Include the CLI tasks - ansible.builtin.include_tasks: cli.yaml - tags: - - cli - -- name: Include the NX-API tasks - ansible.builtin.include_tasks: nxapi.yaml - tags: - - nxapi diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/nxapi.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/nxapi.yaml deleted file mode 100644 index 5fec0f43b..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tasks/nxapi.yaml +++ /dev/null @@ -1,31 +0,0 @@ ---- -- name: Collect common test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/common" - patterns: "{{ testcase }}.yaml" - connection: local - register: test_cases - -- name: Collect NX-API test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/nxapi" - patterns: "{{ testcase }}.yaml" - connection: local - register: nxapi_cases - -- name: Set a fact for 'test_cases' - ansible.builtin.set_fact: - test_cases: - files: "{{ test_cases.files + nxapi_cases.files }}" - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases with connection httpapi - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - vars: - ansible_connection: ansible.netcommon.httpapi diff --git a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tests/common/sanity.yaml b/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tests/common/sanity.yaml deleted file mode 100644 index 1ee9433ef..000000000 --- a/ansible_collections/cisco/nxos/tests/integration/targets/nxos_ntp_options/tests/common/sanity.yaml +++ /dev/null @@ -1,99 +0,0 @@ ---- -- ansible.builtin.debug: - msg: START connection={{ ansible_connection }} nxos_ntp_options sanity test - -- name: Apply default ntp configuration - ignore_errors: true - cisco.nxos.nxos_ntp_options: &id007 - state: absent - -- block: - - name: Configure ntp with master and default stratum - register: result - cisco.nxos.nxos_ntp_options: &id001 - master: true - logging: true - state: present - - - ansible.builtin.assert: &id002 - that: - - result.changed == true - - - name: Check idempotence - configure ntp with master and default stratum - register: result - cisco.nxos.nxos_ntp_options: *id001 - - - ansible.builtin.assert: &id004 - that: - - result.changed == false - - - name: Configure ntp with master and non-default stratum - register: result - cisco.nxos.nxos_ntp_options: &id003 - master: true - stratum: 10 - state: present - - - ansible.builtin.assert: *id002 - - - name: Check idempotence - configure ntp with master and non-default stratum - register: result - cisco.nxos.nxos_ntp_options: *id003 - - - ansible.builtin.assert: *id004 - - - name: Configure ntp with master and no logging - register: result - cisco.nxos.nxos_ntp_options: &id005 - master: true - stratum: 10 - logging: false - state: present - - - ansible.builtin.assert: *id002 - - - name: Check idempotence - configure ntp with master and no logging - register: result - cisco.nxos.nxos_ntp_options: *id005 - - - ansible.builtin.assert: *id004 - - - name: Configure ntp with logging and no master - register: result - cisco.nxos.nxos_ntp_options: &id006 - master: false - logging: true - state: present - - - ansible.builtin.assert: *id002 - - - name: Check idempotence - configure ntp with logging and no master - register: result - cisco.nxos.nxos_ntp_options: *id006 - - - ansible.builtin.assert: *id004 - - - name: Configure ntp with master and non-default stratum again - register: result - cisco.nxos.nxos_ntp_options: *id003 - - - ansible.builtin.assert: *id002 - - - name: Remove ntp options - register: result - cisco.nxos.nxos_ntp_options: *id007 - - - ansible.builtin.assert: *id002 - - - name: Check idempotence - remove - register: result - cisco.nxos.nxos_ntp_options: *id007 - - - ansible.builtin.assert: *id004 - always: - - name: Cleanup ntp configuration - register: result - cisco.nxos.nxos_ntp_options: *id007 - - - ansible.builtin.debug: - msg: END connection={{ ansible_connection }} nxos_ntp_options sanity test diff --git a/ansible_collections/cisco/nxos/tests/integration/test_integration.py b/ansible_collections/cisco/nxos/tests/integration/test_integration.py new file mode 100644 index 000000000..aed5c0548 --- /dev/null +++ b/ansible_collections/cisco/nxos/tests/integration/test_integration.py @@ -0,0 +1,43 @@ +import subprocess + +import pytest + + +def run(ansible_project, environment): + __tracebackhide__ = True + args = [ + "ansible-navigator", + "run", + str(ansible_project.playbook), + "-i", + str(ansible_project.inventory), + "--ee", + "false", + "--mode", + "stdout", + "--pas", + str(ansible_project.playbook_artifact), + "--ll", + "debug", + "--lf", + str(ansible_project.log_file), + "--skip-tags", + "local,nxapi", + ] + process = subprocess.run( + args=args, + env=environment, + stderr=subprocess.PIPE, + stdout=subprocess.PIPE, + check=False, + shell=False, + ) + if process.returncode: + print(process.stdout.decode("utf-8")) + print(process.stderr.decode("utf-8")) + + pytest.fail(reason=f"Integration test failed: {ansible_project.role}") + + +def test_integration(ansible_project, environment): + run(ansible_project, environment) diff --git a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.10.txt b/ansible_collections/cisco/nxos/tests/sanity/ignore-2.10.txt deleted file mode 100644 index 4f8c291ee..000000000 --- a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.10.txt +++ /dev/null @@ -1,34 +0,0 @@ -plugins/action/nxos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/module_utils/network/nxos/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospfv2/ospfv2.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/modules/nxos_bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py compile-2.6!skip -plugins/modules/nxos_bgp_neighbor_address_family.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospfv2/ospfv2.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospfv3/ospfv3.py import-2.6!skip -plugins/modules/nxos_bgp_global.py import-2.6!skip -plugins/modules/nxos_ospf_interfaces.py import-2.6!skip -plugins/modules/nxos_ospfv2.py import-2.6!skip -plugins/modules/nxos_ospfv3.py import-2.6!skip -plugins/modules/nxos_route_maps.py import-2.6!skip -plugins/module_utils/network/nxos/config/route_maps/route_maps.py import-2.6!skip -plugins/module_utils/network/nxos/config/route_maps/route_maps.py compile-2.6!skip -plugins/module_utils/network/nxos/config/snmp_server/snmp_server.py import-2.6!skip -plugins/module_utils/network/nxos/config/snmp_server/snmp_server.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/modules/nxos_bgp_address_family.py import-2.6!skip -plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/nxos_bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/nxos_prefix_lists.py import-2.6!skip -plugins/module_utils/network/nxos/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/nxos/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/modules/nxos_logging_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/logging_global/logging_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/nxos/utils/utils.py import-2.6!skip -plugins/module_utils/network/nxos/utils/utils.py compile-2.6!skip diff --git a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.11.txt b/ansible_collections/cisco/nxos/tests/sanity/ignore-2.11.txt deleted file mode 100644 index 4f8c291ee..000000000 --- a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.11.txt +++ /dev/null @@ -1,34 +0,0 @@ -plugins/action/nxos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/module_utils/network/nxos/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospfv2/ospfv2.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/modules/nxos_bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py compile-2.6!skip -plugins/modules/nxos_bgp_neighbor_address_family.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospfv2/ospfv2.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospfv3/ospfv3.py import-2.6!skip -plugins/modules/nxos_bgp_global.py import-2.6!skip -plugins/modules/nxos_ospf_interfaces.py import-2.6!skip -plugins/modules/nxos_ospfv2.py import-2.6!skip -plugins/modules/nxos_ospfv3.py import-2.6!skip -plugins/modules/nxos_route_maps.py import-2.6!skip -plugins/module_utils/network/nxos/config/route_maps/route_maps.py import-2.6!skip -plugins/module_utils/network/nxos/config/route_maps/route_maps.py compile-2.6!skip -plugins/module_utils/network/nxos/config/snmp_server/snmp_server.py import-2.6!skip -plugins/module_utils/network/nxos/config/snmp_server/snmp_server.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/modules/nxos_bgp_address_family.py import-2.6!skip -plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/nxos_bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/nxos_prefix_lists.py import-2.6!skip -plugins/module_utils/network/nxos/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/nxos/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/modules/nxos_logging_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/logging_global/logging_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/nxos/utils/utils.py import-2.6!skip -plugins/module_utils/network/nxos/utils/utils.py compile-2.6!skip diff --git a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.12.txt b/ansible_collections/cisco/nxos/tests/sanity/ignore-2.12.txt deleted file mode 100644 index d7b9bbd97..000000000 --- a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.12.txt +++ /dev/null @@ -1,36 +0,0 @@ -plugins/action/nxos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/module_utils/network/nxos/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospfv2/ospfv2.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/modules/nxos_bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py compile-2.6!skip -plugins/modules/nxos_bgp_neighbor_address_family.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospfv2/ospfv2.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospfv3/ospfv3.py import-2.6!skip -plugins/modules/nxos_bgp_global.py import-2.6!skip -plugins/modules/nxos_ospf_interfaces.py import-2.6!skip -plugins/modules/nxos_ospfv2.py import-2.6!skip -plugins/modules/nxos_ospfv3.py import-2.6!skip -plugins/modules/nxos_route_maps.py import-2.6!skip -plugins/module_utils/network/nxos/config/route_maps/route_maps.py import-2.6!skip -plugins/module_utils/network/nxos/config/route_maps/route_maps.py compile-2.6!skip -plugins/module_utils/network/nxos/config/snmp_server/snmp_server.py import-2.6!skip -plugins/module_utils/network/nxos/config/snmp_server/snmp_server.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/modules/nxos_bgp_address_family.py import-2.6!skip -plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/nxos_bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/nxos_prefix_lists.py import-2.6!skip -plugins/module_utils/network/nxos/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/nxos/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/modules/nxos_logging_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/logging_global/logging_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ntp_global/ntp_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/ntp_global/ntp_global.py compile-2.6!skip -plugins/module_utils/network/nxos/utils/utils.py import-2.6!skip -plugins/module_utils/network/nxos/utils/utils.py compile-2.6!skip diff --git a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.13.txt b/ansible_collections/cisco/nxos/tests/sanity/ignore-2.13.txt deleted file mode 100644 index 46cfbc643..000000000 --- a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.13.txt +++ /dev/null @@ -1 +0,0 @@ -plugins/action/nxos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` diff --git a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.18.txt b/ansible_collections/cisco/nxos/tests/sanity/ignore-2.18.txt new file mode 100644 index 000000000..46cfbc643 --- /dev/null +++ b/ansible_collections/cisco/nxos/tests/sanity/ignore-2.18.txt @@ -0,0 +1 @@ +plugins/action/nxos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` diff --git a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.9.txt b/ansible_collections/cisco/nxos/tests/sanity/ignore-2.9.txt deleted file mode 100644 index ada896a7b..000000000 --- a/ansible_collections/cisco/nxos/tests/sanity/ignore-2.9.txt +++ /dev/null @@ -1,55 +0,0 @@ -plugins/modules/nxos_logging.py validate-modules:deprecation-mismatch # 2.9 expects METADATA -plugins/modules/nxos_logging.py validate-modules:invalid-documentation # removed_at_date not -plugins/action/nxos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/modules/nxos_ntp.py validate-modules:deprecation-mismatch # 2.9 expects METADATA -plugins/modules/nxos_ntp.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict -plugins/modules/nxos_ntp_auth.py validate-modules:deprecation-mismatch # 2.9 expects METADATA -plugins/modules/nxos_ntp_auth.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict -plugins/modules/nxos_ntp_options.py validate-modules:deprecation-mismatch # 2.9 expects METADATA -plugins/modules/nxos_ntp_options.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict -plugins/modules/nxos_snmp_community.py validate-modules:deprecation-mismatch # 2.9 expects METADATA -plugins/modules/nxos_snmp_community.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict -plugins/modules/nxos_snmp_contact.py validate-modules:deprecation-mismatch # 2.9 expects METADATA -plugins/modules/nxos_snmp_contact.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict -plugins/modules/nxos_snmp_host.py validate-modules:deprecation-mismatch # 2.9 expects METADATA -plugins/modules/nxos_snmp_host.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict -plugins/modules/nxos_snmp_location.py validate-modules:deprecation-mismatch # 2.9 expects METADATA -plugins/modules/nxos_snmp_location.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict -plugins/modules/nxos_snmp_traps.py validate-modules:deprecation-mismatch # 2.9 expects METADATA -plugins/modules/nxos_snmp_traps.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict -plugins/modules/nxos_snmp_user.py validate-modules:deprecation-mismatch # 2.9 expects METADATA -plugins/modules/nxos_snmp_user.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict -plugins/module_utils/network/nxos/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospfv2/ospfv2.py compile-2.6!skip -plugins/module_utils/network/nxos/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/modules/nxos_bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py compile-2.6!skip -plugins/modules/nxos_bgp_neighbor_address_family.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospfv2/ospfv2.py import-2.6!skip -plugins/module_utils/network/nxos/config/ospfv3/ospfv3.py import-2.6!skip -plugins/modules/nxos_bgp_global.py import-2.6!skip -plugins/modules/nxos_ospf_interfaces.py import-2.6!skip -plugins/modules/nxos_ospfv2.py import-2.6!skip -plugins/modules/nxos_ospfv3.py import-2.6!skip -plugins/modules/nxos_route_maps.py import-2.6!skip -plugins/module_utils/network/nxos/config/route_maps/route_maps.py import-2.6!skip -plugins/module_utils/network/nxos/config/route_maps/route_maps.py compile-2.6!skip -plugins/module_utils/network/nxos/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/modules/nxos_bgp_address_family.py import-2.6!skip -plugins/module_utils/network/nxos/config/bgp_neighbor_address_family/bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/nxos_bgp_neighbor_address_family.py import-2.6!skip -plugins/modules/nxos_prefix_lists.py import-2.6!skip -plugins/module_utils/network/nxos/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/nxos/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/modules/nxos_logging_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/logging_global/logging_global.py import-2.6!skip -plugins/module_utils/network/nxos/config/logging_global/logging_global.py compile-2.6!skip -plugins/modules/nxos_snmp_server.py import-2.6!skip -plugins/module_utils/network/nxos/config/snmp_server/snmp_server.py import-2.6!skip -plugins/module_utils/network/nxos/config/snmp_server/snmp_server.py compile-2.6!skip -plugins/module_utils/network/nxos/utils/utils.py import-2.6!skip -plugins/module_utils/network/nxos/utils/utils.py compile-2.6!skip diff --git a/ansible_collections/cisco/nxos/tests/unit/compat/__init__.py b/ansible_collections/cisco/nxos/tests/unit/compat/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/cisco/nxos/tests/unit/compat/mock.py b/ansible_collections/cisco/nxos/tests/unit/compat/mock.py deleted file mode 100644 index 50583cd6f..000000000 --- a/ansible_collections/cisco/nxos/tests/unit/compat/mock.py +++ /dev/null @@ -1,127 +0,0 @@ -# (c) 2014, Toshio Kuratomi -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -""" -Compat module for Python3.x's unittest.mock module -""" -import sys - - -# Python 2.7 - -# Note: Could use the pypi mock library on python3.x as well as python2.x. It -# is the same as the python3 stdlib mock library - -try: - # Allow wildcard import because we really do want to import all of mock's - # symbols into this compat shim - # pylint: disable=wildcard-import,unused-wildcard-import - from unittest.mock import * -except ImportError: - # Python 2 - # pylint: disable=wildcard-import,unused-wildcard-import - try: - from mock import * - except ImportError: - print("You need the mock library installed on python2.x to run tests") - - -# Prior to 3.4.4, mock_open cannot handle binary read_data -if sys.version_info >= (3,) and sys.version_info < (3, 4, 4): - file_spec = None - - def _iterate_read_data(read_data): - # Helper for mock_open: - # Retrieve lines from read_data via a generator so that separate calls to - # readline, read, and readlines are properly interleaved - sep = b"\n" if isinstance(read_data, bytes) else "\n" - data_as_list = [l + sep for l in read_data.split(sep)] - - if data_as_list[-1] == sep: - # If the last line ended in a newline, the list comprehension will have an - # extra entry that's just a newline. Remove this. - data_as_list = data_as_list[:-1] - else: - # If there wasn't an extra newline by itself, then the file being - # emulated doesn't have a newline to end the last line remove the - # newline that our naive format() added - data_as_list[-1] = data_as_list[-1][:-1] - - for line in data_as_list: - yield line - - def mock_open(mock=None, read_data=""): - """ - A helper function to create a mock to replace the use of `open`. It works - for `open` called directly or used as a context manager. - - The `mock` argument is the mock object to configure. If `None` (the - default) then a `MagicMock` will be created for you, with the API limited - to methods or attributes available on standard file handles. - - `read_data` is a string for the `read` methoddline`, and `readlines` of the - file handle to return. This is an empty string by default. - """ - - def _readlines_side_effect(*args, **kwargs): - if handle.readlines.return_value is not None: - return handle.readlines.return_value - return list(_data) - - def _read_side_effect(*args, **kwargs): - if handle.read.return_value is not None: - return handle.read.return_value - return type(read_data)().join(_data) - - def _readline_side_effect(): - if handle.readline.return_value is not None: - while True: - yield handle.readline.return_value - for line in _data: - yield line - - global file_spec - if file_spec is None: - import _io - - file_spec = list(set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO)))) - - if mock is None: - mock = MagicMock(name="open", spec=open) - - handle = MagicMock(spec=file_spec) - handle.__enter__.return_value = handle - - _data = _iterate_read_data(read_data) - - handle.write.return_value = None - handle.read.return_value = None - handle.readline.return_value = None - handle.readlines.return_value = None - - handle.read.side_effect = _read_side_effect - handle.readline.side_effect = _readline_side_effect() - handle.readlines.side_effect = _readlines_side_effect - - mock.return_value = handle - return mock diff --git a/ansible_collections/cisco/nxos/tests/unit/compat/unittest.py b/ansible_collections/cisco/nxos/tests/unit/compat/unittest.py deleted file mode 100644 index df4266ec9..000000000 --- a/ansible_collections/cisco/nxos/tests/unit/compat/unittest.py +++ /dev/null @@ -1,41 +0,0 @@ -# (c) 2014, Toshio Kuratomi -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import absolute_import, division, print_function - - -__metaclass__ = type - -""" -Compat module for Python2.7's unittest module -""" - -import sys - - -# Allow wildcard import because we really do want to import all of -# unittests's symbols into this compat shim -# pylint: disable=wildcard-import,unused-wildcard-import -if sys.version_info < (2, 7): - try: - # Need unittest2 on python2.6 - from unittest2 import * - except ImportError: - print("You need unittest2 installed on python2.6.x to run tests") -else: - from unittest import * diff --git a/ansible_collections/cisco/nxos/tests/unit/mock/path.py b/ansible_collections/cisco/nxos/tests/unit/mock/path.py index d15430fde..6053b30f2 100644 --- a/ansible_collections/cisco/nxos/tests/unit/mock/path.py +++ b/ansible_collections/cisco/nxos/tests/unit/mock/path.py @@ -2,9 +2,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible.utils.path import unfrackpath +from unittest.mock import MagicMock -from ansible_collections.cisco.nxos.tests.unit.compat.mock import MagicMock +from ansible.utils.path import unfrackpath mock_unfrackpath_noop = MagicMock(spec_set=unfrackpath, side_effect=lambda x, *args, **kwargs: x) diff --git a/ansible_collections/cisco/nxos/tests/unit/mock/procenv.py b/ansible_collections/cisco/nxos/tests/unit/mock/procenv.py index e14ad0ece..e6e09464b 100644 --- a/ansible_collections/cisco/nxos/tests/unit/mock/procenv.py +++ b/ansible_collections/cisco/nxos/tests/unit/mock/procenv.py @@ -27,12 +27,11 @@ import sys from contextlib import contextmanager from io import BytesIO, StringIO +from unittest import TestCase from ansible.module_utils._text import to_bytes from ansible.module_utils.six import PY3 -from ansible_collections.cisco.nxos.tests.unit.compat import unittest - @contextmanager def swap_stdin_and_argv(stdin_data="", argv_data=tuple()): @@ -78,7 +77,7 @@ def swap_stdout(): sys.stdout = old_stdout -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self, module_args=None): if module_args is None: module_args = { diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos.py index fd5cdb36f..25f3dfe62 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos.py @@ -29,13 +29,14 @@ try: except ImportError: from mock import MagicMock +from unittest import TestCase + from ansible.module_utils._text import to_bytes, to_text from ansible_collections.cisco.nxos.plugins.cliconf import nxos -from ansible_collections.cisco.nxos.tests.unit.compat import unittest -class TestPluginCLIConfNXOS(unittest.TestCase): +class TestPluginCLIConfNXOS(TestCase): """Test class for NXOS CLI Conf Methods""" def setUp(self): @@ -112,13 +113,19 @@ class TestPluginCLIConfNXOS(unittest.TestCase): def test_get_command_with_output_nxos(self): """Test _get_command_with_output for nxos""" self._prepare() - cmd = self._cliconf._get_command_with_output(command="show version", output="json") + cmd = self._cliconf._get_command_with_output( + command="show version", + output="json", + ) self.assertEqual(cmd, "show version | json") def test_get_command_with_output_mds(self): """Test _get_command_with_output for mds""" self._prepare(platform="mds") - cmd = self._cliconf._get_command_with_output(command="show version", output="json") + cmd = self._cliconf._get_command_with_output( + command="show version", + output="json", + ) self.assertEqual(cmd, "show version | json native") diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_acl_interfaces.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_acl_interfaces.py index ae56208fd..0c262d6a3 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_acl_interfaces.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_acl_interfaces.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_acl_interfaces -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from ansible_collections.cisco.nxos.tests.unit.modules.utils import set_module_args from .nxos_module import TestNxosModule diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_acls.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_acls.py index b7c0e8663..de3595cef 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_acls.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_acls.py @@ -9,9 +9,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_acls -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from ansible_collections.cisco.nxos.tests.unit.modules.utils import set_module_args from .nxos_module import TestNxosModule @@ -475,22 +475,33 @@ class TestNxosAclsModule(TestNxosModule): self.assertEqual(result["parsed"], compare_list, result["parsed"]) def test_nxos_acls_gathered(self): + self.execute_show_command.return_value = dedent( + """\ + ip access-list ACL1v4 + 10 permit ip any any + 20 deny udp any any + ip access-list ComplicatedAcl + 10 permit tcp any range 1024 65500 192.168.0.0 0.0.0.255 eq 1700 + ipv6 access-list ACL1v6 + 10 permit sctp any any + """, + ) set_module_args(dict(config=[], state="gathered")) result = self.execute_module(changed=False) compare_list = [ { "acls": [ { + "name": "ACL1v6", "aces": [ { - "destination": {"any": True}, "sequence": 10, + "grant": "permit", "protocol": "sctp", "source": {"any": True}, - "grant": "permit", + "destination": {"any": True}, }, ], - "name": "ACL1v6", }, ], "afi": "ipv6", @@ -498,23 +509,42 @@ class TestNxosAclsModule(TestNxosModule): { "acls": [ { + "name": "ACL1v4", "aces": [ { - "destination": {"any": True}, "sequence": 10, + "grant": "permit", "protocol": "ip", "source": {"any": True}, - "grant": "permit", + "destination": {"any": True}, }, { - "destination": {"any": True}, "sequence": 20, + "grant": "deny", "protocol": "udp", "source": {"any": True}, - "grant": "deny", + "destination": {"any": True}, + }, + ], + }, + { + "name": "ComplicatedAcl", + "aces": [ + { + "sequence": 10, + "grant": "permit", + "protocol": "tcp", + "source": { + "any": True, + "port_protocol": {"range": {"start": "1024", "end": "65500"}}, + }, + "destination": { + "address": "192.168.0.0", + "wildcard_bits": "0.0.0.255", + "port_protocol": {"eq": "1700"}, + }, }, ], - "name": "ACL1v4", }, ], "afi": "ipv4", diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_banner.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_banner.py index c9d564ddb..9f5a63a92 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_banner.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_banner.py @@ -20,8 +20,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_banner -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bfd_global.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bfd_global.py index e0e48ac7a..1ccc9dacf 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bfd_global.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bfd_global.py @@ -22,6 +22,8 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + # TBD: These imports / import checks are only needed as a workaround for # shippable, which fails this test due to import yaml & import ordereddict. import pytest @@ -30,7 +32,6 @@ from ansible_collections.cisco.nxos.plugins.module_utils.network.nxos.nxos impor nxosCmdRef_import_check, ) from ansible_collections.cisco.nxos.plugins.modules import nxos_bfd_global -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bfd_interfaces.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bfd_interfaces.py index e40f5fc2e..848788c46 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bfd_interfaces.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bfd_interfaces.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_bfd_interfaces -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_address_family.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_address_family.py index d9c6c2357..10140e776 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_address_family.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_address_family.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_bgp_address_family -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args @@ -2314,7 +2314,7 @@ class TestNxosBGPAddressFamilyModule(TestNxosModule): result = self.execute_module(changed=True) self.assertEqual(set(result["commands"]), set(commands)) - def test_nxos_bgp_af_delete(self): + def test_nxos_bgp_af_delete_1(self): # test gathered self.get_config.return_value = dedent( """\ diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_global.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_global.py index 22c9378eb..acf79b77e 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_global.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_global.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_bgp_global -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args @@ -233,7 +233,7 @@ class TestNxosBgpGlobalModule(TestNxosModule): result = self.execute_module(changed=True) self.assertEqual(set(result["commands"]), set(commands)) - def test_nxos_bgp_global_bfd(self): + def test_nxos_bgp_global_bfd_1(self): run_cfg = dedent( """\ router bgp 65536 @@ -1046,7 +1046,7 @@ class TestNxosBgpGlobalModule(TestNxosModule): result = self.execute_module(changed=False) self.assertEqual(result["commands"], []) - def test_nxos_bgp_global_purged(self): + def test_nxos_bgp_global_purged_1(self): run_cfg = dedent( """\ router bgp 65001 diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_neighbor_address_family.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_neighbor_address_family.py index b3943f370..0b325d2e8 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_neighbor_address_family.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_neighbor_address_family.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_bgp_neighbor_address_family -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args @@ -868,7 +868,7 @@ class TestNxosBGPNeighborAddressFamilyModule(TestNxosModule): result = self.execute_module(changed=True) self.assertEqual(set(result["commands"]), set(commands)) - def test_nxos_bgp_nbr_af_originate_peer_as_merged(self): + def test_nxos_bgp_nbr_af_originate_peer_as_merged_1(self): # test merged for default_originate, disable_peer_as_check self.get_config.return_value = dedent( """\ diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_templates.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_templates.py index 8d2fd74b5..2eedccaf8 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_templates.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_bgp_templates.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_bgp_templates -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_command.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_command.py index cb7c40ba9..9a0714e9c 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_command.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_command.py @@ -24,8 +24,9 @@ __metaclass__ = type import json +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_command -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_config.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_config.py index ce5c987c7..be762de23 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_config.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_config.py @@ -22,9 +22,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import MagicMock, patch + from ansible_collections.cisco.nxos.plugins.cliconf.nxos import Cliconf from ansible_collections.cisco.nxos.plugins.modules import nxos_config -from ansible_collections.cisco.nxos.tests.unit.compat.mock import MagicMock, patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_devicealias.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_devicealias.py index 640bcd150..d034a3aaa 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_devicealias.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_devicealias.py @@ -7,10 +7,11 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + import pytest from ansible_collections.cisco.nxos.plugins.modules import nxos_devicealias -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from ansible_collections.cisco.nxos.tests.unit.modules.utils import AnsibleFailJson from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_evpn_global.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_evpn_global.py index c9fa7911e..55e2a4151 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_evpn_global.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_evpn_global.py @@ -23,8 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_evpn_global -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_evpn_vni.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_evpn_vni.py index 0211a5a31..9b08b6164 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_evpn_vni.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_evpn_vni.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_evpn_vni -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_fc_interfaces.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_fc_interfaces.py index 098a5b7ff..18cef069a 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_fc_interfaces.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_fc_interfaces.py @@ -29,13 +29,13 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.module_utils.network.nxos.rm_templates.fc_interfaces import ( allowed_port_modes, allowed_speed_values, ) from ansible_collections.cisco.nxos.plugins.modules import nxos_fc_interfaces -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_feature.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_feature.py index 1c79537f1..e98fbce1e 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_feature.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_feature.py @@ -24,8 +24,9 @@ __metaclass__ = type import json +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_feature -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hostname.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hostname.py index 732f59e7a..9ddb9e306 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hostname.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hostname.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_hostname -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hsrp.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hsrp.py index 4ffcc43f3..794ecd896 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hsrp.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hsrp.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_hsrp -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hsrp_interfaces.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hsrp_interfaces.py index e4f21a825..8bbe79ae4 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hsrp_interfaces.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_hsrp_interfaces.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_hsrp_interfaces -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_interfaces.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_interfaces.py index fb8dae234..e0b0b55ce 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_interfaces.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_interfaces.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_interfaces -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args @@ -84,7 +84,7 @@ class TestNxosInterfacesModule(TestNxosModule): self.edit_config.return_value = None if device == "legacy": # call execute_module() with device='legacy' to use this codepath - self.get_platform.return_value = "N3K-Cxxx" + self.get_platform.return_value = "N5K-Cxxx" else: self.get_platform.return_value = "N9K-Cxxx" diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_l3_interfaces.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_l3_interfaces.py index 289c36ffd..7bb5da30e 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_l3_interfaces.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_l3_interfaces.py @@ -23,12 +23,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import PropertyMock, patch from ansible_collections.cisco.nxos.plugins.module_utils.network.nxos.config.l3_interfaces.l3_interfaces import ( L3_interfaces, ) from ansible_collections.cisco.nxos.plugins.modules import nxos_l3_interfaces -from ansible_collections.cisco.nxos.tests.unit.compat.mock import PropertyMock, patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_lacp_interfaces.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_lacp_interfaces.py index e6850278a..3e9c0c64d 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_lacp_interfaces.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_lacp_interfaces.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_lacp_interfaces -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_lldp_interfaces.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_lldp_interfaces.py index c2acfcc49..c2292a3cb 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_lldp_interfaces.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_lldp_interfaces.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_lldp_interfaces -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from ansible_collections.cisco.nxos.tests.unit.modules.utils import set_module_args from .nxos_module import TestNxosModule diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_logging_global.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_logging_global.py index aea13fc94..465ea0116 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_logging_global.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_logging_global.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_logging_global -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args @@ -190,7 +190,7 @@ class TestNxosLoggingGlobalModule(TestNxosModule): result = self.execute_module(changed=True) self.assertEqual(set(result["commands"]), set(commands)) - def test_nxos_logging_global_linear_replaced(self): + def test_nxos_logging_global_linear_replaced_1(self): # test replaced for linear attributes self.get_config.return_value = dedent( """\ @@ -464,7 +464,7 @@ class TestNxosLoggingGlobalModule(TestNxosModule): result = self.execute_module(changed=True) self.assertEqual(set(result["commands"]), set(commands)) - def test_nxos_logging_global_event_merged(self): + def test_nxos_logging_global_event_merged_1(self): # test merged for `event` self.get_config.return_value = dedent( """\ @@ -731,7 +731,7 @@ class TestNxosLoggingGlobalModule(TestNxosModule): result = self.execute_module(changed=True) self.assertEqual(set(result["commands"]), set(commands)) - def test_nxos_logging_global_event_replaced_2(self): + def test_nxos_logging_global_event_replaced_3(self): # test replaced for `event` - 2 self.get_config.return_value = dedent( """\ diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ntp_global.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ntp_global.py index 7c49d8668..d931a357b 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ntp_global.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ntp_global.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_ntp_global -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args @@ -268,7 +268,7 @@ class TestNxosNtpGlobalModule(TestNxosModule): result = self.execute_module(changed=False) self.assertEqual(result["commands"], []) - def test_nxos_ntp_global_complex_merged_idempotent(self): + def test_nxos_ntp_global_complex_merged_idempotent_1(self): # test merged for complex attributes self.get_config.return_value = dedent( """\ diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_nxapi.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_nxapi.py index 7eb12a21c..12ceeac82 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_nxapi.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_nxapi.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_nxapi -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospf_interfaces.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospf_interfaces.py index f22889574..159086004 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospf_interfaces.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospf_interfaces.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_ospf_interfaces -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospfv2.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospfv2.py index 175570499..80234c11a 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospfv2.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospfv2.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_ospfv2 -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospfv3.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospfv3.py index 70a2ae47e..ea8759c20 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospfv3.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ospfv3.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_ospfv3 -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_overlay_global.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_overlay_global.py index 976aa0964..1368ab240 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_overlay_global.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_overlay_global.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_overlay_global -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim.py index eea384836..cb427c967 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_pim -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim_interface.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim_interface.py index b746b8b46..9cc7b48ed 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim_interface.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim_interface.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_pim_interface -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim_rp_address.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim_rp_address.py index f4dbd13ac..a03b78026 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim_rp_address.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_pim_rp_address.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_pim_rp_address -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ping.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ping.py index bdaabe881..e92649b74 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ping.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_ping.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_ping -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_prefix_lists.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_prefix_lists.py index d94f0b3e0..f93f9b8f4 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_prefix_lists.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_prefix_lists.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_prefix_lists -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_route_maps.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_route_maps.py index 06d76fe38..d247c02b4 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_route_maps.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_route_maps.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_route_maps -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_snmp_server.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_snmp_server.py index 1b7672775..a15562b10 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_snmp_server.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_snmp_server.py @@ -23,9 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_snmp_server -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args @@ -391,7 +391,7 @@ class TestNxosSnmpServerModule(TestNxosModule): result = self.execute_module(changed=True) self.assertEqual(set(result["commands"]), set(commands)) - def test_nxos_snmp_server_traps_replaced(self): + def test_nxos_snmp_server_traps_replaced_1(self): # test replaced for traps self.get_config.return_value = dedent( """\ @@ -482,7 +482,7 @@ class TestNxosSnmpServerModule(TestNxosModule): result = self.execute_module(changed=True) self.assertEqual(set(result["commands"]), set(commands)) - def test_nxos_snmp_server_hosts_merged(self): + def test_nxos_snmp_server_hosts_merged_1(self): # test merged for hosts self.get_config.return_value = dedent( """\ @@ -591,7 +591,7 @@ class TestNxosSnmpServerModule(TestNxosModule): result = self.execute_module(changed=True) self.assertEqual(set(result["commands"]), set(commands)) - def test_nxos_snmp_server_users_merged(self): + def test_nxos_snmp_server_users_merged_1(self): # test merged for users self.get_config.return_value = dedent( """\ @@ -662,18 +662,19 @@ class TestNxosSnmpServerModule(TestNxosModule): ) commands = [ "snmp-server user snmp_user_2 network-admin auth md5 0x5632724fb8ac3699296af26281e1d0f1 priv 0x5632724fb8ac3699296af26281e1d0f1" - " localizedkey engineID 2:2:2:2:2", + " localizedV2key engineID 2:2:2:2:2", "snmp-server user snmp_user_3 network-admin auth md5 0x5632724fb8ac3699296af26281e1d0f1 priv aes-128" - " 0x5632724fb8ac3699296af26281e1d0f1 localizedV2key engineID 3:3:3:3:3", + " 0x5632724fb8ac3699296af26281e1d0f1 localizedkey engineID 3:3:3:3:3", "snmp-server user snmp_user_1 network-admin auth md5 0x5632724fb8ac3699296af26281e1d0f1" " localizedkey engineID 1:1:1:1:1", "snmp-server user snmp_user_4 network-admin auth sha-256 0x5632724fb8ac3699296af26281e1d0f1 priv aes-128" " 0x5632724fb8ac3699296af26281e1d0f1 localizedkey engineID 4:4:4:4:4", ] result = self.execute_module(changed=True) + print(result["commands"]) self.assertEqual(set(result["commands"]), set(commands)) - def test_nxos_snmp_server_users_merged(self): + def test_nxos_snmp_server_users_merged_2(self): # test merged for users self.get_config.return_value = dedent( """\ @@ -705,7 +706,9 @@ class TestNxosSnmpServerModule(TestNxosModule): algorithm="md5", password="0x5632724fb8ac3699296af262", engine_id="2:2:2:2:2", - priv=dict(privacy_password="0x5632724fb8ac3699296af262"), + priv=dict( + privacy_password="0x5632724fb8ac3699296af262", + ), localizedv2_key=True, ), ), @@ -906,7 +909,9 @@ class TestNxosSnmpServerModule(TestNxosModule): algorithm="md5", password="0x7d425fbf09417c44bca69e1d9e9ce889", localized_key=True, - priv=dict(privacy_password="0x7d425fbf09417c44bca69e1d9e9ce889"), + priv=dict( + privacy_password="0x7d425fbf09417c44bca69e1d9e9ce889", + ), ), ), dict( diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_static_routes.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_static_routes.py index 76ed4a3a9..7cd021314 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_static_routes.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_static_routes.py @@ -9,9 +9,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.nxos.plugins.modules import nxos_static_routes -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_system.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_system.py index ea7eec95c..634f69758 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_system.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_system.py @@ -23,8 +23,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_system -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_telemetry.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_telemetry.py index 160804c11..2c8027443 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_telemetry.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_telemetry.py @@ -23,6 +23,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from textwrap import dedent +from unittest.mock import patch # TBD: These imports / import checks are only needed as a workaround for # shippable, which fails this test due to import yaml & import ordereddict. @@ -32,7 +33,6 @@ from ansible_collections.cisco.nxos.plugins.module_utils.network.nxos.nxos impor nxosCmdRef_import_check, ) from ansible_collections.cisco.nxos.plugins.modules import nxos_telemetry -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from ansible_collections.cisco.nxos.tests.unit.modules.utils import AnsibleFailJson from .nxos_module import TestNxosModule, load_fixture, set_module_args @@ -183,7 +183,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_global_idempotent_n9k(self): # Assumes feature telemetry is enabled # TMS global config is present. - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" set_module_args( dict( @@ -205,7 +208,10 @@ class TestNxosTelemetryModule(TestNxosModule): # Assumes feature telemetry is enabled # TMS global config is present # Change certificate - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" set_module_args( dict( @@ -233,7 +239,10 @@ class TestNxosTelemetryModule(TestNxosModule): # Assumes feature telemetry is enabled # TMS global config is present # Change interface - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" set_module_args( dict( @@ -262,7 +271,10 @@ class TestNxosTelemetryModule(TestNxosModule): # Assumes feature telemetry is enabled # TMS global config is present # Change source_interface, vrf and cert - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" set_module_args( dict( @@ -314,14 +326,19 @@ class TestNxosTelemetryModule(TestNxosModule): with pytest.raises(AnsibleFailJson) as errinfo: self.execute_module() testdata = errinfo.value.args[0] - assert "Parameter under is required" in str(testdata["msg"]) + assert "Parameter under is required" in str( + testdata["msg"], + ) assert testdata["failed"] def test_tms_destgroup_input_validation_2(self): # Parameter 'destination' is not a dict. self.execute_show_command.return_value = None self.get_platform_shortname.return_value = "N9K" - args = build_args([{"id": "88", "destination": "192.168.1.1"}], "destination_groups") + args = build_args( + [{"id": "88", "destination": "192.168.1.1"}], + "destination_groups", + ) set_module_args(args, ignore_provider_arg) with pytest.raises(AnsibleFailJson) as errinfo: self.execute_module() @@ -343,7 +360,9 @@ class TestNxosTelemetryModule(TestNxosModule): with pytest.raises(AnsibleFailJson) as errinfo: self.execute_module() testdata = errinfo.value.args[0] - assert "Playbook entry contains unrecongnized parameters" in str(testdata["msg"]) + assert "Playbook entry contains unrecongnized parameters" in str( + testdata["msg"], + ) assert testdata["failed"] def test_tms_destgroup_merged_n9k(self): @@ -460,7 +479,10 @@ class TestNxosTelemetryModule(TestNxosModule): # Assumes feature telemetry is enabled # TMS destgroup config is not present. # Configure only identifier - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [ @@ -483,7 +505,10 @@ class TestNxosTelemetryModule(TestNxosModule): # Assumes feature telemetry is enabled # TMS destgroup config is not present. # Configure only identifier - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args([{"id": "2"}], "destination_groups") set_module_args(args, ignore_provider_arg) @@ -492,7 +517,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_destgroup_merged_aggregate_idempotent_n9k(self): # Assumes feature telemetry is enabled # TMS destgroup config is present. - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [ @@ -523,7 +551,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_destgroup_change_n9k(self): # TMS destgroup config is not present. # Change protocol and encoding for dest group 2 - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [ @@ -562,7 +593,10 @@ class TestNxosTelemetryModule(TestNxosModule): # TMS destgroup config is not present. # Add destinations to destgroup 10 # Add new destgroup 55 and 56 - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [ @@ -705,7 +739,9 @@ class TestNxosTelemetryModule(TestNxosModule): with pytest.raises(AnsibleFailJson) as errinfo: self.execute_module() testdata = errinfo.value.args[0] - assert "Parameter under is required" in str(testdata["msg"]) + assert "Parameter under is required" in str( + testdata["msg"], + ) assert testdata["failed"] def test_tms_sensorgroup_input_validation_2(self): @@ -730,7 +766,9 @@ class TestNxosTelemetryModule(TestNxosModule): with pytest.raises(AnsibleFailJson) as errinfo: self.execute_module() testdata = errinfo.value.args[0] - assert "Parameter under requires key" in str(testdata["msg"]) + assert "Parameter under requires key" in str( + testdata["msg"], + ) assert testdata["failed"] def test_tms_sensorgroup_resource_key_n9k(self): @@ -857,7 +895,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_sensorgroup_merged_idempotent_n9k(self): # Assumes feature telemetry is enabled # TMS sensorgroup config is not present. - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [ @@ -880,7 +921,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_sensorgroup_quotes_merged_idempotent_n9k(self): # Assumes feature telemetry is enabled # TMS sensorgroup config is present with quotes in NX-API path. - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K_SGs.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K_SGs.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [ @@ -906,7 +950,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_sensorgroup_vxlan_idempotent_n9k(self): # TMS sensorgroup config present. - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [{"id": "56", "data_source": "DME", "path": {"name": "vxlan"}}], @@ -917,7 +964,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_sensorgroup_idempotent_variable1_n9k(self): # TMS sensorgroup config is present with path key name. - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [ @@ -936,7 +986,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_sensorgroup_idempotent_variable2_n9k(self): # TMS sensorgroup config is present with path key name and depth. - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [ @@ -953,7 +1006,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_sensorgroup_idempotent_resource_key_n9k(self): # TMS sensorgroup config is present resource key only. - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args([{"id": "55"}], "sensor_groups") set_module_args(args, ignore_provider_arg) @@ -1013,7 +1069,7 @@ class TestNxosTelemetryModule(TestNxosModule): ], ) - def test_tms_sensorgroup_present_path_interface_n9k(self): + def test_tms_sensorgroup_present_path_interface_n9k_1(self): # TMS sensorgroup config is not present. # Path name 'resources' test self.execute_show_command.return_value = None @@ -1080,7 +1136,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_subscription_merged_idempotent_n9k(self): # TMS subscription config is not present. - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [ @@ -1104,7 +1163,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_subscription_merged_change1_n9k(self): # TMS subscription config present. # Change sample interval for sensor group 2 - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [ @@ -1135,7 +1197,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_subscription_add_n9k(self): # TMS subscription config present. # Add new destination_group and sensor_group to subscription 5 - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" args = build_args( [ @@ -1322,7 +1387,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_telemetry_deleted_input_validation_n9k(self): # State is 'deleted' and 'config' key present. - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" set_module_args( dict( @@ -1342,14 +1410,19 @@ class TestNxosTelemetryModule(TestNxosModule): with pytest.raises(AnsibleFailJson) as errinfo: self.execute_module() testdata = errinfo.value.args[0] - assert "Remove config key from playbook when state is " in str(testdata["msg"]) + assert "Remove config key from playbook when state is " in str( + testdata["msg"], + ) assert testdata["failed"] def test_telemetry_deleted_n9k(self): # Assumes feature telemetry is enabled # TMS global config is present. # Make absent with all playbook keys provided - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" set_module_args(dict(state="deleted"), ignore_provider_arg) self.execute_module(changed=True, commands=["no telemetry"]) @@ -1366,7 +1439,10 @@ class TestNxosTelemetryModule(TestNxosModule): def test_tms_replaced1_n9k(self): # Assumes feature telemetry is enabled # Modify global config and remove everything else - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" set_module_args( dict( @@ -1409,7 +1485,10 @@ class TestNxosTelemetryModule(TestNxosModule): # Modify destination-group 10, add 11 and 99, remove 2 # Modify sensor-group 55, 56 # remove all subscriptions - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" set_module_args( { @@ -1525,7 +1604,10 @@ class TestNxosTelemetryModule(TestNxosModule): # remove all other destination-groups # Modify sensor-group 55 and delete all others # Modify subscription 7, add 10 and delete all others - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" set_module_args( { @@ -1616,7 +1698,10 @@ class TestNxosTelemetryModule(TestNxosModule): # remove all other destination-groups # Modify sensor-group 55 and delete all others # Modify subscription 7, add 10 and delete all others - self.execute_show_command.return_value = load_fixture("nxos_telemetry", "N9K.cfg") + self.execute_show_command.return_value = load_fixture( + "nxos_telemetry", + "N9K.cfg", + ) self.get_platform_shortname.return_value = "N9K" set_module_args( { diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_user.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_user.py index c397c82cb..ba0d43756 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_user.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_user.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_user -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vlans.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vlans.py index 97870e76d..d686e74fb 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vlans.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vlans.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_vlans -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vpc.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vpc.py index a74525e86..5475b52e7 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vpc.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vpc.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_vpc -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vpc_interface.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vpc_interface.py index de7ad79bd..4ccb31994 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vpc_interface.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vpc_interface.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_vpc_interface -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vrf.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vrf.py index 8f2a2ae1d..e69cdc2aa 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vrf.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vrf.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_vrf -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vrf_af.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vrf_af.py index bfc2adef8..f104fc295 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vrf_af.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vrf_af.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_vrf_af -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vsan.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vsan.py index af9ee7ad3..66e04ba79 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vsan.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vsan.py @@ -7,10 +7,11 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + import pytest from ansible_collections.cisco.nxos.plugins.modules import nxos_vsan -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from ansible_collections.cisco.nxos.tests.unit.modules.utils import AnsibleFailJson from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vxlan_vtep.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vxlan_vtep.py index f6862a77e..e30c5c01f 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vxlan_vtep.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vxlan_vtep.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_vxlan_vtep -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vxlan_vtep_vni.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vxlan_vtep_vni.py index c6dc6e8d8..2592b1a6a 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vxlan_vtep_vni.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_vxlan_vtep_vni.py @@ -22,8 +22,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_vxlan_vtep_vni -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_zone_zoneset.py b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_zone_zoneset.py index 6afe78a5b..381eef8a6 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_zone_zoneset.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/network/nxos/test_nxos_zone_zoneset.py @@ -8,8 +8,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch + from ansible_collections.cisco.nxos.plugins.modules import nxos_zone_zoneset -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch from .nxos_module import TestNxosModule, load_fixture, set_module_args diff --git a/ansible_collections/cisco/nxos/tests/unit/modules/utils.py b/ansible_collections/cisco/nxos/tests/unit/modules/utils.py index cd3b7b05f..87be9cf8e 100644 --- a/ansible_collections/cisco/nxos/tests/unit/modules/utils.py +++ b/ansible_collections/cisco/nxos/tests/unit/modules/utils.py @@ -4,12 +4,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import json +from unittest import TestCase +from unittest.mock import patch + from ansible.module_utils import basic from ansible.module_utils._text import to_bytes -from ansible_collections.cisco.nxos.tests.unit.compat import unittest -from ansible_collections.cisco.nxos.tests.unit.compat.mock import patch - def set_module_args(args): if "_ansible_remote_tmp" not in args: @@ -40,7 +40,7 @@ def fail_json(*args, **kwargs): raise AnsibleFailJson(kwargs) -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self): self.mock_module = patch.multiple( basic.AnsibleModule, diff --git a/ansible_collections/cisco/nxos/tox-ansible.ini b/ansible_collections/cisco/nxos/tox-ansible.ini new file mode 100644 index 000000000..5e1f4b36a --- /dev/null +++ b/ansible_collections/cisco/nxos/tox-ansible.ini @@ -0,0 +1,10 @@ +[ansible] + +skip = + py3.7 + py3.8 + 2.9 + 2.10 + 2.11 + 2.12 + 2.13 diff --git a/ansible_collections/cisco/nxos/tox.ini b/ansible_collections/cisco/nxos/tox.ini deleted file mode 100644 index 6ada631cb..000000000 --- a/ansible_collections/cisco/nxos/tox.ini +++ /dev/null @@ -1,31 +0,0 @@ -[tox] -minversion = 1.4.2 -envlist = linters -skipsdist = True - -[testenv] -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -[testenv:black] -install_command = pip install {opts} {packages} -commands = - black -v {toxinidir} - -[testenv:linters] -install_command = pip install {opts} {packages} -commands = - black -v --diff --check {toxinidir} - flake8 {posargs} - -[testenv:venv] -commands = {posargs} - -[flake8] -# E123, E125 skipped as they are invalid PEP-8. - -show-source = True -ignore = E123,E125,E203,E402,E501,E741,F401,F811,F841,W503 -max-line-length = 160 -builtins = _ -exclude = .git,.tox,tests/unit/compat/ diff --git a/ansible_collections/cloud/common/.ansible-lint b/ansible_collections/cloud/common/.ansible-lint new file mode 100644 index 000000000..0c6729691 --- /dev/null +++ b/ansible_collections/cloud/common/.ansible-lint @@ -0,0 +1,8 @@ +--- +profile: production + +exclude_paths: + - tests/integration + - tests/sanity + - .github + - changelogs/changelog.yaml diff --git a/ansible_collections/cloud/common/.github/workflows/changelog.yaml b/ansible_collections/cloud/common/.github/workflows/changelog.yaml new file mode 100644 index 000000000..21ed48ed6 --- /dev/null +++ b/ansible_collections/cloud/common/.github/workflows/changelog.yaml @@ -0,0 +1,21 @@ +--- +name: Changelog +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + pull_request: + types: + - opened + - reopened + - labeled + - unlabeled + - synchronize + branches: + - main + - stable-* + +jobs: + changelog: + uses: ansible-network/github_actions/.github/workflows/changelog.yml@main \ No newline at end of file diff --git a/ansible_collections/cloud/common/.github/workflows/changelog.yml b/ansible_collections/cloud/common/.github/workflows/changelog.yml deleted file mode 100644 index 40b5bccf9..000000000 --- a/ansible_collections/cloud/common/.github/workflows/changelog.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: CI - -concurrency: - group: changelog-${{ github.ref }} - cancel-in-progress: true - -on: - pull_request: - types: - - opened - - reopened - - labeled - - unlabeled - - synchronize - branches: - - main - - stable-* - -jobs: - changelog: - uses: ansible-network/github_actions/.github/workflows/changelog.yml@main \ No newline at end of file diff --git a/ansible_collections/cloud/common/.github/workflows/galaxy-import.yaml b/ansible_collections/cloud/common/.github/workflows/galaxy-import.yaml new file mode 100644 index 000000000..a3f6d29d1 --- /dev/null +++ b/ansible_collections/cloud/common/.github/workflows/galaxy-import.yaml @@ -0,0 +1,15 @@ +--- +name: galaxy-import +concurrency: + group: ${{ github.head_ref }} + cancel-in-progress: true + +on: + pull_request: + branches: + - main + - stable-* + +jobs: + galaxy_importer: + uses: ansible-network/github_actions/.github/workflows/galaxy_importer.yml@main \ No newline at end of file diff --git a/ansible_collections/cloud/common/.github/workflows/integration-tests-kubernetes-core.yaml b/ansible_collections/cloud/common/.github/workflows/integration-tests-kubernetes-core.yaml new file mode 100644 index 000000000..a9eb22ad5 --- /dev/null +++ b/ansible_collections/cloud/common/.github/workflows/integration-tests-kubernetes-core.yaml @@ -0,0 +1,141 @@ +--- +name: Integration tests +on: + pull_request: + branches: + - main + - stable-* + +jobs: + splitter: + env: + source_dir: "./source" + runs-on: ubuntu-latest + outputs: + test_targets: ${{ steps.splitter.outputs.test_targets }} + test_targets_json: ${{ steps.splitter.outputs.test_targets_json }} + test_jobs: ${{ steps.splitter.outputs.test_jobs }} + steps: + - name: Checkout the collection repository + uses: actions/checkout@v3 + with: + repository: ansible-collections/kubernetes.core + ref: main + path: ${{ env.source_dir }} + fetch-depth: "0" + + - name: Split all Kubernetes targets into Job + id: splitter + uses: ansible-network/github_actions/.github/actions/ansible_test_splitter@main + with: + collections_to_test: ${{ env.source_dir }} + total_jobs: 8 + env: + ANSIBLE_TEST_ALL_THE_TARGETS: "true" + + - name: Display splitter output + run: | + echo "test_targets=${{ steps.splitter.outputs.test_targets }}" + echo "test_targets_json=${{ steps.splitter.outputs.test_targets_json }}" + echo "test_jobs=${{ steps.splitter.outputs.test_jobs }}" + shell: bash + integration: + runs-on: ubuntu-latest + timeout-minutes: 60 + needs: + - splitter + if: ${{ needs.splitter.outputs.test_targets != '' }} + env: + source: "./cloud_common" + ansible_posix: "./ansible_posix" + kubernetes_core: "./kubernetes_core" + strategy: + fail-fast: false + matrix: + ansible-version: + - milestone + python-version: + - "3.12" + workflow-id: ${{ fromJson(needs.splitter.outputs.test_jobs) }} + name: "integration-kubernetes-core-${{ matrix.python-version }}-${{ matrix.ansible-version }}-${{ matrix.workflow-id }}" + steps: + - name: Read target + id: read-targets + run: | + import json, os + with open(os.environ.get('GITHUB_OUTPUT'), "a", encoding="utf-8") as fh: + fh.write(f'ansible_test_targets={json.loads(os.environ.get("ALL_TEST_TARGETS")).get(os.environ.get("WORKFLOW_ID"))}\n') + shell: python + env: + ALL_TEST_TARGETS: ${{ needs.splitter.outputs.test_targets_json }} + WORKFLOW_ID: ${{ matrix.workflow-id }} + + - name: Display ansible test targets + run: | + echo "ansible_test_targets -> ${{ steps.read-targets.outputs.ansible_test_targets }}" + shell: bash + + - name: Checkout cloud.common repository + uses: actions/checkout@v3 + with: + path: ${{ env.source }} + ref: ${{ github.event.pull_request.head.sha }} + + - name: checkout ansible-collections/kubernetes.core + uses: ansible-network/github_actions/.github/actions/checkout_dependency@main + with: + repository: ansible-collections/kubernetes.core + path: ${{ env.kubernetes_core }} + ref: main + + - name: checkout ansible-collections/ansible.posix + uses: ansible-network/github_actions/.github/actions/checkout_dependency@main + with: + repository: ansible-collections/ansible.posix + path: ${{ env.ansible_posix }} + ref: main + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + # install ansible + - name: Install ansible-core (${{ matrix.ansible-version }}) + run: >- + python3 -m pip install + https://github.com/ansible/ansible/archive/${{ matrix.ansible-version }}.tar.gz + --disable-pip-version-check + shell: bash + + - name: Build and install kuernetes.core collection + id: install-kubernetes-core + uses: ansible-network/github_actions/.github/actions/build_install_collection@main + with: + install_python_dependencies: true + source_path: ${{ env.kubernetes_core }} + + - name: install cloud.common collection + uses: ansible-network/github_actions/.github/actions/build_install_collection@main + with: + install_python_dependencies: true + source_path: ${{ env.source }} + + - name: install ansible.posix collection + uses: ansible-network/github_actions/.github/actions/build_install_collection@main + with: + install_python_dependencies: true + source_path: ${{ env.ansible_posix }} + + - name: Create kubernetes cluster + uses: helm/kind-action@v1.4.0 + + - name: Run integration tests + uses: ansible-network/github_actions/.github/actions/ansible_test_integration@main + with: + collection_path: ${{ steps.install-kubernetes-core.outputs.collection_path }} + python_version: ${{ matrix.python-version }} + ansible_version: ${{ matrix.ansible-version }} + ansible_test_targets: ${{ steps.read-targets.outputs.ansible_test_targets }} + ansible_test_environment: | + ENABLE_TURBO_MODE=true \ No newline at end of file diff --git a/ansible_collections/cloud/common/.github/workflows/linters.yaml b/ansible_collections/cloud/common/.github/workflows/linters.yaml new file mode 100644 index 000000000..5c74d3b36 --- /dev/null +++ b/ansible_collections/cloud/common/.github/workflows/linters.yaml @@ -0,0 +1,25 @@ +--- +name: Linters +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + pull_request: + branches: + - main + - stable-* + tags: + - '*' + +jobs: + linters: + uses: ansible-network/github_actions/.github/workflows/tox-linters.yml@main + + ansible-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Run ansible-lint + uses: ansible/ansible-lint@v6.21.0 \ No newline at end of file diff --git a/ansible_collections/cloud/common/.github/workflows/linters.yml b/ansible_collections/cloud/common/.github/workflows/linters.yml deleted file mode 100644 index cafab80ae..000000000 --- a/ansible_collections/cloud/common/.github/workflows/linters.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: CI - -concurrency: - group: linters-${{ github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - pull_request: - branches: - - main - - stable-* - -jobs: - linters: - uses: ansible-network/github_actions/.github/workflows/tox-linters.yml@main \ No newline at end of file diff --git a/ansible_collections/cloud/common/.github/workflows/sanity-tests.yaml b/ansible_collections/cloud/common/.github/workflows/sanity-tests.yaml new file mode 100644 index 000000000..e3a813060 --- /dev/null +++ b/ansible_collections/cloud/common/.github/workflows/sanity-tests.yaml @@ -0,0 +1,15 @@ +--- +name: Sanity tests +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + pull_request: + branches: + - main + - stable-* + +jobs: + sanity: + uses: ansible-network/github_actions/.github/workflows/sanity.yml@main \ No newline at end of file diff --git a/ansible_collections/cloud/common/.github/workflows/sanity_and_units.yml b/ansible_collections/cloud/common/.github/workflows/sanity_and_units.yml deleted file mode 100644 index c2cc86756..000000000 --- a/ansible_collections/cloud/common/.github/workflows/sanity_and_units.yml +++ /dev/null @@ -1,172 +0,0 @@ ---- -name: CI - -concurrency: - group: sanity-units-${{ github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - pull_request: - branches: - - main - - stable-* - schedule: - - cron: '0 14 * * 1' - -jobs: - sanity: - uses: ansible-network/github_actions/.github/workflows/sanity.yml@main - with: - matrix_include: "[]" - matrix_exclude: >- - [ - { - "ansible-version": "stable-2.9", - "python-version": "3.9" - }, - { - "ansible-version": "stable-2.9", - "python-version": "3.10" - }, - { - "ansible-version": "stable-2.9", - "python-version": "3.11" - }, - { - "ansible-version": "stable-2.12", - "python-version": "3.7" - }, - { - "ansible-version": "stable-2.12", - "python-version": "3.11" - }, - { - "ansible-version": "stable-2.13", - "python-version": "3.7" - }, - { - "ansible-version": "stable-2.13", - "python-version": "3.11" - }, - { - "ansible-version": "stable-2.14", - "python-version": "3.7" - }, - { - "ansible-version": "stable-2.14", - "python-version": "3.8" - }, - { - "ansible-version": "stable-2.15", - "python-version": "3.7" - }, - { - "ansible-version": "stable-2.15", - "python-version": "3.8" - }, - { - "ansible-version": "milestone", - "python-version": "3.7" - }, - { - "ansible-version": "milestone", - "python-version": "3.8" - }, - { - "ansible-version": "milestone", - "python-version": "3.9" - }, - { - "ansible-version": "devel", - "python-version": "3.7" - }, - { - "ansible-version": "devel", - "python-version": "3.8" - }, - { - "ansible-version": "devel", - "python-version": "3.9" - } - ] - unit-source: - # Runs on ansible-2.12+ - uses: ansible-network/github_actions/.github/workflows/unit_source.yml@main - with: - matrix_exclude: >- - [ - { - "python-version": "3.11" - }, - { - "ansible-version": "stable-2.12", - "python-version": "3.7" - }, - { - "ansible-version": "stable-2.13", - "python-version": "3.7" - }, - { - "ansible-version": "stable-2.12", - "python-version": "3.8" - }, - { - "ansible-version": "stable-2.13", - "python-version": "3.8" - }, - { - "ansible-version": "stable-2.14", - "python-version": "3.7" - }, - { - "ansible-version": "stable-2.14", - "python-version": "3.8" - }, - { - "ansible-version": "stable-2.15", - "python-version": "3.7" - }, - { - "ansible-version": "stable-2.15", - "python-version": "3.8" - }, - { - "ansible-version": "milestone", - "python-version": "3.7" - }, - { - "ansible-version": "milestone", - "python-version": "3.8" - }, - { - "ansible-version": "milestone", - "python-version": "3.9" - }, - { - "ansible-version": "devel", - "python-version": "3.7" - }, - { - "ansible-version": "devel", - "python-version": "3.8" - }, - { - "ansible-version": "devel", - "python-version": "3.9" - } - ] - collection_pre_install: '' - all_green: - if: ${{ always() }} - needs: - - sanity - - unit-source - runs-on: ubuntu-latest - steps: - - run: >- - python -c "assert set([ - '${{ needs.unit-source.result }}' - ]) == {'success'}" - - run: >- - python -c "assert '${{ needs.sanity.result }}' - in ['success', 'failure']" diff --git a/ansible_collections/cloud/common/.github/workflows/unit-ansible-2.9.yml b/ansible_collections/cloud/common/.github/workflows/unit-ansible-2.9.yml deleted file mode 100644 index 779d5474d..000000000 --- a/ansible_collections/cloud/common/.github/workflows/unit-ansible-2.9.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: CI - -concurrency: - group: units-29-${{ github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - push: - branches: - - main - - stable-* - pull_request: - branches: - - main - - stable-* - schedule: - - cron: '0 14 * * 1' - -jobs: - units: - runs-on: ubuntu-20.04 - name: unit-2.9 - env: - ansible_version: stable-2.9 - python_version: 3.7 - steps: - - name: Checkout the collection repository - uses: ansible-network/github_actions/.github/actions/checkout_dependency@main - with: - path: ${{ env.source_directory }} - - - name: Set up Python ${{ env.python_version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ env.python_version }} - - - name: Install ansible-core (${{ env.ansible_version }}) - run: python3 -m pip install https://github.com/ansible/ansible/archive/${{ env.ansible_version }}.tar.gz --disable-pip-version-check - - - name: Read collection metadata from galaxy.yml - id: identify - uses: ansible-network/github_actions/.github/actions/identify_collection@main - with: - source_path: ${{ env.source_directory }} - - - name: Build and install the collection - uses: ansible-network/github_actions/.github/actions/build_install_collection@main - with: - install_python_dependencies: true - source_path: ${{ env.source_directory }} - collection_path: ${{ steps.identify.outputs.collection_path }} - tar_file: ${{ steps.identify.outputs.tar_file }} - ansible_version: "${{ env.ansible_version }}" - - - name: Print the ansible version - run: ansible --version - - - name: Print the python dependencies - run: python3 -m pip list - - - name: Run unit tests - run: python -m pytest tests/unit --showlocals - working-directory: ${{ steps.identify.outputs.collection_path }} diff --git a/ansible_collections/cloud/common/.github/workflows/unit-tests.yaml b/ansible_collections/cloud/common/.github/workflows/unit-tests.yaml new file mode 100644 index 000000000..0cb2f1892 --- /dev/null +++ b/ansible_collections/cloud/common/.github/workflows/unit-tests.yaml @@ -0,0 +1,15 @@ +--- +name: Unit tests +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + pull_request: + branches: + - main + - stable-* + +jobs: + unit-source: + uses: ansible-network/github_actions/.github/workflows/unit_source.yml@main \ No newline at end of file diff --git a/ansible_collections/cloud/common/CHANGELOG.rst b/ansible_collections/cloud/common/CHANGELOG.rst index 95285f7e2..c48dc6486 100644 --- a/ansible_collections/cloud/common/CHANGELOG.rst +++ b/ansible_collections/cloud/common/CHANGELOG.rst @@ -5,6 +5,20 @@ cloud.common Release Notes .. contents:: Topics +v3.0.0 +====== + +Release Summary +--------------- + +This major release drops support for ansible-core versions lower than 2.14 and Python versions lower than 3.9. + +Breaking Changes / Porting Guide +-------------------------------- + +- Bump minimum Python supported version to 3.9. +- Remove support for ansible-core < 2.14. + v2.1.4 ====== diff --git a/ansible_collections/cloud/common/FILES.json b/ansible_collections/cloud/common/FILES.json index a23528a12..29eab6109 100644 --- a/ansible_collections/cloud/common/FILES.json +++ b/ansible_collections/cloud/common/FILES.json @@ -22,31 +22,45 @@ "format": 1 }, { - "name": ".github/workflows/changelog.yml", + "name": ".github/workflows/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "15ef7af9b356986f0ecad4c9b251c8bfb88d4e40ad2ff1ae9e23127df0be8a29", + "chksum_sha256": "d79e90d491c634f11cb0c90b343a543544c5d0069b66ff973db4cf9dfd1a69ae", "format": 1 }, { - "name": ".github/workflows/linters.yml", + "name": ".github/workflows/galaxy-import.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53ea8cad53e067156aa4bdd432fc05371d3c4e8e82b06ad77d42bed22ac165e1", + "chksum_sha256": "cfdc3943bfd350aafb21a8302e00f258be92e7e8814a0d38d6b2e2509fa7424d", "format": 1 }, { - "name": ".github/workflows/sanity_and_units.yml", + "name": ".github/workflows/integration-tests-kubernetes-core.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff67be1c0f4fbfa795ca723ca75c5339d3c641206828a2bd1a0d2a683d753a92", + "chksum_sha256": "3180ac91513fe29c13a4d8e5ceaaf16ac17b6d66dbc1082905d4852ec949161a", "format": 1 }, { - "name": ".github/workflows/unit-ansible-2.9.yml", + "name": ".github/workflows/linters.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6da10d31e601196c276d4e14f66499beb0f1f55208eb8e71d00fc3b600d82dfa", + "chksum_sha256": "531ddd71a6d54968db38885ced1ad449fd7cfa5e1199d964930c8c9098075eeb", + "format": 1 + }, + { + "name": ".github/workflows/sanity-tests.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "37ddc7e3759d5301ba36f07850cbdb8b57be08e4d3cd00cabb213b7ceda6df1a", + "format": 1 + }, + { + "name": ".github/workflows/unit-tests.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ed9f251f4839069f01c8ce39aa6f26ab588c53c033745ec8201e6a9a494049eb", "format": 1 }, { @@ -74,14 +88,14 @@ "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ad23e3b397d21ce7df780bbb5d5eab1297b3ac88973cec18e0371ab60d6b6ffb", + "chksum_sha256": "f2f85521f8cd85c3c60c6da2cf089304cb78d121d72bf31de15a3fed3b8c6fe8", "format": 1 }, { "name": "changelogs/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ed2dc9b735615a898401d871695d090d74624a617d80f7bde0b59abd79fae6e", + "chksum_sha256": "2308bb8bfb8dc1b7092ff7f8c200741cbc09ed16d5826e0c4e03b3eaff1bba1e", "format": 1 }, { @@ -95,7 +109,7 @@ "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "535568680e7ecac4940996890d5c31e4b43aa1bfe90452610902fade3e8b1521", + "chksum_sha256": "4833e2900333e7a035d7e0f63f6d55777c2697476ee0a2f9bfcf250167c7571d", "format": 1 }, { @@ -116,7 +130,7 @@ "name": "plugins/lookup/turbo_demo.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "36a1cac200d74a970d78687b8ce86c3e18c201f6bb4d9da7d1c4b5448f822eda", + "chksum_sha256": "0aab0a3a5b2f39be78c9b3be466c42637b75a6c6a7da8483b6765a6891cedb6d", "format": 1 }, { @@ -137,7 +151,7 @@ "name": "plugins/module_utils/turbo/common.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0cb8fa84023f04361a4e2c4fc87ab381e5b238772ab34ec0b258a0fcc2868e14", + "chksum_sha256": "8341ffad8a1d4dd96c3584646f0d38eec7c47caa678eca4a582b1e4938391c59", "format": 1 }, { @@ -151,14 +165,14 @@ "name": "plugins/module_utils/turbo/module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4489bf197e29debb7b46d3ebbd306e5feec859a94f7f18ff87f73b15fe562801", + "chksum_sha256": "130af918b12ad53df7158c5d56f8a222af029c577170d4352f06e326c5e762a0", "format": 1 }, { "name": "plugins/module_utils/turbo/server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9de1df379e205f0e9be29cba7480aadfb00c9ed164e9d29de0f5200bfb1874d2", + "chksum_sha256": "1303dc84dda62ae268ed4ca1d50c9012566b17f5db0aa32019ef4da26199a27a", "format": 1 }, { @@ -186,7 +200,7 @@ "name": "plugins/modules/turbo_fail.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2a80de946f0b687e6b2182c74a467279e87009a5aadbf5344ce7412ca94fce1", + "chksum_sha256": "5d3fa60223660cb593204aea0dd000698e7f529f95b4122d39347749ab869001", "format": 1 }, { @@ -214,7 +228,7 @@ "name": "plugins/plugin_utils/turbo/lookup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ddd2a780197cf8c3540c9a831b91b74ba40b566345e122ed2f15faeaa44967eb", + "chksum_sha256": "b3d083533f54f550238857bbbe39d655a9474d1e996553dc7049e0c3584afd54", "format": 1 }, { @@ -399,6 +413,13 @@ "chksum_sha256": "6ade72ead3ea9bfa27bc079c9f4f9dddc8fc29e3e5ae5cabb2e2e7666317485e", "format": 1 }, + { + "name": "tests/sanity/ignore-2.17.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6ade72ead3ea9bfa27bc079c9f4f9dddc8fc29e3e5ae5cabb2e2e7666317485e", + "format": 1 + }, { "name": "tests/sanity/ignore-2.9.txt", "ftype": "file", @@ -438,21 +459,21 @@ "name": "tests/unit/plugins/module_utils/turbo/conftest.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99a3352cf6215e0a3d767c048fbfefa66aec5cead1330b0b029975e019faeb8c", + "chksum_sha256": "997a8268b74ac7460a1e39daeb7b2f978524fc07d70993d156292448a7cdf121", "format": 1 }, { "name": "tests/unit/plugins/module_utils/turbo/test_module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b7ed86bd31bd4bf172cf9e8b6d1c8715bd0d6128713e6b59418b55ad33ad417", + "chksum_sha256": "351f4ad8a805a46d6e11bcfe96b1c5401992e6a40621f38f276fb4f05e27c2ca", "format": 1 }, { "name": "tests/unit/plugins/module_utils/turbo/test_turbo_module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ec409210b6c84bc4418771ffa6a5543742dc78e710246405bd17a9bc7326850", + "chksum_sha256": "f49b4ec56f820203d6deec10381b40c9380bae608d181d1eef0909d3a4e166e0", "format": 1 }, { @@ -466,14 +487,21 @@ "name": "tests/config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "232da28b965d5e057d65173ffa9e4f3d63c87b537001450bcb033199309d16ae", + "chksum_sha256": "8bbb85dbed589969d508c46298ad61fdedee8fad8ffc34599f6acf75b968b75d", + "format": 1 + }, + { + "name": ".ansible-lint", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "85ca041c12994aa38be955f3a2d0e82103bb29820699a197d82acac379508a47", "format": 1 }, { "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37e82a484e32691dd70a237e28b0eb0300cb77d98aaa48a1380f9698a156be40", + "chksum_sha256": "fbab623a1c59e912ead2d686731932617801d94eacec8de130fd1c0961cfd12e", "format": 1 }, { @@ -494,7 +522,7 @@ "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "77bab797767ac83a7a73e0314aea2370f5a3c5cee2d220c7dcd55ac7513486a1", + "chksum_sha256": "30cfbc272568ad7f90b59b57fdb532f79d2520397fd5e1a8c7f82cfa01f1cbf0", "format": 1 }, { @@ -529,7 +557,7 @@ "name": "tox.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e318271cca12b953614d48cd35f887f92fb7463fdeb0a143c445cc34948246f0", + "chksum_sha256": "ff9067a4b379b1d44c8f44c158276563c1e752495d9689c319e3e158143fbce0", "format": 1 } ], diff --git a/ansible_collections/cloud/common/MANIFEST.json b/ansible_collections/cloud/common/MANIFEST.json index caed94f54..42bb48e59 100644 --- a/ansible_collections/cloud/common/MANIFEST.json +++ b/ansible_collections/cloud/common/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "cloud", "name": "common", - "version": "2.1.4", + "version": "3.0.0", "authors": [ "Ansible (https://github.com/ansible)" ], @@ -24,7 +24,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "272fd687d00aee319c1ee38dfe287bf5aa9bd45eebe0f550ff61e294e7afcb8e", + "chksum_sha256": "9039143a606bdc887a65831ff7f3db6ee6e3aa34151dba0b3b5454d806717868", "format": 1 }, "format": 1 diff --git a/ansible_collections/cloud/common/README.md b/ansible_collections/cloud/common/README.md index ce1fcede9..42debccdc 100644 --- a/ansible_collections/cloud/common/README.md +++ b/ansible_collections/cloud/common/README.md @@ -8,7 +8,7 @@ More content may be included later. # Requirements -- ansible_turbo.module requires Python 3.6 and Ansible 2.13.0 or greater. +- ansible_turbo.module requires Python 3.9 and Ansible 2.14.0 or greater. ## Ansible Turbo Module diff --git a/ansible_collections/cloud/common/changelogs/changelog.yaml b/ansible_collections/cloud/common/changelogs/changelog.yaml index 4ca93cad3..96eaa9707 100644 --- a/ansible_collections/cloud/common/changelogs/changelog.yaml +++ b/ansible_collections/cloud/common/changelogs/changelog.yaml @@ -156,3 +156,15 @@ releases: - release_summary.yml - update_ansible_version.yml release_date: '2023-08-14' + 3.0.0: + changes: + breaking_changes: + - Bump minimum Python supported version to 3.9. + - Remove support for ansible-core < 2.14. + release_summary: This major release drops support for ansible-core versions lower + than 2.14 and Python versions lower than 3.9. + fragments: + - 20231114-ansible-version.yml + - organize_github_actions.yaml + - release_summary.yml + release_date: '2023-11-16' diff --git a/ansible_collections/cloud/common/changelogs/config.yaml b/ansible_collections/cloud/common/changelogs/config.yaml index 6b49df020..d95a02590 100644 --- a/ansible_collections/cloud/common/changelogs/config.yaml +++ b/ansible_collections/cloud/common/changelogs/config.yaml @@ -9,21 +9,21 @@ notesdir: fragments prelude_section_name: release_summary prelude_section_title: Release Summary sections: -- - major_changes - - Major Changes -- - minor_changes - - Minor Changes -- - breaking_changes - - Breaking Changes / Porting Guide -- - deprecated_features - - Deprecated Features -- - removed_features - - Removed Features (previously deprecated) -- - security_fixes - - Security Fixes -- - bugfixes - - Bugfixes -- - known_issues - - Known Issues + - - major_changes + - Major Changes + - - minor_changes + - Minor Changes + - - breaking_changes + - Breaking Changes / Porting Guide + - - deprecated_features + - Deprecated Features + - - removed_features + - Removed Features (previously deprecated) + - - security_fixes + - Security Fixes + - - bugfixes + - Bugfixes + - - known_issues + - Known Issues title: cloud.common trivial_section_name: trivial diff --git a/ansible_collections/cloud/common/meta/runtime.yml b/ansible_collections/cloud/common/meta/runtime.yml index 873e7979a..be99ccf4b 100644 --- a/ansible_collections/cloud/common/meta/runtime.yml +++ b/ansible_collections/cloud/common/meta/runtime.yml @@ -1,2 +1,2 @@ --- -requires_ansible: '>=2.13.0' +requires_ansible: '>=2.14.0' diff --git a/ansible_collections/cloud/common/plugins/lookup/turbo_demo.py b/ansible_collections/cloud/common/plugins/lookup/turbo_demo.py index 88778cd67..4d69b0d01 100644 --- a/ansible_collections/cloud/common/plugins/lookup/turbo_demo.py +++ b/ansible_collections/cloud/common/plugins/lookup/turbo_demo.py @@ -44,7 +44,7 @@ if True: # pylint: disable=using-constant-test async def execute(terms, variables, playbook_vars): result = [] - result.append("running from pid: {pid}".format(pid=os.getpid())) + result.append(f"running from pid: {os.getpid()}") if playbook_vars is not None: result += [ variables["vars"].get(x) for x in playbook_vars if x in variables["vars"] @@ -57,7 +57,7 @@ async def execute(terms, variables, playbook_vars): if fname == __file__: continue - result.append("turbo_demo_counter: {0}".format(counter())) + result.append(f"turbo_demo_counter: {counter()}") return result diff --git a/ansible_collections/cloud/common/plugins/module_utils/turbo/common.py b/ansible_collections/cloud/common/plugins/module_utils/turbo/common.py index e5ad19383..ebe9b0c2a 100644 --- a/ansible_collections/cloud/common/plugins/module_utils/turbo/common.py +++ b/ansible_collections/cloud/common/plugins/module_utils/turbo/common.py @@ -25,18 +25,16 @@ # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # +import json import os +import pickle import socket +import subprocess import sys import time -import subprocess -import pickle from contextlib import contextmanager -import json -from .exceptions import ( - EmbeddedModuleUnexpectedFailure, -) +from .exceptions import EmbeddedModuleUnexpectedFailure class AnsibleTurboSocket: @@ -107,7 +105,7 @@ class AnsibleTurboSocket: return result except json.decoder.JSONDecodeError: raise EmbeddedModuleUnexpectedFailure( - "Cannot decode plugin answer: {0}".format(raw_answer) + f"Cannot decode plugin answer: {raw_answer}" ) def close(self): diff --git a/ansible_collections/cloud/common/plugins/module_utils/turbo/module.py b/ansible_collections/cloud/common/plugins/module_utils/turbo/module.py index c2f9d667e..64b9fba42 100644 --- a/ansible_collections/cloud/common/plugins/module_utils/turbo/module.py +++ b/ansible_collections/cloud/common/plugins/module_utils/turbo/module.py @@ -32,12 +32,10 @@ import sys import tempfile import ansible.module_utils.basic -from .exceptions import ( - EmbeddedModuleSuccess, - EmbeddedModuleFailure, -) import ansible_collections.cloud.common.plugins.module_utils.turbo.common +from .exceptions import EmbeddedModuleFailure, EmbeddedModuleSuccess + if False: # pylint: disable=using-constant-test from .server import please_include_me diff --git a/ansible_collections/cloud/common/plugins/module_utils/turbo/server.py b/ansible_collections/cloud/common/plugins/module_utils/turbo/server.py index 04ddf67f3..2769580b4 100644 --- a/ansible_collections/cloud/common/plugins/module_utils/turbo/server.py +++ b/ansible_collections/cloud/common/plugins/module_utils/turbo/server.py @@ -27,31 +27,30 @@ # import argparse import asyncio -from datetime import datetime + +# py38 only, See: https://github.com/PyCQA/pylint/issues/2976 +import collections # pylint: disable=syntax-error import importlib # py38 only, See: https://github.com/PyCQA/pylint/issues/2976 import inspect # pylint: disable=syntax-error import io import json - -# py38 only, See: https://github.com/PyCQA/pylint/issues/2976 -import collections # pylint: disable=syntax-error import os +import pickle import signal import sys import traceback +import uuid import zipfile +from datetime import datetime from zipimport import zipimporter -import pickle -import uuid sys_path_lock = None env_lock = None import ansible.module_utils.basic - please_include_me = "bar" @@ -180,8 +179,8 @@ class EmbeddedModule: from .exceptions import ( EmbeddedModuleFailure, - EmbeddedModuleUnexpectedFailure, EmbeddedModuleSuccess, + EmbeddedModuleUnexpectedFailure, ) # monkeypatching to pass the argument to the module, this is not diff --git a/ansible_collections/cloud/common/plugins/modules/turbo_fail.py b/ansible_collections/cloud/common/plugins/modules/turbo_fail.py index 76be87160..eae1ce2a2 100644 --- a/ansible_collections/cloud/common/plugins/modules/turbo_fail.py +++ b/ansible_collections/cloud/common/plugins/modules/turbo_fail.py @@ -28,7 +28,7 @@ EXAMPLES = r""" - name: Fail with additional arguments cloud.common.turbo_fail: params: - test: "ansible" + test: "ansible" """ diff --git a/ansible_collections/cloud/common/plugins/plugin_utils/turbo/lookup.py b/ansible_collections/cloud/common/plugins/plugin_utils/turbo/lookup.py index 627f665fc..d0cc6d862 100644 --- a/ansible_collections/cloud/common/plugins/plugin_utils/turbo/lookup.py +++ b/ansible_collections/cloud/common/plugins/plugin_utils/turbo/lookup.py @@ -27,8 +27,8 @@ import os -from ansible.plugins.lookup import LookupBase import ansible_collections.cloud.common.plugins.module_utils.turbo.common +from ansible.plugins.lookup import LookupBase from ansible_collections.cloud.common.plugins.module_utils.turbo.exceptions import ( EmbeddedModuleUnexpectedFailure, ) @@ -75,9 +75,9 @@ class TurboLookupBase(LookupBase): if idx != -1: name = name[:idx] - self.__socket_path = os.environ[ - "HOME" - ] + "/.ansible/tmp/turbo_lookup.{0}.socket".format(name) + self.__socket_path = ( + os.environ["HOME"] + f"/.ansible/tmp/turbo_lookup.{name}.socket" + ) return self.__socket_path def execute(self, terms, variables=None, **kwargs): diff --git a/ansible_collections/cloud/common/tests/config.yml b/ansible_collections/cloud/common/tests/config.yml index faff92e33..05012468b 100644 --- a/ansible_collections/cloud/common/tests/config.yml +++ b/ansible_collections/cloud/common/tests/config.yml @@ -1,2 +1,2 @@ modules: - python_requires: '>=3.6' + python_requires: '>=3.9' diff --git a/ansible_collections/cloud/common/tests/sanity/ignore-2.17.txt b/ansible_collections/cloud/common/tests/sanity/ignore-2.17.txt new file mode 100644 index 000000000..e7b94a256 --- /dev/null +++ b/ansible_collections/cloud/common/tests/sanity/ignore-2.17.txt @@ -0,0 +1 @@ +plugins/module_utils/turbo/server.py pylint:ansible-bad-module-import diff --git a/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/conftest.py b/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/conftest.py index 8f8f44e78..0b7006b27 100644 --- a/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/conftest.py +++ b/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/conftest.py @@ -6,7 +6,6 @@ import json import pytest - from ansible.module_utils import basic from ansible.module_utils.common.text.converters import to_bytes diff --git a/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/test_module.py b/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/test_module.py index 61a02e145..ecfb1d60f 100644 --- a/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/test_module.py +++ b/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/test_module.py @@ -6,7 +6,6 @@ import sys import pytest - from ansible_collections.cloud.common.plugins.module_utils.turbo.module import ( AnsibleTurboModule, ) diff --git a/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/test_turbo_module.py b/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/test_turbo_module.py index 6401046a0..1d24d9b60 100644 --- a/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/test_turbo_module.py +++ b/ansible_collections/cloud/common/tests/unit/plugins/module_utils/turbo/test_turbo_module.py @@ -3,22 +3,24 @@ # GNU General Public License v3.0+ # (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# py38 only, See: https://github.com/PyCQA/pylint/issues/2976 -from unittest.mock import Mock, ANY # pylint: disable=syntax-error -import time -import pytest +import os import socket import subprocess -import os -import ansible.module_utils.basic -from pathlib import Path import sys +import time +from pathlib import Path + +# py38 only, See: https://github.com/PyCQA/pylint/issues/2976 +from unittest.mock import ANY, Mock # pylint: disable=syntax-error + +import ansible.module_utils.basic +import ansible_collections.cloud.common.plugins.module_utils.turbo.common as turbo_common +import pytest from ansible_collections.cloud.common.plugins.module_utils.turbo.module import ( - get_collection_name_from_path, expand_argument_specs_aliases, + get_collection_name_from_path, prepare_args, ) -import ansible_collections.cloud.common.plugins.module_utils.turbo.common as turbo_common @pytest.mark.parametrize( diff --git a/ansible_collections/cloud/common/tox.ini b/ansible_collections/cloud/common/tox.ini index db838f25d..ecb7669df 100644 --- a/ansible_collections/cloud/common/tox.ini +++ b/ansible_collections/cloud/common/tox.ini @@ -3,25 +3,47 @@ minversion = 1.4.2 envlist = linters skipsdist = True +[common] + +format_dirs = {toxinidir}/plugins {toxinidir}/tests + [testenv] deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt install_command = pip install {opts} {packages} +[testenv:isort] +deps = + isort +commands = + isort --profile black {[common]format_dirs} + +[testenv:flynt] +deps = + flynt +commands = + flynt {[common]format_dirs} + [testenv:black] +depends = + flynt, isort deps = black >=23.0, <24.0 commands = - black {toxinidir}/plugins {toxinidir}/tests/unit/ + black {[common]format_dirs} [testenv:linters] install_command = pip install {opts} {packages} deps = {[testenv:black]deps} + {[testenv:isort]deps} + {[testenv:flynt]deps} flake8 commands = - black -v --check {toxinidir}/plugins {toxinidir}/tests/unit/ - flake8 {posargs} {toxinidir}/plugins {toxinidir}/tests/unit/ + flynt {[common]format_dirs} + isort --profile black {[common]format_dirs} + black -v --check {[common]format_dirs} + flake8 {posargs} {[common]format_dirs} [flake8] # E123, E125 skipped as they are invalid PEP-8. diff --git a/ansible_collections/community/aws/.github/workflows/docs-pr.yml b/ansible_collections/community/aws/.github/workflows/docs-pr.yml index 35b58df24..e1f6ac1f6 100644 --- a/ansible_collections/community/aws/.github/workflows/docs-pr.yml +++ b/ansible_collections/community/aws/.github/workflows/docs-pr.yml @@ -5,7 +5,6 @@ concurrency: on: pull_request_target: types: [opened, synchronize, reopened, closed] - env: GHP_BASE_URL: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }} @@ -22,6 +21,8 @@ jobs: intersphinx-links: | amazon_aws:https://ansible-collections.github.io/amazon.aws/branch/main/ ansible_devel:https://docs.ansible.com/ansible-core/devel/ + artifact-name: ${{ github.event.repository.name }}_validate_docs_${{ github.event.pull_request.head.sha }} + build-docs: permissions: diff --git a/ansible_collections/community/aws/.github/workflows/sanity.yml b/ansible_collections/community/aws/.github/workflows/sanity.yml index 161dabfe2..1cd6a6ba3 100644 --- a/ansible_collections/community/aws/.github/workflows/sanity.yml +++ b/ansible_collections/community/aws/.github/workflows/sanity.yml @@ -8,3 +8,4 @@ jobs: uses: ansible-network/github_actions/.github/workflows/sanity.yml@main with: matrix_include: "[]" + collection_pre_install: '-r source/tests/sanity/requirements.yml' diff --git a/ansible_collections/community/aws/CHANGELOG.rst b/ansible_collections/community/aws/CHANGELOG.rst index b47d79fe4..5e7208f47 100644 --- a/ansible_collections/community/aws/CHANGELOG.rst +++ b/ansible_collections/community/aws/CHANGELOG.rst @@ -4,6 +4,58 @@ community.aws Release Notes .. contents:: Topics +v8.0.0 +====== + +Release Summary +--------------- + +This major release brings several new features, bug fixes, and deprecated features. It also includes the removal of several modules that have been migrated to the ``amazon.aws`` collection. We have also removed support for ``ansible-core<2.15``. + +Minor Changes +------------- + +- api_gateway - use fstrings where appropriate (https://github.com/ansible-collections/amazon.aws/pull/1962). +- api_gateway_info - use fstrings where appropriate (https://github.com/ansible-collections/amazon.aws/pull/1962). +- community.aws collection - apply isort code formatting to ensure consistent formatting of code (https://github.com/ansible-collections/community.aws/pull/1962) +- ecs_taskdefinition - Add parameter ``runtime_platform`` (https://github.com/ansible-collections/community.aws/issues/1891). +- eks_nodegroup - ensure wait also waits for deletion to complete when ``wait==True`` (https://github.com/ansible-collections/community.aws/pull/1994). +- elb_network_lb - add support for Application-Layer Protocol Negotiation (ALPN) policy ``AlpnPolicy`` for TLS listeners (https://github.com/ansible-collections/community.aws/issues/1566). +- elb_network_lb - add the possibly to update ``SslPolicy`` and ``Certificates`` for TLS listeners (). + +Breaking Changes / Porting Guide +-------------------------------- + +- The community.aws collection has dropped support for ``botocore<1.29.0`` and ``boto3<1.26.0``. Most modules will continue to work with older versions of the AWS SDK, however compatability with older versions of the SDK is not guaranteed and will not be tested. When using older versions of the SDK a warning will be emitted by Ansible (https://github.com/ansible-collections/amazon.aws/pull/1763). +- aws_region_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.aws_region_info``. +- aws_s3_bucket_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.aws_s3_bucket_info``. +- community.aws collection - Support for ansible-core < 2.15 has been dropped (https://github.com/ansible-collections/community.aws/pull/2074). +- community.aws collection - due to the AWS SDKs announcing the end of support for Python less than 3.7 (https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/) support for Python less than 3.7 by this collection wss been deprecated in release 6.0.0 and removed in release 7.0.0. (https://github.com/ansible-collections/amazon.aws/pull/1763). +- iam_access_key - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_access_key``. +- iam_access_key_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_access_key_info``. +- iam_group - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_group`` (https://github.com/ansible-collections/community.aws/pull/1945). +- iam_managed_policy - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_managed_policy`` (https://github.com/ansible-collections/community.aws/pull/1954). +- iam_mfa_device_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_mfa_device_info`` (https://github.com/ansible-collections/community.aws/pull/1953). +- iam_password_policy - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_password_policy``. +- iam_role - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_role`` (https://github.com/ansible-collections/community.aws/pull/1948). +- iam_role_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_role_info`` (https://github.com/ansible-collections/community.aws/pull/1948). +- s3_bucket_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.s3_bucket_info``. +- sts_assume_role - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.sts_assume_role``. + +Deprecated Features +------------------- + +- aws_glue_connection - updated the deprecation for removal of the ``connection_parameters`` return key from ``after 2024-06-01`` to release version ``9.0.0``, it is being replaced by the ``raw_connection_parameters`` key (https://github.com/ansible-collections/community.aws/pull/518). +- ecs_cluster - updated the deprecation for updated default of ``purge_capacity_providers``, the current default of ``False`` will be changed to ``True`` in release ``9.0.0``. To maintain the current behaviour explicitly set ``purge_capacity_providers=False`` (https://github.com/ansible-collections/community.aws/pull/1640). +- ecs_service - updated the deprecation for updated default of ``purge_placement_constraints``, the current default of ``False`` will be changed to ``True`` in release ``9.0.0``. To maintain the current behaviour explicitly set ``purge_placement_constraints=False`` (https://github.com/ansible-collections/community.aws/pull/1716). +- ecs_service - updated the deprecation for updated default of ``purge_placement_strategy``, the current default of ``False`` will be changed to ``True`` in release ``9.0.0``. To maintain the current behaviour explicitly set ``purge_placement_strategy=False`` (https://github.com/ansible-collections/community.aws/pull/1716). + +Bugfixes +-------- + +- mq_broker - ensure broker is created with ``tags`` when passed (https://github.com/ansible-collections/community.aws/issues/1832). +- opensearch - Don't try to read a non existing key from the domain config (https://github.com/ansible-collections/community.aws/pull/1910). + v7.2.0 ====== diff --git a/ansible_collections/community/aws/FILES.json b/ansible_collections/community/aws/FILES.json index 58ea3a1a7..10e78ca13 100644 --- a/ansible_collections/community/aws/FILES.json +++ b/ansible_collections/community/aws/FILES.json @@ -81,7 +81,7 @@ "name": ".github/workflows/docs-pr.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "797c205c9482914beb2d806d0ce6cbd5e77beaadfbea32841ae4f873b7c6b0db", + "chksum_sha256": "ce0987aeaf6d9a48a7d97e282b8aa9ed3683b7c15cc9bb4f13fbcad8755de67c", "format": 1 }, { @@ -116,7 +116,7 @@ "name": ".github/workflows/sanity.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "371f8aed1f995954dce749b4017b61c7aabac004e0d3123db97e691b48bca918", + "chksum_sha256": "3a65efca8ca7b3821ed9ce45fe2b4a4a5f075c801445a8d9d29ff9fbdb5a79d1", "format": 1 }, { @@ -179,7 +179,7 @@ "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4a404a462b4858f815f4cdd2b1651a4301a2cc2f868ac9f1ca14bfcec74d313", + "chksum_sha256": "b93e59b4985eef906a9ccb5e895aa6c6ef3dfc261d57e8f824888a3a84c18113", "format": 1 }, { @@ -214,7 +214,7 @@ "name": "docs/docsite/rst/CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56d5b1f84c1fe53d65c7450a967427dd1e64a5ae6f5029e786b617686a98eb69", + "chksum_sha256": "9144b2cb0ea190269c4f4a0ac8bea114e7792a32974eab29e638f18d3806506f", "format": 1 }, { @@ -228,7 +228,7 @@ "name": "docs/docsite/links.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d0d10fb4e0294eb17b32c582b70a50aa39d01c0a272c01818f7044ce92b77196", + "chksum_sha256": "23a207a5372afdc2a4d1b7ac32edda6d5a44942ff2407d75c5c82cdb771f2cf6", "format": 1 }, { @@ -242,7 +242,7 @@ "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "73da55c9ac6fc4170daa33c7085e944bb0c61bfa045bd8f0794f66c27bacfb36", + "chksum_sha256": "0fdf412df4ad8b270934990e284254265136adfd2983f46611180d9b1ebc8530", "format": 1 }, { @@ -305,7 +305,7 @@ "name": "plugins/module_utils/common.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0f464ad15f459dc646c9596544ec189cf67ff07225c4a22fdba46b0daae73cdc", + "chksum_sha256": "0ba2337c1a2a08e6e29d15638fc590102ad99317a7b934255c0480cc265a5ce1", "format": 1 }, { @@ -459,7 +459,7 @@ "name": "plugins/modules/autoscaling_launch_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "30a3e098336211e85205b737758c55c7b5fb6913d9f1e5edcb24d899199a6239", + "chksum_sha256": "abe2019af8b3dc1433bb75f628f8319bb27f789122d51d531c35ea5635ecd12d", "format": 1 }, { @@ -872,7 +872,7 @@ "name": "plugins/modules/ecs_cluster.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "717a804b4d98129db71c2dbca9ec78a10c7415e57f8ed3a9811bf114cd7c247d", + "chksum_sha256": "e240a2a7c90f123f85e1e632d1c798333b07ff9bf2f761bc9691604e9f5feb67", "format": 1 }, { @@ -886,7 +886,7 @@ "name": "plugins/modules/ecs_service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ffb7dd1444fdbaa495d7429b4aaeed4ac117cf04a54430b33493b28b7d6da389", + "chksum_sha256": "d7ab454817b508af19b0a7374a28294bd19e427bb76fca3075eb7660b851b135", "format": 1 }, { @@ -928,7 +928,7 @@ "name": "plugins/modules/efs.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5dc61da6d44ae7f0268f19dbd7556a210fbcf67292e7ec9ef2c5e7818a19de0", + "chksum_sha256": "d7bc2a6995b409a71bd3480d1670a2a7f013f57d79b357f2ab312642410014e8", "format": 1 }, { @@ -1026,7 +1026,7 @@ "name": "plugins/modules/elb_network_lb.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae3cf0fe9f7072739bf7828b89dce1586b1e042a064c7aa7908e0db68e1e3077", + "chksum_sha256": "e1ce3a1372cd72bf0487d0e01519d0c6ffc51d4c9d0509000f179f9f507fe108", "format": 1 }, { @@ -1061,7 +1061,7 @@ "name": "plugins/modules/glue_connection.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8808e4e2e90365eb34abd7d5496058406abee0e8a7f83241b88ddeeaab66c316", + "chksum_sha256": "ca10ed85814c5ce188a7eef319c8fa33427108a31672acd6742b17eaf57c118c", "format": 1 }, { @@ -2832,7 +2832,7 @@ "name": "tests/integration/targets/config/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2daab797eb69d23bff5a3d30e0f05384d037c650dda9f83f12e3d932be107178", + "chksum_sha256": "556fe10a1f2c4767e915ead7ae49c863ab5b5a9d7361e6dc5ec62bc3ef5fa1d0", "format": 1 }, { @@ -3763,7 +3763,7 @@ "name": "tests/integration/targets/ec2_launch_template/tasks/iam_instance_role.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7761b4244b3a2abaf07cb36e48f7c736a8da062542fbce5a63bd030dbda2b3e", + "chksum_sha256": "7f35ef180a55a6260a58f6b7696324c7925367db487f380060fbcdfb48ad8eba", "format": 1 }, { @@ -4400,7 +4400,7 @@ "name": "tests/integration/targets/ecs_cluster/tasks/20_ecs_service.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7c2cef87ceeb6202914dd1e3afab3d965bc3309037e08f0e96bfbd273583674", + "chksum_sha256": "76fb818fd8ec89673da120d5b341ac4a563e6fcd77de232e89872e43c2e5f4b2", "format": 1 }, { @@ -4652,7 +4652,7 @@ "name": "tests/integration/targets/eks_cluster/tasks/full_test.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4eb39903b378d06cb7f278a0df8f58d36a168a97a412407d3ea73e299c37d1ad", + "chksum_sha256": "5f1622993af6f614b524155cf767b888cf9d28c8818825992736f419e810bbae", "format": 1 }, { @@ -4743,14 +4743,14 @@ "name": "tests/integration/targets/eks_fargate_profile/tasks/create_eks_cluster.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "568f82698281c509f6b951355dc20ccd4e119533a10a53c0fc8b3d24887a599c", + "chksum_sha256": "10cafe1f4d9ae726ab812399c5c29732f2f167211e732f92533dceb74d3e0968", "format": 1 }, { "name": "tests/integration/targets/eks_fargate_profile/tasks/full_test.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3ae89012d746b87dc80b23d7ca863261f883f4a3c918379eb5a7abb0c76ecad", + "chksum_sha256": "d1de8e30e82ebbc18ac3a83b31b268690840eb266723cbaf99af36993843edd4", "format": 1 }, { @@ -4827,14 +4827,14 @@ "name": "tests/integration/targets/eks_nodegroup/tasks/dependecies.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a878bdf097055ba6a0007ec40d00ec9371c99f1a306eea6e8f3b87b06f9ee7dc", + "chksum_sha256": "04b27e809851b82e0d08f900f1126271749e2ed45ce8c197b6af9f709608b14c", "format": 1 }, { "name": "tests/integration/targets/eks_nodegroup/tasks/full_test.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e82734eafe0d1922e57f535fcf82ddb27b485d2bf21e14814f569a622501b0ef", + "chksum_sha256": "28fa83a08c7d590b0e8b7e780846615e95af0d3eff5a91579619acf7e883e4c4", "format": 1 }, { @@ -4848,7 +4848,7 @@ "name": "tests/integration/targets/eks_nodegroup/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aab55ff735b17633ec85d2050fea115ef0082e8246cba061964b335a60765b93", + "chksum_sha256": "f9fe17586a25ccaae77eb0ed119358964b244bef37696d37152ef3964a0a7afe", "format": 1 }, { @@ -5289,7 +5289,7 @@ "name": "tests/integration/targets/elb_network_lb/tasks/test_modifying_nlb_listeners.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1553456cadcd682ea026756c61d8a54d442fdde03502d4df21a3c7a35f4814b4", + "chksum_sha256": "3b0103af8fa9307d50b9447b0883a3f59d0b468ed0f5c2979b7c5577535b93c8", "format": 1 }, { @@ -5415,7 +5415,7 @@ "name": "tests/integration/targets/elb_target/tasks/lambda_target.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a17e3f3cbd23a65e7aec0ffb1da5e15ea7241d33d5a0ea2323ec9eccd15c349c", + "chksum_sha256": "68d4b1df43e41c0f7760570c5714031d52d6fbfd255000b44ce6b9e7459de525", "format": 1 }, { @@ -9093,34 +9093,6 @@ "chksum_sha256": null, "format": 1 }, - { - "name": "tests/sanity/ignore-2.10.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/sanity/ignore-2.11.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/sanity/ignore-2.12.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/sanity/ignore-2.13.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, { "name": "tests/sanity/ignore-2.14.txt", "ftype": "file", @@ -9149,13 +9121,6 @@ "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, - { - "name": "tests/sanity/ignore-2.9.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, { "name": "tests/sanity/requirements.yml", "ftype": "file", @@ -13318,7 +13283,7 @@ "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56d5b1f84c1fe53d65c7450a967427dd1e64a5ae6f5029e786b617686a98eb69", + "chksum_sha256": "9144b2cb0ea190269c4f4a0ac8bea114e7792a32974eab29e638f18d3806506f", "format": 1 }, { @@ -13339,7 +13304,7 @@ "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "258051287346af763659d20980984c8c5689e0b5d3e6ce2bdaa1f597a2013ded", + "chksum_sha256": "24929e84cb0cb18c0ff453ff508760b7b512054dacfbae2603af14db645b2195", "format": 1 }, { diff --git a/ansible_collections/community/aws/MANIFEST.json b/ansible_collections/community/aws/MANIFEST.json index 514454326..e42c37f99 100644 --- a/ansible_collections/community/aws/MANIFEST.json +++ b/ansible_collections/community/aws/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "community", "name": "aws", - "version": "7.2.0", + "version": "8.0.0", "authors": [ "Ansible (https://github.com/ansible)" ], @@ -17,10 +17,10 @@ "license": [], "license_file": "COPYING", "dependencies": { - "amazon.aws": ">=7.0.0,<8.0.0" + "amazon.aws": ">=8.0.0,<9.0.0" }, "repository": "https://github.com/ansible-collections/community.aws", - "documentation": "https://ansible-collections.github.io/community.aws/branch/stable-7/collections/community/aws/index.html", + "documentation": "https://ansible-collections.github.io/community.aws/branch/main/collections/community/aws/index.html", "homepage": "https://github.com/ansible-collections/community.aws", "issues": "https://github.com/ansible-collections/community.aws/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc" }, @@ -28,7 +28,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "160883c33483553569816c9173e6073c59ded3c77bc8fdab656e7c72b1794d3a", + "chksum_sha256": "8b9fd0dd6d7d043e416b725482663568d8b4292445e17865acdad90551de476a", "format": 1 }, "format": 1 diff --git a/ansible_collections/community/aws/README.md b/ansible_collections/community/aws/README.md index ba02cf6db..dbdb43d4c 100644 --- a/ansible_collections/community/aws/README.md +++ b/ansible_collections/community/aws/README.md @@ -6,7 +6,7 @@ AWS related modules and plugins supported by the Ansible Cloud team are in the [ ## Ansible version compatibility -Tested with the Ansible Core >= 2.12.0 versions, and the current development version of Ansible. Ansible Core versions before 2.12.0 are not supported. +Tested with the Ansible Core >= 2.15.0 versions, and the current development version of Ansible. Ansible Core versions before 2.15.0 are not supported. Use community.aws 4.x.y if you are using Ansible 2.9 or Ansible Core 2.10. @@ -46,7 +46,7 @@ All support for the original AWS SDK `boto` was removed in release 4.0.0. ## Included content -See the complete list of collection content in the [Plugin Index](https://ansible-collections.github.io/community.aws/branch/stable-7/collections/community/aws/index.html#plugin-index). +See the complete list of collection content in the [Plugin Index](https://ansible-collections.github.io/community.aws/branch/stable-8/collections/community/aws/index.html#plugin-index). @@ -126,7 +126,7 @@ You can also join us on: ## Release notes -See the [rendered changelog](https://ansible-collections.github.io/community.aws/branch/stable-7/collections/community/aws/docsite/CHANGELOG.html) or the [raw generated changelog](https://github.com/ansible-collections/community.aws/tree/stable-7/CHANGELOG.rst). +See the [rendered changelog](https://ansible-collections.github.io/community.aws/branch/stable-8/collections/community/aws/docsite/CHANGELOG.html) or the [raw generated changelog](https://github.com/ansible-collections/community.aws/tree/stable-8/CHANGELOG.rst). ## Roadmap diff --git a/ansible_collections/community/aws/changelogs/changelog.yaml b/ansible_collections/community/aws/changelogs/changelog.yaml index e299d000e..beb6b030c 100644 --- a/ansible_collections/community/aws/changelogs/changelog.yaml +++ b/ansible_collections/community/aws/changelogs/changelog.yaml @@ -3755,3 +3755,123 @@ releases: name: dynamodb_table_info namespace: '' release_date: '2024-04-05' + 8.0.0: + changes: + breaking_changes: + - The community.aws collection has dropped support for ``botocore<1.29.0`` and + ``boto3<1.26.0``. Most modules will continue to work with older versions of + the AWS SDK, however compatability with older versions of the SDK is not guaranteed + and will not be tested. When using older versions of the SDK a warning will + be emitted by Ansible (https://github.com/ansible-collections/amazon.aws/pull/1763). + - aws_region_info - The module has been migrated from the ``community.aws`` + collection. Playbooks using the Fully Qualified Collection Name for this module + should be updated to use ``amazon.aws.aws_region_info``. + - aws_s3_bucket_info - The module has been migrated from the ``community.aws`` + collection. Playbooks using the Fully Qualified Collection Name for this module + should be updated to use ``amazon.aws.aws_s3_bucket_info``. + - community.aws collection - Support for ansible-core < 2.15 has been dropped + (https://github.com/ansible-collections/community.aws/pull/2074). + - community.aws collection - due to the AWS SDKs announcing the end of support + for Python less than 3.7 (https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/) + support for Python less than 3.7 by this collection wss been deprecated in + release 6.0.0 and removed in release 7.0.0. (https://github.com/ansible-collections/amazon.aws/pull/1763). + - iam_access_key - The module has been migrated from the ``community.aws`` collection. + Playbooks using the Fully Qualified Collection Name for this module should + be updated to use ``amazon.aws.iam_access_key``. + - iam_access_key_info - The module has been migrated from the ``community.aws`` + collection. Playbooks using the Fully Qualified Collection Name for this module + should be updated to use ``amazon.aws.iam_access_key_info``. + - iam_group - The module has been migrated from the ``community.aws`` collection. + Playbooks using the Fully Qualified Collection Name for this module should + be updated to use ``amazon.aws.iam_group`` (https://github.com/ansible-collections/community.aws/pull/1945). + - iam_managed_policy - The module has been migrated from the ``community.aws`` + collection. Playbooks using the Fully Qualified Collection Name for this module + should be updated to use ``amazon.aws.iam_managed_policy`` (https://github.com/ansible-collections/community.aws/pull/1954). + - iam_mfa_device_info - The module has been migrated from the ``community.aws`` + collection. Playbooks using the Fully Qualified Collection Name for this module + should be updated to use ``amazon.aws.iam_mfa_device_info`` (https://github.com/ansible-collections/community.aws/pull/1953). + - iam_password_policy - The module has been migrated from the ``community.aws`` + collection. Playbooks using the Fully Qualified Collection Name for this module + should be updated to use ``amazon.aws.iam_password_policy``. + - iam_role - The module has been migrated from the ``community.aws`` collection. + Playbooks using the Fully Qualified Collection Name for this module should + be updated to use ``amazon.aws.iam_role`` (https://github.com/ansible-collections/community.aws/pull/1948). + - iam_role_info - The module has been migrated from the ``community.aws`` collection. + Playbooks using the Fully Qualified Collection Name for this module should + be updated to use ``amazon.aws.iam_role_info`` (https://github.com/ansible-collections/community.aws/pull/1948). + - s3_bucket_info - The module has been migrated from the ``community.aws`` collection. + Playbooks using the Fully Qualified Collection Name for this module should + be updated to use ``amazon.aws.s3_bucket_info``. + - sts_assume_role - The module has been migrated from the ``community.aws`` + collection. Playbooks using the Fully Qualified Collection Name for this module + should be updated to use ``amazon.aws.sts_assume_role``. + bugfixes: + - mq_broker - ensure broker is created with ``tags`` when passed (https://github.com/ansible-collections/community.aws/issues/1832). + - opensearch - Don't try to read a non existing key from the domain config (https://github.com/ansible-collections/community.aws/pull/1910). + deprecated_features: + - aws_glue_connection - updated the deprecation for removal of the ``connection_parameters`` + return key from ``after 2024-06-01`` to release version ``9.0.0``, it is being + replaced by the ``raw_connection_parameters`` key (https://github.com/ansible-collections/community.aws/pull/518). + - ecs_cluster - updated the deprecation for updated default of ``purge_capacity_providers``, + the current default of ``False`` will be changed to ``True`` in release ``9.0.0``. To + maintain the current behaviour explicitly set ``purge_capacity_providers=False`` + (https://github.com/ansible-collections/community.aws/pull/1640). + - ecs_service - updated the deprecation for updated default of ``purge_placement_constraints``, + the current default of ``False`` will be changed to ``True`` in release ``9.0.0``. To + maintain the current behaviour explicitly set ``purge_placement_constraints=False`` + (https://github.com/ansible-collections/community.aws/pull/1716). + - ecs_service - updated the deprecation for updated default of ``purge_placement_strategy``, + the current default of ``False`` will be changed to ``True`` in release ``9.0.0``. To + maintain the current behaviour explicitly set ``purge_placement_strategy=False`` + (https://github.com/ansible-collections/community.aws/pull/1716). + minor_changes: + - api_gateway - use fstrings where appropriate (https://github.com/ansible-collections/amazon.aws/pull/1962). + - api_gateway_info - use fstrings where appropriate (https://github.com/ansible-collections/amazon.aws/pull/1962). + - community.aws collection - apply isort code formatting to ensure consistent + formatting of code (https://github.com/ansible-collections/community.aws/pull/1962) + - ecs_taskdefinition - Add parameter ``runtime_platform`` (https://github.com/ansible-collections/community.aws/issues/1891). + - eks_nodegroup - ensure wait also waits for deletion to complete when ``wait==True`` + (https://github.com/ansible-collections/community.aws/pull/1994). + - elb_network_lb - add support for Application-Layer Protocol Negotiation (ALPN) + policy ``AlpnPolicy`` for TLS listeners (https://github.com/ansible-collections/community.aws/issues/1566). + - elb_network_lb - add the possibly to update ``SslPolicy`` and ``Certificates`` + for TLS listeners (). + release_summary: This major release brings several new features, bug fixes, + and deprecated features. It also includes the removal of several modules that + have been migrated to the ``amazon.aws`` collection. We have also removed + support for ``ansible-core<2.15``. + fragments: + - 1832-mq_broker_tags.yml + - 1891_ecs-task-definition-add-runtime-platform.yml + - 1904-route53_wait.yml + - 1962-isort.yml + - 20230623-black-cloudfront.yml + - 20230702-isort.yml + - 20230801-fix-linters.yml + - 20230906-galaxy.yml + - 20230906-route53_wait.yml + - 20230908-alias-cleanup.yml + - 20230915_migrate_iam_role_and_iam_role_info.yml + - 20231127-elb_network_lb-update-tls-listeners.yaml + - 20240408-efs-sanity_fix.yml + - 7.0.0-dev0.yml + - 8.0.0-increase-ansible-core-version.yml + - 8.0.0-release.yml + - 9-date-deprecations.yml + - boto3_equals.yml + - botocore.yml + - botocore_params-cleanup.yml + - eks_nodegroup-integration-wait-delete.yml + - galaxy_importer.yml + - migrate_aws_region_info.yml + - migrate_iam_access_key.yml + - migrate_iam_group.yml + - migrate_iam_managed_policy.yml + - migrate_iam_mfa_device_info.yml + - migrate_iam_password_policy.yml + - migrate_s3_bucket_info.yml + - migrate_sts_assume_role.yml + - opensearch_domainconfig_no_options.yaml + - python37.yml + - workflow-requirements.yml + release_date: '2024-05-20' diff --git a/ansible_collections/community/aws/docs/docsite/links.yml b/ansible_collections/community/aws/docs/docsite/links.yml index b38e48055..806723816 100644 --- a/ansible_collections/community/aws/docs/docsite/links.yml +++ b/ansible_collections/community/aws/docs/docsite/links.yml @@ -7,7 +7,7 @@ # functionality for your collection. edit_on_github: repository: ansible-collections/community.aws - branch: stable-7 + branch: stable-8 # If your collection root (the directory containing galaxy.yml) does not coincide with your # repository's root, you have to specify the path to the collection root here. For example, # if the collection root is in a subdirectory ansible_collections/community/REPO_NAME diff --git a/ansible_collections/community/aws/docs/docsite/rst/CHANGELOG.rst b/ansible_collections/community/aws/docs/docsite/rst/CHANGELOG.rst index b47d79fe4..5e7208f47 100644 --- a/ansible_collections/community/aws/docs/docsite/rst/CHANGELOG.rst +++ b/ansible_collections/community/aws/docs/docsite/rst/CHANGELOG.rst @@ -4,6 +4,58 @@ community.aws Release Notes .. contents:: Topics +v8.0.0 +====== + +Release Summary +--------------- + +This major release brings several new features, bug fixes, and deprecated features. It also includes the removal of several modules that have been migrated to the ``amazon.aws`` collection. We have also removed support for ``ansible-core<2.15``. + +Minor Changes +------------- + +- api_gateway - use fstrings where appropriate (https://github.com/ansible-collections/amazon.aws/pull/1962). +- api_gateway_info - use fstrings where appropriate (https://github.com/ansible-collections/amazon.aws/pull/1962). +- community.aws collection - apply isort code formatting to ensure consistent formatting of code (https://github.com/ansible-collections/community.aws/pull/1962) +- ecs_taskdefinition - Add parameter ``runtime_platform`` (https://github.com/ansible-collections/community.aws/issues/1891). +- eks_nodegroup - ensure wait also waits for deletion to complete when ``wait==True`` (https://github.com/ansible-collections/community.aws/pull/1994). +- elb_network_lb - add support for Application-Layer Protocol Negotiation (ALPN) policy ``AlpnPolicy`` for TLS listeners (https://github.com/ansible-collections/community.aws/issues/1566). +- elb_network_lb - add the possibly to update ``SslPolicy`` and ``Certificates`` for TLS listeners (). + +Breaking Changes / Porting Guide +-------------------------------- + +- The community.aws collection has dropped support for ``botocore<1.29.0`` and ``boto3<1.26.0``. Most modules will continue to work with older versions of the AWS SDK, however compatability with older versions of the SDK is not guaranteed and will not be tested. When using older versions of the SDK a warning will be emitted by Ansible (https://github.com/ansible-collections/amazon.aws/pull/1763). +- aws_region_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.aws_region_info``. +- aws_s3_bucket_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.aws_s3_bucket_info``. +- community.aws collection - Support for ansible-core < 2.15 has been dropped (https://github.com/ansible-collections/community.aws/pull/2074). +- community.aws collection - due to the AWS SDKs announcing the end of support for Python less than 3.7 (https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/) support for Python less than 3.7 by this collection wss been deprecated in release 6.0.0 and removed in release 7.0.0. (https://github.com/ansible-collections/amazon.aws/pull/1763). +- iam_access_key - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_access_key``. +- iam_access_key_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_access_key_info``. +- iam_group - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_group`` (https://github.com/ansible-collections/community.aws/pull/1945). +- iam_managed_policy - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_managed_policy`` (https://github.com/ansible-collections/community.aws/pull/1954). +- iam_mfa_device_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_mfa_device_info`` (https://github.com/ansible-collections/community.aws/pull/1953). +- iam_password_policy - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_password_policy``. +- iam_role - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_role`` (https://github.com/ansible-collections/community.aws/pull/1948). +- iam_role_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.iam_role_info`` (https://github.com/ansible-collections/community.aws/pull/1948). +- s3_bucket_info - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.s3_bucket_info``. +- sts_assume_role - The module has been migrated from the ``community.aws`` collection. Playbooks using the Fully Qualified Collection Name for this module should be updated to use ``amazon.aws.sts_assume_role``. + +Deprecated Features +------------------- + +- aws_glue_connection - updated the deprecation for removal of the ``connection_parameters`` return key from ``after 2024-06-01`` to release version ``9.0.0``, it is being replaced by the ``raw_connection_parameters`` key (https://github.com/ansible-collections/community.aws/pull/518). +- ecs_cluster - updated the deprecation for updated default of ``purge_capacity_providers``, the current default of ``False`` will be changed to ``True`` in release ``9.0.0``. To maintain the current behaviour explicitly set ``purge_capacity_providers=False`` (https://github.com/ansible-collections/community.aws/pull/1640). +- ecs_service - updated the deprecation for updated default of ``purge_placement_constraints``, the current default of ``False`` will be changed to ``True`` in release ``9.0.0``. To maintain the current behaviour explicitly set ``purge_placement_constraints=False`` (https://github.com/ansible-collections/community.aws/pull/1716). +- ecs_service - updated the deprecation for updated default of ``purge_placement_strategy``, the current default of ``False`` will be changed to ``True`` in release ``9.0.0``. To maintain the current behaviour explicitly set ``purge_placement_strategy=False`` (https://github.com/ansible-collections/community.aws/pull/1716). + +Bugfixes +-------- + +- mq_broker - ensure broker is created with ``tags`` when passed (https://github.com/ansible-collections/community.aws/issues/1832). +- opensearch - Don't try to read a non existing key from the domain config (https://github.com/ansible-collections/community.aws/pull/1910). + v7.2.0 ====== diff --git a/ansible_collections/community/aws/meta/runtime.yml b/ansible_collections/community/aws/meta/runtime.yml index 4c6bc7291..ea50b0162 100644 --- a/ansible_collections/community/aws/meta/runtime.yml +++ b/ansible_collections/community/aws/meta/runtime.yml @@ -1,5 +1,5 @@ --- -requires_ansible: '>=2.12.0' +requires_ansible: '>=2.15.0' action_groups: aws: - accessanalyzer_validate_policy_info diff --git a/ansible_collections/community/aws/plugins/module_utils/common.py b/ansible_collections/community/aws/plugins/module_utils/common.py index 321349a1d..40c9c582b 100644 --- a/ansible_collections/community/aws/plugins/module_utils/common.py +++ b/ansible_collections/community/aws/plugins/module_utils/common.py @@ -5,4 +5,4 @@ COMMUNITY_AWS_COLLECTION_NAME = "community.aws" -COMMUNITY_AWS_COLLECTION_VERSION = "7.2.0" +COMMUNITY_AWS_COLLECTION_VERSION = "8.0.0" diff --git a/ansible_collections/community/aws/plugins/modules/autoscaling_launch_config.py b/ansible_collections/community/aws/plugins/modules/autoscaling_launch_config.py index 78b7ee233..cd411e576 100644 --- a/ansible_collections/community/aws/plugins/modules/autoscaling_launch_config.py +++ b/ansible_collections/community/aws/plugins/modules/autoscaling_launch_config.py @@ -533,7 +533,7 @@ def create_launch_config(connection, module): module.fail_json_aws(e, msg="Failed to connect to AWS") try: security_groups = get_ec2_security_group_ids_from_names( - module.params.get("security_groups"), ec2_connection, vpc_id=vpc_id, boto3=True + module.params.get("security_groups"), ec2_connection, vpc_id=vpc_id ) except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e: module.fail_json_aws(e, msg="Failed to get Security Group IDs") diff --git a/ansible_collections/community/aws/plugins/modules/ecs_cluster.py b/ansible_collections/community/aws/plugins/modules/ecs_cluster.py index 7d427a58d..5a0470eea 100644 --- a/ansible_collections/community/aws/plugins/modules/ecs_cluster.py +++ b/ansible_collections/community/aws/plugins/modules/ecs_cluster.py @@ -72,7 +72,7 @@ options: version_added: 5.2.0 description: - Toggle overwriting of existing capacity providers or strategy. This is needed for backwards compatibility. - - By default I(purge_capacity_providers=false). In a release after 2024-06-01 this will be changed to I(purge_capacity_providers=true). + - By default I(purge_capacity_providers=false). In release 9.0.0 this default will be changed to I(purge_capacity_providers=true). required: false type: bool default: false @@ -292,9 +292,9 @@ def main(): # Unless purge_capacity_providers is true, we will not be updating the providers or strategy. if not purge_capacity_providers: module.deprecate( - "After 2024-06-01 the default value of purge_capacity_providers will change from false to true." + "In release 9.0.0 the default value of purge_capacity_providers will change from false to true." " To maintain the existing behaviour explicitly set purge_capacity_providers=true", - date="2024-06-01", + version="9.0.0", collection_name="community.aws", ) cps_update_needed = False diff --git a/ansible_collections/community/aws/plugins/modules/ecs_service.py b/ansible_collections/community/aws/plugins/modules/ecs_service.py index e832fa3b5..e6ecf736b 100644 --- a/ansible_collections/community/aws/plugins/modules/ecs_service.py +++ b/ansible_collections/community/aws/plugins/modules/ecs_service.py @@ -158,7 +158,7 @@ options: version_added: 5.3.0 description: - Toggle overwriting of existing placement constraints. This is needed for backwards compatibility. - - By default I(purge_placement_constraints=false). In a release after 2024-06-01 this will be changed to I(purge_placement_constraints=true). + - By default I(purge_placement_constraints=false). In release 9.0.0 this will be changed to I(purge_placement_constraints=true). required: false type: bool default: false @@ -180,7 +180,7 @@ options: version_added: 5.3.0 description: - Toggle overwriting of existing placement strategy. This is needed for backwards compatibility. - - By default I(purge_placement_strategy=false). In a release after 2024-06-01 this will be changed to I(purge_placement_strategy=true). + - By default I(purge_placement_strategy=false). In release 9.0.0 this will be changed to I(purge_placement_strategy=true). required: false type: bool default: false diff --git a/ansible_collections/community/aws/plugins/modules/efs.py b/ansible_collections/community/aws/plugins/modules/efs.py index 6b9390f2b..32992c4a3 100644 --- a/ansible_collections/community/aws/plugins/modules/efs.py +++ b/ansible_collections/community/aws/plugins/modules/efs.py @@ -653,8 +653,7 @@ def iterate_all(attr, map_method, **kwargs): while True: try: data = map_method(**args) - for elm in data[attr]: - yield elm + yield from data[attr] if "NextMarker" in data: args["Marker"] = data["Nextmarker"] continue diff --git a/ansible_collections/community/aws/plugins/modules/elb_network_lb.py b/ansible_collections/community/aws/plugins/modules/elb_network_lb.py index 86d8f0872..22e419328 100644 --- a/ansible_collections/community/aws/plugins/modules/elb_network_lb.py +++ b/ansible_collections/community/aws/plugins/modules/elb_network_lb.py @@ -69,6 +69,17 @@ options: description: - The name of the target group. - Mutually exclusive with I(TargetGroupArn). + AlpnPolicy: + description: + - The name of the Application-Layer Protocol Negotiation (ALPN) policy. + type: str + choices: + - HTTP1Only + - HTTP2Only + - HTTP2Optional + - HTTP2Preferred + - None + version_added: 7.1.0 name: description: - The name of the load balancer. This name must be unique within your AWS account, can have a maximum of 32 characters, must contain only alphanumeric @@ -282,6 +293,13 @@ load_balancer: returned: when state is present type: str sample: "" + alpn_policy: + description: The name of the Application-Layer Protocol Negotiation (ALPN) policy. + returned: when state is present + type: list + elements: str + version_added: 7.1.0 + sample: ["HTTP1Only", "HTTP2Only"] load_balancer_arn: description: The Amazon Resource Name (ARN) of the load balancer. returned: when state is present @@ -448,6 +466,10 @@ def main(): SslPolicy=dict(type="str"), Certificates=dict(type="list", elements="dict"), DefaultActions=dict(type="list", required=True, elements="dict"), + AlpnPolicy=dict( + type="str", + choices=["HTTP1Only", "HTTP2Only", "HTTP2Optional", "HTTP2Preferred", "None"], + ), ), ), name=dict(required=True, type="str"), diff --git a/ansible_collections/community/aws/plugins/modules/glue_connection.py b/ansible_collections/community/aws/plugins/modules/glue_connection.py index 18039a861..f44ca8bbf 100644 --- a/ansible_collections/community/aws/plugins/modules/glue_connection.py +++ b/ansible_collections/community/aws/plugins/modules/glue_connection.py @@ -110,7 +110,7 @@ RETURN = r""" connection_properties: description: - (deprecated) A dict of key-value pairs (converted to lowercase) used as parameters for this connection. - - This return key has been deprecated, and will be removed in a release after 2024-06-01. + - This return key has been deprecated, and will be removed in release 9.0.0. returned: when state is present type: dict sample: {'jdbc_connection_url':'jdbc:mysql://mydb:3306/databasename','username':'x','password':'y'} @@ -298,9 +298,7 @@ def create_or_update_glue_connection(connection, connection_ec2, module, glue_co params["ConnectionInput"]["PhysicalConnectionRequirements"] = dict() if module.params.get("security_groups") is not None: # Get security group IDs from names - security_group_ids = get_ec2_security_group_ids_from_names( - module.params.get("security_groups"), connection_ec2, boto3=True - ) + security_group_ids = get_ec2_security_group_ids_from_names(module.params.get("security_groups"), connection_ec2) params["ConnectionInput"]["PhysicalConnectionRequirements"]["SecurityGroupIdList"] = security_group_ids if module.params.get("subnet_id") is not None: params["ConnectionInput"]["PhysicalConnectionRequirements"]["SubnetId"] = module.params.get("subnet_id") @@ -339,7 +337,7 @@ def create_or_update_glue_connection(connection, connection_ec2, module, glue_co "The 'connection_properties' return key is deprecated and will be replaced" " by 'raw_connection_properties'. Both values are returned for now." ), - date="2024-06-01", + version="9.0.0", collection_name="community.aws", ) glue_connection["RawConnectionProperties"] = glue_connection["ConnectionProperties"] diff --git a/ansible_collections/community/aws/tests/integration/targets/config/tasks/main.yaml b/ansible_collections/community/aws/tests/integration/targets/config/tasks/main.yaml index 244c4b29b..540370803 100644 --- a/ansible_collections/community/aws/tests/integration/targets/config/tasks/main.yaml +++ b/ansible_collections/community/aws/tests/integration/targets/config/tasks/main.yaml @@ -173,7 +173,7 @@ config_recorder: name: '{{ resource_prefix }}-recorder' state: present - role_arn: "{{ config_iam_role.arn }}" + role_arn: "{{ config_iam_role.iam_role.arn }}" recording_group: all_supported: true include_global_types: true @@ -236,7 +236,7 @@ account_sources: [] organization_source: all_aws_regions: true - role_arn: "{{ config_iam_role.arn }}" + role_arn: "{{ config_iam_role.iam_role.arn }}" register: output - name: assert success @@ -251,7 +251,7 @@ account_sources: [] organization_source: all_aws_regions: true - role_arn: "{{ config_iam_role.arn }}" + role_arn: "{{ config_iam_role.iam_role.arn }}" register: output - name: assert not changed @@ -266,7 +266,7 @@ config_recorder: name: '{{ resource_prefix }}-recorder' state: present - role_arn: "{{ config_iam_role.arn }}" + role_arn: "{{ config_iam_role.iam_role.arn }}" recording_group: all_supported: false include_global_types: false @@ -348,7 +348,7 @@ all_aws_regions: false aws_regions: - '{{ aws_region }}' - role_arn: "{{ config_iam_role.arn }}" + role_arn: "{{ config_iam_role.iam_role.arn }}" register: output - name: assert success @@ -365,7 +365,7 @@ all_aws_regions: false aws_regions: - '{{ aws_region }}' - role_arn: "{{ config_iam_role.arn }}" + role_arn: "{{ config_iam_role.iam_role.arn }}" register: output - name: assert success @@ -380,7 +380,7 @@ config_recorder: name: '{{ resource_prefix }}-recorder' state: present - role_arn: "{{ config_iam_role.arn }}" + role_arn: "{{ config_iam_role.iam_role.arn }}" recording_group: all_supported: false include_global_types: false diff --git a/ansible_collections/community/aws/tests/integration/targets/ec2_launch_template/tasks/iam_instance_role.yml b/ansible_collections/community/aws/tests/integration/targets/ec2_launch_template/tasks/iam_instance_role.yml index c26b96d69..ad797fabb 100644 --- a/ansible_collections/community/aws/tests/integration/targets/ec2_launch_template/tasks/iam_instance_role.yml +++ b/ansible_collections/community/aws/tests/integration/targets/ec2_launch_template/tasks/iam_instance_role.yml @@ -29,7 +29,7 @@ - assert: that: - - 'template_with_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role.arn.replace(":role/", ":instance-profile/")' + - 'template_with_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role.iam_role.arn.replace(":role/", ":instance-profile/")' - name: Create template again, with no change to instance_role ec2_launch_template: @@ -41,7 +41,7 @@ - assert: that: - - 'template_with_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role.arn.replace(":role/", ":instance-profile/")' + - 'template_with_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role.iam_role.arn.replace(":role/", ":instance-profile/")' - 'template_with_role is not changed' - name: Update instance with new instance_role @@ -54,8 +54,8 @@ - assert: that: - - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role_2.arn.replace(":role/", ":instance-profile/")' - - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role_2.arn.replace(":role/", ":instance-profile/")' + - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role_2.iam_role.arn.replace(":role/", ":instance-profile/")' + - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role_2.iam_role.arn.replace(":role/", ":instance-profile/")' - 'template_with_role.default_template.version_number < template_with_updated_role.default_template.version_number' - 'template_with_updated_role is changed' - 'template_with_updated_role is not failed' @@ -71,7 +71,7 @@ - assert: that: - 'template_with_updated_role is not changed' - - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role_2.arn.replace(":role/", ":instance-profile/")' + - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role_2.iam_role.arn.replace(":role/", ":instance-profile/")' - name: Update instance with original instance_role (pass profile ARN) ec2_launch_template: @@ -79,13 +79,13 @@ image_id: "{{ ec2_ami_id }}" instance_type: t2.micro # By default an instance profile will be created with the same name as the role - iam_instance_profile: '{{ iam_role.arn.replace(":role/", ":instance-profile/") }}' + iam_instance_profile: '{{ iam_role.iam_role.arn.replace(":role/", ":instance-profile/") }}' register: template_with_updated_role - assert: that: - - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role.arn.replace(":role/", ":instance-profile/")' - - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role.arn.replace(":role/", ":instance-profile/")' + - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role.iam_role.arn.replace(":role/", ":instance-profile/")' + - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role.iam_role.arn.replace(":role/", ":instance-profile/")' - 'template_with_role.default_template.version_number < template_with_updated_role.default_template.version_number' - 'template_with_updated_role is changed' - 'template_with_updated_role is not failed' @@ -95,13 +95,13 @@ name: "{{ resource_prefix }}-test-instance-role" image_id: "{{ ec2_ami_id }}" instance_type: t2.micro - iam_instance_profile: '{{ iam_role.arn.replace(":role/", ":instance-profile/") }}' + iam_instance_profile: '{{ iam_role.iam_role.arn.replace(":role/", ":instance-profile/") }}' register: template_with_updated_role - assert: that: - 'template_with_updated_role is not changed' - - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role.arn.replace(":role/", ":instance-profile/")' + - 'template_with_updated_role.default_template.launch_template_data.iam_instance_profile.arn == iam_role.iam_role.arn.replace(":role/", ":instance-profile/")' always: - name: delete launch template diff --git a/ansible_collections/community/aws/tests/integration/targets/ecs_cluster/tasks/20_ecs_service.yml b/ansible_collections/community/aws/tests/integration/targets/ecs_cluster/tasks/20_ecs_service.yml index 3c4bbcb28..e04cfe6ac 100644 --- a/ansible_collections/community/aws/tests/integration/targets/ecs_cluster/tasks/20_ecs_service.yml +++ b/ansible_collections/community/aws/tests/integration/targets/ecs_cluster/tasks/20_ecs_service.yml @@ -547,7 +547,7 @@ >> "rolloutStateReason": "ECS deployment ecs-svc/5156684577543126023 in progress.", constraints and placement strategies are only changeable if the rollout state is "COMPLETED" - + a) ecs_service has currently no waiter function. so this is a DIY waiter b) the state reached never "COMPLETED" because something if wrong with the ECS EC2 Instances or the network setup. The EC2 instance never arrived as an active instance in the cluster. @@ -555,9 +555,9 @@ >> no container instance met all of its requirements. Reason: No Container Instances were found in your cluster. >> For more information, see the Troubleshooting section of the Amazon ECS Developer Guide. >> ec2_instance networking does not work correctly, no instance available for the cluster - + Because all of this, all following tasks, that test the change of a constraint or placement stragegy are - using `force_new_deployment: true`. That ignores a) and b). + using `force_new_deployment: true`. That ignores a) and b). ignore_errors: true ecs_service_info: name: "{{ ecs_service_name }}-constraint" @@ -736,7 +736,7 @@ launch_type: FARGATE cpu: 512 memory: 1024 - execution_role_arn: "{{ iam_execution_role.arn }}" + execution_role_arn: "{{ iam_execution_role.iam_role.arn }}" state: present vars: ecs_task_host_port: 8080 @@ -750,7 +750,7 @@ launch_type: EC2 cpu: 512 memory: 1024 - execution_role_arn: "{{ iam_execution_role.arn }}" + execution_role_arn: "{{ iam_execution_role.iam_role.arn }}" state: present vars: ecs_task_host_port: 8080 @@ -916,7 +916,7 @@ launch_type: FARGATE cpu: 512 memory: 1024 - execution_role_arn: "{{ iam_execution_role.arn }}" + execution_role_arn: "{{ iam_execution_role.iam_role.arn }}" state: present runtime_platform: cpuArchitecture: "ARM64" @@ -938,7 +938,7 @@ launch_type: FARGATE cpu: 512 memory: 1024 - execution_role_arn: "{{ iam_execution_role.arn }}" + execution_role_arn: "{{ iam_execution_role.iam_role.arn }}" state: present runtime_platform: cpuArchitecture: "ARM64" @@ -960,7 +960,7 @@ launch_type: FARGATE cpu: 512 memory: 1024 - execution_role_arn: "{{ iam_execution_role.arn }}" + execution_role_arn: "{{ iam_execution_role.iam_role.arn }}" state: present runtime_platform: cpuArchitecture: "ARM64" diff --git a/ansible_collections/community/aws/tests/integration/targets/eks_cluster/tasks/full_test.yml b/ansible_collections/community/aws/tests/integration/targets/eks_cluster/tasks/full_test.yml index 71cc1fc87..d3f7dfbe6 100644 --- a/ansible_collections/community/aws/tests/integration/targets/eks_cluster/tasks/full_test.yml +++ b/ansible_collections/community/aws/tests/integration/targets/eks_cluster/tasks/full_test.yml @@ -79,7 +79,7 @@ name: "{{ eks_cluster_name }}" security_groups: "{{ eks_security_groups | map(attribute='name') }}" subnets: "{{ setup_subnets.results | map(attribute='subnet.id') }}" - role_arn: "{{ iam_role.arn }}" + role_arn: "{{ iam_role.iam_role.arn }}" tags: Name: "{{ resource_prefix }}" another: foobar @@ -97,7 +97,7 @@ name: "{{ eks_cluster_name }}" security_groups: "{{ eks_security_groups | map(attribute='name') }}" subnets: "{{ setup_subnets.results | map(attribute='subnet.id') }}" - role_arn: "{{ iam_role.arn }}" + role_arn: "{{ iam_role.iam_role.arn }}" wait: yes register: eks_create @@ -117,7 +117,7 @@ name: "{{ eks_cluster_name }}" security_groups: "{{ setup_security_groups.results | map(attribute='group_id') }}" subnets: "{{ setup_subnets.results | map(attribute='subnet.id') }}" - role_arn: "{{ iam_role.arn }}" + role_arn: "{{ iam_role.iam_role.arn }}" register: eks_create - name: check that EKS cluster did not change @@ -143,7 +143,7 @@ name: "{{ eks_cluster_name }}" security_groups: "{{ eks_security_groups | map(attribute='name') }}" subnets: "{{ setup_subnets.results | map(attribute='subnet.id') }}" - role_arn: "{{ iam_role.arn }}" + role_arn: "{{ iam_role.iam_role.arn }}" wait: yes register: eks_create @@ -169,7 +169,7 @@ name: "{{ eks_cluster_short_name }}" security_groups: "{{ eks_security_groups | map(attribute='name') }}" subnets: "{{ setup_subnets.results | map(attribute='subnet.id') }}" - role_arn: "{{ iam_role.arn }}" + role_arn: "{{ iam_role.iam_role.arn }}" register: eks_create - name: check that EKS cluster was created with short name diff --git a/ansible_collections/community/aws/tests/integration/targets/eks_fargate_profile/tasks/create_eks_cluster.yml b/ansible_collections/community/aws/tests/integration/targets/eks_fargate_profile/tasks/create_eks_cluster.yml index 48fbbef80..1402ad0a1 100644 --- a/ansible_collections/community/aws/tests/integration/targets/eks_fargate_profile/tasks/create_eks_cluster.yml +++ b/ansible_collections/community/aws/tests/integration/targets/eks_fargate_profile/tasks/create_eks_cluster.yml @@ -87,7 +87,7 @@ name: '{{ eks_cluster_name }}' security_groups: '{{ eks_security_groups | map(attribute=''name'') }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' - role_arn: '{{ iam_role.arn }}' + role_arn: '{{ iam_role.iam_role.arn }}' wait: true register: eks_create diff --git a/ansible_collections/community/aws/tests/integration/targets/eks_fargate_profile/tasks/full_test.yml b/ansible_collections/community/aws/tests/integration/targets/eks_fargate_profile/tasks/full_test.yml index b992125b3..6b513b9b5 100644 --- a/ansible_collections/community/aws/tests/integration/targets/eks_fargate_profile/tasks/full_test.yml +++ b/ansible_collections/community/aws/tests/integration/targets/eks_fargate_profile/tasks/full_test.yml @@ -1,5 +1,5 @@ # Creating dependencies -- name: create IAM instance role +- name: create IAM instance role iam_role: name: 'ansible-test-aws_eks_fargate_profile' assume_role_policy_document: '{{ lookup(''file'',''eks-fargate-profile-trust-policy.json'') }}' @@ -19,7 +19,7 @@ name: '{{ eks_fargate_profile_name_a }}' state: present cluster_name: fake_cluster - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -38,7 +38,7 @@ name: fake_profile cluster_name: '{{ eks_cluster_name }}' state: absent - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -57,7 +57,7 @@ name: '{{ eks_fargate_profile_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'public') | map(attribute='subnet.id') }} @@ -72,13 +72,13 @@ - not eks_fargate_profile_create.changed - eks_fargate_profile_create.msg.endswith("provided in Fargate Profile is not a private subnet") -# Create Fargate_profile with wait +# Create Fargate_profile with wait - name: create Fargate Profile with wait (check mode) eks_fargate_profile: name: '{{ eks_fargate_profile_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -99,7 +99,7 @@ name: '{{ eks_fargate_profile_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -120,7 +120,7 @@ name: '{{ eks_fargate_profile_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -141,7 +141,7 @@ name: '{{ eks_fargate_profile_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -162,7 +162,7 @@ name: '{{ eks_fargate_profile_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -185,7 +185,7 @@ name: '{{ eks_fargate_profile_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -207,7 +207,7 @@ name: '{{ eks_fargate_profile_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -230,7 +230,7 @@ name: '{{ eks_fargate_profile_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -253,7 +253,7 @@ name: '{{ eks_fargate_profile_name_b }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -272,7 +272,7 @@ name: '{{ eks_fargate_profile_name_b }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -291,7 +291,7 @@ name: '{{ eks_fargate_profile_name_b }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -310,7 +310,7 @@ name: '{{ eks_fargate_profile_name_b }}' state: present cluster_name: '{{ eks_cluster_name }}' - role_arn: '{{ iam_role_fargate.arn }}' + role_arn: '{{ iam_role_fargate.iam_role.arn }}' subnets: >- {{setup_subnets.results|selectattr('subnet.tags.Name', 'contains', 'private') | map(attribute='subnet.id') }} @@ -389,7 +389,7 @@ that: - eks_fargate_profile_b_delete.changed -- name: delete a fargate profile b +- name: delete a fargate profile b eks_fargate_profile: name: '{{ eks_fargate_profile_name_b }}' cluster_name: '{{ eks_cluster_name }}' @@ -426,4 +426,4 @@ - name: check that eks_fargate_profile did nothing (idempotency) assert: that: - - not eks_fargate_profile_b_delete.changed \ No newline at end of file + - not eks_fargate_profile_b_delete.changed diff --git a/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/aliases b/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/aliases index 1809e989b..0b84301d7 100644 --- a/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/aliases +++ b/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/aliases @@ -1,2 +1 @@ -cloud/aws -time=30m +cloud/aws \ No newline at end of file diff --git a/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/tasks/dependecies.yml b/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/tasks/dependecies.yml index 882d45dd7..cd37239c4 100644 --- a/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/tasks/dependecies.yml +++ b/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/tasks/dependecies.yml @@ -67,7 +67,7 @@ name: '{{ eks_cluster_name }}' security_groups: '{{ eks_security_groups | map(attribute=''name'') }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' - role_arn: '{{ iam_role.arn }}' + role_arn: '{{ iam_role.iam_role.arn }}' wait: true register: eks_create diff --git a/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/tasks/full_test.yml b/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/tasks/full_test.yml index 9accc8e8f..cb1d27340 100644 --- a/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/tasks/full_test.yml +++ b/ansible_collections/community/aws/tests/integration/targets/eks_nodegroup/tasks/full_test.yml @@ -4,7 +4,7 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: fake_cluster - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' scaling_config: min_size: 1 @@ -38,10 +38,10 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' wait: True - launch_template: + launch_template: id: 'lt-0824c69cafa69ac81' disk_size: 30 register: eks_nodegroup_result @@ -60,18 +60,18 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' scaling_config: min_size: 1 max_size: 3 desired_size: 2 - disk_size: 30 + disk_size: 30 instance_types: ['t3.small'] ami_type: 'AL2_x86_64' update_config: max_unavailable_percentage: 50 - labels: + labels: 'env': 'test' taints: - key: 'env' @@ -98,18 +98,18 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' scaling_config: min_size: 1 max_size: 3 desired_size: 2 - disk_size: 30 + disk_size: 30 instance_types: ['t3.small'] ami_type: 'AL2_x86_64' update_config: max_unavailable_percentage: 50 - labels: + labels: 'env': 'test' taints: - key: 'env' @@ -135,18 +135,18 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' scaling_config: min_size: 1 max_size: 3 desired_size: 2 - disk_size: 30 + disk_size: 30 instance_types: ['t3.small'] ami_type: 'AL2_x86_64' update_config: max_unavailable_percentage: 50 - labels: + labels: 'env': 'test' taints: - key: 'env' @@ -173,18 +173,18 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' scaling_config: min_size: 1 max_size: 3 desired_size: 2 - disk_size: 30 + disk_size: 30 instance_types: ['t3.small'] ami_type: 'AL2_x86_64' update_config: max_unavailable_percentage: 50 - labels: + labels: 'env': 'test' taints: - key: 'env' @@ -214,7 +214,7 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' wait: True disk_size: 40 @@ -231,7 +231,7 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' wait: True instance_types: ['t3.small'] @@ -251,18 +251,18 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' scaling_config: min_size: 1 max_size: 4 desired_size: 2 - disk_size: 30 + disk_size: 30 instance_types: ['t3.small'] ami_type: 'AL2_x86_64' update_config: max_unavailable_percentage: 50 - labels: + labels: 'env': 'changeit' taints: - key: 'env' @@ -289,18 +289,18 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' scaling_config: min_size: 1 max_size: 4 desired_size: 2 - disk_size: 30 + disk_size: 30 instance_types: ['t3.small'] ami_type: 'AL2_x86_64' update_config: max_unavailable_percentage: 50 - labels: + labels: 'env': 'changeit' taints: - key: 'env' @@ -326,18 +326,18 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' scaling_config: min_size: 1 max_size: 4 desired_size: 2 - disk_size: 30 + disk_size: 30 instance_types: ['t3.small'] ami_type: 'AL2_x86_64' update_config: max_unavailable_percentage: 50 - labels: + labels: 'env': 'changeit' taints: - key: 'env' @@ -364,18 +364,18 @@ name: '{{ eks_nodegroup_name_a }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' scaling_config: min_size: 1 max_size: 4 desired_size: 2 - disk_size: 30 + disk_size: 30 instance_types: ['t3.small'] ami_type: 'AL2_x86_64' update_config: max_unavailable_percentage: 50 - labels: + labels: 'env': 'changeit' taints: - key: 'env' @@ -405,7 +405,7 @@ name: '{{ eks_nodegroup_name_a }}' state: absent cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' register: eks_nodegroup_result check_mode: True @@ -459,7 +459,7 @@ name: '{{ eks_nodegroup_name_lt }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' launch_template: name: '{{ lt.template.launch_template_name }}' @@ -477,7 +477,7 @@ name: '{{ eks_nodegroup_name_lt }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' launch_template: name: '{{ lt.template.launch_template_name }}' @@ -494,7 +494,7 @@ name: '{{ eks_nodegroup_name_lt }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' launch_template: name: '{{ lt.template.launch_template_name }}' @@ -512,7 +512,7 @@ name: '{{ eks_nodegroup_name_lt }}' state: present cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' subnets: '{{ setup_subnets.results | map(attribute=''subnet.id'') }}' launch_template: name: '{{ lt.template.launch_template_name }}' @@ -533,7 +533,7 @@ name: '{{ eks_nodegroup_name_lt }}' state: absent cluster_name: '{{ eks_cluster_name }}' - node_role: '{{ iam_role_eks_nodegroup.arn }}' + node_role: '{{ iam_role_eks_nodegroup.iam_role.arn }}' wait: True register: eks_nodegroup_result check_mode: True diff --git a/ansible_collections/community/aws/tests/integration/targets/elb_network_lb/tasks/test_modifying_nlb_listeners.yml b/ansible_collections/community/aws/tests/integration/targets/elb_network_lb/tasks/test_modifying_nlb_listeners.yml index 9877e3f1b..9189fba28 100644 --- a/ansible_collections/community/aws/tests/integration/targets/elb_network_lb/tasks/test_modifying_nlb_listeners.yml +++ b/ansible_collections/community/aws/tests/integration/targets/elb_network_lb/tasks/test_modifying_nlb_listeners.yml @@ -73,3 +73,83 @@ that: - nlb.changed - not nlb.listeners + +# TLS listeners +- name: Add a TLS listener + elb_network_lb: + name: "{{ nlb_name }}" + subnets: "{{ nlb_subnets }}" + state: present + listeners: + - Protocol: TLS + Port: 443 + Certificates: + - CertificateArn: "{{ cert.arn }}" + DefaultActions: + - Type: forward + TargetGroupName: "{{ tg_name }}" + SslPolicy: ELBSecurityPolicy-TLS-1-0-2015-04 + AlpnPolicy: HTTP2Optional + register: _add + +- assert: + that: + - _add.listeners[0].alpn_policy == ["HTTP2Optional"] + - _add.listeners[0].ssl_policy == "ELBSecurityPolicy-TLS-1-0-2015-04" + +- name: Add a TLS listener (idempotency) + elb_network_lb: + name: "{{ nlb_name }}" + subnets: "{{ nlb_subnets }}" + listeners: + - Protocol: TLS + Port: 443 + Certificates: + - CertificateArn: "{{ cert.arn }}" + DefaultActions: + - Type: forward + TargetGroupName: "{{ tg_name }}" + SslPolicy: ELBSecurityPolicy-TLS-1-0-2015-04 + AlpnPolicy: HTTP2Optional + register: _idempotency + +- assert: + that: + - _idempotency is not changed + - _idempotency.listeners[0].alpn_policy == ["HTTP2Optional"] + - _idempotency.listeners[0].ssl_policy == "ELBSecurityPolicy-TLS-1-0-2015-04" + +- name: Update TLS listener of NLB + elb_network_lb: + name: "{{ nlb_name }}" + subnets: "{{ nlb_subnets }}" + listeners: + - Protocol: TLS + Port: 443 + Certificates: + - CertificateArn: "{{ cert.arn }}" + DefaultActions: + - Type: forward + TargetGroupName: "{{ tg_name }}" + SslPolicy: ELBSecurityPolicy-TLS13-1-2-FIPS-2023-04 + AlpnPolicy: HTTP1Only + register: _update + +- assert: + that: + - _update is changed + - _update.listeners[0].alpn_policy == ["HTTP1Only"] + - _update.listeners[0].ssl_policy == "ELBSecurityPolicy-TLS13-1-2-FIPS-2023-04" + +- name: remove listener from NLB + elb_network_lb: + name: "{{ nlb_name }}" + subnets: "{{ nlb_subnets }}" + state: present + listeners: [] + register: nlb + +- assert: + that: + - nlb.changed + - not nlb.listeners diff --git a/ansible_collections/community/aws/tests/integration/targets/elb_target/tasks/lambda_target.yml b/ansible_collections/community/aws/tests/integration/targets/elb_target/tasks/lambda_target.yml index c4271cdd6..7e6b54cef 100644 --- a/ansible_collections/community/aws/tests/integration/targets/elb_target/tasks/lambda_target.yml +++ b/ansible_collections/community/aws/tests/integration/targets/elb_target/tasks/lambda_target.yml @@ -24,7 +24,7 @@ state: present zip_file: /tmp/lambda.zip runtime: python3.12 - role: "{{ ROLE_ARN.arn }}" + role: "{{ ROLE_ARN.iam_role.arn }}" handler: ansible_lambda_target.lambda_handler timeout: 30 register: lambda_function diff --git a/ansible_collections/community/aws/tests/sanity/ignore-2.10.txt b/ansible_collections/community/aws/tests/sanity/ignore-2.10.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/community/aws/tests/sanity/ignore-2.11.txt b/ansible_collections/community/aws/tests/sanity/ignore-2.11.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/community/aws/tests/sanity/ignore-2.12.txt b/ansible_collections/community/aws/tests/sanity/ignore-2.12.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/community/aws/tests/sanity/ignore-2.13.txt b/ansible_collections/community/aws/tests/sanity/ignore-2.13.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/community/aws/tests/sanity/ignore-2.9.txt b/ansible_collections/community/aws/tests/sanity/ignore-2.9.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/ansible_collections/community/azure/.azure-pipelines/README.md b/ansible_collections/community/azure/.azure-pipelines/README.md deleted file mode 100644 index 385e70bac..000000000 --- a/ansible_collections/community/azure/.azure-pipelines/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## Azure Pipelines Configuration - -Please see the [Documentation](https://github.com/ansible/community/wiki/Testing:-Azure-Pipelines) for more information. diff --git a/ansible_collections/community/azure/.azure-pipelines/azure-pipelines.yml b/ansible_collections/community/azure/.azure-pipelines/azure-pipelines.yml deleted file mode 100644 index 48658e394..000000000 --- a/ansible_collections/community/azure/.azure-pipelines/azure-pipelines.yml +++ /dev/null @@ -1,61 +0,0 @@ -trigger: - batch: true - branches: - include: - - main - - master - - stable-* - -pr: - autoCancel: true - branches: - include: - - main - - stable-* - -schedules: - - cron: 0 9 * * * - displayName: Nightly - always: true - branches: - include: - - main - - stable-* - -variables: - - name: checkoutPath - value: ansible_collections/community/azure - - name: coverageBranches - value: main - - name: pipelinesCoverage - value: coverage - - name: entryPoint - value: tests/utils/shippable/shippable.sh - - name: fetchDepth - value: 0 - -resources: - containers: - - container: default - image: quay.io/ansible/azure-pipelines-test-container:3.0.0 - -pool: Standard - -stages: - - stage: Sanity_devel - displayName: Sanity devel - dependsOn: [] - jobs: - - template: templates/matrix.yml - parameters: - nameFormat: Test {0} - testFormat: devel/sanity/{0} - targets: - - test: 1 - - test: extra - - stage: Summary - condition: succeededOrFailed() - dependsOn: - - Sanity_devel - jobs: - - template: templates/coverage.yml diff --git a/ansible_collections/community/azure/.azure-pipelines/scripts/aggregate-coverage.sh b/ansible_collections/community/azure/.azure-pipelines/scripts/aggregate-coverage.sh deleted file mode 100755 index f3113dd0a..000000000 --- a/ansible_collections/community/azure/.azure-pipelines/scripts/aggregate-coverage.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -# Aggregate code coverage results for later processing. - -set -o pipefail -eu - -agent_temp_directory="$1" - -PATH="${PWD}/bin:${PATH}" - -mkdir "${agent_temp_directory}/coverage/" - -options=(--venv --venv-system-site-packages --color -v) - -ansible-test coverage combine --export "${agent_temp_directory}/coverage/" "${options[@]}" - -if ansible-test coverage analyze targets generate --help >/dev/null 2>&1; then - # Only analyze coverage if the installed version of ansible-test supports it. - # Doing so allows this script to work unmodified for multiple Ansible versions. - ansible-test coverage analyze targets generate "${agent_temp_directory}/coverage/coverage-analyze-targets.json" "${options[@]}" -fi diff --git a/ansible_collections/community/azure/.azure-pipelines/scripts/combine-coverage.py b/ansible_collections/community/azure/.azure-pipelines/scripts/combine-coverage.py deleted file mode 100755 index 506ade646..000000000 --- a/ansible_collections/community/azure/.azure-pipelines/scripts/combine-coverage.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python -""" -Combine coverage data from multiple jobs, keeping the data only from the most recent attempt from each job. -Coverage artifacts must be named using the format: "Coverage $(System.JobAttempt) {StableUniqueNameForEachJob}" -The recommended coverage artifact name format is: Coverage $(System.JobAttempt) $(System.StageDisplayName) $(System.JobDisplayName) -Keep in mind that Azure Pipelines does not enforce unique job display names (only names). -It is up to pipeline authors to avoid name collisions when deviating from the recommended format. -""" - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import re -import shutil -import sys - - -def main(): - """Main program entry point.""" - source_directory = sys.argv[1] - - if '/ansible_collections/' in os.getcwd(): - output_path = "tests/output" - else: - output_path = "test/results" - - destination_directory = os.path.join(output_path, 'coverage') - - if not os.path.exists(destination_directory): - os.makedirs(destination_directory) - - jobs = {} - count = 0 - - for name in os.listdir(source_directory): - match = re.search('^Coverage (?P[0-9]+) (?P